Hallo
Vermutlich erholen sich die Batterien, wenn der asuro längere Zeit ausgeschaltet ist.Wenn ich den Asuro in letzter Zeit länger angehabt habe, komm öfters ein falscher Wert zurück, als wenn ich den Asuro ca. 10-15 Stunden aus hatte
Einer der unzähligen Threads dazu: https://www.roboternetz.de/community...l=1#post483552Auch habe ich ein Problem mit dem Taster K6, der hat nämlich noch keinen einzigen laut von sich gegeben, funktioniert also (momentan) gar nicht...
Mit dem Programm von Osser kannst du die gemessenen Tastenspannungen ausgeben:
https://www.roboternetz.de/community...l=1#post483627
Zu deinem (ersten) Programm: Ein Progamm darf NIE so enden:
PrintInt(cF);
}
Warum? So würde die Funktion main() beendet werden und das Programm würde an der Stelle fortgeführt von wo aus die Funktion main() aufgerufen wurde. Das ist normalerweise eine Art von Betriebssystem das es beim Microkontroller aber nicht gibt. Deshalb wird hier nach einem Rücksprung irgendwas undefiniertes ausgeführt und die möglichen Folgen sind nicht absehbar. Richtig wäre
PrintInt(cF);
while(1); // Progamm darf nie beendet werden
return(0); // wird nie erreicht
}
Hier noch dein nach meinem Geschmack umgebaute Programm:
(ungetestet)Code:// Tastenstatistik erstellen // https://www.roboternetz.de/community/threads/58098-Probleme-mit-den-Tastern #include "asuro.h" unsigned char t1, t2, tE; unsigned int cO, cF; int main(void) { Init(); SerWrite("\r\nTastsensor Test Erweitert\r\n",29); while(1) { cO = 0; cF = 0; StatusLED(YELLOW); do { t1 = PollSwitch(); t2 = PollSwitch(); }while(t1 || t2); // warten bis keine Taste gedrückt ist StatusLED(GREEN); do { t1 = PollSwitch(); t2 = PollSwitch(); }while((t1 != t2) || (t1 == 0)); // warten auf gültigen Tastendruck tE = t1; // die zu prüfende Taste in tE speichern und ausgeben SerWrite("\n\n\rExpected: ",13); PrintInt(tE); SerWrite("\n\n\r",3); while((cO + cF) <= 25000) { do { t1 = PollSwitch(); t2 = PollSwitch(); }while(t1 != t2); // Tastenstatus einlesen if(t1 == tE) { StatusLED(OFF); cO = cO + 1; } else { StatusLED(RED); cF = cF + 1; } if(((cO + cF) % 2500) == 0) // alle 2500 Werte eine Zwischenstatistik { PrintInt(cO); SerWrite("|",1); PrintInt(cO + cF); SerWrite("|",1); PrintInt(cF); SerWrite("\n\r",2); } Msleep(50); } SerWrite("\n\r",2); PrintInt(cO); SerWrite("|",1); PrintInt(cO + cF); SerWrite("|",1); PrintInt(cF); SerWrite("\n\r",2); } return(0); }
Gruß
mic
[Edit]
Zu deinen Lötkünsten: Du darfst gerne etwas mehr Lötzinn verwenden. Speziell am R30 würde ich wegen dem K6-Problem nochmals nachlöten. Die Drahtbrücke neben R17 fehlt. Leider hast du den asuro streng nach Anleitung aufgebaut und die möglichen Modifikationen nicht berücksichtigt:
http://www.asurowiki.de/pmwiki/pmwik...Modifikationen







Zitieren

Lesezeichen