Electronika
Nixie klok met recup-onderdelen
TechTalk
Root server » TechTalk » Electronica » Nixie klok
Op de volgende bladzijden zullen we een digitale klok met nixie buizen bouwen. De bedoeling is te werken met recuperatie-componenten.
-

-

De bedoeling is te werken met onderdelen die ik liggen heb. Hoe de schakeling gebouwd wordt hangt dan ook af van welke onderdelen ik bezit:
  • Een aantal nixie buizen: ze liggen aan de basis van deze schakeling. Zonder nixie buizen, geen nixie klok. Er bestaan zoveel verschillende klokken, maar zo'n klok is toch iets speciaals. Ik heb de nixie buizen gehaald uit een oude meetzender die bij de belgische marine gebruikt werd.

  • Een arduino mocrocontroller: in tegenstelling met ontwerpen die je op het net kan vinden is deze klok zeer gemakkelijk in te stellen en heeft een alarm. De arduino kan gewoon opnieuw geprogrammeerd worden als eeen funktie gewijzigd of bijgevoegd moet worden. De controller wordt in C geprogrammeerd, een taal die nog echt aanleunt bij machinetaal en het mogelijk maakt snele en efficuente kode te schrijven.

  • Een schakelende voeding van een DVD speler: de DVD speler is al lang defekt, maar de voeding is nog goed. We hebben de 5V voor de electronica, maar nu moeten we ook nog de hoogspanning zien te realiseren met een voeding die daarvoor niet ontworpen is geweest (en de transfo is ingegoten, waardoor er geen extra wikkelingen gelegd kunnen worden).

  • Ik hen speciaal een setje 74141 driver IC's gekocht op ebay, maar de combinatie van die drivers met de buizen lijkt niet goed te werken. Bepaalde cathodes blijven continu zwakjes oplichten, en als ik de hoogspanning verlaag, dan doven die cathodes wel, maar dan verschijnen er soms geen cijfers. Dan maar werken met een alternatief systeem, namelijk hoogspanningstransistoren.

  • De arduino heeft te weinig uitgangen om de nixie buizen te doen oplichten (er moeten 45 uitgangen aangestuurd worden). Bepaalde lijnen moeten vrij blijven om te kunnen communiceren met een real time klok, zodat de tijd verder loopt bij stroomonderbreking. De weinige uitgangen die we kunnen gebruiken moeten gedemultiplext worden. Er zijn hier verschillende mogelijkheden: een shift register gebruiken of geheugenmodules (latches). Ik heb gekozen voor drie latches.

  • En uiteindelijk werd de arduino klok met nixiebuizen verder uitgebreid met een thermometerfunktie.

De Nixie indicatorbuizen worden hier besproken. Ze hebben een voedingsspanning van 170V nodig om in te schakelen. Iedere buis verbruikt maximaal 3mA en de spanning zakt tot ongeveer 160V als ze branden, ze gedragen zich als een neon-lampje en hebben een voorschakelweerstand nodig.

In tegenstelling met gewone neon-lampjes moeten deze indicatoren met gelijkspanning gevoed worden: het is de cathode die oplicht bij neon-lampjes.

Het idee om een nixie-klok te bouwen is gekomen toen ik een paar buizen uit een oude meetzender van de Marine kon halen. Wat kan je met zulke buizen doen (behalve ze op ebay verkopen als "NOS")? Een ouderwetse klok bouwen, natuurlijk!

In plaats van een kant-en-klaar ontwerp te bouwen (er zijn voldoende schakelingen op het internet te vinden), is het de bedoeling een klok te bouwen met enkel onderdelen die ik liggen heb. Er bestaan heel veel eenvoudige schakelingen die de netfrekwentie gebruiken als referentie, en waarbij de tijd aangegeven wordt door een deling. Natuurlijk gaat het uur verloren als er een spanningsval is. Er is geen processor aanwezig en er kan dus geen alarmtijd ingesteld worden. Het instellen van de tijd gebeurt onnauwkeurig door een toets "snel" en "traag" vooruitlopen.

