- Kinakailangan ang Mga Bahagi
- Pagpapakita ng 4-Digit 7 na Segment
- 74HC595 Shift Rehistro IC
- Module ng DS3231 RTC
- Diagram ng Circuit
- Programming Arduino UNO para sa Multiplexing Pitong Segment na Pagpapakita
Ang mga digital wall Clock ay nakakakuha ng tanyag ngayon araw at mas mahusay sila kaysa sa analog na orasan dahil nagbibigay ito ng tumpak na oras sa oras, minuto at segundo at madali nitong basahin ang mga halaga. Ang ilang mga digital na orasan ay mayroon ding maraming mga kagamitan tulad ng pagpapakita ng temperatura, kahalumigmigan, pagtatakda ng maramihang mga alarma atbp Karamihan sa mga digital na orasan ay gumagamit ng pitong segment na pagpapakita.
Nakagawa kami dati ng maraming mga digital na circuit ng orasan alinman sa paggamit ng 7 mga segment na nagpapakita o paggamit ng 16x2 LCD. Dito maaari mong kumpletuhin ang mga disenyo ng PCB ng AVR based Digital na orasan. Ang tutorial na ito ay tungkol sa paggawa ng isang Digital na orasan sa pamamagitan ng multiplexing apat na 7 segment na ipinapakita gamit ang Arduino UNO at pagpapakita ng oras sa format na HH: MM.
Kinakailangan ang Mga Bahagi
- Pagpapakita ng 4-Digit 7 na Segment
- 74HC595 IC
- Module ng DS3231 RTC
- Arduino UNO
- Breadboard
- Mga kumokonekta na mga wire
Pagpapakita ng 4-Digit 7 na Segment
Ang 4-digit na 7 Segment display ay mayroong apat na pitong segment na display na sumali o masasabi nating magkakasama sa multiplexed. Ginagamit ang mga ito upang ipakita ang mga halagang bilang at bilang ilang mga alpabeto na may mga decimal at colon. Ang display ay maaaring magamit sa parehong direksyon. Apat na mga digit ang kapaki-pakinabang para sa paggawa ng mga digital na orasan o tulad ng pagbibilang ng mga numero mula 0 hanggang 9999. Nasa ibaba ang panloob na diagram para sa pagpapakita ng 4-Digit 7 Segment.
Ang bawat segment ay may isang LED na may indibidwal na kontrol ng LED. Mayroong dalawang uri ng pitong segment na nagpapakita tulad ng Common Anode at Common Cathode. Ipinapakita ng imahe sa itaas ang karaniwang pagpapakita ng uri ng anode na 7 segment.
Karaniwang Anode
Sa Karaniwang Anode, ang lahat ng mga positibong terminal (Anode) ng lahat ng 8 LEDs ay konektado magkasama, pinangalanan bilang COM. At lahat ng mga negatibong terminal ay naiwan nang nag-iisa o nakakonekta sa mga microcontroller pin. Sa pamamagitan ng paggamit ng microcontroller, kung ang lohika LOW ay nakatakda upang maipaliwanag ang partikular na segment ng LED at itakda ang Mataas na lohika upang i-OFF ang LED.
Karaniwang Cathode
Sa Karaniwang Cathode, ang lahat ng mga Negatibong terminal (cathode) ng lahat ng 8 LEDs ay konektado magkasama, pinangalanan bilang COM. At lahat ng mga positibong terminal ay naiwan nang nag-iisa o nakakonekta sa mga microcontroller pin. Sa pamamagitan ng paggamit ng microcontroller, kung itakda ang lohika MATATAAS upang mailawan ang LED at itakda ang LOW upang i-OFF ang LED.
Matuto nang higit pa tungkol sa 7 mga ipinapakitang segment dito at suriin kung paano ito ma-interfaced sa iba pang mga microcontroller:
- 7 Segment ng Display Interfacing kasama si Arduino
- 7 Segment ng Display Interfacing kasama ang Raspberry Pi
- Pag-interface ng Pitong Segment na Display sa ARM7-LPC2148
- 7 Segment ng Display Interfacing sa PIC Microcontroller
- 7 Segment Display Interfacing na may 8051 Microcontroller
74HC595 Shift Rehistro IC
Ang IC 74HC595 na kilala rin bilang 8-Bit Serial IN - Parallel OUT Shift Register. Ang IC na ito ay maaaring makatanggap ng input ng data sa serial at makokontrol ang 8 output pin nang kahanay. Ito ay kapaki-pakinabang sa pagbabawas ng mga pin na ginamit mula sa microcontroller. Maaari mong makita ang lahat ng mga proyekto na nauugnay sa rehistro ng 74HC595 dito.
Paggawa ng 74HC595 IC:
Gumagamit ang IC na ito ng tatlong mga pin tulad ng Clock, Data & Latch gamit ang microcontroller upang makontrol ang 8 output pin ng IC. Ginagamit ang orasan upang magbigay ng patuloy na mga pulso mula sa microcontroller at ginagamit ang data pin upang maipadala ang data tulad ng aling output ang kailangang i-ON o OFF sa kani-kanilang oras ng orasan.
Pinout:
Numero ng Pin |
Pangalan ng Pin |
Paglalarawan |
1,2,3,4,5,6,7 |
Mga Output Pins (Q1 hanggang Q7) |
Ang 74HC595 ay may 8 output pin na kung saan 7 ang mga pin na ito. Maaari silang makontrol ng serial |
8 |
Lupa |
Nakakonekta sa Ground ng microcontroller |
9 |
(Q7) Serial Output |
Ang pin na ito ay ginagamit upang ikonekta ang higit sa isang 74HC595 bilang cascading |
10 |
(MR) Master Reset |
I-reset ang lahat ng mga output bilang mababa. Dapat na gaganapin mataas para sa normal na operasyon |
11 |
(SH_CP) Orasan |
Ito ang orasan na pin kung saan ang signal ng orasan ay dapat ibigay mula sa MCU / MPU |
12 |
(ST_CP) Latch |
Ginagamit ang Latch pin upang i-update ang data sa mga output pin. Ito ay aktibo mataas |
13 |
(OE) Paganahin ang Output |
Ginagamit ang Output Enable upang patayin ang mga output. Kailangang mapababa para sa normal na operasyon |
14 |
(DS) Serial Data |
Ito ang pin kung saan ipinadala ang data, batay sa kung saan kinokontrol ang 8 output |
15 |
(Q0) Output |
Ang unang output pin. |
16 |
Vcc |
Pinapagana ng pin na ito ang IC, karaniwang ginagamit ang + 5V. |
Module ng DS3231 RTC
Ang DS3231 ay isang module ng RTC. Ang RTC ay nangangahulugang Real Time Clock. Ginagamit ang modyul na ito upang matandaan ang oras at petsa kahit na ang circuit ay hindi pinalakas. Mayroon itong backup na baterya CR2032 upang patakbuhin ang module na walang kawalan ng panlabas na lakas. Kasama rin sa modyul na ito ang isang sensor ng temperatura. Maaaring magamit ang module sa mga naka-embed na proyekto tulad ng paggawa ng digital na orasan na may temperatura tagapagpahiwatig atbp Narito ang ilang mga kapaki-pakinabang na proyekto na ginagamit ito:
- Awtomatikong Pagpapakain ng Alagang Hayop gamit ang Arduino
- Interfacing RTC Module (DS3231) kasama ang PIC Microcontroller: Digital Clock
- Interfacing RTC module (DS3231) kasama ang MSP430: Digital Clock
- ESP32 Real Time Clock gamit ang DS3231 Module
- Digital Wall Clock sa PCB gamit ang AVR Microcontroller Atmega16 at DS3231 RTC
Pinout ng DS3231:
Pangalan ng Pin |
Gamitin |
VCC |
Nakakonekta sa positibo ng mapagkukunan ng kuryente |
GND |
Nakakonekta sa lupa |
SDA |
Serial data pin (I2C) |
SCL |
Serial pin na orasan (I2C) |
SQW |
Pin ng output ng Square Wave |
32K |
Output ng 32K oscillator |
Mga Tampok at pagtutukoy:
- Binibilang ng RTC ang mga segundo, minuto, oras at taon
- Digital sensor ng temperatura na may kawastuhan ng ± 3ºC
- Magrehistro para sa Aging trim
- 400Khz I2C interface
- Mababang pagkonsumo ng kuryente
- Ang pag-backup ng baterya ng CR2032 na may dalawa hanggang tatlong taong buhay
- Operating Boltahe: 2.3 hanggang 5.5V
Diagram ng Circuit
Koneksyon sa Circuit sa pagitan ng DS3231 RTC at Arduino UNO:
DS3231 |
Arduino UNO |
VCC |
5V |
GND |
GND |
SDA |
A4 |
SCL |
A4 |
Mga Koneksyon sa Circuit sa pagitan ng 74HC595 IC at Arduino Uno:
74HC595 IC |
Arduino UNO |
11-SH_CP (SRCLK) |
6 |
12-ST_CP (RCLK) |
5 |
14-DS (Data) |
4 |
13-OE (Latch) |
GND |
8-GND |
GND |
10-MR (SRCLR) |
+ 5V |
16-VCC |
+ 5V |
Mga Koneksyon sa Circuit sa pagitan ng IC 74HC595 & 4-Digit Seven Segment at Arduino UNO:
4-DigitSevenSegment |
IC 74HC595 |
Arduino UNO |
A |
Q0 |
- |
B |
Q1 |
- |
C |
Q2 |
- |
D |
Q3 |
- |
E |
Q4 |
- |
F |
Q5 |
- |
G |
Q6 |
- |
D1 |
- |
10 |
D2 |
- |
11 |
D3 |
- |
12 |
D4 |
- |
9 |
Programming Arduino UNO para sa Multiplexing Pitong Segment na Pagpapakita
Ang kumpletong code at gumaganang video ay nakakabit sa pagtatapos ng tutorial na ito. Sa seksyon ng programa, kung paano kinuha ang oras (oras at minuto) mula sa module ng RTC sa format na 24hr at pagkatapos ay mai-convert ito sa kani-kanilang format para sa pagpapakita ng mga ito sa 4-digit na 7 Segment display ay ipapaliwanag.
Upang mai-interface ang module ng DS3231 RTC gamit ang Arduino UNO ginagamit ang I2C bus ng Arduino UNO. Isang library ang tumawag
Sa konseptong ito, ang oras at minuto ay kinuha muna mula sa RTC at pinagsama sila tulad ng 0930 (09:30 pm) at pagkatapos ay pinaghiwalay ang mga indibidwal na digit tulad ng libo, daan, sampu, yunit at ang mga indibidwal na digit na na-convert sa binary format tulad ng 0 sa 63 (0111111). Ang binary code na ito ay ipinadala sa isang rehistro ng shift at pagkatapos mula sa shift register sa pitong-segment, matagumpay na ipinakita ang Digit 0 sa pitong segment na display. Sa ganitong paraan, ang apat na digit ay multiplexed at ang oras at minuto ay ipinapakita.
Sa una, ang kinakailangang library ay kasama tulad ng DS3231 library at Wire library (I2C library).
# isama
Ang mga pin ay tinukoy para sa pitong pag-kontrol sa segment. Ang mga kontrol na ito ay gampanan ang mahalagang papel sa multiplexing ng display.
#define latchPin 5 # tukuyin ang orasanPin 6 # tukuyin ang dataPin 4 # tukuyin ang tuldok 2
Ang mga variable ay idineklara upang maiimbak ang na-convert o raw na resulta na kinuha mula sa RTC.
int h; // Variable idineklara para sa oras int m; // Variable idineklara para sa minuto int libo-libo; int daan-daang; int sampu; int unit; bool h24; bool PM;
Susunod na ang bagay para sa klase DS3231 ay idineklara bilang RTC upang gawing simple ang paggamit sa karagdagang mga linya.
DS3231 RTC;
Tulad ng RTC module ay interfaced sa Arduino sa pamamagitan ng paggamit ng I2C komunikasyon. Kaya, ang wire.begin () ay ginagamit upang simulan ang komunikasyon ng I2C sa default na address ng RTC dahil walang ibang mga module ng I2C.
Wire.begin ();
Ang pin mode ay tinukoy, kung ang GPIO ay kumilos bilang output o input.
pinMode (9, OUTPUT); pinMode (10, OUTPUT); pinMode (11, OUTPUT); pinMode (12, OUTPUT); pinMode (latchPin, OUTPUT); pinMode (clockPin, OUTPUT); pinMode (dataPin, OUTPUT); pinMode (tuldok, OUTPUT);
Ang loop ay tumatakbo nang walang hanggan at tumatagal ng oras sa oras at minuto mula sa module ng RTC DS3231. Ipinapahiwatig ng 'h24' ang variable na 24hr format.
int h = RTC.getHour (h24, PM); int m = RTC.getMinute ();
Pagkatapos ang oras at minuto ay pinagsama bilang isang numero (halimbawa kung ang oras ay 10 at ang min ay 60 pagkatapos ang bilang ay 10 * 100 = 1000 + 60 = 1060).
int numero = h * 100 + m;
Ang mga indibidwal na digit mula sa numero ay nakuha (halimbawa 1060- 1 ay libo, 0 ay hundered, 1 ay ikasampu at 0 ang huling digit). Upang paghiwalayin ang mga digit, ginagamit ang modulus operator. Halimbawa, sa 1060 upang makakuha ng 1 pagkatapos 1060/1000 = 1.06% 10 = 1). Kaya't ang mga magkakahiwalay na digit ay nakaimbak sa magkakahiwalay na variable.
int libo = bilang / 1000% 10; int daan = bilang / 100% 10; int ten = number / 10% 10; int unit = numero% 10;
Matapos nito ang isang pahayag ng switch case para sa bawat indibidwal na digit ay tinukoy para sa pag-convert sa kanila sa kani-kanilang format (binary format) at pagpapadala sa pamamagitan ng rehistro ng shift upang ipakita sa 7-segment. Halimbawa (Para sa 1 digit na ito ay binago sa 06 (0000 0110)). Kaya't naipadala ito sa pamamagitan ng paglilipat at ang 1 digit ay ipinapakita sa 7-segment (0 para sa LOW, 1 para sa TAAS).
switch (t) { case 0: unit = 63; pahinga; kaso 1: unit = 06; pahinga; kaso 2: unit = 91; pahinga; kaso 3: unit = 79; pahinga; kaso 4: unit = 102; pahinga; kaso 5: unit = 109; pahinga; kaso 6: unit = 125; kaso 7: unit = 07; pahinga; kaso 8: unit = 127; pahinga; kaso 9: unit = 103; pahinga; }
Pagkatapos ang indibidwal na digit sa binary format ay ipinapadala sa pamamagitan ng pagpapaandar na 'shiftout' na may MSB muna at ang kani-kanilang digit na pin ay ginawang TAAS at ang latch pin ay ginawang TAAS.
digitalWrite (9, LOW); digitalWrite (latchPin, LOW); shiftOut (dataPin, clockPin, MSBFIRST, libo-libo); digitalWrite (latchPin, HIGH); digitalWrite (9, TAAS); antala (5);
Tinatapos nito ang kumpletong code. Karamihan sa paliwanag sa pagpapaandar ay ibinibigay sa seksyon ng komento sa code sa tabi lamang ng linya ng code. Ang dalas ng orasan ang magpapasya sa view ng Oras at kalidad ng multiplexing Ie kung ang mababang orasan ay ginagamit pagkatapos ay makikita ang pagkutitap kung saan parang ang taas ng orasan ay hindi magkakaroon ng tulad pagkutitap at isang matatag na oras ay maaaring makita.
Tandaan na upang mai-access ang module ng RTC, ang boltahe ng bus ng I2C ay dapat mapanatili. Upang makapagbigay ng anumang mungkahi o kung mayroon kang anumang pag-aalinlangan mangyaring magkomento sa ibaba.