Urządzenie to jak każdy inny zagar służy do odmierzania czasu, jednak jego niezwykłość przejawia się w zastosowanym wyświetlaczu, którym są cztery lampy Nixie typu LC513. Odmierzaniem czasu zajmuje się układ zegara czasu rzeczywistego PCF8583 a całość sterowana jest za pomocą mikrokontrolera ATMega8. W celu poprawnego odliczania czasu podczas zaniku napięcia zasilającego zastosowano kondensator elektrolityczny o dużej pojemności. Lampy zasilane za pomocą Przetwornicy 9V/150V dzięki czemu nie jest konieczne stosowanie dwóch transformatorów. Zegar taki po wyposażeniu w drewnianą obudowę będzie znakomitą i nietypową ozdobą w każdym domu.
Działanie:
Schemat ideowy sterownika przedstawiony jest na rysunku poniżej:

Sercem układu jest mikrokontroler U1 (ATMega8). Pracuje on na wewnętrznym oscylatorze RC o częstotliwości 8MHz przez co dwa wolne wyprowadzenia zostały wykorzystane do sterowania katod wyświetlacza. Odmierzaniem czasu zajmuje się układ U2 (PCF8583) pracujący z rezonatorem kwarcowym X1 (32,768kHz) i kondensatorem/trymerem C3 (33pF). Jest to popularny i często stosowany układ RTC (real-time clock), zegar czasu rzeczywistego komunikujący się z mikrokontrolerem za pomocą magistrali I2C. Dioda D1 (1N4007) i kondensator C4 (4700uF/5V) stanowią prosty obwód podtrzymania na kilka godzin zasilania dla układu U2 w przypadku zaniku napięcia sieci. Rezystory R17 (3,3k) i R18 (3,3k) podciągają wyprowadzenia mikrokontrolera, stanowiące magistralę I2C, do plusa zasilania. Złącze SW (Goldpin) służy do podłączenia czterech przycisków sterujących pracą zegara. Tranzystor T11 (BC558) wraz z rezystorami R15 (3,3k) i R16 (3,3k) stanowią obwód sterujący brzęczykiem B1, który pełni rolę sygnału budzenia. Złącza GpA (Goldpin) i GpK (Goldpin) zapewniają połączenie między płytką sterownika i płytką wyświetlacza. Złącze Prog oraz rezystory R11 - R14 (330R) tworzą interfejs umożliwiający programowanie mikrokontrolera U1. Do zasilania płytki sterownika służy prosty zasilacz zbudowany w oparciu o stabilizator U3 (7805) i kondensatory C1 (220uF) i C2 (47uF). Tranzystory wysokonapięciowe T1 - T2 (MPSA42) wraz z rezystorami R1 - R10 (33k) sterują pracą katod lamp wyświetlacza.
Na rysunku poniżej przedstawiony jest schemat ideowy wyświetlacza:

Lampy L1 - L4 (LC513) podłączone są tak aby umożliwić ich multipleksowanie. Tranzystory T1 (MPSA92) i T2 (MPSA42) wraz z rezystorami R1 (33k), R2 (470k) i R3 (100k) są odpowiedzialne za dołączanie anody lampy L1 do wysokiego napięcia podczas multipleksowania. Prąd płynący przez L1 ograniczony jest za pomocą rezystora R13 (47k). Pozostałe lampy zasilane są w identyczny sposób za pomocą tranzystorów T3 - T8 i rezystorów R4 - R12. Neonówka stanowiąca punkt oddzielający minuty od godzin jest sterowana tranzystorem T9 (MPSA42). Rezystor R18 (220k) ogranicza jej prąd. Złacza GpA i GpK służą do podłączenia płytek zegara z sobą natomiast złącze HV jest punktem podłączenia przetwornicy podwyższającej zapewniającej wysokie napięcie dla lamp wyświetlacza.
Budowa:
Sterownik zegara można zbudować na płytce drukowanej dostępnej tutaj. Rysunek w odbiciu lustrzanym znajduje się tutaj. Montaż należy rozpocząć od wlutowania dwóch zworek a następnie należy zamontować wszystkie rezystory. Pod mikrokontroler U1 oraz układ RTC U2 dobrze jest wlutować podstawkę. Buzzer B1 należy umieścić po stronie druku, a następnie w tylnej ściance obudowy wykonać niewielki otwór (otwory). Zwiększy to natężenie dźwieku słyszanego z wnętrza obudowy. Zamiast kondensatora C3 dobrze jest zastosować dobrej jakości trymer 4-40pF wlutowany od strony druku. Kondensator Elektrolityczny C4 stanowiący źródło zasilania awaryjnego należy zamontować w pozycji leżącej. Stabilizator U3 po wlutowaniu w pozycji leżącej będzie wystawał poza płytkę. Żeby temu zaradzić można zastosować 78L05 w małej obudowie. Złącza GpA i GpK powinny być złączami szufladkowymi w które zostaną wpięte goldpiny na płytce wyświetlacza. Uwaga!! Na płytce brakuje kondensatora 100nF MKT, należy go wlutować od spodu płytki między nóżkami 4 i 8 układu U2. Pomocą przy konstrukcji może okazać się schemat montażowy dostępny tutaj.
Wyświetlacz można zbudować w oparciu o płytkę drukowaną dostępną tutaj. Rysunek w odbiciu lustrzanym znajduje się tutaj. Lutowanie rozpoczynamy od zamontowania wszystkich zworek a następnie wszystkie małe elementy. Na samym końcu zabieramy się do montażu lamp i neonówki. Pod lampy zamiast podstawek najlepiej jest wykorzystać piny do złącz żeńskich typu BLS (wtyki na goldpiny montowane na kabel, takie jak tutaj) lutując w miejsce kabla pojedyńczy goldpin a następnie całość w płytkę. Na wystający pin można nałożyć kawałek koszulki termokurczliwej jak to widać na fotografiach na dole strony. Pomocą przy konstrukcji może okazać się schemat montażowy dostępny tutaj.
Obudowę do zegara najlepiej zrobić z drewna dębowego. Projekt dostępny jest tutaj. Do wykonania tej konstrukcji potrzebne jest około 70cm listwy o grubośći 8mm i szerokości 8cm. Należy zwrócić uwagę na to aby wspomniana listwa była dobrze wyheblowana i miała jednakową szerokość na całej długości (nie musi być dokładnie 8cm). Ułatwi to klejenie całości i wyeliminuje możliwość powstania szpar. Płytki w obudowie można zamocować za pomocą kleju termotopliwego. Moja obudowa "prototyp" widoczna na zdjęciach nie jest wykonana dokładnie według opisywanego projektu, gdyż on powstał na jej podstawie. Projekt posiada kilka drobnych poprawek :).
Wykaz Elementów:
1x Zlacze Srubowe ARK2(podwójne)
1x Listwa Goldpin 1x2
1x Listwa Goldpin 1x6
1x Listwa Goldpin 1x10
1x Listwa Goldpin 1x5
1x Zlacze Szufladkowe 1x8
1x Zlacze Szufladkowe 1x6
1x Zlacze Szufladkowe 1x10
52x Piny do złącz żeńskich typu BLS (na goldpiny)
4x uSwitch 12x12mm (lub inny przycisk N.O.)
4x 330R
2x 3,3k
15x 33k
4x 47k
4x 100k
1x 220k
4x 470k
1x 33pF
1x 47uF Elektrolit
1x 220uF Elektrolit
1x 4700uF/5V Elektrolit
1x Neonowka
4x Lampa Nixie LC513
1x Rezonator Kwarcowy 32768Hz
1x 1N4007
15x MPSA42
4x MPSA92
1x BC558
1x Stabilizator 7805
1x Mikrokontroler ATMEGA8 + Podstawka
1x Uklad RTC PCF8583
1x Buzzer z Generatorem 5V
Programowanie:
Mikrokontroler do sterownika został zaprogramowany w wersji demo programu BASCOM AVR firmy MCS Electronics (http://www.mcselec.com/). Program przedstawiony jest poniżej:
'************* Konfiguracja uC *****************
'***********************************************
$regfile = "m8def.dat"
$crystal = 8000000 'oscylator RC wewnetrzny
Config Portb = &B11111111 : Portb = &B00000001
Config Portc = &B00000000 : Portc = &B11111111
Config Portd = &B11111111 : Portd = &B00000000
Config Scl = Portc.5
Config Sda = Portc.4
I2cinit
Config Timer0 = Timer , Prescale = 64
Enable Timer0 : On Timer0 Prztimer0
Enable Interrupts
'********** Konfiguracja uC Koniec ************
'****************** Zmienne *******************
'***********************************************
Dim Flaga4ms As Bit , Flaga05s As Bit
Dim Co4ms As Byte , Co05s As Byte
Dim Godziny As Byte , Minuty As Byte , Sekundy As Byte
Dim Godziny_budz As Byte , Minuty_budz As Byte
Dim Godziny_bcd As Byte , Minuty_bcd As Byte , Sekundy_bcd As Byte
Dim Mux As Byte
Dim Stan_katod As Byte
Dim Wartosc_wysw(2) As Byte
Dim Neonowka As Bit
Dim Licznik_sw As Byte , Stan_portu As Byte , Sw_port As Byte
Dim Poz_menu As Byte
Dim Zezwolenie_budz As Bit
Dim Autopowrot_ust(2) As Byte
Dim Temp As Byte
Dim Sygnal_budzenia As Byte
'************* Zmienne Koniec ****************
'************ Warunki Poczatkowe ***************
'***********************************************
Poz_menu = 0
Flaga05s = 1
Readeeprom Temp , 2
If Temp = 100 Then Zezwolenie_budz = 1 Else Zezwolenie_budz = 0
Readeeprom Godziny_budz , 3
Readeeprom Minuty_budz , 4
If Godziny_budz > 23 Then Godziny_budz = 8
If Minuty_budz > 59 Then Minuty_budz = 0
'******* Warunki Poczatkowe Koniec ***********
'************** Petla glowna ******************
'***********************************************
Do
If Flaga4ms = 1 Then
Flaga4ms = 0
Gosub Wyswietl
Gosub Przyciski
End If
If Flaga05s = 1 Then
Flaga05s = 0
Neonowka = Not Neonowka
Select Case Poz_menu
Case 0: ' odczyt czasu z rtc
I2cstart
I2cwbyte 162 'adres zapisu
I2cwbyte 2 'rejestr sekund
I2cstart
I2cwbyte 163 'adres odczytu
I2crbyte Sekundy_bcd , Ack
I2crbyte Minuty_bcd , Ack
I2crbyte Godziny_bcd , Nack
I2cstop
Sekundy = Makedec(sekundy_bcd)
Minuty = Makedec(minuty_bcd)
Godziny = Makedec(godziny_bcd)
Case 1:
Incr Autopowrot_ust(1)
If Autopowrot_ust(1) = 8 Then
Gosub Zapis_rtc
Poz_menu = 0
End If
Case 2:
Incr Autopowrot_ust(2)
If Autopowrot_ust(2) = 8 Then
Writeeeprom Godziny_budz , 3
Writeeeprom Minuty_budz , 4
Poz_menu = 0
End If
End Select
If Sygnal_budzenia > 0 Then
Portb.0 = 0
Decr Sygnal_budzenia
If Sygnal_budzenia = 0 Then Portb.0 = 1
End If
Gosub Budzenie
End If
Loop
End
'************ Petla glowna Koniec **************
'************ Przerwanie timer 0 ***************
'***********************************************
Prztimer0:
'Incr Co4ms
'If Co4ms >= 2 Then
'Co4ms = 0
Set Flaga4ms 'dziala co 2 ms mimo nazwy
Incr Co05s
If Co05s >= 250 Then
Co05s = 0
Set Flaga05s
End If
'End If
Return
'******** Przerwanie timer 0 Koniec ************
'***********************************************
Wyswietl:
Incr Mux
If Mux = 8 Then Mux = 0
Select Case Poz_menu
Case 0: 'pokazuj czas
Portb.1 = Neonowka
Wartosc_wysw(1) = Godziny 'wysw 1 i 2
Wartosc_wysw(2) = Minuty 'wysw 3 i 4
Case 1: 'ustawiaj czas
Portb.1 = 1
Wartosc_wysw(1) = Godziny 'wysw 1 i 2
Wartosc_wysw(2) = Minuty 'wysw 3 i 4
Case 2: 'ustaw budzik
Portb.1 = 0
Wartosc_wysw(1) = Godziny_budz 'wysw 1 i 2
Wartosc_wysw(2) = Minuty_budz 'wysw 3 i 4
End Select
Select Case Mux
Case 0:
Stan_katod = Wartosc_wysw(1) / 10
If Stan_katod = 0 Then Stan_katod = 10
Gosub Ustaw_katody
Set Portb.5
Case 1:
Reset Portb.5
Case 2:
Stan_katod = Wartosc_wysw(1) Mod 10
Gosub Ustaw_katody
Set Portb.4
Case 3:
Reset Portb.4
Case 4:
Stan_katod = Wartosc_wysw(2) / 10
Gosub Ustaw_katody
Set Portb.3
Case 5:
Reset Portb.3
Case 6:
Stan_katod = Wartosc_wysw(2) Mod 10
Gosub Ustaw_katody
Set Portb.2
Case 7:
Reset Portb.2
End Select
Return
'***********************************************
Ustaw_katody:
Select Case Stan_katod
Case 0 :
Portb.6 = 0 : Portb.7 = 0 : Portd = 128
Case 1:
Portb.6 = 0 : Portb.7 = 0 : Portd = 64
Case 2:
Portb.6 = 0 : Portb.7 = 0 : Portd = 32
Case 3:
Portb.6 = 0 : Portb.7 = 1 : Portd = 0
Case 4:
Portb.6 = 1 : Portb.7 = 0 : Portd = 0
Case 5:
Portb.6 = 0 : Portb.7 = 0 : Portd = 16
Case 6:
Portb.6 = 0 : Portb.7 = 0 : Portd = 8
Case 7:
Portb.6 = 0 : Portb.7 = 0 : Portd = 4
Case 8:
Portb.6 = 0 : Portb.7 = 0 : Portd = 2
Case 9:
Portb.6 = 0 : Portb.7 = 0 : Portd = 1
Case 10:
Portb.6 = 0 : Portb.7 = 0 : Portd = 0
End Select
Return
'***********************************************
Przyciski:
Sw_port = Pinc
Sw_port = Sw_port Or &B11110000
If Sw_port <> 255 And Stan_portu = Sw_port Then
Incr Licznik_sw
If Licznik_sw = 80 Then
Licznik_sw = 0
Select Case Stan_portu
Case 247: '-godziny
Select Case Poz_menu
Case 0: 'wylacz budzik
Zezwolenie_budz = 0
Temp = 0
Writeeeprom Temp , 2
Sygnal_budzenia = 2 'sygnal na 0,5s
Case 1:
Decr Godziny
If Godziny = 255 Then Godziny = 23
Case 2:
Decr Godziny_budz
If Godziny_budz = 255 Then Godziny_budz = 23
End Select
Case 251: '+godziny
Select Case Poz_menu
Case 0: 'wchodzi do ustawien czasu
Poz_menu = 1
Case 1:
Incr Godziny
If Godziny = 24 Then Godziny = 0
Case 2:
Incr Godziny_budz
If Godziny_budz = 24 Then Godziny_budz = 0
End Select
Case 253: '-minuty
Select Case Poz_menu
Case 0: 'wlacz budzik
Zezwolenie_budz = 1
Temp = 100
Writeeeprom Temp , 2
Sygnal_budzenia = 3 'sygnal na 1s
Case 1:
Decr Minuty
If Minuty = 255 Then Minuty = 59
Case 2:
Decr Minuty_budz
If Minuty_budz = 255 Then Minuty_budz = 59
End Select
Case 254: '+minuty
Select Case Poz_menu
Case 0: 'wchodzi do ustawien budzika
Poz_menu = 2
Case 1:
Incr Minuty
If Minuty = 60 Then Minuty = 0
Case 2:
Incr Minuty_budz
If Minuty_budz = 60 Then Minuty_budz = 0
End Select
'Case 252:
End Select
Autopowrot_ust(1) = 0
Autopowrot_ust(2) = 0
End If
Else
Stan_portu = Sw_port
Licznik_sw = 60
End If
Return
'***********************************************
Zapis_rtc:
Godziny_bcd = Makebcd(godziny)
Minuty_bcd = Makebcd(minuty)
Sekundy_bcd = 0
I2cstart
I2cwbyte 162
I2cwbyte 0 'rejestr kontrolny
I2cwbyte 8 'ustawienie rejestru zapisu daty
I2cstop
I2cstart
I2cwbyte 162
I2cwbyte 2
I2cwbyte Sekundy_bcd
I2cwbyte Minuty_bcd
I2cwbyte Godziny_bcd
I2cstop
Return
'***********************************************
Budzenie:
If Zezwolenie_budz = 1 Then
If Godziny = Godziny_budz And Minuty = Minuty_budz Then
Portb.0 = Neonowka
Else
If Sygnal_budzenia = 0 Then Portb.0 = 1
End If
End If
Return
'***********************************************
Zdjęcia Projektu:







| Załącznik | Rozmiar |
|---|---|
| Sterownik Schemat | 101.8 KB |
| Wyświetlacz Schemat | 41.45 KB |
| Sterownik Płytka | 17.31 KB |
| Sterownik Płytka (odbicie lustrzane) | 17.46 KB |
| Sterownik Płytka (3 na stronie) | 48.04 KB |
| Sterownik Montowanie | 23.51 KB |
| Wyświetlacz Płytka | 18.06 KB |
| Wyświetlacz Płytka (odbicie lustrzane) | 18.12 KB |
| Wyświetlacz Płytka (3 na stronie) | 49.29 KB |
| Wyświetlacz Montowanie | 22.59 KB |
| Kod Źródłowy | 9.28 KB |
| Program po kompilacji (BIN) | 2.21 KB |
| Program po kompilacji (HEX) | 6.23 KB |
| Obudowa (Projekt) | 47.84 KB |
| Obudowa (Maska do wiercenia otworów) | 24.47 KB |


Zegar NIXIE
Witam serdecznie!
Mam mały problem z zegarem Pana projektu. Po uruchomieniu niby wszystko OK, odmierza czas itd ale .....
Wszystkie cyfry migają, czyżby częstotliwość multipleksowania zbyt niska?
Wsad do procka również oryginalny z Pańskiej strony.
Pozdrawiam
Tomek
Zegar Nixie
Witam
Dziękuje za zainteresowanie projektem. Błędnie ustawionymi fusebitami a dokładnie chodzi o CKDIV który ma być wyłączony. Bit ten odpowiedzialny jest za dzielenie częstotliwości zegara przez 8 lub 16 zależnie od typu mikrokontrolera. Jeżeli do programowania użył pan BASCOMA to proszę sprawdzić czy na zakładce "LOCK and FUSE BITS" jest ustawiona opcja "Divide clock by 8 disabled" co gwarantuje że procesor będzie działał z wewnętrznym kwarcem 8MHz a nie 1MHz
Wrazie dalszych problemów proszę pytać. Zegar u mnie działa więc jego kopia też musi :)
zegar NIXIE
Wszystko w porządku, działa. Faktycznie, źle ustawione fuse bity. Serdeczne dzięki.
ustawienie bitów sterujących
Witam!
Jakie powinno być prawidłowe ustawienie bitów sterujących dla zegara. Odpisując na pytanie Tomka odpisał Pan:
Błędnie ustawionymi fusebitami a dokładnie chodzi o CKDIV który ma być wyłączony. Bit ten odpowiedzialny jest za dzielenie częstotliwości zegara przez 8 lub 16 zależnie od typu mikrokontrolera. Jeżeli do programowania użył pan BASCOMA to proszę sprawdzić czy na zakładce "LOCK and FUSE BITS" jest ustawiona opcja "Divide clock by 8 disabled" co gwarantuje że procesor będzie działał z wewnętrznym kwarcem 8MHz a nie 1MHz.
W Baskomie 1.11.8 nie potrafię znaleźć w zakładce "LOCK and FUSE BITS" opcji ustawienia CKDIV ani opcji "Divide clock by 8 disabled" (nie ma?). Programowałem Atmega8 przez STK200 z opcją Int. RC Osc. 8MHz, Start-up time: 6CK+64ms, (CKSEL=0100 SUT=10) - (weryfikacja przeszła) zegar migocze, widać przebłyski innych cyfr więc jest coś nie tak?.
Pozdrawiam Edward.
Zegar
poprawna wartość jest właśnie taka: Wewnętrzny oscylator RC 8MHz, proszę jeszcze ustawić bit CKOPT = 1 (niezaprogramowany). Faktycznie w ATMEGA8 nie ma dzielnika. Mój opis dotyczył bardziej ogólnych problemów z fusebitami.
Proszę sprawdzić czy zasilanie lamp nie jest za niskie i czy płynie odpowiedni prąd określony w karcie katalogowej lampy. Może się to objawiać tym że cyfra nie świeci w całości lub migają jej części a nie cała. Jeśli wszystkie wyświetlacze migają równomiernie to znaczy że jednak fusebity nie są dobrze ustawione i jest za mała częstotliwość. U mnie też zdarzało się że był lekki cień poprzedniej cyfry na następnym wyświetlaczu ale trzeba było się dobrze przyglądać wnętrzu lampy. Jeżeli lampy są w podstawkach albo stykach podobnych do tych w moim projekcie to należy dobrze docisnąć lampy aby był pewny styk z płytką. W razie dalszych problemow służę pomocą
zasilanie nixie
Witam!
Bit CKOPT był fabrycznie ustawiony na 1. Migotanie było związane z zasilaniem lamp Nixie - poszedłem na łatwiznę i wykorzystałem zasilacz z jakiegoś miernika na nixie. Transformator prostownik bez kondensatora filtrującego napięcie (przy statycznym wyświetlaniu tętnienia nie przeszkadzały), po dołożeniu kondensatora napięcie było za wysokie. Po zrobieniu przetwornicy migotanie znikneło, są natomiast krótkie mrugnięcia cyfr, co ok. 1 sek. mruga któraś z lamp.Przy trzech świecących lampa mrugają jedna po drugiej, przy czterech w innej kolejności. Mrugnięcia lepiej widać przy wyłączonej neonówce.
Pozdrawiam Edward
Mruganie
Mruganie takie też zauważylem w moim zegarze. Dlatego zmieniłem potem trochę program i teraz jest już mało co zauważalne (ten co jest na stronie jest ulepszony). Podzieliłem multipleksowanie na 8 części żeby pozbyć się prześwietleń cyfry poprzedniej na następnym wyświetlaczu. Jedyną przyczyną jaka mi do głowy przychodzi to że miganie co ok 0.5s lub wielokrotność może być spowodowane odczytem z układu RTC.
Faktycznie jest mało
Faktycznie jest mało zauważalne, sam narazie nie jestem w stanie nic zmienić w programie . Będę zaglądał na stronę co jakiś czas, może powstanie nowsza wersja oprogramowania. Dziękuję za odpowiedzi i za prowadzenie ciekawej strony z ciekawymi projektami i co naważniejsze z pełnymi opisami projektów.
Pozdrawiam Edward.
Ja bym ci radził
Ja bym ci radził zastosować podtrzymanie bateryjne niż ten wielki elektrolit...Sprawdzałeś ile będzie działać PCF po zaniku napięcia?
Elektrolit
Będzie działał kilka godzin nawet. Został zastosowany eksperymentalne a nie jako super rozwiązanie techniczne :)
lampy
czy przy zastosowaniu LAMPY NIXIE LC516 będzie trzeba robić jakieś zmiany w programie czy w zasilaniu ?
Lampa LC-516 ma inne
Lampa LC-516 ma inne wyprowadzenia, obudowę, napięcie zasilania i prąd anody. Porownaj opisy tych lamp na stronie http://www.tube-tester.com/sites/nixie/trade03-nixie-tubes.htm
Będzie działało z elektroniką z mojego zegara ale wymaga to prawdopodobnie zrobienie nowej płytki wyświetlacza albo chociaż inne podłączenie wyprowadzeń