Pages: [1]   Go Down
Author Topic: Programmierfehler besser erkennen ? oder eine Frage des Programmierstils  (Read 795 times)
0 Members and 1 Guest are viewing this topic.
Deutschland, Ruhrpott
Offline Offline
Jr. Member
**
Karma: 1
Posts: 78
Arduino rocks Amiga rocks RC Truck rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,
ich hatte ein bischen Problemme mit der if Schleife. Der Wert wurde nicht immer Richtig ausgewertet.Hardware ist ein S65 Shield mit RTCund Arduino board.

Diese if Auswertung macht Probleme die wurde nicht immer ausgewertet bzw. übersprungen. Obwohl der Sekunden Wert vom RTC immer richtig ankam.
Beispiel:  if(  sec != RTC.get(DS1307_SEC,true))
            {
             .............
             }

Diese if  läuft richtig.
            if( RTC.get(DS1307_SEC,true) != sec)
            {
             .............
             }

Meine Frage: Kann man solche Probleme im vorraus vermeiden ? Eine Frage des Stils ?
Logged

Gruesse
big-maec

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 234
Posts: 20193
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

es ist besser, daß Du den Wert des RTC zuerst in eine Variable speicherst und dann diese in der IF-Anweisung vergleichst.
also
wert = RTC.get(DS1307_SEC,true) ;
if( wert != sec)...
Ich kann Dir aber nichts genaueres sagen.
Grüße Uwe
Logged

0
Offline Offline
Faraday Member
**
Karma: 19
Posts: 3418
20 LEDs are enough
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Was für einen Typ hat "sec"? Und was für einen Typ liefert die Funktion zurück?
Im Zweifelsfall: ja, das ist eine Frage des Stils.
Logged

Check out my experiments http://blog.blinkenlight.net

Deutschland, Ruhrpott
Offline Offline
Jr. Member
**
Karma: 1
Posts: 78
Arduino rocks Amiga rocks RC Truck rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi,

als Wert bekomme ich ein integer Wert zurück. Die Schleife sollte mir den Sekundenzeiger nach Ablauf einer Sekunde löschen und neu setzen. Parallel dazu habe ich mir noch den Sekunden Wert als Zahl (Digital Uhr) ausgeben lassen. Da hat man deutlich gesehen das der Zeiger innerhalb einer Minute mehrmals für ca 4 Sekunden nicht weiter lief, sprünge waren die Folge.  Allerdings der Zahlen Wert schon. Hier mal die get Routine:

Code:
int DS1307::get(int c, boolean refresh)  // aquire individual RTC item from buffer, return as int, refresh buffer if required
{
  if(refresh) read();
  int v=-1;
  switch(c)
  {
  case DS1307_SEC:
    v=(10*((rtc_bcd[DS1307_SEC] & DS1307_HI_SEC)>>4))+(rtc_bcd[DS1307_SEC] & DS1307_LO_BCD);
    break;
  case DS1307_MIN:
    v=(10*((rtc_bcd[DS1307_MIN] & DS1307_HI_MIN)>>4))+(rtc_bcd[DS1307_MIN] & DS1307_LO_BCD);
    break;
  case DS1307_HR:
    v=(10*((rtc_bcd[DS1307_HR] & DS1307_HI_HR)>>4))+(rtc_bcd[DS1307_HR] & DS1307_LO_BCD);
    break;
  case DS1307_DOW:
    v=rtc_bcd[DS1307_DOW] & DS1307_LO_DOW;
    break;
  case DS1307_DATE:

   
       v=rtc_bcd[DS1307_DATE]/16 * 10 +  rtc_bcd[DS1307_DATE] % 16;
   
    break;
  case DS1307_MTH:
    v=(10*((rtc_bcd[DS1307_MTH] & DS1307_HI_MTH)>>4))+(rtc_bcd[DS1307_MTH] & DS1307_LO_BCD);
    break;
  case DS1307_YR:

   
      v=2000 + rtc_bcd[DS1307_YR]/16 * 10 + rtc_bcd[DS1307_YR] % 16;
   
    break;

  } // end switch
  return v;
}
Logged

Gruesse
big-maec

0
Offline Offline
Faraday Member
**
Karma: 19
Posts: 3418
20 LEDs are enough
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Und was für einen Typ hat sec?
Logged

Check out my experiments http://blog.blinkenlight.net

Deutschland, Ruhrpott
Offline Offline
Jr. Member
**
Karma: 1
Posts: 78
Arduino rocks Amiga rocks RC Truck rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi,

meinst du das hier "int sec;" ?
Logged

Gruesse
big-maec

0
Offline Offline
Faraday Member
**
Karma: 19
Posts: 3418
20 LEDs are enough
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ja, aber Du hast immer noch nicht Deinen kompletten Sketch gezeigt. Solche Problemstellen sind nun mal nicht ohne Kontext zu erklären.
Logged

Check out my experiments http://blog.blinkenlight.net

Deutschland, Ruhrpott
Offline Offline
Jr. Member
**
Karma: 1
Posts: 78
Arduino rocks Amiga rocks RC Truck rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi,

den ganzen Code kann ich hier nicht Einstellen bekomme einen Fehler "The message exceeds the maximum allowed length (9500 characters).". Aber kein Problem den Sketch kann man sich hier herunterladen. Den Sketch habe ich auch schon in meinemt6963c Uhr Project verwendet. Da funktioniert er wesentlich besser. Ich habe mit dem S65-Shield viel mehr Probleme (Interrupts ?) die ich zum Teil schon lösen konnte.Das einzige was noch nicht richtig funktioniert ist die Einstellung des Hardware RTC 1307 über die serielle Schnittstelle.Es funktioniert nur wenn ich den letzten Teil mit dem sd.mount im Main loop ausklammer.
« Last Edit: March 06, 2011, 07:48:02 am by big-maec » Logged

Gruesse
big-maec

0
Offline Offline
Faraday Member
**
Karma: 19
Posts: 3418
20 LEDs are enough
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Attachments dürfen größer sein
Logged

Check out my experiments http://blog.blinkenlight.net

Deutschland, Ruhrpott
Offline Offline
Jr. Member
**
Karma: 1
Posts: 78
Arduino rocks Amiga rocks RC Truck rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi,

das stimmt aber jetzt bekomme folgende Fehlermeldung. The upload folder is full. Please try a smaller file and/or contact an administrator. Die Links habe ich korrigiert und ich habe mittlerweile herausgefunden das sprintf den seriellen empfang blockiert, warum ?

« Last Edit: March 08, 2011, 12:54:31 am by big-maec » Logged

Gruesse
big-maec

Pages: [1]   Go Up
Jump to: