ค้นหาบล็อกนี้

Custom Search

วันพฤหัสบดีที่ 29 กันยายน พ.ศ. 2554

7 Segment Serial interface (แก้ขัด MAX7219)

เมื่อไม่นานมานี้ผมทำเกี่ยวกับ 7segment เยอะก็เลยปิ๊งไอเดียที่จะเอามาทำ
display module แบบสำเร็จรูปคือมี controller chip ในตัวเลย
โดยการใช้งานจะต้องให้ง่ายมากที่สุด มาดูวิดีโอกันก่อน



จะเห็นว่าสามารถควบคุมการทำงานต่างๆได้อย่างง่ายดายโดยมี command บางตัว
ที่ใกล้เคียงกับ LCD ทั่วไป ส่วนที่เหลือยังไม่ได้กำหนดเป็นมาตรฐาน และใน version
ต่อๆไปอาจไม่ได้อ้าง command นี้



จริงๆอุปกรณ์ไม่ได้เยอะขนาดนี้ถ้าผมใช้ 7segment common A เพราะ mcs-51
มันขับแบบซอร์ซไม่ได้อย่างที่เรารู้กัน วงจรก็เลยใหญ่อย่างที่เห็น แต่ก็เอาเหอะอันแรก
เอาอะไรมากชิมิ

มาดู specification กันก่อน
Controller :at89c2051 @11.0592-MHz
Baud :9600-bps
Fifo Buffer :32-byte
Display Data Register :8-byte
Character Gen. Register :n/a
Scan frq. :~500Hz
Support Ascii :0-9

รายละเอียดกลุ่มคำสั่งมีดังนี้
Command pre fix :0xfe
Home Address :0x01
Clear Display :0x02
Display Off :0x03
Display On :0x04
Dot Control :0x09
Define Bin :0x0c
Rotate Display Register Left :0x0d
Rotate Display Register Right :0x0e
CG-Ram Address :0x40 -->> n/a
DD-Ram Address :0x80

Home Address
กำหนดให้ DD-Ram Address ไปอยู่ในตำแหน่ง 0 หรือ Digit1
--ตัวอย่าง--
[0xfe]-[0x01]

Clear All Display Register
เคลียร์ Display Register ทั้ง 8byte พร้อมกับ
กำหนดให้ DD-Ram Address ไปอยู่ในตำแหน่ง 0 หรือ Digit1
--ตัวอย่าง--
[0xfe]-[0x02]

Display Off
ปิดการแสดงผล ไม่มีผลกับ Display Register
--ตัวอย่าง--
[0xfe]-[0x03]

Display On
เปิดการแสดงผล ไม่มีผลกับ Display Register
--ตัวอย่าง--
[0xfe]-[0x04]

Dot Control Page1
ใช้ส่งข้อมูลเฉพาะ Dot-segment ของ Display Register ทั้ง 8-byte
--ตัวอย่าง--
[0xfe]-[0x09]-[xxxxxxxx]
Dot-On x=1
Dot-Off x=0
บิต 0 เป็น Dot ของ Digit1 ไล่ขึ้นไปจนถึง Digit8

Define Bin
ใช้ส่งข้อมูลแบบ Binary เช่นต้องการตัวอักษรแปลกๆ ที่เราสร้างขึ้นเอง
หลังกระทำคำสั่ง DD-Ram Address+1
--ตัวอย่าง--
[0xfe]-[0x0c]-[xxxxxxxx]
Segment-On x=1
Segment-Off x=0
Bit0 = Segment-A
Bit1 = Segment-B
Bit2 = Segment-C
Bit3 = Segment-D
Bit4 = Segment-E
Bit5 = Segment-F
Bit6 = Segment-G
Bit7 = Segment-Dot

Rotate Display Register Left
ใช้หมุนข้อมูล Display Register ไปทาง ซ้ายหนึ่งครั้ง ต่อคำสั่ง ไม่มีผลกับ DD-Ram Address
--ตัวอย่าง--
[0xfe]-[0x0d]

Rotate Display Register Right
ใช้หมุนข้อมูล Display Register ไปทาง ขวาหนึ่งครั้ง ต่อคำสั่ง ไม่มีผลกับ DD-Ram Address
--ตัวอย่าง--
[0xfe]-[0x0e]

DD-Ram Address
ใช้กำหนด DD-Ram Address
--ตัวอย่าง--
[0xfe]-[0x80... thru 0x87]

การใช้งาน
เราสามารถส่งตัวเลข 0-9 ที่เป็นรหัส ascii ไปแสดงผลได้ทันที นอกเหนื่อจากนี้จะไม่มีผล
หรือข้อมูลจะถูกละทิ้งไป ในทุกๆครั้งที่ส่งข้อมูลไปแสดงผล display buffer address จะ
เพิ่มขึ้นเองอัตโนมัติ รวมทั้งคำสั่ง define bin ด้วย ที่เหลือศึกษาได้จาก code ครับ

Source Code v1.0

Low Cost Serial LCD Backpack

จริงๆ function เยอะกว่านี้แต่ผมตัดออกเพราะไม่ได้ใช้ แต่เป็น commend อยู่ใน code
เช่น การ เปิด ปิด backlight .... ลองไปแก้ code กันเอานะครับ ตัวนี้เป็น source
ที่สมบูรณ์ที่สุดแล้ว..... สามารถแก้ไปใช้กับ 89LPxxxx รองรับ baud 115k ได้สบายๆ
ส่วน auto baud กับ soft fifo ผมเพิ่งใส่ไป อาจมี bug แต่ผมลองแล้วยังไม่เจอ
ใครใช้แล้วมีปัญหากรุณารายงานผมด้วยครับ.....





คุณสมบัติ
Support Baud 1200,2400,4800,9600,19200,57600
Auto Baud rate function.
Software FIFO 80 byte
Command Prefix 254(0xFE)
Support CLCD 16x1 16x2 20x4 and more...

การ initial (Auto Baud rate function)
กำหนด Baud rate ฝั่งส่งให้เรียบร้อย
รอ 1 วินาที ให้ Serial LCD initial
ส่งค่า 0x20 ไปยัง Serial LCD
หาก ถูกต้อง LCD จะแสดงข้อความ Detect-xxxxx.bps
รอ 2 วินาที
ส่งข้อมูลตามต้องการ

Source code v8.0