- ส่วนประกอบที่จำเป็น
- การแสดงผล 4 หลัก 7 ส่วน
- 74HC595 Shift Register IC
- โมดูล DS3231 RTC
- แผนภูมิวงจรรวม
- การเขียนโปรแกรม Arduino UNO สำหรับ Multiplexing Seven Segment Display
นาฬิกาแขวนดิจิตอลกำลังได้รับความนิยมมากขึ้นในปัจจุบันและดีกว่านาฬิกาอะนาล็อกเนื่องจากให้เวลาที่แม่นยำเป็นชั่วโมงนาทีและวินาทีและอ่านค่าได้ง่าย นาฬิกาดิจิตอลบางรุ่นยังมีอุปกรณ์อำนวยความสะดวกมากมายเช่นการแสดงอุณหภูมิความชื้นการตั้งค่าการเตือนหลายจุดเป็นต้นนาฬิกาดิจิทัลส่วนใหญ่ใช้การแสดงเจ็ดส่วน
ก่อนหน้านี้เราได้สร้างวงจรนาฬิกาดิจิตอลจำนวนมากโดยใช้จอแสดงผล 7 ส่วนหรือใช้ LCD 16x2 คุณสามารถออกแบบ PCB ของนาฬิกาดิจิตอลที่ใช้ AVR ได้ที่นี่ บทช่วยสอนนี้เกี่ยวกับการสร้างนาฬิกาดิจิตอลโดยการแสดงผลแบบมัลติเพล็กซ์สี่ - 7 ส่วนโดยใช้ Arduino UNOและแสดงเวลาในรูปแบบ HH: MM
ส่วนประกอบที่จำเป็น
- การแสดงผล 4 หลัก 7 ส่วน
- 74HC595 IC
- โมดูล DS3231 RTC
- Arduino UNO
- เขียงหั่นขนม
- การเชื่อมต่อสายไฟ
การแสดงผล 4 หลัก 7 ส่วน
จอแสดงผล 7 Segment 4 หลักมีการแสดงผลเจ็ดส่วนสี่ส่วนรวมเข้าด้วยกันหรือเราสามารถพูดได้ว่ามัลติ ใช้เพื่อแสดงค่าตัวเลขและตัวอักษรบางตัวที่มีทศนิยมและโคลอน จอแสดงผลสามารถใช้ได้ทั้งสองทิศทาง ตัวเลขสี่หลักมีประโยชน์สำหรับการสร้างนาฬิกาดิจิทัลหรือเช่นการนับตัวเลขตั้งแต่ 0 ถึง 9999 ด้านล่างนี้คือแผนภาพภายในสำหรับการแสดงผล 4 หลัก 7 ส่วน
แต่ละส่วนมี LED หนึ่งดวงพร้อมการควบคุม LED แต่ละตัว มีสองประเภทของการแสดงส่วนเจ็ดเช่นแอโนดและแคโทดสามัญทั่วไปภาพด้านบนแสดงการแสดงส่วนแอโนดประเภท 7 ทั่วไป
แอโนดทั่วไป
ใน Common Anode ขั้วบวกทั้งหมด (Anodes) ของ LED ทั้ง 8 ดวงจะเชื่อมต่อเข้าด้วยกันโดยมีชื่อว่า COM และขั้วลบทั้งหมดจะเหลือเพียงอย่างเดียวหรือเชื่อมต่อกับหมุดไมโครคอนโทรลเลอร์ โดยใช้ไมโครคอนโทรลเลอร์หากตั้งค่าลอจิก LOW เพื่อให้แสงสว่างเฉพาะส่วน LED และตั้งค่าลอจิกสูงเพื่อปิด LED
แคโทดทั่วไป
ในแคโทดทั่วไปขั้วลบ (แคโทด) ทั้งหมดของ LED ทั้ง 8 ดวงจะเชื่อมต่อเข้าด้วยกันโดยมีชื่อว่า COM และขั้วบวกทั้งหมดจะเหลือเพียงอย่างเดียวหรือเชื่อมต่อกับหมุดไมโครคอนโทรลเลอร์ โดยใช้ไมโครคอนโทรลเลอร์หากตั้งค่าลอจิก HIGH เพื่อให้ LED สว่างและตั้งค่า LOW เพื่อปิด LED
เรียนรู้เพิ่มเติมเกี่ยวกับการแสดง 7 ส่วนที่นี่และตรวจสอบว่าสามารถเชื่อมต่อกับไมโครคอนโทรลเลอร์อื่น ๆ ได้อย่างไร:
- การเชื่อมต่อการแสดงผล 7 ส่วนกับ Arduino
- การแสดงผล 7 ส่วนเชื่อมต่อกับ Raspberry Pi
- การเชื่อมต่อการแสดงผลเจ็ดส่วนกับ ARM7-LPC2148
- 7 Segment Display Interfacing กับ PIC Microcontroller
- การเชื่อมต่อการแสดงผล 7 ส่วนกับไมโครคอนโทรลเลอร์ 8051
74HC595 Shift Register IC
IC 74HC595ยังเป็นที่รู้จัก 8 บิตใน Serial - ขนาน OUT กะสมัครสมาชิก IC นี้สามารถรับอินพุตข้อมูลแบบอนุกรมและสามารถควบคุม 8 พินเอาต์พุตแบบขนาน สิ่งนี้มีประโยชน์ในการลดพินที่ใช้จากไมโครคอนโทรลเลอร์ คุณสามารถค้นหาโครงการที่เกี่ยวข้องกับการลงทะเบียนกะ 74HC595 ทั้งหมดได้ที่นี่
การทำงานของ 74HC595 IC:
IC นี้ใช้สามพินเช่น Clock, Data & Latch พร้อมกับไมโครคอนโทรลเลอร์เพื่อควบคุม 8 พินเอาต์พุตของ IC นาฬิกาใช้เพื่อให้พัลส์จากไมโครคอนโทรลเลอร์อย่างต่อเนื่องและพินข้อมูลใช้ในการส่งข้อมูลเช่นเอาต์พุตใดที่ต้องเปิดหรือปิดตามเวลานาฬิกาตามลำดับ
Pinout:
หมายเลขพิน |
ชื่อพิน |
คำอธิบาย |
1,2,3,4,5,6,7 |
พินเอาต์พุต (Q1 ถึง Q7) |
74HC595 มีพินเอาต์พุต 8 พินซึ่ง 7 พินเหล่านี้ สามารถควบคุมได้ตามลำดับ |
8 |
พื้น |
เชื่อมต่อกับกราวด์ของไมโครคอนโทรลเลอร์ |
9 |
(Q7) เอาต์พุตอนุกรม |
พินนี้ใช้เพื่อเชื่อมต่อ 74HC595 มากกว่าหนึ่งตัวเป็นแบบเรียงซ้อน |
10 |
(MR) การรีเซ็ตต้นแบบ |
รีเซ็ตเอาต์พุตทั้งหมดเป็นต่ำ ต้องถือไว้สูงสำหรับการทำงานปกติ |
11 |
(SH_CP) นาฬิกา |
นี่คือเข็มนาฬิกาที่ต้องให้สัญญาณนาฬิกาจาก MCU / MPU |
12 |
(ST_CP) สลัก |
สลักพินใช้เพื่ออัพเดตข้อมูลไปยังพินเอาต์พุต มีการใช้งานสูง |
13 |
(OE) เปิดใช้งานเอาต์พุต |
Output Enable ใช้เพื่อปิดเอาต์พุต ต้องถือไว้ต่ำสำหรับการทำงานปกติ |
14 |
(DS) ข้อมูลอนุกรม |
นี่คือพินที่ใช้ส่งข้อมูลโดยอิงจากเอาต์พุต 8 ตัวที่ควบคุม |
15 |
(Q0) เอาต์พุต |
พินเอาต์พุตแรก |
16 |
Vcc |
พินนี้จ่ายไฟให้กับ IC โดยทั่วไปจะใช้ + 5V |
โมดูล DS3231 RTC
DS3231 เป็นโมดูล RTC ย่อมาจาก Real Time Clock โมดูลนี้ใช้เพื่อจดจำเวลาและวันที่แม้ว่าวงจรจะไม่ได้ทำงานก็ตาม มีแบตเตอรี่สำรอง CR2032 เพื่อเรียกใช้โมดูลในกรณีที่ไม่มีพลังงานภายนอก โมดูลนี้ยังมีเซ็นเซอร์อุณหภูมิ โมดูลนี้สามารถใช้ในโครงการฝังตัวเช่นการสร้างนาฬิกาดิจิตอลพร้อมตัวบอกอุณหภูมิเป็นต้นโครงการที่มีประโยชน์บางส่วนในการใช้งานมีดังนี้
- เครื่องป้อนสัตว์เลี้ยงอัตโนมัติโดยใช้ Arduino
- การเชื่อมต่อโมดูล RTC (DS3231) กับไมโครคอนโทรลเลอร์ PIC: นาฬิกาดิจิตอล
- การเชื่อมต่อโมดูล RTC (DS3231) กับ MSP430: นาฬิกาดิจิตอล
- นาฬิกาเรียลไทม์ ESP32 โดยใช้โมดูล DS3231
- นาฬิกาแขวนดิจิตอลบน PCB โดยใช้ไมโครคอนโทรลเลอร์ AVR Atmega16 และ DS3231 RTC
Pinout ของ DS3231:
ชื่อพิน |
ใช้ |
VCC |
เชื่อมต่อกับขั้วบวกของแหล่งพลังงาน |
GND |
เชื่อมต่อกับพื้นดิน |
SDA |
พินข้อมูลอนุกรม (I2C) |
SCL |
พินนาฬิกาอนุกรม (I2C) |
SQW |
ขาเอาท์พุท Square Wave |
32K |
เอาต์พุตออสซิลเลเตอร์ 32K |
คุณสมบัติและข้อมูลจำเพาะ:
- RTC นับวินาทีนาทีชั่วโมงและปี
- เซ็นเซอร์อุณหภูมิดิจิตอลที่มีความแม่นยำ±3ºC
- ลงทะเบียนสำหรับ Aging trim
- 400Khz I2C อินเทอร์เฟซ
- การใช้พลังงานต่ำ
- แบตเตอรี่สำรอง CR2032 มีอายุการใช้งานสองถึงสามปี
- แรงดันไฟฟ้าที่ใช้งาน: 2.3 ถึง 5.5V
แผนภูมิวงจรรวม
การเชื่อมต่อวงจรระหว่าง DS3231 RTC และ Arduino UNO:
DS3231 |
Arduino UNO |
VCC |
5V |
GND |
GND |
SDA |
A4 |
SCL |
A4 |
การเชื่อมต่อวงจรระหว่าง 74HC595 IC และ Arduino Uno:
74HC595 IC |
Arduino UNO |
11-SH_CP (SRCLK) |
6 |
12-ST_CP (RCLK) |
5 |
14-DS (ข้อมูล) |
4 |
13-OE (สลัก) |
GND |
8-GND |
GND |
10- นาย (SRCLR) |
+ 5V |
16-VCC |
+ 5V |
การเชื่อมต่อวงจรระหว่าง IC 74HC595 และ 4-Digit Seven Segment และ Arduino UNO:
4-DigitSevenSegment |
IC 74HC595 |
Arduino UNO |
ก |
คำถาม 0 |
- |
ข |
คำถามที่ 1 |
- |
ค |
คำถามที่ 2 |
- |
ง |
ไตรมาสที่ 3 |
- |
จ |
Q4 |
- |
ฉ |
คำถามที่ 5 |
- |
ช |
คำถาม 6 |
- |
D1 |
- |
10 |
D2 |
- |
11 |
D3 |
- |
12 |
D4 |
- |
9 |
การเขียนโปรแกรม Arduino UNO สำหรับ Multiplexing Seven Segment Display
โค้ดที่สมบูรณ์และวิดีโอการใช้งานแนบท้ายบทช่วยสอนนี้ ในส่วนการเขียนโปรแกรมจะมีการอธิบายเวลา (ชั่วโมงและนาที) จากโมดูล RTC ในรูปแบบ 24 ชั่วโมงจากนั้นจะแปลงเป็นรูปแบบตามลำดับสำหรับการแสดงผลในการแสดงผล 7 Segment 4 หลัก
ในการเชื่อมต่อโมดูล DS3231 RTC กับ Arduino UNO จะใช้บัส I2C ของ Arduino UNO ห้องสมุดเรียกว่า
ในแนวคิดนี้ชั่วโมงและนาทีจะถูกนำมาก่อนจาก RTC และรวมเข้าด้วยกันเช่น 0930 (21:30 น.) จากนั้นตัวเลขแต่ละหลักจะถูกแยกออกเช่นพัน, ร้อย, สิบ, หน่วยและแต่ละหลักที่แปลงเป็นรูปแบบไบนารีเช่น 0 กลายเป็น 63 (0111111) รหัสไบนารีนี้ถูกส่งไปยังshift registerจากนั้นจาก shift register ไปยังเจ็ดส่วนแสดงผล Digit 0 ในการแสดงผลเจ็ดส่วน ด้วยวิธีนี้ตัวเลขสี่หลักจะถูกมัลติเพล็กซ์และชั่วโมงและนาทีจะปรากฏขึ้น
ในขั้นต้นไลบรารีที่จำเป็นจะรวมไว้เช่นไลบรารี DS3231 และไลบรารี Wire (ไลบรารี I2C)
# รวม
หมุดถูกกำหนดไว้สำหรับการควบคุมเจ็ดส่วน การควบคุมเหล่านี้จะมีบทบาทสำคัญในการแสดงผลแบบมัลติเพล็กซ์
# กำหนดสลักพิน 5 # กำหนดนาฬิกาพิน 6 # กำหนดข้อมูลพิน 4 # กำหนดจุด 2
ตัวแปรถูกประกาศเพื่อเก็บผลลัพธ์ที่แปลงแล้วหรือดิบที่นำมาจาก RTC
int h; // ประกาศตัวแปรสำหรับชั่วโมง int m; // ประกาศตัวแปรสำหรับนาที int หลายพัน; int หลายร้อย; int หมื่น; หน่วย int; บูล h24; บูลน.
ถัดไปวัตถุสำหรับคลาส DS3231 จะประกาศเป็น RTC เพื่อลดความซับซ้อนในการใช้งานในบรรทัดต่อไป
DS3231 RTC;
เนื่องจากโมดูล RTC เชื่อมต่อกับ Arduino โดยใช้การสื่อสารแบบ I2C ดังนั้น wire.begin () จึงถูกใช้เพื่อเริ่มการสื่อสาร I2C ในที่อยู่เริ่มต้นของ RTC เนื่องจากไม่มีโมดูล I2C อื่น ๆ
Wire.begin ();
โหมดขามีการกำหนดไว้ไม่ว่าจะเป็น GPIO จะทำงานเป็นผลผลิตหรือการป้อนข้อมูล
PinMode (9, เอาท์พุท); PinMode (10, เอาท์พุท); pinMode (11, เอาท์พุท); pinMode (12, เอาท์พุท); pinMode (latchPin, เอาท์พุท); PinMode (clockPin, เอาท์พุท); pinMode (dataPin, เอาท์พุท); pinMode (จุดเอาท์พุท);
ลูปทำงานอย่างไม่มีที่สิ้นสุดและใช้เวลาเป็นชั่วโมงและนาทีจากโมดูล RTC DS3231 'h24' ระบุตัวแปรรูปแบบ 24 ชั่วโมง
int h = RTC.getHour (ชั่วโมง 24, PM); int m = RTC.getMinute ();
จากนั้นชั่วโมงและนาทีจะรวมกันเป็นตัวเลขเดียว (เช่นถ้าชั่วโมงคือ 10 และต่ำสุดคือ 60 แล้วตัวเลขคือ 10 * 100 = 1000 + 60 = 1060)
จำนวน int = h * 100 + m;
ได้รับตัวเลขแต่ละหลักจากตัวเลข (ตัวอย่างเช่น 1,060-1 คือพัน, 0 คือ hundered, 1 คือสิบและ 0 คือหลักสุดท้าย) ในการแยกตัวเลขจะใช้ตัวดำเนินการโมดูลัส ตัวอย่างเช่นใน 1060 จะได้ 1 แล้ว 1060/1000 = 1.06% 10 = 1) ดังนั้นตัวเลขที่แยกจากกันจะถูกเก็บไว้ในตัวแปรแยกกัน
int พัน = จำนวน / 1000% 10; int ร้อย = จำนวน / 100% 10; int นับ = จำนวน / 10% 10; หน่วย int = หมายเลข% 10;
หลังจากนั้นจะมีการกำหนดคำสั่ง switch case สำหรับแต่ละหลักสำหรับการแปลงเป็นรูปแบบตามลำดับ (รูปแบบไบนารี) และส่งออกทาง shift register เพื่อแสดงใน 7-segment ตัวอย่างเช่น (สำหรับ 1 หลักจะเปลี่ยนเป็น 06 (0000 0110)) เพื่อให้ส่งออกทาง shift และ 1 หลักจะแสดงเป็น 7 ส่วน (0 สำหรับ LOW, 1 สำหรับ HIGH)
สวิตช์ (t) { case 0: unit = 63; หยุดพัก; กรณีที่ 1: หน่วย = 06; หยุดพัก; กรณีที่ 2: หน่วย = 91; หยุดพัก; กรณีที่ 3: หน่วย = 79; หยุดพัก; กรณีที่ 4: หน่วย = 102; หยุดพัก; กรณีที่ 5: หน่วย = 109; หยุดพัก; กรณีที่ 6: หน่วย = 125; กรณีที่ 7: หน่วย = 07; หยุดพัก; กรณีที่ 8: หน่วย = 127; หยุดพัก; กรณีที่ 9: หน่วย = 103; หยุดพัก; }
จากนั้นตัวเลขแต่ละหลักในรูปแบบไบนารีจะถูกส่งออกผ่านฟังก์ชัน 'shiftout' ด้วย MSB ก่อนจากนั้นพินหลักตามลำดับจะถูกสร้างเป็น HIGH และสลักพินจะถูกสร้างขึ้น
digitalWrite (9, ต่ำ); digitalWrite (latchPin, LOW); shiftOut (dataPin, clockPin, MSBFIRST พัน); digitalWrite (latchPin, สูง); digitalWrite (9, สูง); ล่าช้า (5);
นี่เป็นการเสร็จสิ้นรหัสที่สมบูรณ์ คำอธิบายฟังก์ชั่นส่วนใหญ่มีให้ในส่วนความคิดเห็นของโค้ดข้างบรรทัดรหัส ความถี่ของนาฬิกาจะเป็นตัวกำหนดมุมมองของเวลาและคุณภาพของการมัลติเพล็กซ์กล่าวคือหากใช้นาฬิกาต่ำจะสามารถมองเห็นการกะพริบได้โดยที่ราวกับว่าความเร็วนาฬิกาสูงจะไม่มีการกะพริบและสามารถมองเห็นเวลาที่คงที่ได้.
โปรดทราบว่าในการเข้าถึงโมดูล RTC จะต้องรักษาแรงดันบัส I2C ไว้ เพื่อให้ข้อเสนอแนะใด ๆ หรือหากมีข้อสงสัยกรุณาแสดงความคิดเห็นด้านล่าง