PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Odometrieproblem!



Becci
12.11.2007, 12:07
So ich bin´s mal wieder...
Hab mich nun an die Odometrie gewagt und leider (wie soll es auch anderst sein) funktioniert sie nicht.
Im ASURO Band 2, soll man sich langsam an die Odometrie gewöhnen und fängt daher erstmal damit an, den ASURO geradeaus fahren zu lassen.
Leider fährt mein ASURO eine leichte Rechtskurve!
Was ist an meinem Programm falsch???



/*Geradeausfahren*/
#include "asuro.h"

//Schwellwert für die Hell/Dunkel-Unterscheidung
//Eventuell muss damit etwas variiert werden
#define TRIGGERLEVEL 600
#define HYSTERESIS 10

#define LOW 0
#define HIGH 1

int main(void)
{
unsigned int data [2];
signed int status [2]={0,0};
signed int difference=0;

Init();
MotorDir(FWD,FWD);

while(1) {

//Helligkeitswerte der Lichtschranken auslesen
OdometrieData(data);

//Wechsel linker Sensor von niedrig auf hoch?
if((status[0]==LOW)&&(data[0]>TRIGGERLEVEL+HYSTERESIS)) {
status[0]=HIGH;
difference++; }

//Wechsel linker Sensor von hoch auf niedrig?
if((status[0]==HIGH)&&(data[0]<TRIGGERLEVEL-HYSTERESIS)) {
status[0]=LOW;
difference++; }

//Wechsel rechter Sensor von niedrig auf hoch?
if((status[1]==LOW)&&(data[1]>TRIGGERLEVEL+HYSTERESIS)) {
status[1]=HIGH;
difference--; }

//Wechsel rechter Sensor von hoch auf niedrig?
if((status[1]==HIGH)&&(data[1]<TRIGGERLEVEL-HYSTERESIS)) {
status[1]==LOW;
difference--; }

//zur Sicherheit: verhindern, dass der Differenzzähler den erlaubten Wertebereich verlässt
if(difference<-255) difference=-255;
if(difference>255) difference=255;

//StatusLED noch entsprechend der erkannten Segmente aufleuchten lassen, grün für links, rot für rechts
StatusLED(status[0]+status[1]*2);

//Zähldifferenz passemd auf die Motoren verteilen
if(difference>0) MotorSpeed(255-difference,255);
else MotorSpeed(255,255+difference);
}
return 0;
}

liggi
12.11.2007, 12:41
Hast du das TRIGGERLEVEL schon angepasst?? Es dauert auch ein bisschen bis es sich einpendelt.

mfg liggi

Becci
12.11.2007, 12:46
ich hab das selbe Problem wie NOMIS(Probleme mit Odometrie), ich erhalt nicht wirklich ein TRIGGERLEVEL, also kann ich sie auch nicht anpassen oder?
und wenn ich doch ein Signal bekomm, wie pass ich das dann an?

liggi
12.11.2007, 13:59
vielleich kann man es mal mit zwei probieren?

mfg liggi

radbruch
12.11.2007, 14:00
Hallo

Lass dir doch die Werte mal am Terminal anzeigen:


while(1)
{
OdometrieData(data);
SerWrite("\n\r",2);
PrintInt(data[0]);
SerWrite(" ",2);
PrintInt(data[1]);
Msleep(500);
}
Ohne Ansteuerung der Motoren, dann kannst du die Räder mit der Hand drehen und die Werte austesten. So kannst du auch den Einfluß von Fremdlicht und die Wirkung von axial verschiebbaren Codescheiben auf die Werte sehen.

Wenn du eine ältere Library (asuro.c) ohne PrintInt() und Msleep()verwendest:

void PrintInt(int wert)
{
char text[16]=" ";
itoa(wert,text,10);
SerWrite(text,strlen(text));
}

void Msleep(int dauer)
{
int z;
for(z=0;z<dauer;z++) Sleep(36);
}

Triggerlevel sollte nun mindestens um Hysteresse kleiner als der max-Wert und mindestens um Hysteresse größer min-Wert sein. Bei z.B. min=150 zu max=600 wäre 400 ein möglicher Triggerlevel. Eine etwas größere Hysteresse (vielleicht 50-100) verringert Fehlzählungen.

Gruß

mic

Becci
12.11.2007, 14:16
Es geht immer noch nicht :cry:
ich bekomm im Terminal immer nur


LoggingOdometers V1.0 (2006-05-21, Arexx-Henk)

und weiß nicht warum?
Kann es sein, dass an meim ASURO was kaputt ist?

radbruch
12.11.2007, 14:52
Hallo

Ich geh mal davon aus, dass dein asuro funktioniert. Fragen zum Odo-Logger kannst du auch direkt im arexx-Forum (http://www.arexx.com/forum/viewforum.php?f=19) stellen, dort antwortet dir vermutlich Arexx-Henk selbst.

Alternativ kannst du auch deinen eigenen "Datenlogger" schreiben, die wesenlichsten Teile dafür habe ich oben schon gepostet. Dann siehst du auch, wie das funktioniert, bei henks Programmen hast du vermutlich nur das Hex-File.

Gruß

mic

damaltor
12.11.2007, 16:08
versuche einfach mal, ohne die motoren einzuschalten, den aktuellen wert der sensoren immer wieder in hyperterminal zu senden, so wie es radbruch oben schon gesagt hat. wenn du dann die räder langsam (von hand) drehst, sollten sich die werte verändern, je nachdem ob ein schwarzes oder ein weisses feld vor dem sensor ist. nicht verzweifeln, wir sind ja da ;)

Weiti
12.11.2007, 17:26
hallo radbruch, mit deinem quelltext gibt es ein problem:


test.c: In function `main':
test.c:20: error: `data' undeclared (first use in this function)
test.c:20: error: (Each undeclared identifier is reported only once
test.c:20: error: for each function it appears in.)
make: *** [test.o] Error 1

> Process Exit Code: 2


weißt du auf anhieb warum er data nicht kennt? steht das nicht in asuro.h?

radbruch
12.11.2007, 17:37
Das ist kein "Quellcode", es sind nur Codeschnippsel die du in ein Programm einsetzen kannst. Die while-Schleife kommt in main(), PrintInt und Msleep in den Vorkopf. Variablen must du selbst anlegen.

mic

Weiti
12.11.2007, 17:51
#include <stdlib.h>
#include "asuro.h"
#define taste (!(PINC & (1<<PC4))) // Tastenabfrage
#define keine_taste (PINC & (1<<PC4))

void PrintInt(int wert)
{
char text[16]=" ";
itoa(wert,text,10);
SerWrite(text,strlen(text));
}


void Msleep(int dauer)
{
int z;
for(z=0;z<dauer;z++) Sleep(36);
}


int main(void){
while(1)
{
OdometrieData(data);
SerWrite("\n\r",2);
PrintInt(data[0]);
SerWrite(" ",2);
PrintInt(data[1]);
Msleep(500);
}
}



soweit war ich; muss auser strlen noch etwas deklariert werden? eigentlich doch nicht. Und was ist denn strlen denke mal string-länge, also int, oder?
Gibt aber auch nur fehler...

radbruch
12.11.2007, 18:31
Hallo

bitte entschuldige, aber ich muss erst wieder zusammensuchen, wie das mit dem asuro funktionierte.

strlen() ist eine Funktion die die Länge eines Strings zurückliefert und in string.h definiert ist. Die stdlib.h sollte eigentlich über asuro.h schon eingebunden sein.

unsigned int data[2] fehlt noch..

mic

[Edit]
return(0); am Ende von main() fehlt auch noch. Die erweiterten asuro-Libraries gibt's hier:

http://sourceforge.net/project/showfiles.php?group_id=155217&package_id=172835

(V2.7 ist zwar aktuell, aber auch etwas komplizierter in der Anwendung. Ich verwendete V2.3 mit IR-Erweiterung nach waste)

Becci
13.11.2007, 09:09
Hallo!
Inzwischen hatte ich ein kleines Erfolgserlebnis.
Mein ASURO sendet mir endlich Daten... allerdings liegen max und min Werte nicht sehr weit auseinander... an was kann das liegen?
Auf mögliche Lötbrücken ab ich meine Platine schon untersucht, jedoch keine gefunden.



LogginOdometers V1.0 (2006-05-21, Arexx-Henk)

Left Odometer

+00211
+00211
+00211
+00211
+00211
+00212
+00212
+00212
+00211
+00211
+00210
+00211
+00211
+00211
+00211
+00211
+00211
+00211
+00212
+00211
+00212
+00212
+00211
+0 211
+00211
+00211
+00211
+00211
+00211
+00211
+00211
+00211
+00212
+00212
+00212
+00211
+00211
+00211
+00211
+00211
+00211
+00211
+00211
+00211
+00211
+00212
+00211
+00212
+00212
+00211
+00211
+00011
+00211
+00211
+00211
+00211
+00211
+00211
+00212
+00212
+0000211
+00211
+00211
+00211
+00211
+00211
+00212
+00212
+00212
+002!2
+00212
+00212
+00211
+00211
+00211
+00211
+00211
+00212
+00211
+00211
+00212
+00211
+00211
+00212
+00211
+0000211
+00211
+00211
+00212
+00211
+00212
+00212
+00212
+00212
+00212
+00211
+00211
+0000209
+00211
+00211
+00210
+00211
+00211
+00212
+00212
+00212
+00212
+00211
+00212
+00211
+00210
+00211
+00211
+00210
+00211
+00211
+00212
+00212
+00212
+00213
+00212
+00212
+00212
+00211
+00211
+00211
+00211
+00212
+00211
+00212
+00211
+00212
+00212
+00212
+00212
+00211
+00212
+00211
+00212
+00212
+00211
+00211
+00212
+00212
+00212
+00212
+00212
+00212
+00211
+00211
+00211
+00211
+00211
+00211
+00211
+00212
+00211
+00012
+00212
+00211
+00212
+00212
+00211
+00211
+00211
+00211
+00211
+00211
+00212
+00212
+00212
+00212
+00212
+00211
+00211
+00211
+00211
+00211
+00211
+00211
+00211
+00211
+00211
+00211
+00212
+00212
+00212
+00211
+00211
+00211
+00210
+00211
+00211
+00211
+00211
+00210
+00211
+00211
+00211
+00212
+00212
+00212
+00212
+00211
+00211
+00211
+00211
+00211
+00211
+00211
+00211
+00211
+00212
+00212
+00212
+00211
+00211
+00211
+00212
+00211
+00211
+00211
+00211
+00211
+00211
+00211
+00212
+00212
+00212
+00211
+00211
+00211
+00212
+00211
+00211
+00211
+00211
+00211
+00211
+00211
+00211

Right Odometer

+00211
+00211
+00212
+00212
+00212
+00212
+00212
+00211
+00211
+00211
+00210
+00210
+00211
+00210
+00211
+00211
+00211
+00212
+00212
+00212
+00212
+00212
+00211
+00211
+00211
+00211
+00211
+00210
+00211
+00211
+00211
+00211
+00212
+00212
+00212
+00211
+00211
+00211
+00211
+00211
+00211
+00211
+00211
+00211
+00211
+00211
+00212
+00212
+00212
+00212
+00212
+00211
+00211
+00211
+00211
+00211
+00211
+00210
+00211
+00211
+00212
+00212
+00212
+00213
+00212
+00212
+00212
+00211
+00211
+00211
+00211
+00211
+00211
+00211
+00212
+00212
+00211
+00212
+00211
+00213
+00212
+00212
+00212
+00211
+00211
+00211
+00211
+00211
+00211
+00210
+00211
+00211
+00211
+00212
+00212
+00213
+00212
+00212
+00212
+00211
+00211
+00211
+00210
+00211
+00211
+00211
+00211
+00211
+00212
+00211
+00212
+00212
+00212
+00212
+00213
+00211
+00212
+00212
+00211
+00211
+00211
+00211
+00211
+00211
+00211
+00211
+00212
+00213
+00213
+00212
+00212
+00212
+00212
+00211
+00211
+00211
+00211
+00211
+00210
+00211
+00211
+00211
+00212
+00211
+00213
+00212
+00212
+00212
+00211
+00211
+00211
+00211
+00211
+00211
+00211
+00212
+00211
+00212
+00212
+00212
+00213
+00212
+00212
+00212
+00211
+00211
+00211
+00210
+00211
+00211
+00211
+00211
+00211
+00212
+00212
+00212
+00212
+00212
+00212
+00212
+00212
+00211
+00211
+00211
+00211
+00211
+00210
+00210
+00211
+00211
+00211
+00212
+00212
+00212
+00212
+00212
+00211
+00211
+00211
+00210
+00210
+00211
+00210
+00211
+00211
+00211
+00212
+00212
+00211
+00213
+00212
+00212
+00212
+00211
+00211
+00211
+00211
+00210
+00211
+00211
+00211
+00212
+00212
+00211
+00212
+00212
+00212
+00212
+00211
+00210
+00211
+00211
+00211
+00211
+00211
+00211
+00212
+00212
+00211
+00212
+00212
+00211
+00211
+00210
+00211
+00211
+00211
+00211
+00211
+00211

Left min/max, right min/max values

+00209
+00213

+00210
+00213

-Finished-

Becci
13.11.2007, 09:57
ok Problem behoben!
hatte Kleberückstände die irgendwie nen Kurzschluss verursacht haben, warum kp, denk mal dass es so war.
nun hab ich folgende Odometriedaten:

LoggingOdometers V1.0 (2006-05-21, Arexx-Henk)

Left Odometer

+00173
+00156
+00169
+00171
+00173
+00194
+00203
+00210
+00220
+00224
+00220
+00211
+00201
+00191
+00171
+00155
+00164
+00166
+00164
+00186
+00196
+00208
+00222
+00227
+00221
+00217
+00210
+00185
+00174
+00168
+00152
+00159
+00169
+00171
+00192
+00204
+00211
+00222
+00222
+00215
+00210
+00188
+00179
+00176
+00156
+00161
+00172
+00172
+00191
+00200
+00210
+00218
+00221
+00211
+00198
+00191
+00171
+00161
+00168
+00164
+00168
+00193
+00197
+00209
+00219
+00218
+00217
+00209
+00188
+00183
+00174
+00158
+00166
+00177
+00179
+00195
+00207
+00214
+00220
+00216
+00207
+00204
+00187
+00169
+00173
+00159
+00161
+00180
+00182
+00195
+00212
+00217
+00224
+00223
+00214
+00204
+00191
+00169
+00166
+00167
+00158
+00166
+00186
+00196
+00208
+00222
+00227
+00221
+00216
+00207
+00184
+00169
+00170
+00154
+00153
+00173
+00176
+00192
+00209
+00215
+00224
+00219
+00212
+00207
+00184
+00170
+00173
+00154
+00162
+00178
+00179
+00198
+00209
+00216
+00222
+00212
+00204
+00192
+00172
+00171
+00168
+00157
+00181
+00188
+00196
+00214
+00217
+00219
+00218
+00200
+00191
+00187
+00164
+00161
+00173
+00183
+00186
+00195
+00212
+00217
+00217
+00217
+00202
+00190
+00189
+00170
+00159
+00172
+00164
+00180
+00197
+00201
+00214
+00222
+00220
+00220
+00210
+00188
+00182
+00169
+00156
+00159
+00169
+00184
+00196
+00209
+00220
+00224
+00223
+00218
+00209
+00193
+00170
+00155
+00159
+00165
+00160
+00182
+00195
+00204
+00219
+00224
+00217
+00215
+00196
+00181
+00179
+00163
+00153
+00175
+00173
+00185
+00206
+00212
+00220
+00219
+00207
+00199
+00185
+00167
+00172
+00161
+00163
+00188
+00193
+00206
+00218
+00218
+00220
+00207
+00190
+00188
+00168
+00162
+00175
+00171
+00189
+00199
+00207
+00220
+00216
+00215
+00209
+00190
+00187
+00176
+00159
+00170
+00174
+00178

Right Odometer

+00163
+00126
+00106
+00113
+00105
+00115
+00140
+00162
+00184
+00192
+00198
+00188
+00167
+00153
+00132
+00102
+00096
+00111
+00118
+00135
+00165
+00188
+00192
+00196
+00198
+00188
+00167
+00151
+00121
+00099
+00107
+00112
+00116
+00134
+00171
+00195
+00204
+00204
+00203
+00197
+00180
+00156
+00137
+00113
+00097
+00098
+00114
+00139
+00163
+00190
+00211
+00217
+00214
+00198
+00181
+00166
+00151
+00129
+00113
+00117
+00130
+00145
+00169
+00190
+00203
+00206
+00197
+00173
+00155
+00131
+00105
+00095
+00102
+00121
+00144
+00170
+00195
+00201
+00196
+00190
+00166
+00139
+00111
+00098
+00100
+00110
+00129
+00144
+00168
+00185
+00192
+00195
+00182
+00162
+00142
+00114
+00096
+00090
+00096
+00112
+00138
+00160
+00182
+00191
+00193
+00192
+00190
+00172
+00146
+00120
+00108
+00100
+00096
+00103
+00126
+00151
+00183
+00198
+00202
+00201
+00202
+00192
+00163
+00145
+00126
+00109
+00096
+00101
+00119
+00139
+00165
+00188
+00207
+00217
+00216
+00206
+00187
+00165
+00146
+00134
+00124
+00123
+00130
+00142
+00155
+00177
+00192
+00204
+00207
+00199
+00176
+00156
+00135
+00115
+00112
+00115
+00121
+00129
+00152
+00185
+00200
+00200
+00197
+00189
+00161
+00136
+00127
+00112
+00099
+00105
+00131
+00143
+00162
+00184
+00194
+00196
+00188
+00172
+00155
+00127
+00102
+00094
+00103
+00110
+00121
+00137
+00164
+00187
+00193
+00193
+00195
+00186
+00163
+00142
+00128
+00104
+00091
+00097
+00119
+00131
+00147
+00185
+00201
+00200
+00199
+00199
+00190
+00165
+00141
+00114
+00098
+00094
+00100
+00115
+00143
+00173
+00198
+00213
+00215
+00211
+00200
+00183
+00159
+00140
+00126
+00119
+00121
+00133
+00145
+00167
+00188
+00203
+00206
+00191
+00163
+00146
+00125
+00110
+00100
+00102
+00119
+00143
+00176
+00198
+00199
+00195
+00191
+00172
+00139
+00112

Left min/max, right min/max values

+00152
+00227

+00090
+00217

-Finished-

Becci
13.11.2007, 12:48
Nun habe ich mein Programm "Geradeausfahren" (siehe oben)ausprobiert und stelle fest, dass ASURO immer noch nicht geradeaus fährt.
Um die Odometriedaten nochmals zu überprüfen, habe ich die test.h Datei von Arexx-Henk nochmals geflashed. Nun bekomme ich andere Werte, ebenfalls ist das so bei einem Kollegen von mir.
Ist das normal? Oder haben wir einen Fehler gemacht?
Ich gehe davon aus, dass deshalb mein ASURO nicht geradeaus fährt!

Weiti
13.11.2007, 16:10
noch mal tu dem programm....


#include "print.c"
#include "asuro.h"
#include "uart.c"
#include "adc.c"
#include "switches.c"
#include "encoder.c"
#include "encoder_low.c"
#include "globals.c"
#include "time.c"
#include "i2c.c"
#include "intro.c"
#include "lcd.c"
#include "leds.c"
#include "motor.c"
#include "motor_low.c"
#include "rc5.c"
#include "version.c"

#define taste (!(PINC & (1<<PC4))) // Tastenabfrage
#define keine_taste (PINC & (1<<PC4))

unsigned int data[2]



int main(void){
while(1)
{
OdometrieData(data);
SerWrite("\n\r",2);
PrintInt(data[0]);
SerWrite(" ",2);
PrintInt(data[1]);
Msleep(500);
}
}



fehler:


C:\ASURO_src\FirstTry>make all
set -e; avr-gcc -MM -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=test.lst test.c \
| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > test.d; \
[ -s test.d ] || rm -f test.d
In file included from test.c:5:
switches.c:37:21: myasuro.h: No such file or directory
In file included from test.c:6:
encoder.c:33:21: myasuro.h: No such file or directory
In file included from test.c:10:
i2c.c:27:17: i2c.h: No such file or directory
In file included from test.c:12:
lcd.c:55:17: lcd.h: No such file or directory
lcd.c:56:17: i2c.h: No such file or directory
In file included from test.c:16:
rc5.c:39:17: rc5.h: No such file or directory
set -e; avr-gcc -MM -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=test.lst test.c \
| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > test.d; \
[ -s test.d ] || rm -f test.d
In file included from test.c:5:
switches.c:37:21: myasuro.h: No such file or directory
In file included from test.c:6:
encoder.c:33:21: myasuro.h: No such file or directory
In file included from test.c:10:
i2c.c:27:17: i2c.h: No such file or directory
In file included from test.c:12:
lcd.c:55:17: lcd.h: No such file or directory
lcd.c:56:17: i2c.h: No such file or directory
In file included from test.c:16:
rc5.c:39:17: rc5.h: No such file or directory
-------- begin --------
avr-gcc --version
avr-gcc (GCC) 3.3.1
Copyright (C) 2003 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Size before:
test.elf :
section size addr
.text 1552 0
.data 0 8388704
.bss 1 8388704
.noinit 0 8388705
.eeprom 0 8454144
.stab 3288 0
.stabstr 1971 0
Total 6812


avr-gcc -c -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=test.lst test.c -o test.o
In file included from test.c:1:
print.c: In function `PrintInt':
print.c:97: warning: implicit declaration of function `itoa'
print.c:98: warning: implicit declaration of function `SerPrint'
print.c: In function `PrintLong':
print.c:136: warning: implicit declaration of function `ltoa'
print.c: At top level:
print.c:202: warning: type mismatch with previous implicit declaration
print.c:137: warning: previous implicit declaration of `SerPrint'
print.c:202: warning: `SerPrint' was previously implicitly declared to return `int'
In file included from test.c:4:
adc.c: In function `Batterie':
adc.c:81: error: `autoencode' undeclared (first use in this function)
adc.c:81: error: (Each undeclared identifier is reported only once
adc.c:81: error: for each function it appears in.)
adc.c: In function `LineData':
adc.c:142: error: `autoencode' undeclared (first use in this function)
adc.c: In function `OdometrieData':
adc.c:219: error: `autoencode' undeclared (first use in this function)
In file included from test.c:5:
switches.c:37:21: myasuro.h: No such file or directory
In file included from test.c:5:
switches.c: In function `PollSwitch':
switches.c:86: error: `autoencode' undeclared (first use in this function)
switches.c:120: error: `MY_SWITCH_VALUE' undeclared (first use in this function)
In file included from test.c:6:
encoder.c:33:21: myasuro.h: No such file or directory
In file included from test.c:6:
encoder.c: In function `Go':
encoder.c:116: error: `uint32_t' undeclared (first use in this function)
encoder.c:116: error: parse error before "enc_count"
encoder.c:122: error: `enc_count' undeclared (first use in this function)
encoder.c:122: warning: implicit declaration of function `abs'
encoder.c:123: error: `MY_GO_ENC_COUNT_VALUE' undeclared (first use in this function)
encoder.c:124: warning: implicit declaration of function `EncoderSet'
encoder.c:132: error: `encoder' undeclared (first use in this function)
encoder.c:132: error: `LEFT' undeclared (first use in this function)
encoder.c:133: error: `RIGHT' undeclared (first use in this function)
encoder.c:146: warning: implicit declaration of function `Msleep'
encoder.c: In function `Turn':
encoder.c:220: error: `MY_TURN_ENC_COUNT_VALUE' undeclared (first use in this function)
encoder.c:236: error: `encoder' undeclared (first use in this function)
encoder.c:236: error: `LEFT' undeclared (first use in this function)
encoder.c:237: error: `RIGHT' undeclared (first use in this function)
In file included from test.c:7:
encoder_low.c: In function `EncoderInit':
encoder_low.c:128: error: `autoencode' undeclared (first use in this function)
encoder_low.c: In function `EncoderStop':
encoder_low.c:168: error: `autoencode' undeclared (first use in this function)
encoder_low.c: In function `EncoderStart':
encoder_low.c:192: error: `autoencode' undeclared (first use in this function)
encoder_low.c: At top level:
encoder_low.c:225: warning: type mismatch with previous implicit declaration
encoder_low.c:138: warning: previous implicit declaration of `EncoderSet'
encoder_low.c:225: warning: `EncoderSet' was previously implicitly declared to return `int'
encoder_low.c: In function `EncoderSet':
encoder_low.c:226: error: `encoder' undeclared (first use in this function)
encoder_low.c:226: error: `LEFT' undeclared (first use in this function)
encoder_low.c:227: error: `RIGHT' undeclared (first use in this function)
In file included from test.c:8:
globals.c: At top level:
globals.c:56: error: `encoder' used prior to declaration
globals.c:95: error: `autoencode' used prior to declaration
In file included from test.c:9:
time.c:145: warning: type mismatch with previous implicit declaration
encoder.c:253: warning: previous implicit declaration of `Msleep'
time.c:145: warning: `Msleep' was previously implicitly declared to return `int'
In file included from test.c:10:
i2c.c:27:17: i2c.h: No such file or directory
In file included from test.c:10:
i2c.c: In function `InitI2C':
i2c.c:50: error: `SDA_DDR' undeclared (first use in this function)
i2c.c:50: error: `SDA' undeclared (first use in this function)
i2c.c:51: error: `SCL_DDR' undeclared (first use in this function)
i2c.c:51: error: `SCL' undeclared (first use in this function)
i2c.c:52: error: `SDA_HI' undeclared (first use in this function)
i2c.c:53: error: `SCL_HI' undeclared (first use in this function)
i2c.c: In function `WriteI2C':
i2c.c:79: error: `SDA_HI' undeclared (first use in this function)
i2c.c:81: error: `SDA_LO' undeclared (first use in this function)
i2c.c:82: error: `SCL_TOGGLE' undeclared (first use in this function)
i2c.c:86: error: `SDA_DDR' undeclared (first use in this function)
i2c.c:86: error: `SDA' undeclared (first use in this function)
i2c.c:87: error: `HDEL' undeclared (first use in this function)
i2c.c:88: error: `SCL_HI' undeclared (first use in this function)
i2c.c:89: error: `SDA_PIN' undeclared (first use in this function)
i2c.c:92: error: `SCL_LO' undeclared (first use in this function)
i2c.c: In function `ReadI2C':
i2c.c:119: error: `SDA_HI' undeclared (first use in this function)
i2c.c:120: error: `SDA_DDR' undeclared (first use in this function)
i2c.c:120: error: `SDA' undeclared (first use in this function)
i2c.c:124: error: `HDEL' undeclared (first use in this function)
i2c.c:125: error: `SCL_HI' undeclared (first use in this function)
i2c.c:127: error: `SDA_PIN' undeclared (first use in this function)
i2c.c:129: error: `SCL_LO' undeclared (first use in this function)
i2c.c:135: error: `SDA_LO' undeclared (first use in this function)
i2c.c:139: error: `SCL_TOGGLE' undeclared (first use in this function)
i2c.c: In function `StartI2C':
i2c.c:161: error: `I2C_START' undeclared (first use in this function)
i2c.c: In function `StopI2C':
i2c.c:181: error: `SDA_LO' undeclared (first use in this function)
i2c.c:182: error: `I2C_STOP' undeclared (first use in this function)
In file included from test.c:12:
lcd.c:55:17: lcd.h: No such file or directory
lcd.c:56:17: i2c.h: No such file or directory
In file included from test.c:12:
lcd.c: In function `InitLCD':
lcd.c:64: error: `LCD_INIT' undeclared (first use in this function)
lcd.c:67: warning: implicit declaration of function `SetIOLCD'
lcd.c:67: error: `LCD_EN' undeclared (first use in this function)
lcd.c:71: warning: implicit declaration of function `CommandLCD'
lcd.c:71: error: `LCD_8BIT' undeclared (first use in this function)
lcd.c:72: error: `LCD_4BIT' undeclared (first use in this function)
lcd.c:80: error: `LCD_DISPLAYON' undeclared (first use in this function)
lcd.c:81: error: `LCD_INCREASE' undeclared (first use in this function)
lcd.c:82: error: `LCD_CLEAR' undeclared (first use in this function)
lcd.c:83: error: `LCD_HOME' undeclared (first use in this function)
lcd.c: In function `BacklightLCD':
lcd.c:99: error: `LCD_BL' undeclared (first use in this function)
lcd.c: In function `SetDataLCD':
lcd.c:114: error: `LD7' undeclared (first use in this function)
lcd.c:115: error: `LD6' undeclared (first use in this function)
lcd.c:116: error: `LD5' undeclared (first use in this function)
lcd.c:117: error: `LD4' undeclared (first use in this function)
lcd.c:119: error: `LCD_D4' undeclared (first use in this function)
lcd.c:119: error: `LCD_D5' undeclared (first use in this function)
lcd.c:119: error: `LCD_D6' undeclared (first use in this function)
lcd.c:119: error: `LCD_D7' undeclared (first use in this function)
lcd.c:121: error: `LCD_EN' undeclared (first use in this function)
lcd.c: At top level:
lcd.c:149: warning: type mismatch with previous implicit declaration
lcd.c:119: warning: previous implicit declaration of `SetIOLCD'
lcd.c:149: warning: `SetIOLCD' was previously implicitly declared to return `int'
lcd.c: In function `SetIOLCD':
lcd.c:151: error: `portLCD' undeclared (first use in this function)
lcd.c:154: error: `LCD_DEV' undeclared (first use in this function)
lcd.c: In function `GetIOLCD':
lcd.c:168: error: `LCD_DEV' undeclared (first use in this function)
lcd.c: In function `SetCursorLCD':
lcd.c:183: error: `cursorLCD' undeclared (first use in this function)
lcd.c:184: error: `lineLCD' undeclared (first use in this function)
lcd.c:187: error: `LCD_LINE1' undeclared (first use in this function)
lcd.c:203: error: `LCD_DDRAM' undeclared (first use in this function)
lcd.c: At top level:
lcd.c:213: warning: type mismatch with previous implicit declaration
lcd.c:203: warning: previous implicit declaration of `CommandLCD'
lcd.c:213: warning: `CommandLCD' was previously implicitly declared to return `int'
lcd.c: In function `CommandLCD':
lcd.c:214: error: `LCD_HOME' undeclared (first use in this function)
lcd.c:215: error: `lineLCD' undeclared (first use in this function)
lcd.c:215: error: `cursorLCD' undeclared (first use in this function)
lcd.c:216: error: `LCD_RS' undeclared (first use in this function)
lcd.c: In function `ClearLCD':
lcd.c:227: error: `LCD_CLEAR' undeclared (first use in this function)
lcd.c:228: error: `LCD_HOME' undeclared (first use in this function)
lcd.c: In function `WriteLCD':
lcd.c:240: error: `LCD_RS' undeclared (first use in this function)
lcd.c:242: error: `cursorLCD' undeclared (first use in this function)
lcd.c: In function `PrintLCD':
lcd.c:257: error: `cursorLCD' undeclared (first use in this function)
lcd.c:257: error: `LCD_CHARS' undeclared (first use in this function)
lcd.c:260: error: `lineLCD' undeclared (first use in this function)
lcd.c: In function `PrintAlignLCD':
lcd.c:312: error: `RIGHT' undeclared (first use in this function)
lcd.c:313: error: `LCD_CHARS' undeclared (first use in this function)
lcd.c:314: error: `CENTER' undeclared (first use in this function)
In file included from test.c:14:
motor.c: At top level:
motor.c:92: error: parse error before "leftpwm"
motor.c:94: warning: function declaration isn't a prototype
motor.c: In function `SetMotorPower':
motor.c:97: error: `leftpwm' undeclared (first use in this function)
motor.c:107: error: `rightpwm' undeclared (first use in this function)
In file included from test.c:16:
rc5.c:39:17: rc5.h: No such file or directory
In file included from test.c:16:
rc5.c: At top level:
rc5.c:62: error: parse error before "RC5lastsample"
rc5.c:62: warning: type defaults to `int' in declaration of `RC5lastsample'
rc5.c:62: warning: data definition has no type or storage class
rc5.c:63: error: parse error before "RC5bittimer"
rc5.c:63: warning: type defaults to `int' in declaration of `RC5bittimer'
rc5.c:63: warning: data definition has no type or storage class
rc5.c:65: error: parse error before "RC5data_tmp"
rc5.c:65: warning: type defaults to `int' in declaration of `RC5data_tmp'
rc5.c:65: warning: data definition has no type or storage class
rc5.c:66: error: parse error before "RC5bitcount"
rc5.c:66: warning: type defaults to `int' in declaration of `RC5bitcount'
rc5.c:66: warning: data definition has no type or storage class
rc5.c:68: error: parse error before "RC5data"
rc5.c:68: warning: type defaults to `int' in declaration of `RC5data'
rc5.c:68: warning: data definition has no type or storage class
rc5.c:69: error: parse error before "enableRC5"
rc5.c:69: warning: type defaults to `int' in declaration of `enableRC5'
rc5.c:69: warning: data definition has no type or storage class
rc5.c: In function `IsrRC5':
rc5.c:78: error: `uint8_t' undeclared (first use in this function)
rc5.c:78: error: parse error before "sample"
rc5.c:82: error: `sample' undeclared (first use in this function)
rc5.c: At top level:
rc5.c:170: error: parse error before "ReadRC5"
rc5.c:171: warning: return type defaults to `int'
rc5.c: In function `ReadRC5':
rc5.c:172: error: `uint16_t' undeclared (first use in this function)
rc5.c:172: error: parse error before "retvalue"
rc5.c:174: error: `retvalue' undeclared (first use in this function)
test.c: At top level:
test.c:26: error: syntax error before "int"
test.c: In function `main':
test.c:29: error: `data' undeclared (first use in this function)
make: *** [test.o] Error 1

> Process Exit Code: 2


kann man nicht die asuro.h aus version 261 einbinden?
ich finde es nervig alle dateien wie oben einzeln einzubinden und dann sind es trotzdem nicht genug...

damaltor
14.11.2007, 23:54
die dateien liegen vermutlich im falschen verzeichnis... dateien die mit "" eingebunden werden müssen im gleichen verzeichnis liegen!

Becci
15.11.2007, 06:21
un was ist mit meiner Frage?

radbruch
15.11.2007, 09:34
U-Scheiben auf der Rückseite des Codescheibenrads (unter dem Ritzel des Radzahnrads) verhindern das Entfernen der Codescheiben von den Sensoren. Das bringt eine Verbesserung, es spielen aber noch andere Faktoren rein, z.. Radspiel, Gängigkeit der Getriebe, Ausrichtung der Motoren, Mittigkeit des TT-Balls...

mic

Becci
15.11.2007, 10:25
Das mit den Unterlegscheiben hab ich jetzt ausprobiert... bringt aber auch nichts.
Komisch ist auch, dass wenn ich die Odometriedaten von links und rechts vertausche es ebenfalls eine Rechtskurve fährt, so wie sonst auch. Data 0 fährt schneller als Data1, deshalb dachte ich, wenn ich die Odometriedaten von Data1 niedriger als Data0 setze, dass es dann geradeaus fährt.

liggi
15.11.2007, 14:22
es könnte auch am licht legen.

mfg liggi

Becci
15.11.2007, 16:19
ich hab die sensoren schon abgedeckt, sodass von außen kein licht mehr dran kommt..

Sternthaler
15.11.2007, 19:07
Hallo Becci,

deinen letzten geposteten Messdaten entnehme ich, dass dort folgendes ermittelt wird:

Left min/max, right min/max values

+00152
+00227

+00090
+00217

Diese Werte sehen mir so aus, als ob hier der AD-Wandler 8-Bit Daten liefert.
Wenn du die Werte zu 10-Bit umrechnest (nur * 4 nehmen) kommen da folgende Zahlen raus:

Left min/max
608
908

right min/max
360
868

In deinem oben angegeben Programm nutzt du aber 10-Bit-Wert.
Entsprechend solltest du deinen Wert für TRIGGERLEVEL 'so ungefähr' in die Mitte der Min-/Max-Werte legen.
Der größere Min-Wert ist bei dir: 608
Der kleiner Max-Wert ist bei dir: 868

Die Mitte (also guter Wert für TRIGGERLEVEL) liegt dann so bei 730
HYSTERESIS kannst du mit 10 lassen. Ist aber noch Reserve vorhanden, um hier größere Werte zu probieren. Auch 50 (730 - 50= 680 bzw. 730 + 50 = 780) läßt noch genüegend Spielraum zu deinen Min-/Max-Werten.

Mal zur Erklärung:
Das Problem mit dem TRIGGERLEVEL ist, dass das ein 'geratener' Wert aus dem Musterprogramm ist, der 'in der Regel' beim Asuro funktioniert.
Du hast aber andere Lichtverhältniss zuhause, und somit bekommst du auch andere Messwerte an der Odometrie.
Der Asuro versucht mit deinem Programm ja nur zwischen den hellen und dunklen Stellen auf der ODO-Scheibe zu unterscheiden, um daran zu erkennen, ob sie sich weiter gedreht hat.
Wenn du die Asuro-Bücher hast, schau dort noch einmal nach. In einem der beiden wird das sehr genau beschrieben.

Ich hoffe, dass es nun geht.
Gruß Sternthaler

Becci
15.11.2007, 19:57
Vielen Dank!
Mir war das nicht klar, dass ich das mal 4 nehmen muss, hab ich wohl überlesen in den büchern!
Werde es morgen früh im Geschäft gleich mal ausprobieren und hoffen, dass es geht! :mrgreen:

Sternthaler
15.11.2007, 23:46
Hallo Becci,
gern geschehen. (Aber erst mal abwarten was passiert)

Du hast da aber nichts überlesen. In den Büchern kommen keine Testprogramme vor, die dir 8-Bit Werte liefern. Ist leider auch nicht anhand des Testprogramms direkt zu erkennen. Da kann man nur drauf kommen, wenn man selber schon einige Versuche gemacht hat.

Was heißt eigendlich "morgen früh im Geschäft"?
Mein Chef sollte das nicht mitbekommen, wenn ich im Netz zum Asuro rumsurfe. Als BA-Studentin geht es dir da scheinbar viel besser! ;-)

Gruß Sternthaler

Becci
19.11.2007, 09:01
Hab die offizielle Erlaubnis von meinem Chef im Roboternetz zu surfen, da er mir nicht weiterhelfen kann, wenn ich ein Problem hab :x


Nachdem endlich die neue Lib geht, bin ich voller Hoffnung an mein Programm gegangen, welches mein ASURO geradeaus fahren lässt.
Ja nun hab ich aber ein anderes Problem. Mein rechter Motor fährt kurz an und blockiert dann... warum keine Ahnung. Ich dachte zuerst es liegt an meinem Programm und hab dann ein ganz kleines geschrieben, wo mein ASURO nur geradeaus fahren soll ohne die Odometriedaten auszuwerten. Auch hier blockiert mein rechter Motor. Warum???

Becci
19.11.2007, 10:37
Also mein ASURO fährt nun wieder geradeaus, wenn ich ein Programm ohne Odometrie schreibe...
Jedoch funktioniert es immer noch nicht mit meinem Odometrie-Geradeaus-Programm, was ich allerdings nicht verstehe, da letzte Woche mein ASURO immerhin noch nach vorne gefahren ist, allerdings mit einer leichten Rechtskurve....

Mein Programm nochmal (ist übrigends ein Beispielprogramm aus den ASURO Büchern)


#include "asuro.h"
//Schwellwert für die Hell/Dunkel-Unterscheidung
//Eventuell muss damit etwas variiert werden
#define TRIGGERLEVEL 680
#define HYSTERESIS 30
#define LOW 0
#define HIGH 1

int main(void)
{
unsigned int data [2];
signed int status [2]={0,0};
signed int difference=0;

Init();
MotorDir(FWD,FWD);

while(1) {
//Helligkeitswerte der Lichtschranken auslesen
OdometrieData(data);

//Wechsel linker Sensor von niedrig auf hoch?
if((status[0]==LOW)&&(data[0]>TRIGGERLEVEL+HYSTERESIS)) {
status[0]=HIGH;
difference++; }
//Wechsel linker Sensor von hoch auf niedrig?
if((status[0]==HIGH)&&(data[0]<TRIGGERLEVEL-HYSTERESIS)) {
status[0]=LOW;
difference++; }

//Wechsel rechter Sensor von niedrig auf hoch?
if((status[1]==LOW)&&(data[1]>TRIGGERLEVEL+HYSTERESIS)) {
status[1]=HIGH;
difference--; }
//Wechsel rechter Sensor von hoch auf niedrig?
if((status[1]==HIGH)&&(data[1]<TRIGGERLEVEL-HYSTERESIS)) {
status[1]=LOW;
difference--; }

//zur Sicherheit: verhindern, dass der Differenzzähler den erlaubten //Wertebereich verlässt
if(difference<-255) difference=-255;
if(difference>255) difference=255;
//StatusLED noch entsprechend der erkannten Segmente aufleuchten lassen, //grün für links, rot für rechts
StatusLED(status[0]+status[1]*2);
//Zähldifferenz passemd auf die Motoren verteilen
if(difference>0) MotorSpeed(255-difference,255);
else MotorSpeed(255,255+difference);
}
return 0;
}


Könnte mir vlt jemand ein Programm posten, welches aufgrund der Odometrie den ASURO geradeaus fahren lässt???
Danke

liggi
19.11.2007, 12:33
Ich hab das Programm etwas angepasst, bei:



if(difference>0) MotorSpeed(255-difference,255);
else MotorSpeed(255,255+difference);


hab ich:



if(difference>0) MotorSpeed(155-difference,155);
else MotorSpeed(155,155+difference);


da ja der Wert für die Geschwindigkeit nicht höher als 255 sein darf.

mfg liggi

Becci
19.11.2007, 12:48
if(difference<-255) difference=-255;
if(difference>255) difference=255;


hast du das so belassen oder die 255 auch durch 155 ersetzt?

liggi
19.11.2007, 16:45
das hab ich auch geändert, hab ich vergessen.

mfg liggi

Becci
19.11.2007, 17:43
Vielen Dank, es funktioniert jetzt...
Man kann sich wirklich nicht auf die Lösungen des Buches verlassen, da diese meist nicht stimmen, aber inzwischen hab ich den Durchblick und kanns dann verbessern :D

Sternthaler
20.11.2007, 00:36
Vorsicht Becci.
Aussagen wie "aber inzwischen hab ich den Durchblick" führen dazu, dass du ab nun alle Fragen beantworten musst. Auch die vom Prof in der Prüfung ;-)

Nur mal so zum Nachdenken:

if (difference > 0)
MotorSpeed (255 - difference, 255);
else
MotorSpeed (255, 255 + difference);
end if;
Wenn "if (difference > 0)" in den else-Zweig geht, dann muss der Wert von difference kleinergleich 0 sein.
Wenn ich nun einen negativen Wert auf 255 addiere. Ja was passiert denn da? Na, alles Verstanden?

Nun zu deinem Geradeaus-Problem.
Hast du einen Motorrad-Führerschein? (Keine falsche Frage)
Du hast ja schon den TRIGGERLEVEL auf 680 angepasst. Hier sollte also nicht mehr das Problem herkommen.

Möglicherweise liegt es an der Mechanik vom Asuro.
Mit deinen/euren letzten Änderungen, hast du den Asuro ja bei der Maximalgeschwindigkeit von 255 auf 155 reduziert. (Beim Motorradführerschein macht man das über die reduzierten PS)
Ich vermute mal, dass das ODO-Zahnrad bei dir auf der Achse recht stark hin und her wackeln kann. Wenn nun die Getriebezahnräder 'irgendwie' falsch ineinandergreifen, könnte es sein, dass das ODO-Zahnrad sich so schüttelt, das es einfach klemmt und blockiert.
Unter Axiales Spiel der ODO-Scheiben - Lösung (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=26874) oder Probleme mit Go(...) (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=285927#285927) solltest du mal nachlesen. Mit dem Suchbegriff 'Unterlegscheibe' im Asuro-Forum gibt es noch ein paar weitere Lösungen.
Dann gibt es noch das Problem, dass das kleine Zahnrad auf der Motorwelle gerissen ist. Schau dir das mal ganz, ganz genau an. Falls es tatsächlich im Eimer ist, wirst du das Problem haben, Ersatz zu finden. Bei Bedarf schickst du mir eine PN. Als Belohnung kannst du dann von mir Ersatz bekommen.

Gruß Sternthaler

Becci
20.11.2007, 06:30
Mach mir doch keine Angst :cry:
Dann nehm ich mal lieber meine Aussage zurück...

Also ich hab das so verstanden, dass die Differenz der Unterschied zwischen den beiden Rädern ist. Er zählt also die Impulse vom linken und rechten Rad und vergleicht diese. Ist nun das rechte Rad langsamer als das linke, so entsteht eine positive Zahl und es wird


if (difference>0)
MotorSpeed(255-differnce, 255);

ausgeführt.
Ist nun das rechte Rad schneller als das linke, so ensteht eine negative Zahl und es wird


else
MotorSpeed(255,255+difference);

ausgeführt. Da also eine negative Zahl entsteht, überschreitet der ASURO nie die max. Geschwindigkeit von 255.
Ich hoffe mal ich hab das jetzt wichtig verstanden :D

Ja ich hab einen Motorrasführerschein und mir ist klar, dass ich durch die 155 nur die max. Geschwindigkeit geregelt habe...
Meine Zahnräder sind nicht gerissen und das mit den Unterlegscheiben sollte auch funktionieren...

Grüßle Becci

oberallgeier
20.11.2007, 09:24
... Beim Motorradführerschein macht man das über die reduzierten PS ... Oder einfach Gas wegnehmen, aber das ist ja das Gleiche - eben Vorgabe einfach auf "155" ... !?

... Ja ich hab einen Motorrasführerschein und ... ... das ist hoffentlich kein Freud´scher Versprecher - denn das klingt ziemlich nach Hayabusa :)

Im Ernst: ich bekomme bei den asuro-Threads eher Bange, dass der asuro das richtige Weihnachtsgeschenk für mich ist.

Becci
20.11.2007, 09:29
Sry da hab ich mich wohl vertippt :D
Meinte natürlich den MOTORRADFÜHRERSCHEIN!!!

Wieso machst du dir Gedanken ob es das richtige Geschenk ist??

oberallgeier
20.11.2007, 09:35
Oooch - ich lese reichlich viel von reichlich unterschiedlichen Problemen. Aber ich will mal selber da durch. UND ich werde einfach bis nach Weihnachten KEINE asuro-Threads mehr lesen [-X :)

Becci
20.11.2007, 09:44
Jeder hat seine Probleme damit, wär ja schlimm wenn alles von Anfang an ginge, dann würde man ja garnichts lernen :D
Ich finde es sehr hilfsreich, dass einem nette Leute zurückschreiben die einem helfen, ich wäre sonst schon einige Male verzweifelt.
Oder man ließt in Threads nach und findet manchmal das selbe Problem und kann dadruch seine Fehler beheben.

radbruch
20.11.2007, 12:28
Im Ernst: ich bekomme bei den asuro-Threads eher Bange, dass der asuro das richtige Weihnachtsgeschenk für mich ist.
Suchtgefahr! (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=238949#238949) http://radbruch.roboterbastler.de/pics/smilies/smile.gif

oberallgeier
20.11.2007, 13:43
Suchtgefahr! (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=238949#238949) http://radbruch.roboterbastler.de/pics/smilies/smile.gif
Danke für die Warnung - meine Frau geht ja auch gerne alleine in die Berge :). Und - nu ja, für mich ist es sowieso ein Rückfall - ich war JAHRELANG suchtfrei. Meinen letzten Roboter hatte ich ja "auch" in den 80ern gebaut. Auch Z80, aber mit Arithmetikprozessor, nur war der Rest nicht Fischertechnik und Sperrmüll, sondern Rexroth, FRABA, STAHL und Co.

Und ausserdem! In meiner Schublade liegt sowieso ein ziemlich spezielles Fahrgestell für ein ziemlich kleines, eigenes Roboterprojekt.

Sternthaler
20.11.2007, 14:10
Mein letzter Beitrag war um 01:36 in diesem Thread.
Um 04:15 bin ich dann in's Bett gekommen.
Die Suchtgefahr ist tatsächlich nicht zu unterschätzen.

Gruß Sternthaler

Becci
20.11.2007, 14:16
hi Sternthaler, hab ichs nun richtig verstanden oder nicht? würde mich schonmal interessieren ;)

Sternthaler
20.11.2007, 22:05
Hallo Becci,
nun bin ich mit 155 Sachen an deinem Eintrag vorbeigerauscht und habe ihn nicht als Frage interpretiert.

Du hast ja alles bestens rekapituliert und bis auf eine Formulierung "Er zählt also die Impulse vom linken und rechten Rad und vergleicht diese." passt alles perfekt.
Er zählt die Impulse (Tik's) eigentlich nicht. Der Wert difference wird bei einem Tik vom linken Rad (data[0]) mit difference++ um eins vergrößert, und beim rechten Rad (data[1]) mit difference-- um eins verringert.
Somit hast du direkt die Differenz der Tik's beider Räder. Hier muss somit links und rechts nicht mehr verglichen werden.

Im Asuro-Buch Band II wird dieses Vorgehen damit begründet, dass der Inhalt in der Variablen difference deshalb nie größer als 255 bzw. kleiner als -255 werden kann, da bei einem Wert von 255 in difference die Programm-Zeile "MotorSpeed (255 - difference, 255);" ja der linke Motor auf alle Fälle zum stehen kommt (255-255=0), und somit auf dieser Motorseite keine weiteren Tik's mehr kommen.
Aber der rechte Motor fährt mit 255 weiter. Er liefert somit Tik's, und die rechte Seite verringert ja bei Tik's mit difference--; nun den Wert in difference wieder.
Irgendwann ist der Wert wieder so klein, dass "MotorSpeed (255 - difference, 255);" den linken Motor wiederbelebt, und nun geht es eben mit beiden Motoren weiter.

So, ich hoffe dass dies noch mal ein kleines bisschen mehr Durchblick gebracht hat. Auf alle Fälle hast du ja schon mehr als der Prof. (Hoffentlich liest er jetzt nicht mit.)
Bei mir hat es recht lange gedauert, bis ich beim Asuro ein bisschen Durchblick hatte. Ich denke mal, das ich mittlerweile aber immerhin schon 200 mit dem Asuro fahren darf. ;-)


Warum dein Asuro nun aber mit den 255'er-Werten anstatt den 155'ern nicht klar kommt, ist mir aber nun auch nicht klar. (Manche sagen: Der Durchblick fehlt.)
Aber immerhin ist kein Zahnrad kaput.

Gruß Sternthaler

damaltor
21.11.2007, 12:59
Jeder hat seine Probleme damit, wär ja schlimm wenn alles von Anfang an ginge, dann würde man ja garnichts lernen :D
Ich finde es sehr hilfsreich, dass einem nette Leute zurückschreiben die einem helfen, ich wäre sonst schon einige Male verzweifelt.
Oder man ließt in Threads nach und findet manchmal das selbe Problem und kann dadruch seine Fehler beheben.

Das sind keine Probleme... das sind Herausforderungen :P sonst wärs ja langweilig..

oberallgeier
21.11.2007, 14:40
... das sind Herausforderungen ...Genau - und wer (deutlich) unter seinen Möglichkeiten bleibt lebt eben weit unter seiner "Spezifikation". So ne Art low-current-life :)

Sanjay
28.02.2008, 15:23
die dateien liegen vermutlich im falschen verzeichnis... dateien die mit "" eingebunden werden müssen im gleichen verzeichnis liegen!


sorry , aber im welchem "GLEICHEN" verzeichnis meinst du denn?

bin ein echter nap in sowas xD

damaltor
28.02.2008, 22:15
in dem verzeichnis, in dem auch der quellcode ("test.c") liegt.