การขับ 7 Segment LED

Download all demo files: Led7s4d.7z

บทนำ

ในบทนี้กล่าวถึงการใช้งานอุปกรณ์แสดงผล เช่น จอแสดง LCD และ อุปกรณ์แสดงผลแบบตัวเลข (7-Segments) ใช้สัญญาณ Digital I/O เป็นหลัก โดยใช้ STM32F4DISCOVERY และ Waijung Blockset

รู้จักกับจอแสดงผล 7-Segment

จอแสดงผล 7-Segment ประกอบด้วยหลอด LED รูปทรงสี่เหลี่ยมคางหมูหรือหกเหลี่ยมจำนวน 7 หลอด เรียงกันเป็นรูปทรงดังรูป 1-2  7-Segment มีหลายสี หลายขนาด รวมทั้งแบบตัวเลขหนึ่งหลัก สองหลัก และสี่หลัก จึงนิยมใช้ในหน้าปัดแสดงข้อมูลต่าง ๆ เช่น ราคาน้ำมัน นาฬิกาบอกเวลา อุณหภูมิ ซึ่งสามารถมองเห็นได้ชัดเจน

รูป 1-1จอแสดงผลตัวเลข 7-Segmentและวงจรแบบ Common Cathode และ Common Annode

รูป 1-1จอแสดงผลตัวเลข 7-Segmentและวงจรแบบ Common Cathode และ Common Annode

วงจรของ 7-Segment สามารถแบ่งได้สองชนิดคือ Common Anode และ Common Cathode หลักการทำงานของ 7-Segment คือ การเปิด-ปิดหลอด LED ดังตาราง 1-1แสดงการถอดรหัสสำหรับ 7-Segment แบบ Common Cathode โดยต่อขา Common กับ GND แล้วจ่ายแรงดัน (สถานะ Logic 1) ให้กับ LED

ตาราง 1-1 แสดงการถอดรหัสสำหรับ 7-Segments แบบ Common Cathod

ตาราง 1-1 แสดงการถอดรหัสสำหรับ 7-Segments แบบ Common Cathod

idea_rzW40ชวนคิด : จงสร้างตารางการถอดรหัสเลขสำหรับ 7-Segments แบบ Common Anode โดยต่อขา Common กับไฟเลี้ยง

การทดลองแสดงผลแบบตัวเลข 7Segment

อุปกรณ์ที่ใช้ในการทดลอง

รูป 2-1 แสดงบอร์ด aMG LED7s4d ประกอบด้วยจอแสดงตัวเลขแบบ 7 Segment 4 หลัก โดยใช้จอแสดงผลรุ่นLTC-4727 JS แบบ Common Cathode ของบริษัท LITE-ON รูป 2-2 แสดงการใช้งาน aMG LED7s4d กับ STM32F4DISCOVERY

รูป 2-1 บอร์ด aMG LED7s4d [1] และการจัดวางตำแหน่งขา [2]

รูป 2-1 บอร์ด aMG LED7s4d [1] และการจัดวางตำแหน่งขา [2]

รูป 2-2 การใช้งาน 7 Segmentกับ STM32F4DISCOVERY

รูป 2-2 การใช้งาน 7 Segment กับ STM32F4DISCOVERY

การทดลองแสดงผล 7Segment หนึ่งหลัก

จุดประสงค์

  • เพื่อให้ผู้ใช้งานเรียนรู้โครงสร้างและแสดงผลตัวเลขผ่านอุปกรณ์ 7 Segment
  • เพื่อให้ผู้ใช้งานสร้างและใช้งาน Subsystem Block สำหรับแสดงผลตัวเลขผ่านอุปกรณ์ 7 Segment

วิธีสร้าง Subsystems Block ใน Simulink สำหรับใช้งานแสดงผลตัวเลขทาง 7 Segmentดังรูป 2-3

รูป 2-3 Subsystem Block สำหรับแสดงผลตัวเลขทาง 7 Segment

รูป 2-3 Subsystem Block สำหรับแสดงผลตัวเลขทาง 7 Segment

ภายใน Subsystem ประกอบด้วย Multiport Switch สำหรับเลือกค่าสำหรับเปิด-ปิดหลอด LED บนจอ 7 Segment ซึ่งกำหนดไว้ตามตาราง 1 1ยกตัวอย่างเช่น เมื่อ Input Port มีค่าเท่ากับ 3 Multiport Switch จะเลือกส่งค่า 0x79 หรือ 1111001 ไปยัง Output Portถ้า Input Port อ่านตัวเลขได้มากกว่า 9 Multiport Switch จะเลือกส่งค่า 0x7E ซึ่งค่าตั้งต้น เป็นต้น

หลังจากนั้น สร้าง Simulink Model สำหรับการทดลองแสดงด้วย 7 Segment โดยให้แสดงตัวเลขจาก 0 ถึง 9 โดยนับทุกๆ 1 วินาที Counter Block ซึ่งอยู่ในLibrary:Simulink /Waijung Blockset /Miscใช้นับตัวเลขที่ต้องการแสดงบน 7 Segment เมื่อเชื่อม Constant Block (Value: 9 และ Sample Time: 1) Counter Block จะนับเลข ทุกๆ 1 วินาที โดยเริ่มจาก 0 ถึง 9 จากนั้นเริ่มนับจาก0 อีกครั้ง

รูป 2-4 SimulinkModel สำหรับการทดลองแสดงผล 7Segment หนึ่งหลัก

รูป 2-4 SimulinkModel สำหรับการทดลองแสดงผล 7Segment หนึ่งหลัก

idea_rzW26ชวนคิด: ควรทำอย่างไร หากต้องการให้ตัวเลขนับถอยหลังโดยเริ่มจาก 9
ตอบ: นำค่าคงที่ (เลข 9) มาลบกับค่าที่ได้จาก Counter Block โดยให้ค่าคงเป็นตัวตั้ง

การทดลองแสดงผล 7Segment สองหลัก

จุดประสงค์

  • เพื่อให้ผู้ใช้งานเข้าใจหลักการและแสดงผลตัวเลขสองหลัก ผ่านอุปกรณ์ 7 Segment

แม้ว่า 7-Segment บางชนิดสามารถแสดงผลตัวได้หลายหลัก สายข้อมูล (Bus) สำหรับเปิด-ปิดหลอด LED มีชุดเดียว จึงต้องมีการ Switch ข้อมูลใน Bus เพื่อแสดงผลตัวเลขในแต่ละหลัก ดังตัวอย่างในรูป 2-6 วิธีนี้เรียกว่า Multiplexer

รูป 2-5 SimulinkModel สำหรับการทดลองแสดงผล 7Segment สองหลัก

รูป 2-5 SimulinkModel สำหรับการทดลองแสดงผล 7Segment สองหลัก

เมื่อ Download โปรแกรมดังรูป 2-5 ลงใน STM32F4DISCOVERY  นับเลขจาก 00 ไปจนถึง 99 โดยนับทุก 1 วินาที ใน Simulink Model แบ่งการทำงานได้เป็น 2ส่วน คือ ส่วน A ใช้นับตัวเลขจาก 0 ถึง 99 ค่าที่จาก Counter Block สามารถแบ่งเป็นตัวเลขหลักหน่วย และหลักสิบ เช่น ต้องการแสดงค่า 15= 1 x10 + 5ดังนั้นindex ที่ 0ของ Multiport Switch มีค่าเท่ากับ 5 และ index ที่  1 มีค่าเท่ากับ 1

ส่วน B ใช้เลือกข้อมูลที่ส่งให้กับ Subsystem Block และ Active ขา Common Cathodeโดยใช้ Counter Limited Block (Upper limited: 1, Sample Time: 0.005) เป็นตัวกำหนดเมื่อค่าของ Counter Limited Block ที่ค่าเท่ากับ 0 Subsystem Block จะแสดงตัวเลข 5 และขา K5 ของ 7-Segment จะถูก Activate ดังนั้น 7-Segment จะแสดงตัวเลข 5 ที่หลักหน่วย เมื่อค่าของ Counter Limited Block ที่ค่าเท่ากับ 1Subsystem Block จะแสดงตัวเลข 1 และขา K4 ของ 7-Segment จะถูก Activate ดังนั้น 7-Segment จะแสดงตัวเลข 1 ที่หลักสิบ ดังรูป 2-6เนื่องจาก Counter Limited Block นับด้วยความถี่สูงเช่น 200 Hz ดังนั้น ผู้ใช้งานจะมองเห็น 7-Segment แสดงตัวเลข 15

รูป 2-6 การทำงานของ 7 Segment โดยแสดงผลตัวเลขสองหลัก

รูป 2-6 การทำงานของ 7 Segment โดยแสดงผลตัวเลขสองหลัก

idea_rzW26ชวนคิด: จากตัวอย่างการทดลองเมื่ออยู่ในช่วง 0 ถึง9หน้าจอ 7-Segment จะแสดง 00 – 09 ควรทำอย่างไร หากต้องการให้แสดง 0 – 9 แล้วนับต่อ 10 ถึง 99

idea_rzW26ชวนคิด: ควรทำอย่างไร ให้หน้าจอ 7-Segment แสดงตัวเลข 0 ถึง 9999


ตัวอย่างการใช้งาน

จุดประสงค์

  • เพื่อให้ผู้ใช้งานสามารถนำอุปกรณ์ 7-Segment มาประยุกต์ในการใช้งานได้จริง
  • เพื่อให้ผู้ใช้งานสามารถแสดงข้อมูลแบบเลขทศนิยม ผ่าน 7-Segment

