Arduino Nixie Uhr

Wieso das switch/case? Das ist völlig überflüssig. Du kannst die Bits an einfach dahin Schieben wo du sie brauchst, wenn das niederwertigste Bit der Zahl nicht gleich dem niederwertigsten Bit des I/O Ports ist

z.B. mit 9:
0000 1001 << 2 = 0010 0100 (0x24)

6:
0000 0110 << 2 = 0001 1000 (0x18)

Serenifly: Wieso das switch/case? Das ist völlig überflüssig. Du kannst die Bits an einfach dahin Schieben wo du sie brauchst, wenn das niederwertigste Bit der Zahl nicht gleich dem niederwertigsten Bit des I/O Ports ist ...

Ich find's sehr übersichtlich und nachvollziehbar. Hierzugegend: Schee!

Gruß

Gregor

guten morgen freunde.

also ich fange erstmal damit an das ich mich von dem gedanken multiplexing vorerst trenne und den einfacheren weg zum lernen gehe und mich dazu auch auf 4 röhren und 4 chips beschränke was dann nur 12 pins erfordert zur steuerung.
ich sehe ein das der gedanke des multiplexing´s etwas zu hoch gesteckt für mich ist.

also das mit den bits schieben habe ich noch nicht wirklich verstanden wie das ablaufen soll…
ich nehme an das ist das was uwe meinte mit bitmanipulation oder?

mfg

ich nehme an das ist das was uwe meinte mit bitmanipulation oder?

Nicht nur. Es gibt funktionen einzelne Bits zu setzen oder löschen. Bits and Bytes in https://www.arduino.cc/en/Reference/HomePage (rechte Kolonne mitte)

Grüße Uwe

phillert:
also das mit den bits schieben habe ich noch nicht wirklich verstanden wie das ablaufen soll…

<< N schiebt einfach die Bits N mal nach links

0001 << 1 = 0010
0001 << 2 = 0100

Auch wenn du Schieberegister verwendest (wodurch du auch 6 Röhren auf dem UNO schaffst) brauchst du das evtl. um zwei Ziffern als BCD zu kodieren. Das hatte ich anfangs schon mal gezeigt:

... = (zehner << 4) | einer;

4 mal nach links schiebt das untere Halb-Byte in das obere

Zehner: 0000 1001
Einer: 0000 0010

Wird so zu: 1001 0010

Wenn du das nicht im Kopf visualisieren kannst nimm Papier zur Hand. Der Windows-Taschenrechner im Programmiermodus kann auch Schieben (Lsh, Rsh). Wobei die alte Version vor Windows 10 dafür besser ist.

Hallo leute so habe die uhr in der tat zum laufen bekommen aber etwas anders als ihr es vorgeschlagen habt.

ich bin bei switch case geblieben und habe die uhrzeit aufgeteilt

siehe:

                     //start der RTC
      stunden_zehner = tm.Hour / 10;                          //aufteilung der Stunden erste zahl
      stunden_einer = tm.Hour - stunden_zehner *10;           //aufteilung der Stunden zweite zahl
      
        minuten_zehner = tm.Minute / 10;                        //aufteilung der Minuten erste zahl
        minuten_einer = tm.Minute - minuten_zehner * 10;        //aufteilung der Minuten zweite zahl
        
          sekunden_zehner = tm.Second / 10;                       //aufteilung der Sekunden erste zahl
          sekunden_einer = tm.Second - sekunden_zehner * 10;      //aufteilung der Sekunden zweite zahl

danach bin ich dazu über gegangen diese werte auf 4 nixies zu übertragen was die sekunden ersteinmal nicht mit einbezieht

siehe:

    ausgabe_stunden_zehner(stunden_zehner);    //Ausgabe der zehner 1 Nixie
    ausgabe_stunden_einer(stunden_einer);     //Ausgabe der einer 2 Nixie
    
      ausgabe_minuten_zehner(minuten_zehner);    //Ausgabe der zehner 3 Nixie
      ausgabe_minuten_einer(minuten_einer);     //Ausgabe der einer 4 Nixie
    
        //ausgabe_sekunden(sekunden_zehner);  //Ausgabe der zehner 5 Nixie
        //ausgabe_sekunden(sekunden_einer);   //ausgabe der einer 6 Nixie

ich gebe zu das diese lösung doch recht aufwendig ist und ich für alle 4 (bzw 6) ausgabefälle jetzt natürlich einen switch case verfahren habe was die sache natürlich sehr schnell unübersichtlich macht aber ich habe es erstmal geschafft das die uhr "läuft"

jetzt hatte ich dazu noch das problerm das die Nixies mir immer 2 ziffern gleichzeitig gezeigt hat, meine lösung dazu ist das ich die steuerpins mit einem 2K wiederstand auf GND ziehe und somit war das auch behoben.

ich habe gerade allerdings noch das problem mit dem switch case in so weit das ich mich irgendwo verhaspelt habe und noch den fehler suche warum die uhr nicht schaltet ich nutze für die :

stunden zehner D 0-3

stunden einer D 4-7

minuten zehner D 8-11

minuten einer A 0-3

und für die rtc natürlich A4 und A5

Bist Du sicher daß Du pin D0 und D1 verwenden willst und nicht D12 und D13? So verbaust Du Dir die serielle Schnittstelle.