Hallo
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
Vermutlich erholen sich die Batterien, wenn der asuro längere Zeit ausgeschaltet ist.
Auch habe ich ein Problem mit dem Taster K6, der hat nämlich noch keinen einzigen laut von sich gegeben, funktioniert also (momentan) gar nicht...
Einer der unzähligen Threads dazu: https://www.roboternetz.de/community...l=1#post483552
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:
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);
}
(ungetestet)
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
Lesezeichen