In de volgende pagina's wordt de volledige schakeling gerealiseerd:


    Eigen arduino "shield"


    BCD naar digitaal omzetters

  • We moeten de hoogspanning uit een oude schakelende voeding van een DVD speler halen. De 5V ligt voor het rapen, maar de hoogspanning moet zelf gemaakt worden. Hier gebruik ik een bekende component uit lang vervlogen tijden (dit past wel goed bij een nixie klok, vind ik), namelijk een tripleur.

  • De nixie buizen moeten aangestuurd worden. Door de hoogspanning die nodig is, is de keuze aan geschikte drivers eerder beperkt. De drivers kunnen evengoed leds aansturen (in een testfase), waarbij de hoogspanning vervangen wordt door de 5V spanning.

  • De signalen van de processor moeten we demultiplexen via een latch. Ook de overgang van TTL naar CMOS en omgekeerd wordt hier besproken.

  • Er zijn alternatieven op de 74141 om de nixie buizen aan te sturen. In plaats van relatief dure driver IC's te kopen had ik beter gewerkt met gewone CMOS IC's, namelijk 4028 (BCD to decimal).

  • Hoe de druktoetsen verwerkt worden komt hier aan bod. We hebben besloten een eenvoudige en intuitieve bediening met slechts drie druktoetsen te gebruiken: de software die de toestand van het systeem bijhoudt maakt dit mogelijk.

  • De arduino uno heeft geen echte klok aan boord: de tijd gaat verloren als de stroom onderbroken wordt of bij reset/upload. Een externe RTC klok heeft een ingebouwde batterij en de tijd blijft permanent lopen.

  • De processor wordt in C geprogrammerd, dit is de moedertaal van een hele reeks talen zoals C++, C#, Javascript en Java. In vergelijking met die modernere talen leunt C nog zeer dicht bij machinetaal, waardoor er efficient geprogrammeerd kan worden. De software van de nixie klok komt hier aan bod.

  • We kunnen nog een temperatuurmeting bijvoegen. We hebben enkel een temperatuurprobe nodig en een module met een op amp die de temperatuur omzet in een spanning tussen 0 en 5V.

  • Met het bijvoegen van de thermometerfunktie wordt de werking van onze nixieklok zo complex dat een handleiding nodig wordt.
Bij een arduino hoort ook een "shield", een interface met de buitenwereld. Hier is het gewoon een printplaatje met de nodige headers, want om de klok te bouwen zal ik twee complete printen nodig hebben.

Links de uitgangslijnen die de klok zullen sturen: er worden 7 lijnen gebruikt. Rechts de voedingsingang. Ik gebruik ook een analoge ingang om de toestand van de drukknoppen in te lezen. De analoge ingangen die voor de RTC (real time klok) nodig zijn, en de ingang voor de temperatuurmeting zijn nog niet in gebruik.

Ik weet niet of dit bij alle arduino uno het geval is, maar de laatste connector is een halve offset verschoven, waardoor de header niet meer vastgezet kon worden op de gaatjesprint.

De BCD naar digitaal omzetters (CD4028BCN) zijn van het verkeerde type want het onderdrukken van het cijfer is niet mogelijk. Wordt er een verkeerde BCD kode doorgestuurd, dan mag normaal geen cijfer oplichten. (Bij deze versie licht een 8 of 9 op). Met een CD4028BE zijn er geen problemen.

Verschil nixie buis en 7 segment display (led)

Een 7 segment display bouwt de verschillende getallen door middel van segmenten die al of niet oplichten. Een combinatie van segmenten toont een bepaalde cijfer. Met de 7 segment displays is het ook mogelijk hexadecimale getallen weer te geven. 7 segment led cijfers kunnen geleverd worden met gemeenschappelijke cathode of anode.

