Für dieses Forum muß Javascript im Browser aktiviert werden!
Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C2 Quellcode formatieren: <code>Quellcode</code> ASM Quellcode formatieren: <asm>Quellcode</asm> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! > Hallo nitraM! > > > Welche Version von PCF8583 nutzt du??? > > > > > > nitraM > > Die letzte V1.55! > Ich fahre immer nur mit den letzten Updates!!! > Schau Dir mal die init -Funktion an. > Da werden die Uhrenchip-Register 0 und 8 nur initialisiert > wenn der watchdogtimeout ungleich 0 ist. > Also die 1. Variante mit dem thread. > Wenn watchdogtimeout 0 ist, werden die Uhrenchip-Register 0 und 8 weder > von dieser noch von einer anderen Funktion initialisiert! > Da liegt der Hund begraben! > /*************************************/ > /* PCF8583 initialisieren */ > /*************************************/ > function init(byte A0,byte setCC2clock, byte autosync, byte watchdogtimeout, byte enableHostKey) returns byte > // watchdogtimeout = 0 bis 99 (sec.) > {byte reg; > if watchdogtimeout>99 timeout=99; else timeout=watchdogtimeout; > // device=((A0!=0) and 0b10) or 160; > device=Addr[(A0!=0) and 1]; > if i2c.cstart(device) > { > i2c.write(0x00); > i2c.start(device or 1); > reg=i2c.readlast() and 0x05; > i2c.cstop(); > i2c.start(device); > i2c.write(0x00); > i2c.write(0x04 and (watchdogtimeout!=0)); > if watchdogtimeout > { > i2c.cstop(); > i2c.start(device); > i2c.write(0x08); > i2c.write(0x4A); > } > i2c.stop(); > if setCC2clock synccc2(); > if autosync run sync; > enHostKey=enableHostKey!=0; > if timeout run watchdog; > if reg==0x05 return 0x80; //= Reset durch Watchdog verursacht > else return 0xFF; > } > i2c.stop(); > return 0; > } > > Ich glaube jetzt auch eine Möglichkeit gefunden zu haben, warum es bei Dir trotzdem funktioniert: > 1.) Man bekommt einen neuen PCF-Baustein geliefert. Da sind natürlich > alle Register auf 0. > 2.) Da dieser PCF-Baustein eigentlich nur Sinn macht, wenn man ihn mit einer Batterie, GoldCup o.ä. > puffert, bleiben die Registerinhalte auch erhalten. > 3.) Natürlich möchte man ihn testen. Deswegen nimmt man das Testprogramm von Andre Helbig. > > 4.) Wenn man das so wie es ist startet, wird die 1. Variante mit dem thread ausgeführt. > > 5.) Es funktioniert perfekt, da ja bei dieser Variante die Uhrenregister > richtig gesetzt werden! > > 6.) Wenn man jetzt ein eigenes Programm macht, wird das auch in der > Variante 2 ohne thread funktionieren, weil die Uhrenregister durch die Pufferung des RAM > ja richtig gesetzt sind!!! > 7.) Wenn man Glück hat und die gesetzten Uhrenregister nicht ändert, wird man nie einen Fehler bemerken. > > 8.) Der Haken kommt allerdings, wie bei mir, wenn man ein unbenutztes Modul verwendet. > > 9.) Ich musste den Chip in einem Modul tauschen und habe noch 2 neue gehabt. > > 10.) Plötzlich funktionierten meine Watchdogprogramme, alle mit Variante 2 ohne thread programmiert, > mit keinem der neuen Module mehr und ich war am verzweifeln. > 11.) Auch Andre hat den Bug wahrscheinlich beim Erstellen des Testprogrammes nicht bemerkt, da > er auch sicherlich ein gepuffertes RAM verwendet hat! > 12.) Meine bereits gepostete Änderung in der setWDtimeout Funktion hat für mich die Lösung gebracht! > Alle meine Watchdog-Programme funktionieren auf einmal wieder! > > Gruss > GPL >