This shows you the differences between two versions of the page.
pm:prj2023:vstoica:nixieclock [2023/05/03 10:43] cosmin_mihai.dan [Download] |
pm:prj2023:vstoica:nixieclock [2023/05/04 18:02] (current) cosmin_mihai.dan [Ceas cu tuburi Nixie] |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Ceas cu tuburi Nixie ====== | ====== Ceas cu tuburi Nixie ====== | ||
+ | |||
+ | Nume: Dan Cosmin-Mihai | ||
+ | |||
+ | Grupa: 332CA | ||
===== Introducere ===== | ===== Introducere ===== | ||
Line 18: | Line 22: | ||
Piese necesare: | Piese necesare: | ||
- | • 4 x tub Nixie IN12b | + | * |
- | • 4 x driver pentru tuburi Nixie K155ID1 | + | * 4 x tub Nixie IN12b |
- | • 2 x shift register 74HC595 | + | * 4 x driver pentru tuburi Nixie K155ID1 |
- | • 4 x headere cu 11 pini | + | * 2 x shift register 74HC595 |
- | • 4 x cablu panglica cu 11 pini, mufat | + | * 4 x headere cu 11 pini |
- | • 6 x soclu DIP-16 | + | * 4 x cablu panglica cu 11 pini, mufat |
- | • 2 x lampi neon | + | * 6 x soclu DIP-16 |
- | • 1 x LM7805 | + | * 2 x lampi neon |
- | • 2 x condensator 100uF, 20V | + | * 1 x LM7805 |
- | • 1 x mufa DC mama | + | * 2 x condensator 100uF, 20V |
- | • 1 x mufa DC tata | + | * 1 x mufa DC mama |
- | • 3 x butoan cu led | + | * 1 x mufa DC tata |
- | • 7 x header cu 2 pini | + | * 3 x butoan cu led |
- | • 4 x cablu cu 2 pini, mufat | + | * 7 x header cu 2 pini |
- | • 1 x modul RTC DS3231 | + | * 4 x cablu cu 2 pini, mufat |
- | • 4 x rezistor 86k | + | * 1 x modul RTC DS3231 |
- | • 2 x rezistor 220 | + | * 4 x rezistor 86k |
- | • 1 x rezistor 100 | + | * 2 x rezistor 220 |
- | • 3 x rezistor 10k | + | * 1 x rezistor 100 |
- | • 2 x header de pini mama | + | * 3 x rezistor 10k |
- | • 1 x placa prototipare 15x9 cm | + | * 2 x header de pini mama |
- | • 1 x toggle switch | + | * 1 x placa prototipare 15x9 cm |
+ | * 1 x toggle switch | ||
{{cosmin_dan_nixie_clock_electrical.png?666x400}} | {{cosmin_dan_nixie_clock_electrical.png?666x400}} | ||
Unul dintre obiectivele principale ale acestui design este longevitatea tuburilor Nixie, motiv pentru care acestea sunt alimentate la un curent mai mic (1.5 mA) decat cel recomandat in datasheet (2.5 mA). | Unul dintre obiectivele principale ale acestui design este longevitatea tuburilor Nixie, motiv pentru care acestea sunt alimentate la un curent mai mic (1.5 mA) decat cel recomandat in datasheet (2.5 mA). | ||
+ | |||
Carcasa a fost realizata din placi de acrilic si este formata din doua cutii: una pentru circuitul principal, ce are pe lateral butoane, mufa de alimentare si una pentru tuburi, ce este prinsa de prima cutie cu niste balamale, astfel incat sa poata fi ajustat unghiul la care sunt indreptate tuburile, similar unui ecran de laptop. | Carcasa a fost realizata din placi de acrilic si este formata din doua cutii: una pentru circuitul principal, ce are pe lateral butoane, mufa de alimentare si una pentru tuburi, ce este prinsa de prima cutie cu niste balamale, astfel incat sa poata fi ajustat unghiul la care sunt indreptate tuburile, similar unui ecran de laptop. | ||
Line 61: | Line 68: | ||
Modulul RTC comunica prin intermediul I2C, folosind functii din biblioteca Wire si DS3231. Codul care initializeaza modulul este: | Modulul RTC comunica prin intermediul I2C, folosind functii din biblioteca Wire si DS3231. Codul care initializeaza modulul este: | ||
- | <code> | + | <code C> |
Wire.begin(); | Wire.begin(); | ||
DS3231_init(DS3231_CONTROL_INTCN); | DS3231_init(DS3231_CONTROL_INTCN); | ||
Line 74: | Line 81: | ||
Trimiterea datelor la shift registere este realizata de urmatoarea functie: | Trimiterea datelor la shift registere este realizata de urmatoarea functie: | ||
- | <code> | + | <code C> |
void display_time() { | void display_time() { | ||
uint16_t time = 0; | uint16_t time = 0; | ||
Line 103: | Line 110: | ||
Inputul de la cele trei butoane este trecut printr-un debouncer, dupa care este executata functia corespunzatoare fiecaruia ( verde – ora++, albastru – minute++, rosu – mod display/ standby). De exemplu, pentru butonul verde, codul este urmatorul: | Inputul de la cele trei butoane este trecut printr-un debouncer, dupa care este executata functia corespunzatoare fiecaruia ( verde – ora++, albastru – minute++, rosu – mod display/ standby). De exemplu, pentru butonul verde, codul este urmatorul: | ||
- | <code> | + | <code C> |
current_time = millis(); | current_time = millis(); | ||
if (current_time - last_pressed_blue > debounce_threshold) { | if (current_time - last_pressed_blue > debounce_threshold) { | ||
Line 117: | Line 124: | ||
Pentru o mai buna interactiune cu utilizatorul, fiecare buton are un led in forma de inel ce se va aprinde cand este apasat si se va stinge cu un o intarziere de 500ms fata de momentul cand butonul este eliberat. Codul pentru led-ul butonului verde: | Pentru o mai buna interactiune cu utilizatorul, fiecare buton are un led in forma de inel ce se va aprinde cand este apasat si se va stinge cu un o intarziere de 500ms fata de momentul cand butonul este eliberat. Codul pentru led-ul butonului verde: | ||
- | <code> | + | <code C> |
if (green_led && current_time - last_pressed_green > led_delay && digitalRead(green_button) == LOW) { | if (green_led && current_time - last_pressed_green > led_delay && digitalRead(green_button) == LOW) { | ||
green_led = 0; | green_led = 0; | ||
Line 130: | Line 137: | ||
O a doua metoda prin care se asigura longevitatea tuburilor Nixie este modul de standby. Dupa o perioada de timp configurabila (implicit, 600s), sursa tuburilor Nixie se va opri automat. Pentru a masura aceasta perioada e timp, timer1 este configurat astfel incat sa genereze o intrerupere la fiecare secunda: | O a doua metoda prin care se asigura longevitatea tuburilor Nixie este modul de standby. Dupa o perioada de timp configurabila (implicit, 600s), sursa tuburilor Nixie se va opri automat. Pentru a masura aceasta perioada e timp, timer1 este configurat astfel incat sa genereze o intrerupere la fiecare secunda: | ||
- | <code> | + | <code C> |
TCCR1A = 0; | TCCR1A = 0; | ||
TCCR1B = 0; | TCCR1B = 0; | ||
Line 148: | Line 155: | ||
In bucla principala este verificata valoarea contorului on_time la fiecare iteratie, iar atunci cand a trecut perioada setata, sursa se va opri: | In bucla principala este verificata valoarea contorului on_time la fiecare iteratie, iar atunci cand a trecut perioada setata, sursa se va opri: | ||
- | <code> | + | <code C> |
if (on_time > display_on_time && !hv_enable) { | if (on_time > display_on_time && !hv_enable) { | ||
hv_enable = HIGH; | hv_enable = HIGH; | ||
Line 164: | Line 171: | ||
Avand in vedere ca ora este retinuta de catre modulul RTC, in momentu in care sursa tuburilor este oprita, microcontrollerul nu mai este necesar, motiv pentru care ar fi mult mai eficient sa fie pus in modul sleep cu ajutorul functiilor din bibliotecile avr/sleep si avr/power. | Avand in vedere ca ora este retinuta de catre modulul RTC, in momentu in care sursa tuburilor este oprita, microcontrollerul nu mai este necesar, motiv pentru care ar fi mult mai eficient sa fie pus in modul sleep cu ajutorul functiilor din bibliotecile avr/sleep si avr/power. | ||
- | <code> | + | <code C> |
void goToSleep() { | void goToSleep() { | ||
digitalWrite(red_button_led, LOW); | digitalWrite(red_button_led, LOW); | ||
Line 179: | Line 186: | ||
Microcontroller-ul executa codul pana la apelul functiei sleep_cpu(), unde intra in modul sleep si asteapta o intrerupere pentru a se trezi, dupa care reia executia codului. Pentru a folosi butonul rosu drept sursa pentru intrerupere externa, se activeaza PCINT19 (butonul rosu este legat la pinul PD3): | Microcontroller-ul executa codul pana la apelul functiei sleep_cpu(), unde intra in modul sleep si asteapta o intrerupere pentru a se trezi, dupa care reia executia codului. Pentru a folosi butonul rosu drept sursa pentru intrerupere externa, se activeaza PCINT19 (butonul rosu este legat la pinul PD3): | ||
- | <code> | + | <code C> |
PCICR |= B00000100; | PCICR |= B00000100; | ||
PCMSK2 |= B00001000; | PCMSK2 |= B00001000; | ||
Line 203: | Line 210: | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
- | <note> | + | - Datasheet tuburi Nixie IN12B: http://www.tube-tester.com/sites/nixie/dat_arch/IN-12A_IN-12B_03.pdf |
- | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | - Datasheet drivere tuburi K155ID1: https://eandc.ru/pdf/mikroskhema/k155id1.pdf |
- | </note> | + | - Datasheet shift register SN74HC595: https://www.ti.com/lit/ds/symlink/sn74hc595.pdf |
+ | - Datasheet ATmega328P: https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf | ||
<html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | ||
- | |||