|
 |
 |
 |
|
|
c't Projekte - c't-Bot und c't-Sim -
Mailinglisten
[Voriger (Datum)]
[Nächster (Datum)]
[Voriger (Thread)]
[Nächster (Thread)]
[Nach Datum][Nach Thread]
Absender: Achim Pankalla
Datum: Fr, 25.08.2006 19:37:49
hallo,
beim experimentieren mit den realen bot ist mir aufgefallen, das die
abstandswerte bei größeren distanzen öfter mal auf null springen. die
ursache war schnell gefunden, dies passiert immer, wenn die werte der
sensoren sehr klein werden, aber noch nicht kleiner als zb
SENSDISTOFFSETLEFT. dabei ist mir nun auch aufgefallen, das durchaus
eine division durch null entstehen könnte. dies habe ich auch bei meinen
bot mir logausgaben feststellen können.
nun frage ich mich, ob jemand weiss warum der prozessor das so
wegsteckt. ein reset macht das programm anscheinend nicht!
wird das über die fusebits gesteuert oder wird nur ein irq ausgelöst und
dann gehts weiter. wenn jemand mir eine antwort geben könnte, spare ich
mir das durchsuchen von unterlagen und foren, man ist ja faul ;-) .
anbei ein patch, um das springen der distanzwerte auf null und auch div
durch 0 zu verhindern.
viel spass allen weiterhin.
mit freundlichen grüssen
achim
Index: Changelog.txt
===================================================================
RCS file: /ctbot/ct-Bot/Changelog.txt,v
retrieving revision 1.95
diff -u -r1.95 Changelog.txt
--- Changelog.txt 22 Aug 2006 10:07:24 -0000 1.95
+++ Changelog.txt 25 Aug 2006 17:21:05 -0000
@@ -1,5 +1,7 @@
CHANGELOG fuer c't-Bot
======================
+2006-08-25 Achim Pankalla [achim.pankalla@xxxxxx]: Verhindert in sensor_abstand den Wert Null und eine Division durch Null.
+
2006-08-04 Benjamin Benz [bbe@xxxxxxxx]: motor_low_pc.c Bugfix
2006-08-16 Felix Beckwermert [felix@xxxxxxxxxxxxxx]: sensor.c -- buf-fix (aus forum): Klammern bei dHead ergaenzt
Index: sensor.c
===================================================================
RCS file: /ctbot/ct-Bot/sensor.c,v
retrieving revision 1.18
diff -u -r1.18 sensor.c
--- sensor.c 22 Aug 2006 10:07:24 -0000 1.18
+++ sensor.c 25 Aug 2006 17:21:06 -0000
@@ -105,14 +105,17 @@
* @param right Rechter Rohwert [0-1023]
*/
void sensor_abstand(uint16 left, uint16 right){
+ if(left == SENSDISTOFFSETLEFT) left++;
+ if(right == SENSDISTOFFSETRIGHT) right++;
+
sensDistL = SENSDISTSLOPELEFT / (left - SENSDISTOFFSETLEFT);
sensDistR = SENSDISTSLOPERIGHT / (right - SENSDISTOFFSETRIGHT);
// Korrigieren, wenn ungueltiger Wert
- if (sensDistL > SENS_IR_MAX_DIST || sensDistL<0)
+ if (sensDistL > SENS_IR_MAX_DIST || sensDistL<=0)
sensDistL=SENS_IR_INFINITE;
- if (sensDistR > SENS_IR_MAX_DIST || sensDistR<0)
+ if (sensDistR > SENS_IR_MAX_DIST || sensDistR<=0)
sensDistR=SENS_IR_INFINITE;
}
|
|
|