Forum: PC-Programmierung Nixie Uhr Code


von Andreas H. (cabrioman)


Angehängte Dateien:

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

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

Andreas H. schrieb:
> 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.

Was sagt denn der Entwickler dazu?

von Andreas H. (cabrioman)


Lesenswert?

Hallo

Leider hat er nicht auf meine Mails geantwortet.

Gruß
Andreas

von Joe J. (j_955)


Lesenswert?

Ich habe von C++ Entwicklern gehört, die so ein Problem in einer Zeile 
lösen.
;-)

Hast du auch einen Link zum Projekt?
joe

: Bearbeitet durch User
von Andreas H. (cabrioman)


Lesenswert?


von Michael B. (laberkopp)


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.

    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.

von Joe J. (j_955)


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

von Joe J. (j_955)


Lesenswert?

Michael B. schrieb:
> SSP1BUF = 0b00001111 & (((bin_hour1<<2)&0b1100)  muss wahrscheinlich
>
> SSP1BUF = 0b00011111 & (((bin_hour1<<2)&0b11100) werden wenn die
> Hardware stimmt.

Korrekt.

von Andreas H. (cabrioman)


Lesenswert?

Hallo

So habe die Sachen umgesetzt.

Wenn ich jetzt die Uhr stellen will kommt nach 17H direkt 24H.
Wenn ich den Einsteller drücke passiert ab 17 Uhr das auch die min und 
sek sich mit verstellen.

Also bei 17 Uhr drücken kommt dann 24.14.09 Uhr raus.

Gruß

von Joe J. (j_955)


Lesenswert?

Lass die Uhr mal laufen. Guck morgen nochmal drauf, wenn die 12h rum 
sind...Dann weißt du ob wenigstens die Berechnung und die Shifterei 
stimmen.

Vielleicht guckt nochmal jemand drauf, wegen der Stellerei.

: Bearbeitet durch User
von Michael B. (laberkopp)


Lesenswert?

Andreas H. schrieb:
> Also bei 17 Uhr drücken kommt dann 24.14.09 Uhr raus.

Mach da

(adjustHours*3600);

mal

(adjustHours*3600L);

draus.

von Andreas H. (cabrioman)


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ß

von Andreas H. (cabrioman)


Lesenswert?

Hallo


So habe die Uhr mal laufen lassen.

Nach 18.12.15 Uhr springt die Uhr auf 00.00.00

von Re (r42)


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)

von Andreas H. (cabrioman)


Lesenswert?

Hallo

Der unsigned int long myTime = 0 ist wohl ein Fehler.

Ich hatte das auf long unsigned int myTime = 0; und die Uhr 
funktioniert.

Vielen Dank an alle die mir geholfen haben

Gruß

von Joe J. (j_955)


Lesenswert?

Super, viel Spaß damit! Häng bei Gelegenheit doch mal ein Foto hier 
rein.
joe

von Andreas H. (cabrioman)


Lesenswert?

Hallo

Danke werde ich machen wenn die fertig ist.

Die Frage die ich noch habe ist halt ob man diesen "slot machine effect" 
hier auch noch implementieren kann oder ob der PIC und die Hardware das 
nicht hergibt ?

Gruß

von Peter D. (peda)


Lesenswert?

Andreas H. schrieb:
> Die Frage die ich noch habe ist halt ob man diesen "slot machine effect"
> hier auch noch implementieren kann

Beschreib mal, wie sowas aussehen soll.

Der PIC dürfte nicht das Problem dabei sein.

von Andreas H. (cabrioman)


Lesenswert?

Hallo Peter

Also es werden alle 6 Tubes gleichzeitig angesteuert und zählen dann 
alle Ziffern von 0-9 durch.
Anschließend wird wieder die Uhrzeit angezeigt.

Gruß
Andreas

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

Andreas H. schrieb:
> es werden alle 6 Tubes gleichzeitig angesteuert und zählen dann
> alle Ziffern von 0-9 durch.
> Anschließend wird wieder die Uhrzeit angezeigt.

wann und wie oft soll das passieren? einmalig, regelmäßig, zu welchem 
Anlass?

: Bearbeitet durch User
von Andreas H. (cabrioman)


Lesenswert?

Hallo

Das sollte Zeitabhängig gesteuert werden. ca. alle 2 min

Gruß

von Michael B. (laberkopp)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.