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
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!
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?
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 :