ในการทดลองนี้ยกตัวอย่างการประยุกต์ STM32F4DISCOVERY ให้เป็น Digital Voltmeter อย่างง่าย โดยใช้โมดูลแปลงสัญญาณอนาล็อกเป็นดิจิตอล เพื่ออ่านค่าแรงดันจากตัวต้านทานปรับค่าได้ แล้วแสดงผลค่าที่แรงดันอ่านได้ผ่าน 7-Segment นอกจากนี้ผู้ใช้งานสามารถปรับตำแหน่งทศนิยมของการแสดงผล โดยใช้สวิตซ์แบบปุ่มกดยกตัวอย่างเช่น เมื่ออ่านค่าได้ 2.564 V สามารถแสดงค่าได้ 2.56 V เมื่อกดสวิตซ์ หนึ่งครั้ง และแสดงค่า 2.6 V เมื่อกดสวิตซ์ SW1

Simulink Model ในรูป 2-7ใช้วัดค่าแรงดันและแสดงผลบนจอ 7-Segment ประกอบด้วยSubsystem Block ต่างๆ ทำงานรวมกัน โดยมีดังนี้

รูป 2-7 Simulink Model สำหรับการสร้าง Digital Voltage Meter อย่างง่าย

รูป 2-7 Simulink Model สำหรับการสร้าง Digital Voltage Meter อย่างง่าย

1.)  SelectMode Subsystem Block เป็นส่วนรับสัญญาณจากสวิตซ์ จากรูป 2-8 Digital Input Block อ่านสัญญาณดิจิตอลที่ขา PB2 ซึ่งต่อกับปุ่มกด SW1 เพื่อปรับ Modeโดยกดปุ่มหนึ่งครั้ง (Single Pulse) Mode การทำงานมีอยู่ 4 แบบดังนี้

Mode = 0 แสดงผลโดยไม่มีจุดทศนิยม
Mode = 1 แสดงผลโดยมีจุดทศนิยมหนึ่งตำแหน่ง
Mode = 2 แสดงผลโดยมีจุดทศนิยมสองตำแหน่ง
Mode = 3 แสดงผลโดยมีจุดทศนิยมสามตำแหน่ง

รูป 2-8 Subsystem model สำหรับการปรับตำแหน่งทศนิยมของการแสดงผล

รูป 2-8 Subsystem model สำหรับการปรับตำแหน่งทศนิยมของการแสดงผล

2.)  SelectDigit Subsystem Block เป็นส่วนแยกตัวประกอบของเลขจำนวนเต็มที่อยู่ในช่วง 0 – 9999 ให้เป็นหลักหน่วย หลักสิบ หลักร้อย และหลักพัน ยกตัวอย่างเช่น 1234 = 1×103 + 2×102 + 3×101 + 4 ดังรูป 2-9

รูป 2-9 Subsystem Block สำหรับแยกตัวประกอบเลขจำนวนเต็ม

รูป 2-9 Subsystem Block สำหรับแยกตัวประกอบเลขจำนวนเต็ม

3.) ReadVoltage Subsystem Block เป็นส่วนอ่านแรงดันภายนอก ใช้ RegularADC Block อ่านค่าแรงดันที่ขา PA5 ทุกๆ 0.01 วินาที (ตั้งค่าSample Time: 0.01) ผลลัพธ์ที่ได้ซึ่งเป็นข้อมูลดิจิตอล 12 บิต (0 – 4095) ให้เป็นค่าแรงดันอยู่ในช่วง (0 – 3.3)

รูป 2-10 Subsystem model สำหรับอ่านค่าแรงดัน

รูป 2-10 Subsystem model สำหรับอ่านค่าแรงดัน

การแสดงข้อมูลแบบเลขทศนิยม 7-Segment สามารถทำได้โดยปรับข้อมูลให้เป็นเลขจำนวนเต็ม แล้วเปิด หลอด LEDDP หรือ Decimal Point ในตำแหน่งตามความละเอียดที่กำหนด จากรูป 2-11 ถ้าค่าที่อ่านได้เท่ากับ 1.258 ใน Mode 2 (ทศนิยมสองตำแหน่ง) ค่า 1.258 * 100 = 125.8แปลงเป็นจำนวนเต็มได้ 126 เป็นต้น

เมื่อเพิ่ม Port output ที่ขา PD7 สำหรับ DP และแสดงตำแหน่งทศนิยมตาม Mode ผู้ใช้งานจะเห็นข้อมูลบน 7-Segment เป็น 1.26

รูป 2-11 การทดลองสร้างDigital Voltage Meter อย่างง่ายด้วย STM32F4DISCOVERY

รูป 2-11 การทดลองสร้างDigital Voltage Meter อย่างง่ายด้วย STM32F4DISCOVERY

idea_rzW26ชวนคิด: จากการทดลองค่าที่อ่านได้น้อยกว่า 1เช่น 0.75 หน้าจอ 7-Segment จะแสดง “00.75” สำหรับทศนิยมสองตำแหน่ง หรือ “000.8” สำหรับทศนิยมหนึ่งตำแหน่ง ควรทำอย่างไรให้7-Segment มีเลขศูนย์หน้าจุดทศนิยมเพียงหลักเดียว

เอกสารอ้างอิง

  1. Aimagin Co., Ltd. “aMG LED7s4d A Datasheet,” 2011. [Online]. Available: www.aimagin.com/amg-led7s4d.html.