PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LED's flackern leicht



TOYO
07.02.2007, 23:31
Hallo,

ich habe gestern meinen Asuro bekommen und auch gleich zusammengebaut. Trotz einiger kleiner Hinternisse (Widerstände haben wurden falsch geliefert aber is ja nicht schlimm) läuft er jetzt soweit.

Ich hab mich auch gleich ans programmieren gemacht und nachdem ich auch schon einige Erfahrung in C durch das Studium gesammelt habe geht das auch recht angenehm von der hand.

Nun hab ich aber trotzdem mal ein kleines Problem.

Aber zuerst mal das Programm:




...

int main(void)
{
init();
while(1)
{
if(PollSwitch==0)
{
MotorDir(FWD,FWD);
MotorSpeed(100,100);
FrontLED(OFF);
BackLED(OFF,OFF);
StatusLED(GREEN);
}
else
{
BackLED(ON,ON);
StatusLED(RED);
FrontLED(ON);
MotorDir(BREAK,BREAK);
}

FrontLED(OFF);
}
return 0;
...


So nun möchte ich das die Lampen beim fahren aus sind. Wenn er ein Hinternis berührt soll er anhalten und die LEDs sollen angehen.
Mein Problem ist hier, dass die LEDs während der Fahrt ab und zu flackern.
Ist dies zurückzuführen auf den Zusammenbau (Anfänger :wink: ), auf den Quellcode oder ist dass normal?

Könnte der Einsatz von Prototypen den Fehler beheben?
Beim Selftest klappt sweit alles.

mfg TOYO (neuster Asuro-süchtiger)


Es könnte aber auch am IF-Befehl liegen. Ich Probier mal ne while-Schleife.
Nein dat wars auch nicht. Für Hilfe wäre ich dankbar.

radbruch
08.02.2007, 04:59
Hallo,

PollSwitch() arbeitet nicht sehr zuverlässig, versuche es mal so:
...
if ((PollSwitch==0) && (PollSwitch==0))
...

Bei meinem asuro klappts so ab 3 Abfragen ohne Störungen.

gruß

mic

TOYO
08.02.2007, 10:37
Okay danke für den Tipp Radbruch,

ich werds gleich ausprobieren. Hängt das damit zusammen dass ich eine Abfrage für die Kollisionstaster mache oder hat das nen anderen Grund.

mfg TOYO

PS: Der Käfer-Asuro is ja mal schwer geil

TOYO
08.02.2007, 11:01
Also ich habs mal ausprobiert,

Bei mir klappts so:



...
if((PollSwitch>0) && (PollSwitch>0) && (PollSwitch>0))
...


Kann mir jemand sagen woran das liegt?

mfg TOYO

radbruch
08.02.2007, 12:00
Das liegt in erster Linie an den Bauteiletoleranzen (trotz der 1%er). Zusätzlich stört noch der "Dreck" der laufenden Motoren die Auswertung der Taster.

Etwas Feintuning kann man in der asuro.c betreiben. In der Funktion PollSwitch() wird dort am Ende der Wert so umgeformt das jeder Taster einem Bit im Rückgabewert entspricht. Meist hilft es den 60er-Wert in der Rechnung zu ändern. Die Tasten sollten die Werte 1,2,4,8,16 und 32 liefern. Dann kann man auch mehrere Taster gleichzeitig abfragen, PollSwitch() liefert dann immer die Summe aller gedrückter Taster. So ergibt z.B. der linke und der rechte Taster 33, drei seitliche 7 bzw. 56. Alle zusammen ergeben 63.

Gruß

mic

damaltor
08.02.2007, 14:23
da die widerstände nicht 100%ig genau sind, passiert sowas, solche probleme hat der asuro nunmal. er fährt auch nicht geradeaus, und die odometrie mach gelegentlich mucken. aber genau das ist die herausforderung =)

zu deinem programm: die funktion Init(); muss groß geschrieben werden!

Das flackern würde ich auf kleinere störungen zurückführen, mach dir keine sorgen drum... =)

TOYO
09.02.2007, 19:23
Danke erstmal für die tollen Antworten,

also ich muss sagen, dass mein Asuro sehr wohl geradeaus fährt. Hat allerdings auch lange gedauert. Bei mir hing der Faktor geradeausfahren maßgeblich vom "anpressdruck" (sofern man davon reden kann) der Räder auf die Platine ab.

Wenn ich schonmal hier bin wollte ich auch noch fragen ob jemand schon erfahrung damit gemacht hat ein eigenes Programm in C zu schreiben, mit dem Daten vom Asuro empfanen bzw. gesendet werden können und ob jemand ne gute Quelle hat. Ich hab zwar schon einige Quellen über google.de und c-plusplus.de gefunden wäre aber trotzdem dankbar wenn mir jemand ne gute Quelle posten könnte.

danke schonmal im voraus

mfg TOYO

damaltor
09.02.2007, 20:09
wieso benutzt du nicht einfach die anleitung als quelle? da steht ganz genau was man tun muss um daten zu senden und zu empfangen...

TOYO
09.02.2007, 22:45
Hallo Damaltor,

ich glaub ich hab mich da etwas unverständlich ausgedrückt, sorry. Wenn ich Daten an den Asuro senden möchte, mache ich das über das Hyperterminal. Allerdings möchte ich alternativ zum Hyperterminal ein Programm schreiben mit dem ich den Datenaustausch steuern bzw. verarbeiten kann um zum beispiel Odometrie-daten besser auswerten zu können.
Jetzt bräuchte ich eine gute Seite, die die Ansteuerung der seriellen Schnittstelle anhand von C beschreibt, vorzugsweise Konsole.

mfg TOYO

damaltor
09.02.2007, 23:06
hmm das klingt nicht ganz so einfach. du könntest dich evtl mal mit Osser (aus dem forum) in verbindung setzen, der hat bereits ein alternatives terminal und flash-programm geschrieben, vielleicht kann der dir helfen.

TOYO
10.02.2007, 11:33
Danke für den Tipp Damaltor,

ich hab jetzt im Netz schon ne recht nette library gefunden mit der das möglich sein sollte. Ich werd's allerdings erst nach meinen Klausuren ausprobieren können da es zeitlich sonst etwas knapp wird. Bis dahin steht "Düsi" auf meinem Schreibtisch und schaut mir beim lernen zu :lol: