Nixie Uhr Code

OP #7556732
Lesenswert?

Hallo

Ich habe im Netz eine Anleitung für eine Nixie Uhr gefunden. Die Uhr wird über einen PIC 16F15325 gesteuert.

Diese hat mir gefallen und ich habe diese Uhr nachgebaut. Soweit kein Problem. Die Uhr funktioniert soweit und hat im Code eine 12H Anzeige. Laut dem Entwickler ist das ein 44 bit Code und per Software technisch auf 24H umzustellen. Das wäre dann ein 45 bit Code. Das ist auch in der Hardware vorgesehen.
Leider blicke ich hier nicht durch und bin an meine Grenzen gestoßen.

Ich habe den orig. Code als Datei hier angehängt. Kann mir jemand helfen das Programm auf 24H Format umzuprogramieren ?

Gruß Andreas

Angehängte Dateien:
#7556865
Lesenswert?

Andreas H. schrieb:

Kann mir jemand helfen das Programm auf 24H Format umzuprogramieren ?

Er zahlt mytime bis 43200, das passt noch in ein unsigned int, du willst bis 86400 zählen, dazu muss der Wert long erden

unsigned int myTime = 0; in long ändern.

1
if(myTime >= 43200) muss 86400L werden

SSP1BUF = 0b00001111 & (((bin_hour1<<2)&0b1100) muss wahrscheinlich

SSP1BUF = 0b00011111 & (((bin_hour1<<2)&0b11100) werden wenn die Hardware stimmt.

if(adjustHours >= 12) sollte 24 sein.

#7556880
Lesenswert?

Es ist schon machbar, leider keine Hardware um das zu testen vorhanden:-)

Fang doch mal an mit void sendDataOut(). Hier würde ich in Zeile 426 erstmal anpassen, das 24h zu rechnen sind. In Zeile 443 müsste das dann hours = 24 sein, oder?

445: Ist ein impliziter cast, kann so bleiben schätze ich. Somit müsste dein SSP1BUF eigentlich den korrekten Wert bekommen, oder? Dann sollte das shiften eigentlich korrekt funktionieren. Probier das mal so aus.

Das einstellen der Uhr wäre dann analog noch anzupassen.

Joe

OP #7557019
Lesenswert?

Hallo

@Michael

unsigned int myTime = 0; in long ändern. Habe ich in unsigned int long myTime = 0; geändert. Der Stunden Bereich der eingestellt werden kann wird kleiner.

Habe jetzt auf 3600L geändert leider kein Erfolg. Beim einstellen ab 17 verstellen sich alle Zahlen.

Kurze Frage noch

Kann man hier im Programm noch eine Sache einfügen gegen das Cathode Poisoning ? Das alle Tubes ca nach 2 min alle verfügbaren Ziffern einmal ansteuern und anschließend wieder die Uhrzeit angezeigt wird. (nixie tube slot machine )

Gruß

#7557115
Lesenswert?

Andreas H. schrieb:

Nach 18.12.15 Uhr springt die Uhr auf 00.00.00

aka 65535 Sekunden nach Mitternacht. Also hast Du die 16-bittigkeit wohl noch nicht vollständig eliminiert.

Michael B. schrieb:

du willst bis 86400 zählen, dazu muss der Wert long erden

Wenn Du auf Nummer sicher gehen willst: Deklariere das als "uint32_t" oder "int32_t".

"unsigned int" & Co sind plattformabhängig und auf manchen Controllern für den Zweck unangemessen klein. "long" sollte "eigentlich" auch gehen, aber wenn Du schon weißt, wieviel Bits Du brauchst, dann deklariere das doch auch gleich so und vermeide Überraschungen.

Prost (re)

#7560190
Lesenswert?

Andreas H. schrieb:

Das sollte Zeitabhängig gesteuert werden

Das ist weitgehend alles Unsinn, im FuD des weltweiten Netzes verbreitet.

Die Einerstellen zeigen sowieso alle Ziffern an.

Die Zehnerstellen nutzen 6-9 nicht bzw. 3-9. Man könnte dort diese Ziffern betreiben, um Ablagerungen wieder zu lösen. Aber dazu reicht nicht ein mal kurz aufleuchten lassen, sondern letztlich kumuliert genau so lange wie die anderen Ziffern. So viel Zeit hat man für Fehldarstellung gar nicht. Zudem muss es nicht alle 2 Minuten passieren, sondern es reicht im Jahresverlauf.

Da man es also sowieso nicht perfekt beheben kann, reicht umstecken der Rohren alle halbe Jahr. Dazu sollte man sie sockeln.

"slot machine effect' ist übrigens was völlig anderes, da rollen die Ziffern von oben nach unten durch, geht mit Nixie nicht, nur mit OLED Imitation.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren