เป็น Temp monitor ที่ผมพยายามทำให้เล็กที่สุดครับซึ่งทำได้เล็กสุดแค่นี้
ย่านการวัด อยู่ที่ -9 ถึง +99 องศา ตามหลักของ 7segment
ที่เอาแค่หลักสิบไม่มีทศนิยม ถ้าเกินกว่าย่านวัดที่กำหนด จะมีตัว Er กระพริบ
ตัวแรกผมใช้กับ DS18S20 แต่ผมเห็นราคามันแพง เลยแก้ไปใช้กับ
DS18B20แทน ด้านอุปกรณ์ผมออกแบบให้ใช้อุปกรณ์ให้น้อยที่สุด
ราคาโดยรวมไม่น่าเกิน 150 บาท (เน้นประหยัด)
ปล.อาจมีคนทำเล่นเยอะแล้ว แต่ของmcs-51 หายากที่เห็นๆดูจะใช้อุปกรณ์
เยอะไปหน่อยไม่ค่อยถูกใจ
Source Code v1.0
แสดงบทความที่มีป้ายกำกับ 7 แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ 7 แสดงบทความทั้งหมด
วันอาทิตย์ที่ 24 กรกฎาคม พ.ศ. 2554
วันเสาร์ที่ 23 กรกฎาคม พ.ศ. 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
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
สมัครสมาชิก:
บทความ (Atom)