-         

Ergebnis 1 bis 5 von 5

Thema: Frage bzgl. Abarbeitung des Programms

  1. #1

    Frage bzgl. Abarbeitung des Programms

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Hallo, Asuro- und C-Kenner.
    Bin grad dabei mir C beizubringen und nebenbei erprobe es an Asuro. Folgendes Problem habe ich: ich habe ein kleines Programm erstellt, wo Asuro in seiner Bewegung auf vordere Tastendrücken reagiert. Hier das Programm:

    #include "asuro.h"
    int main()
    { Init();
    while(1)
    { FrontLED(ON);
    MotorDir(FWD,FWD);
    MotorSpeed(200,255);
    Msleep(10);
    if (PollSwitch() != 0)
    {FrontLED(OFF);
    BackLED(ON,ON);
    MotorDir(RWD,RWD);
    MotorSpeed(100,250);
    Msleep(1000);
    BackLED(OFF,OFF);}
    }
    return 0;
    }

    Wie ihr nicht schwer erkennen könnt, fährt er solange gerade aus (musste Geschwindigkeit korrigieren für Geradeausfahren, mechanische Lösung folgt). Auf jeden Fall, wenn die Taste gedrückt wird, dann fährt Asuro kurz zurück mit einer kleinen Drehung und fährt weiter. Das Problem liegt in "Msleep()". Wenn ich Msleep(); nach MotorDir(FWD,FWD), MotorSpeed() auslasse, dann fährt er nur rückwärts. Wenn ich Msleep(1000) stelle dann läuft es fehlerfrei. Wenn ich Msleep(10) lasse, dann führt er Rückwärtsbewegung zufällig auch ohne an die Wand zu stoßen. Programm sollte auch ohne Msleep(10) funktionieren, doch das tut es nicht. Für mich scheint das Programm in Ordnung zu sein, aber ich hab ja auch erst gestern angefangen . Es ist so als ob bei der Abarbeitung die Bedingung in if ab und zu übersprungen wird und Anweisungen ausgeführt ohne dass die Tasten gedrückt werden. Hätte jemand ein Rat, was genau im Programm falsch läuft?

  2. #2
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.782
    Blog-Einträge
    8
    So vielleicht?

    Code:
    #include "asuro.h"
    
    char t1, t2;
    
    int main(void)
    {
    	Init();
    	t1=PollSwitch();
    	
    	FrontLED(ON);
    	MotorDir(FWD,FWD);
    	MotorSpeed(200,255);
    
    	while(1)
    	{
    		t2=t1;
    		t1=PollSwitch();
    		if((t1==t2) && (t1!=0))
    		{
    			FrontLED(OFF);
    			BackLED(ON,ON);
    			MotorDir(RWD,RWD);
    			MotorSpeed(100,250);
    			Msleep(1000);
    			BackLED(OFF,OFF);
    			FrontLED(ON);
    			MotorDir(FWD,FWD);
    			MotorSpeed(200,255);
    		}
    	}
    	return 0;
    }
    (ungetestet)

    Die Tastenwerte sind nur gültig, wenn zweimal der selbe Wert eingelesen wurde.

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.167
    Stimmt. Mit Motordrehungen können ab und zu falsche Tastenerkennungen platz finden. Mit MSleep(
    1000) wird 1 Sekunde gewartet. Aber mit MSleep(10) nur 10 Millisekunden, deshalb passiert das öfter. Entweder den Motortreibung sollte getrennt werden von den Bordspannung Vcc, und damit von den Tasterschaltung. Oder man benutzt eine Softwaremäßige Filter, wie Radbruchs Lösung.

  4. #4
    Danke sehr für die Hilfe, jetzt gehts. muss nur noch das Problem mit geradeausfahren lösen, denn selbst mit diesen Korrektruwerten für Geschwindigkeit fährt er im Kreis mit einem Radius von etwa 40 cm. Der rechte Motor ist "schwach", muss nach der Lösung noch suchen. Das Thema kann man als erledigt abstempeln. Danke nochmal!

  5. #5
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.782
    Blog-Einträge
    8
    Hallo

    Tipp fürs Motorproblem: Tausche die Motoranschlußleitungen (und wirklich nur die Anschlußleitungen!) zwischen dem linken und dem rechten Motor. Bleibt der rechte Motor auch an der linken H-Brücke schwach liegt das Problem am rechten Antrieb oder Getriebe. Wandert die Schwäche nach links ist der Fehler bei der rechten H-Brücke zu suchen.

    Mechanische Fehler: Achsen schief, kein Zahnspiel am Motorritzel, Klemmring an der Radachse zu eng, Achsen nicht sauber.... dreht das Rad leicht wenn das Motorritzel nicht im Eingriff ist? Motor mit zuviel Kleber befestigt? Kunststoffkappe am Motor nicht ganz reingedrückt?

    Elektrische Mängel: Falsche Bauteile/Widerstandswerte, Transistoren vertauscht (PNP/NPN), Freilaufdioden D1-8 verpolt, Lötbrücken oder "kalte" Lötstellen, Verunreinigungen, abgebrochene Lötaugen oder unterbrochene Leiterbahnen...

    Viel Spass und Erfolg bei der Fehlersuche.

    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

Ähnliche Themen

  1. [ERLEDIGT] Frage bzgl. Atmega 32 und Netzteil
    Von ijjiij im Forum Elektronik
    Antworten: 11
    Letzter Beitrag: 17.01.2012, 08:39
  2. frage bzgl RS-FF
    Von Dreamer001 im Forum Elektronik
    Antworten: 6
    Letzter Beitrag: 30.05.2007, 18:21
  3. Antworten: 3
    Letzter Beitrag: 26.03.2007, 16:12
  4. Frage bzgl Schottky
    Von Masta Pete im Forum Elektronik
    Antworten: 3
    Letzter Beitrag: 05.11.2006, 10:32
  5. Frage zu Relais und bzgl Crumb128 und littleUSB
    Von Chattychan im Forum Elektronik
    Antworten: 8
    Letzter Beitrag: 12.04.2006, 20:46

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •