-         

Seite 1 von 4 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 40

Thema: Servo steuern

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    31.01.2004
    Beiträge
    585

    Servo steuern

    Anzeige

    Code:
    $regfile = "m8def.dat"
    $crystal = 4000000
    
    Config Portb = Output
    Dim X As Integer
    
    Enable Interrupts
    
    Config Servos = 1 , Servo1 = Portb.4 , Reload = 10
    Servo(1) = 50
    
    Do
    Input , X
    If X = 1 Then Servo(1) = 100 Else If X = 2 Then Servo(1) = 20
    Loop

    Wenn der AVR eine 1 empfängt, schaltet der Servo auf stellung 100, wenn er dann aber eine 2 empfängt, tut sich nichts mehr.

    Aber es ist doch eine Endlosschleife?
    Das INPUT funktioniert anscheinend nur ein mal, dann geht nichts mehr.

    Wie stell ich das am besten an?

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Hallo,

    kann man in Bascom von UART auch integerwerte empfangen,
    wenn nicht, würde ich die Abfrage auf Strings umstellen(das X), dann schauts zumindest besser aus, finde ich.

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    31.01.2004
    Beiträge
    585
    Das Senden und Empfangen funktioniert einwandfrei, die 2 Taster (einmal X=1 einmal X=2) reagieren auch, aber immer nur einmal, dann ist schluss.

    Muss man da timer oder Interrupts oder so verwenden? Wie macht man das?

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    geht da nicht noch das $baud ab, oder wie ist das defaultmässig ?
    Und ohne komma beim Input ?

    Edit:
    Interrupts sind ja aktiviert für den Servo.

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Stimmen die MHz ?

    bei mir funktionierts ansonsten !

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    31.01.2004
    Beiträge
    585
    Das Komma ist gesetzt, $baud habe ich vergessen, funktioniert aber trotzdem nicht!

    Quarz is ein 4MHz, Fusebits richtig gesetzt.

    Wie funktioniert es bei dir?
    Anfangs fährt der Servo in Stellung 50, dann wenn man einen Taster drückt, entweder auf Stellung 100 oder 20, aber dann ist schluss.
    Sobald einma ein Taster gedrückt wurde, reagieren die nicht weiter!

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Ich hab das RN-Meag8 Board,
    da hab ichs auf PortB.4 angeschlossen, mit 7.32Mhz
    Bei meinem Servo geht der Bereich von 40 bis 140,
    ich hab nur die Werte geändert, aber ansonsten macht der das so wie von Dir gewünscht, bei 1 die eine, und bei 2 die andre Position, und auch hin und her usw.

    Bau mal einen Print ein (irgendein Text ausgeben), um zu sehen, ob die Zeichen richtig ankommen im Terminal, dort hab ich auch gemerkt, das ich noch Deine MHz drin stehen hatte.

  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    31.01.2004
    Beiträge
    585
    Liegt es vielleicht an meinem "Sender"? :

    Code:
    $regfile = "m8def.dat"
    $crystal = 4000000
    $baud = 9600
    
    Config Pind.5 = Input
    Config Pind.6 = Input
    Dim X As Integer
    Dim Y As Integer
    X = 1
    Y = 2
    
    Do
    If Pind.5 = 0 Then Print X
    If Pind.6 = 0 Then Print Y
    Loop

    Wird hier vllt. nur einmal gesendet? Wie muss der Code aussehen?

  9. #9
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    ich hab mal ein kleines Testprogramm zu positionieren des Servo gebaut:

    die If-Abfrage begrenzt nur den Bereich, muss evtl. angepasst werden.

    Code:
    $regfile = "m8def.dat"
    $crystal = 7372800
    $baud = 9600
    
    
    Config Portb.4 = Output
    Dim X As Integer
    
    Enable Interrupts
    
    Config Servos = 1 , Servo1 = Portb.4 , Reload = 10
    Print "Hallo"
    
    Servo(1) = 100
    
    Do
    
    Input X
    If X < 139 And X > 36 Then
        Servo(1) = X
    End If
    
    Loop
    
    
    End
    im Terminal direkt den Wert eingeben und Enter drücken, schon fährt der Servo.
    Das "Hallo" ist zum überprüfen der Verbindung, wenn das kommt passt die Geschwindigkeit auf beiden Seiten.

  10. #10
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    31.01.2004
    Beiträge
    585
    Beide AVR's sind nicht mit dem PC verbunden, habe deshalb keine Möglichkeit mit dem Terminal.

    Aber die 1 und die 2 kommen richtig an, und werden auch interpretiert, aber eben nur ein einziges mal.

    Liegt es wiegesagt am Sender? (oben)


    edit:
    Es liegt bestimmt am senden.
    Dein Code funktioniert, aber nachdem ein Taster gedrückt wurde, kommen wohl keine Signale mehr an.

    Wie richte ich mit Bascom eine Schleife ein, die immer einen Port ausliest und entsprechend mit Print sendet.

Seite 1 von 4 123 ... LetzteLetzte

Berechtigungen

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