Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: Watchdog Kategorie: Programmierung (von nitraM - 29.09.2009 7:46)
Als Antwort auf Re: Watchdog von GPL - 28.09.2009 22:01
Ich nutze:
eigenes Board, OSOPT V3.0, OSOPT V3.1
> Hallo Drickes,
>
> > pcf8583.init(1,1,1,0,1);          // Init ohne Auomatik...
> > pcf8583.setWDtimeoutt(20); // WD-Time auf 2sec einstellen
> > loop
> > {
> >   pcf8583.resetWD();           // WD im Programm regelmäÃ?ig zurücksetzen...
>
> Auch meine Programmierexperimente mit dem Watchdog in der obenangeführten Form
> (ohne den Watchdog-Thread) haben leider nie zu einem Erfolg geführt.
> Ich stelle daher die Behauptung auf, dass der Fehler in dem Modul pcf8583.c2 in der
> letzten Version 1.55
> /* Version   : 1.55                                               */
> /* Datum     : 19. Juli 2003                                      */
> /* Geändert  : 15. Oktober 2007  
> liegen muss.
>
> Auch das Testprogramm rtctest.c2 funktioniert in dieser Konfiguration nicht!
> /******************************************************************/
> /* Test/Beispielprogramm für pcf8583.c2                           */
> /*                                                                */
> /* Autor     : André Helbig (www.cc2net.de)                       */
> /* Benötigt  : ports.c2, hwcom.c2, pcf8583.c2, plm.c2, str.c2     */
> /* Ausgabe über hwcom 57.600 Baud                                 */
> /* (Teminal-Programm erforderlich, z.B. Hyperterminal)            */
> /******************************************************************/
>
> So jetzt habe ich mir mal die entscheidende Funktion im pcf8583.c2 :                          
> /** Watchdog Timeout ********************************************/
> function setWDtimeout(byte watchdogtimeout)
> {
>  if watchdogtimeout<=99 timeout=watchdogtimeout;
>     else timeout=99;
> }
> genauer angesehen. Die tut eigentlich nicht viel. Vor allem setzt sie nicht die Uhrenregister!!!

Da hast du zum Teil Recht, die Funktion begrenzt nur den Wertebereich des Timeout
auf 0-99, mehr soll und braucht sie auch nicht zu tun...
Die maximale Zeit wird in der Variablen timeout gespeichert, auf die die Funktion "resetWD()"
zurückgreift...

 

>
> Hier meine neue Version:
> /** Watchdog Timeout ********************************************/
> function setWDtimeout(byte watchdogtimeout)
> {
>  if watchdogtimeout<=99 timeout=watchdogtimeout;
>     else timeout=99;
>    
>     /* neu */
>    i2c.start(device);
>    i2c.write(0x00);
>    i2c.write(0x04 and timeout);
>    i2c.cstop();
>    i2c.start(device);
>    i2c.write(0x08);
>    i2c.write(0x4A);
>    i2c.stop();
>     /* neu bis hierher */
> }
> Und siehe da alle meine Testprogramme funktionieren! Aber leider nicht perfekt!
> Bei pcf8583.setWDtimeoutt(xx);  funktionieren leider nicht alle Werte für xx!
> Bitte überprüft das mal und wenn wir es hinbekommen, dann werden wir Andre um ein offizielles Update bitten!

Ein Update wird es wohl nicht geben, da das Modul funktioniert, solange man es richtig benutzt... :-)


nitraM


    Antwort schreiben


Antworten: