PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit PollSwitch



reini89
24.06.2008, 12:32
Hallo,

ich habe mir schon einige Beiträge hier durchgelesen und versucht, mein Problem so zu lösen, allerdings habe ich es nicht ganz verstanden. Mein Problem ist, dass der Asuro sich nach einer Tasterbetägtigung dreht, jedoch dann nicht aufhört sich zu drehen, sondern die Drehung noch einige Male öfter macht. Im Forum habe ich gelesen, dass es etwas mit dem Kondensator zu tun haben könnte. Wie kann ich meinen Quelltext nun so verändern, dass das Problem nicht mehr auftritt?


#include "asuro.h"
#define HALT 100
//richtiges Programm mit Poll

int main(void)
{
Init();


unsigned int Ftrans[2];
unsigned char abgrund = FALSE;
unsigned char t;


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

while(1)
{
t = PollSwitch();
MotorDir(FWD,FWD);
LineData(Ftrans);
if(!(abgrund) && (t==0))
{
LineData(Ftrans);
if (Ftrans[1] > Ftrans[0])
{
MotorSpeed(90,230);
BackLED(OFF,ON);
StatusLED(GREEN);
abgrund = FALSE;
}
else if((Ftrans[0] < HALT) && (Ftrans[1] < HALT))
{
MotorDir(BREAK,BREAK);
MotorSpeed(0,0);
StatusLED(RED);
abgrund=TRUE;
}
else
{
MotorSpeed(230,90);
BackLED(ON,OFF);
StatusLED(YELLOW);
abgrund = FALSE;
}
}
else if(abgrund)
{
MotorDir(FWD,FWD);
MotorSpeed(120,120);
Msleep(400);
MotorSpeed(140,0);
Msleep(1400);
abgrund=FALSE;
}
else if(t>0)
{
MotorDir(RWD,RWD);
MotorSpeed(185,0);
Msleep(1100);
MotorDir(BREAK,BREAK);
MotorSpeed(0,0);
abgrund=FALSE;
}
}
while(1)
return 0;
}


Grüße Markus

pinsel120866
24.06.2008, 12:57
Hi reini89,

das liegt daran, dass du die Pollswitch() - Funktion mehrmals ausführen musst und damit sich der Kondensator C7 entlädt. Ist ein altes Leiden das Asuro.

Es gibt hierzu schon viele Beträge im Forum.

radbruch
24.06.2008, 13:09
Hallo Markus


ich habe mir schon einige Beiträge hier durchgelesen und versucht, mein Problem so zu lösen, allerdings habe ich es nicht ganz verstanden.
Es sind (meiner Meinung nach) eigentlich zwei Probleme die beim PollSwitch() auftreten. Zum einen können die ermittelten Werte durch Bauteilestreuung (oder falsche Bestückung) vom Soll abweichen. Dagegen hilft eine Anpassung der Tastenkalibierung in der Library (bei Versionen unter 2.7?) Die Formel dazu findet man am Ende der Funktion in der Datei asuro.c

Zweites Problem sind die Störungen durch laufende Motoren bei der Abfrage. Diese kann man meist durch mehrfaches Einlesen der Werte und Vergleich unterdrücken. Ein einfacher Ansatz zur Tastenabfrage (es könnte auch ein falsch erkannter Abgrund Ursache für das Drehen sein):

else if( (t>0) && (t==PollSwitch()) )

Nur wenn das zweite Einlesen den selben Wert wie t ergibt dreht der asuro (nicht getestet, weil mein asuro noch Urlaub hat ;)

Wie pinsel schreibt, gibt es zu diesem Thema aber mehrere Theorien...

Gruß

mic