Hallo
Dein "Wissensfeher", wenn man das so nennen mag, liegt darin, dass du der Funktion PollSwitch() zu sehr vertraust. Sie liefert leider nicht immer die erwarteten Werte. Neben Löt- und Bestückungsfehlern (in der Anleitung ab Seite 30 beschrieben) wirken sich auch Bauteiletoleranzen als fehlerhafte Werte aus. Deshalb muss man gelegentlich die Formel zur Tastenberechnung "kalibrieren". Dazu ändert man in der Datei asuro.c in der Funktion PollSwitch() die return-Zeile. Bei mir sieht diese Stelle so aus:
Code:
return ((10240000L/(long)i-10000L)*61L+5000L)/10000;
Meist reicht es, wenn man an der 61 rummfummelt.
Bei laufenden Motoren kommen dann zusätzliche Ungenauigkeiten hinzu. Deshalb ist eine Mehrfachabfrage von PollSwitch() immer sinnvoll:
Code:
sw1=PollSwitch();
sw2=PollSwitch();
If((sw1 == sw2) && (sw1 > 0)) ...
Wenn man nur testen möchte, ob eine Taste gedrückt wurde, kann man auch den AD-Wandler umgehen und direkt den Pin abfragen:
if(!(PINC & (1<<PC4))) ...
(aus http://www.arexx.com/forum/viewtopic.php?p=1323#1319)
Meist ist es auch hilfreich, wenn man sich die gemessenen Werte von PollSwitch (oder auch andere Werte) über die serielle Schnittstelle zum PC senden läßt und in einem Terminal anzeigt. Dazu kann man die Funktion PrintInt() verwenden, die aber in der orginalen Library des asuro noch nicht enthalten ist. Deshalb würde ich dir empfehlen eine neuere Library zu verwenden. Ich benutze und empfehle die Version 2.3, weil sie noch sehr nahe an der orginalen Version ist, aber schon die Erweiterungen wie PrintInt() und Msleep() kennt und die 36kHz-Timermodifikation von Waste besitzt (z.B. für die IR-Abstandsmessung). Die aktuelle Version 2.8 funktioniert natürlich auch, bringt einen aber auch weiter weg von der eigentlichen Hardware des asuro:
https://sourceforge.net/projects/asuro/files/AsuroLib/
Gruß
Micha
Lesezeichen