Jop so habe ichs die gedruckten leiter bahnen sind unten
obwohl eigendlich auf beiden Leiterbahnen gedruckt sind ich habe die vielen bahnen unten und die schrieften oben und die Sensoren stehen nach oben
die gedruckten leiterbahnen der platine müssen UNBEDINGT nach unten zeigen. ansonsten kann gar nichts klappen. dann ist nämlich einer der adcs auf vcc gelegt. die platine ist leider nicht symmetrisch, man muss vor dem zusammenbau darauf achetn, dass man die teile auf der seite anlötet, auf der keine gedruckten leitungen sind. ansonsten, wenn die leiterbahnen bei dir auf der seite sind, wo die teile sind... dann hast du leider echt mal pech gehabt, die platine ist so recht nutzlos.
Jop so habe ichs die gedruckten leiter bahnen sind unten
obwohl eigendlich auf beiden Leiterbahnen gedruckt sind ich habe die vielen bahnen unten und die schrieften oben und die Sensoren stehen nach oben
Ich glaube den fehler gefunden zu haben es ligt glaube ich eher am asuro ich habe jetzt mal den selbstest wieder drauf gemacht und die phototransistoren drauf gesteckt und siehe da die linienverfolgung funktioniert nicht die Linke back LED ist dauernd an obwohl es dunkel ist und die rechte glimmt leicht
Allerdings funktioniert mein LCD noch einwandfrei
hmm.. dann liegts evtl tatsächlich dran. die linienverfolgung benutzt die gleichen adcs wie der sensor, der geht also nur wenn auch die linienverfolgung geht... lass dir mal die phototransistor-werte ausgeben über hyperterm
Ok funktioniert wieder aber snake version geht immer noch nicht leider
miss mal, welche spannung an dem adc anliegt. also minus des multimeters an masse, plus an den pin der erweiterungsplatine (adc2 oder adc3, je nachdem wo der sknakevision angeschlossen ist). und dann machst du was kaltes davor, und machst das nochmal, und dann ne kerze oder so und wieder. welche spannungen liegen dann an?
Also habe jetzt gemessen habe den multie an masse gehalten dann die spannung gemessen wenn ich ein teelämpchen vor halte sind es 1,87 volt an beiden pins (ADC2und3) und wenn ich eine kalte flasche sprudel davor halte ist die Spannung auf 0 Volt. V+2 und V+1 sind kontinuerlich auf 10,53 Volt
Habe den Quelltext mal geändert für die auswertung
Das funktioniert aber leider auch nicht ich weiss nemmer weiterCode:#include "asuro.h" #define THRESH1 20 #define THRESH2 80 #define THRESH3 200 void ThermalData(unsigned int *data) { ADMUX = (1 << REFS0) | (1 << REFS1) | IR_LEFT; ADCSRA |= (1 << ADSC); while (!(ADCSRA & (1 << ADIF))); ADCSRA |= (1 << ADIF); data[0] = ADCL + (ADCH << 8); ADMUX = (1 << REFS0) | (1 << REFS1) | IR_RIGHT; ADCSRA |= (1 << ADSC); while (!(ADCSRA & (1 << ADIF))); ADCSRA |= (1 << ADIF); data[1] = ADCL + (ADCH << 8); } int main(void) { unsigned int tdata[2],offset[2]; unsigned int speed; signed int diff,sum; Init(); DDRD&=~(1<<6); PORTD|=(1<<6); MotorDir(FWD,FWD); offset[0]=0; offset[1]=0; while(1); { ThermalData(tdata); if ((PIND&(1<<6))==0){ offset[0]=tdata[0]; offset[1]=tdata[1]; } if (tdata[0]>offset[0]) tdata[0]-=offset[0]; else tdata[0]=0; if (tdata[1]>offset[1]) tdata[1]-=offset[1]; else tdata[1]=0; sum=tdata[0]+tdata[1]; if (sum>THRESH1) { StatusLED(GREEN); speed=140; if (sum>THRESH2) { StatusLED(YELLOW); speed=200; } if (sum>THRESH3) { StatusLED(RED); speed=255; } diff=((signed)tdata[0]-(signed)tdata[1])*32/sum; if (diff>4) { BackLED(ON,OFF); MotorSpeed(0,speed); } else if (diff<-4) { BackLED(OFF,ON); MotorSpeed(speed,0); } else { BackLED(OFF,OFF); MotorSpeed(speed,speed); } } else { StatusLED(OFF); BackLED(OFF,OFF); MotorSpeed(0,0); } } return 0; }
also offensichtlich funktionieren die sensoren. welche farbei hat die statusled bei dir?
durchgehend grün. Ich habe im buchgelesen das es mit der Linienverfolgung simmlich gleich ist jetzt habe ich den PhototransistorenAbgleichtest drauf gemacht und es funktioniert auch mit der erweiterung halt nur mit wärme und kälte wenn es einfach so läuft ohne was vordrann ist sind die werte bei ca. 53 wenn ich ein teelicht vorndran mache sind die werte bei ca 210 wenn ich den taster drücke steht es da und wenn ich meine hand vorhalte die in mom kalt ist sind die werte bei ca. 20
EDIT: Lol na gut mit dem normalen Linienverfolgungs programm funktioniert eswenn er keine Wärmequelle hat ist die StatusLED grün und er sucht sie sobald er eine hat fährt er vorwärts die status LED wird rot.Code://**************************************************************************************************** // Liniefolgeprogramm // entwickelt aus dem mitglieferten Demoprogramm // // Geschwindigkeiten wurden geändert, das Verhalten invertiert (Bei Verlassen der Ideallinie wird abgebremst statt beschleunigt) // // letzte Änderung 29.11.2004 #include "asuro.h" #define SPEED 0xBF int speedLeft,speedRight; unsigned int lineData[2]; int ADOffset; void LineLeft (void) { speedRight -=2; if (speedRight < 0x5F) speedRight = 0x5F; } void LineRight (void) { speedLeft -=2; if (speedLeft < 0x5F) speedLeft = 0x5F; } void LineDemo(void) { int i; unsigned char j; FrontLED(ON); for (j = 0; j < 0xFF; j++) LineData(lineData); LineData(lineData); ADOffset = lineData[0] - lineData[1]; speedLeft = speedRight = SPEED; MotorSpeed(speedLeft,speedRight); for(;;) { LineData(lineData); i = (lineData[0] - lineData[1]) - ADOffset; if ( i > 4) { StatusLED(GREEN); LineLeft(); } else if ( i < -4) { StatusLED(RED); LineRight(); } else { StatusLED(YELLOW); speedLeft = speedRight = SPEED; } MotorSpeed(speedLeft,speedRight); } } int main(void) { Init(); LineDemo (); while(1); return 0; }
ok, das ist doch schonmal nicht schlecht.
ich vermute mal, dass mit den drei if-abfragen was nicht stimmt. bitte prüfe hier nochmal genz genau die klammern {}, denn aus irgendeinem grund sind die if-abfragen verschachtelt. prüfe nochmal die vorlage, da stimmt was nicht.
sollte das programm exakt so stimmen, dann melde dich nochmal, ich denke mir dann was aus.
Lesezeichen