PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme nach Modifikation des Liniensensors



Big.B
26.01.2010, 20:27
Hallo miteinander!

Ich habe seit dem umbau des Liniensensors (für US anbau) problemme mit den Motoren sie machen keine bewegung mehr wenn ich die Linienverfolgung einschalte hier mal das Programm
#include "asuro.h"

int main(void){
unsigned int data[2];

Init();
FrontLED(ON);
MotorDir(FWD,FWD);

while(1);{

LineData(data);

if (data [0] > data [1] )
{MotorSpeed(200,150);}

else
{MotorSpeed(150,200);}
}
return 0;
}

Die Front Led funzt und wenn ich das Sensorsignal zwischen Pin 25 oder Pin 26 nach V+ messe habe ich bei abgedunkeltem sensor 0,4V bei Hellichkeit VCC (bei ausgebautem Prozessor).

Mit anderen Programmen wie z.B. dem quadrat für die Odometrie also dem :



// *******************************************
// * Odometrie für ASURO *
// * Roboter fährt ein Quadrat ab *
// * *
// * *
// * (c) 2007 Robin Gruber *
// * Details zum Code in: *
// * "Mehr Spaß mit ASURO, Band II" *
// *******************************************

#include "asuro.h"

// Schwellwert fr 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};
// Startwert fr halbe Motorgeschwindigkeit
signed int difference=0;
unsigned int distance=0;
signed int speed;
int i;
Init();
while(1) {
switch (distance) {
// Am Anfang der Strecke Vollgas
case 0: MotorDir(FWD,FWD); speed=255; break;
// Am Ende langsamer werden ...
case 150: speed=200; break;
case 160: speed=150; break;
// stehen bleiben
case 172: MotorDir(BREAK,BREAK);
// etwas warten, bis der Roboter wirklich steht
for (i=0; i<100; i++) {Sleep(255);}
// auf der Stelle nach links drehen
MotorDir(RWD,FWD);
speed=255;
// und noch vermeiden, dass die Verz�erung
// mehrmals aufgerufen wird
distance=173;
break;
case 191: speed=200; break;
case 197: speed=150; break;
case 201: MotorDir(BREAK,BREAK);
// etwas warten, bis der Roboter wirklich steht
for (i=0; i<100; i++) {Sleep(255);}
MotorDir(FWD,FWD); speed=255;
distance=0;
break;
}
// 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++;
distance++;
}
// Wechsel linker Sensor von hoch auf niedrig?
if ((status[0]==HIGH) && (data[0]<TRIGGERLEVEL-HYSTERESIS)) {
status[0]=LOW;
difference++;
distance++;
}
// 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�ler
// den erlaubten Wertebereich verl�st
if (difference<-speed) difference=-speed;
if (difference>speed) difference=speed;

// Status-LED noch entsprechend der erkannten Segmente
// aufleuchten lassen, grn fr links, rot fr rechts
StatusLED(status[0]+status[1]*2);

// Z�ldifferenz passend auf die Motoren verteilen
if (difference>0) MotorSpeed(speed-difference,speed);
else MotorSpeed(speed,speed+difference);

}
return 0;
}


Funzen Die Motoren einwandfrei.

HILFE!!

radbruch
26.01.2010, 21:40
Das Semikolon ist hier zuviel:

while(1);{

Big.B
26.01.2010, 21:48
Danke für die schnelle antwort aber so einfach wars leider nicht :-k

radbruch
26.01.2010, 22:00
Das war's nicht? Seltsam. Was tut sich hier:

#include "asuro.h"

int main(void)
{
unsigned int data[2];

Init();
FrontLED(ON);
MotorDir(FWD,FWD);
MotorSpeed(200,150);
while(1)
{
LineData(data);

if (data [0] > data [1])
StatusLED(RED);
else
StatusLED(YELLOW);
}
return 0;
}

Big.B
27.01.2010, 09:14
Er fährt eine lange rechtskurve die status led leuchtet gelb reagieren aber leider nicht auf den liniensensor.

Was ich noch vergessen habe ich musste die kontackte mit kabel verbinden weil sich beim auslösen leider 2 lötaugen abgelöst haben ich habe die verbindungen schon mehrfach überprüft konnte aber noch keinen fehler finden was aber auch am schaltplan liegen könnte fall jemand einen schaltplan der die verbindungen auf der platine zeigt hat wär es super wenn er mir den schicken könnte.

frank1210
27.01.2010, 10:14
Hatte genau das gleiche Problem. Lötaugen waren futsch, dadurch aber auch die Verbindung zu R15. Habe das Problem auch mit ner Drahtbrücke gelöst.
Schaltpläne sind in der Anleitung als PDF enthalten

Big.B
27.01.2010, 10:35
Mit diesem Schaltplan habe ich es auch repariert ich will nur ausschließen dass ich beim übertragen den schaltplans auf ober und unterseiten der Platine was durcheinander gebracht habe.





Edit:
Dank des Fotos der Platinen unterseite habe ich gerade bemerkt das ich V+ von T9 und T10 an VCC (Pin 7) und nicht an AVCC (Pin 20) gelötet habe leider war das aber woll nicht der einzige fehler :-b

frank1210
27.01.2010, 11:34
Ich hab an Hand des Schaltplans die Verbindungen( überall wo d9 und 10 rangehen) mit nem Durchgangsprüfer gescheckt, und was nötig war mit ner Drahtbrücke repariert.Selbst vcc+ musste ich neu verkabeln. Beim Selbsttest funktioniert alles. Mit nem Lienieprogramm habe ich allerdings noch nicht probiert.
Gruß Frank

Big.B
27.01.2010, 11:59
JUHU ich habs es lag woll doch an AVCC ich habe nur vergessen das ich zum testen mal andere fotowiderstände eingebaut habe nur sind die nicht so empfindlich wie sie sein sollten.


Wenn ich jetzt noch den US Sensor zum laufen bringe bin ich glücklich.