Electronika
Nixie klok: software
TechTalk
Procedure om de drukknoppen in te lezen (bediening).
-

-

Bediening

Onze klok heeft 3 bedieningstoetsen:
  1. SEL: bij het indrukken van de knop wordt een cijfer geselecteerd voor het instellen van het uur. Bij iedere druk op de knop wordt het volgend getal geselecteerd (tientallen uren --> eenheden uren --> tientallen minuten --> eenheden minuten --> normale toestand). Het cijfer dat geselecteerd is knippert.

    In selectiemodus loopt de klok gewoon door, maar bij overflow bij manueel verhogen wordt het hoger getal niet verhoogd (geen overdracht).

    De seconden kunnen niet gewijzigd worden. Als de alarm rinkelt kan die gestopt worden door een druk op de knop.

  2. +: bij het indrukken van de knop gaat de geselecteerde cijfer één vooruit (de geselecteerde cijfer knippert).

  3. ALARM: instelmodus van de alarm, wordt in- en uitgeschakeld door het indrukken van de knop. In instelmodus alarm zijn de seconden gedoofd, zo zie je het verschil tussen alarminstelling en gewoon uur.

    Het instellen van het alarm gebeurt in alarmmodus: SEL knop om de cijfers te selecteren en + om een cijfer te wijzigen.

    Het alarm wordt aktief of inactief door het drukken van de + knop in alarm modus als er geen cijferselectie aktief is.

    Als het alarm rinkelt kan die stilgezet worden door het drukken van de alarmknop.

Het drukken van de ALARM als de selectie aktief is heeft geen effekt.

Bij het verlaten van de instelmodus ALARM wordt de alarmtijd in de EEPROM opgeslagen.

Omdat de arduino nano die we gebruiken te weinig in- en uitgangen heeft, gebruiken we een analoge ingang om de ingedrukte knop in te lezen. Men gebruikt een spanningsdeler bestaande uit twee weerstanden (één weerstand per drukknop en één belastingsweerstand). Een schakelvoorbeeld is te vinden op de pagina sturing van de verwarming met een arduino.

Om fouten te vermijden wordt een input pas geldig beschouwd als die twee cycli stabiel blijft (minstens 1ms). We gebruiken enkel de opgaande flank, een toets blijvend ingedrukt houden heeft geen effekt.

Er wordt een speciale manier van programmeren gebruikt: de toetsen worden ingelezen en de status aangepast, maar er gebeurt geen directe verwerking. Later in de lus worden de statussen gebruikt voor de verwerking (bijvoorbeeld het tonen van de alarmtijd of gewone tijd). Deze manier van programmeren is zeer efficient omdat er niet constant gereageerd moet worden op events. De events worden gewoon opgeslagen (als statuswijziging).

Aansturing display

De aansturing van de nixie buizen wordt hier besproken. Men heeft 45 cathodes die aangestuurd moeten worden (tientallen uren: 3 + eenheden uren: 10 + tientallen minuten: 6 + eenheden minuten: 10 + tientallen seconden: 6 + eenheden seconden: 10). Met ons zeer beperkt aantal uitgangspoorten heeft men een tweetraps poort expander nodig.
  • De eerste poort expander heeft een geheugenfunktie (latch): de opeenvolgende uitgangen moeten na elkaar geprogrammeerd worden.
    Met 7 digitale processoruitgangen hebben we 24 uitgangen die de cijfers in BCD kode weergeven. Niet alle uitgangen zijn noodzakelijk voor de cijferaanduiding en de extra lijnen kunnen gebruikt worden voor extra indikaties.
  • De tweede poort expander zet 4 uitgangen van de eerste expander (BCD kode) om in een decimale uitgang (sturing van de 10 cathodes).

De arduino uno heeft een real time klok nodig want het kristal is niet voorzien voor een nauwkeurige tijdsaanduiding (gewone processorkristal). De real time klok blijft lopen bij stroomonderbreking of reset.

De software (listing) is hier te vinden.

Publicités - Reklame

-