- fchao-Sinus-Wechselrichter AliExpress         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: Blutiger Anfänger mit ein paar Fragen

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    21.03.2005
    Ort
    Ulm
    Alter
    36
    Beiträge
    519

    Blutiger Anfänger mit ein paar Fragen

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo

    Ich bin gerade dabei das Programm für meinen Bot zu schreiben.
    Der Bot verfügt am Anfang (tja das Geld ^^) nur über 2 Kollisionstaster als Sensoren. Die Taster sind links und rechts von der Front des Bots positioniert.

    Wenn der (auf die Wand gesehen) linke Sensor was meldet, soll der Bot seine 2 Räder gegeneinander drehen (nocht nicht das Problem) und das nur für eine ganz bestimmte Zeit. Maybe 1,5s. Wie mache ich das genau mit der Zeit?

    Hier mal mein ganzer Code:

    Code:
    'Version 1.0
    '----------------------------------------------------------
    $regfile = "m8def.dat"                                      'ATmega8
    $crystal = 3686411                                          'Quarz: 3686411 Hz
    
    Ddrd = &B01111000                                           'Pin PD3 bis PD6 als Ausgänge
    Portd = &B00000000                                          'Pin PD3 bis PD6 auf Low
    
    Ddrb = &B00000000                                           'Pin PB4 und 5 als Eingang
    Portb = &B00110000                                           'Pin PB4 und 5 auf High
    
    Do
      Portd.3 = 1                                               'Motoren drehen in gleiche Richtung
      Portd.5 = 1
    
      If Pinb.4 = 0 Then
         Portd.3 = 1
         Portd.4 = 0
         Portd.5 = 0
         Portd.6 = 1                                            'Motoren drehen gegeneinander
      Else
         Portd.3 = 1
         Portd.4 = 0
         Portd.5 = 1
         Portd.6 = 0
    Loop
    End
    Bitte die Motoreneingänge und deren Anschlüsse mal außen vor lassen. Habe ich nur kurz geschrieben, ich weis ned ob der so entgegensetzt drehen würde. Dienen nur als Orientierung. Es geht ja eher um die Dauer.

    Würde das so denn bis jetzt funktionieren? Die Platine ist leider noch nicht fertig, möchte mich nur mal im Vorfeld damit vertrauter machen damits nachher leichter läuft.

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    Du könntest einen Wait-Befehl einfügen:
    wait 1 'eine Sekunde warten
    waitms 1500 '1,5 sekunden warten

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    21.03.2005
    Ort
    Ulm
    Alter
    36
    Beiträge
    519
    Naja er soll ja nicht warten, er soll ja die If-Schleife eine ganz bestimmte Zeit lang durchführen.

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.06.2004
    Ort
    Bad Schussenried in Oberschwaben
    Alter
    34
    Beiträge
    1.461
    Hi!

    Hm. Das ist schon schwiriger! Du könntest einen Timer 1,5 Sec warten lassen, und dann in der ISR eine Variable ändern, die dann die IF-Abfrage abschaltet.

    Also mal quick & dirty:

    Code:
    '* Timer Configurieren und starten
    
    Dim stop as byte
    
    stop = 255
    
    '...
    '...
    
    '* Timer Starten
    
    Do while stop = 255
    
    ' Hier dein Code... ... ... ...
    
    loop
    
    
    'rest d. codes... ... ...
    
    '...
    '...
    
    End
    
    
    
    timer_ISR:
    '... Initialisierungs. und anderer Kram
    stop = 0
    Grüße,
    Tobi
    http://www.tobias-schlegel.de
    "An AVR can solve (almost) every problem" - ts

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    Also er soll doch, wenn er die Wnad berührt (Pinb.4 = 0?) sich 1,5 Sekunden lang drehen und dann weiter fahren, oder? Ich gehe mal davon aus, das PortD.3 bis 6 die Richung vorgeben?!

    Also eignetlich musst du doch nur die Ausgägne so setzen wie du willst, 1, 5 Sekunden warten und dann wieder zurücksetzen. Leider werde ich aus deinem Code nciht ganz schlau, aus deiner Frage leider auch nicht

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.06.2004
    Ort
    Bad Schussenried in Oberschwaben
    Alter
    34
    Beiträge
    1.461
    HI RCO!

    Vielleicht möchte er während des drehens weitere Kollisionschecks druchfüren...

    Grüße,
    tobi
    http://www.tobias-schlegel.de
    "An AVR can solve (almost) every problem" - ts

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    Dann wäre eigentlich sinnfoller, die Sensoren direkt über Interrupts laufen zu lassen. Man könnte z.B. auch mehrere Kollisionstaster über Dioden an einen Interrupt legen und dann in der Routine schauen, welcher Taster es denn nun war.

  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    21.03.2005
    Ort
    Ulm
    Alter
    36
    Beiträge
    519
    Ok ich versuchs mal zu erklären, war glaub echt Käse

    Am Besten wir fangen nochmal von vorne an.

    Also mal angenommen am Pin PB4 wäre ein Taster
    Sobald der Taster gedrückt wird soll/ist PINB.4 = 0.
    Daraufhin sollen die Motorenausgänge zum Einleiten des Ausweichens eingeleitet werden.

    Portd.3 = 1 für Motor 1 bekommt Saft und Portd.6 = 1 für Motor 2 ebenfalls. Die anderen 2 Ausgänge für die Motoren stehen so lange auf 0 (Portd.4 = 0 ; Portd.5 = 0). Die Motoren drehen jetzt gegeneinander und er wendet sich. Das soll er dann zum Beispiel 1,5s lang tun und danach in die Hauptroutine zurückfallen in denen er den Pins PD3 und PD5 Saft gibt und die anderen 2 auf Null setzt.

  9. #9
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.06.2004
    Ort
    Bad Schussenried in Oberschwaben
    Alter
    34
    Beiträge
    1.461
    Hi!

    Ja! Dann ist deine Funktion wait 1 oder waitms 1500.

    Also (quick & dirty):
    Code:
    'Code drehsequenz einleiten
    
    waitms 1500
    
    'Weiterer Code
    Wie RCO das so meint.
    Interrupts sind sowieso eine super Idee!

    Grüße,
    Tobi
    http://www.tobias-schlegel.de
    "An AVR can solve (almost) every problem" - ts

  10. #10
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    Vielleicht besteht da ein Missverständniss, "wait" heißt ja nicht, das er garnix macht, sondern nur das der Prozessor nix macht, alle Zustände bleiben ja erhalten, hast du also Pins/Ports gesetzt und sagst "Waitms 1500" dann wird er, wenn vorher so eingestellt sich 1,5 Sekunden lang drehen.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

Labornetzteil AliExpress