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
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?
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
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.
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
Michael B. schrieb: > SSP1BUF = 0b00001111 & (((bin_hour1<<2)&0b1100) muss wahrscheinlich > > SSP1BUF = 0b00011111 & (((bin_hour1<<2)&0b11100) werden wenn die > Hardware stimmt. Korrekt.
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ß
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
Andreas H. schrieb: > Also bei 17 Uhr drücken kommt dann 24.14.09 Uhr raus. Mach da (adjustHours*3600); mal (adjustHours*3600L); draus.
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ß
Hallo So habe die Uhr mal laufen lassen. Nach 18.12.15 Uhr springt die Uhr auf 00.00.00
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)
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ß
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ß
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.
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.