Zegar Nixie

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łącznikRozmiar
Sterownik Schemat101.8 KB
Wyświetlacz Schemat41.45 KB
Sterownik Płytka17.31 KB
Sterownik Płytka (odbicie lustrzane)17.46 KB
Sterownik Płytka (3 na stronie)48.04 KB
Sterownik Montowanie23.51 KB
Wyświetlacz Płytka18.06 KB
Wyświetlacz Płytka (odbicie lustrzane)18.12 KB
Wyświetlacz Płytka (3 na stronie)49.29 KB
Wyświetlacz Montowanie22.59 KB
Kod Źródłowy9.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

portret użytkownika mirley

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

portret użytkownika mirley

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

portret użytkownika mirley

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

portret użytkownika mirley

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

portret użytkownika mirley

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ń

Powered by Drupal - Design by artinet