Een nixiebuis heeft evenveel cathodes als er cijfers weergegeven moeten worden, dus in het algemeen 10 cathodes. De anode is gemeenschappelijk.

Een 7 segment display (en een led in het algemeen) kan in multiplex aangestuurd worden, dat wil zeggen dat de segmenten van alle cijfers doorverbonden worden (zodat men in totaal maar 7 stuurlijnen nodig heeft voor de segmenten). Per cijfer komt nog één lijn bij. Dit systeem wordt interessant als er meerdere cijfers aangestuurd moeten worden: een 7 segment display met 6 cijfers heeft genoeg aan 13 stuurlijnen (6 cijfers en 7 segmenten).

We bespreken een schakeling met gemeenschappelijke anodes. Eerst krijgt de eerste cijfer een positieve spanning op zijn anode. De cathodes van de segmenten die moeten oplichten worden met de massa verbonden (indien nodig met een weerstand). De segmenten van andere cijfers lichten niet op, want ze krijgen geen positieve voedingsspanning. Dan krijgt de volgende cijfer spanning en de corresponderende segmenten worden aan massa gelegd, enz.

Als deze omschakeling voldoende snel gebeurt, dan ziet men de opeenvolgende oplichtende cijfers niet, maar ziet men één geheel. Voor een klokdisplay is de multiplexfrekwentie minimaal 200Hz. De piekstroom door iedere segment is hoger dan normaal (60mA), maar de gemiddelde stroom heeft een waarde van bijvoorbeeld 10mA per segment. De leds kunnen deze piekstroom wel verwerken.

Een nixiebuis kan niet gemultiplext worden: de kortstondige hoge stroom die nodig is om de buis voldoende te doen oplichten zou de electrodes snel beschadigen. Per buis die men wilt aansturen heeft men 10 lijnen nodig. Om 6 cijfers weer te geven heeft men dus 60 stuurlijnen nodig (indien alle waarden weergegeven moeten kunnen worden). Het multiplexen gebeurt hier doorgaans op driver-niveau, waarbij de waarde van ieder cijfer in een geheugencel geplaatst wordt.

Er bestaat ook een tussenvorm tussen nixie en led, namelijk de numitron. Het is een 7 segmentendisplay, maar ieder segment wordt door een gloeidraad gerealiseerd. De nodige stroom om een segment te doen oplichten bedraagt 20mA, waardoor er gewone LED drivers gebruikt kunnen worden. Het uitzicht is niet zo mooi en de gloeidraden hebben de neiging om te gaan doorbuigen na verloop van tijd.

De "pips" is het tijdssignaal van de BBC, die lange tijd gebruikt werd om het uur aan te geven. De pips bestaan uit 6 pulsen met een frekwentie van 1kHz, die ieder uur worden uitgezonden om 59:55, 59:56, 59:57, 59:58, 59:59 en 00:00. De 5 eerste pulsen hebben een duur van 100ms, de laatste een tijdsduur van 500ms. Het uur komt overeen met het begin van de 6de puls.

Andere landen gebruikten een gelijkaardig systeem, met soms een ander aantal pulsen, maar het is de BBC die met het systeem begonnen is in 1924.

De BBC World Service bleef de pips lange tijd gebruiken. Tegenwoordig is de tijdsaanduiding niet meer nauwkeurig, omdat het signaal van de BBC digitaal wordt doorgestuurd. Door de digitalisering, foutcorrectie en interleaving loopt het digitaal signaal achter op het echte signaal, waardoor de tijdaanduiding niet meer correct is.

De kode om de pips te genereren:


void pips(int a)  {
  static int b;
  for (b = 0; b < a; b++) {
    digitalWrite(ALARMOUT, b % 2);
    delay(1);
  }
}

if (m == 59 && s > 54 && pp != s)      { pips(100);  pp = s; }
else if (m == 0 && s == 0 && pp != 0)  { pips(500);  pp = 0; }

Publicités - Reklame

-