-
        

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: robi mit servo, 2 motoren und us-sensor

  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    24
    Beiträge
    1.544

    robi mit servo, 2 motoren und us-sensor

    Anzeige

    hallo leute,

    ich bin gerade dabei mir einen robi zu bauen, der rechts und links einen motor besitzt und vorne sitzt ein us-sensor auf einem servo, welcher ganz vorne befestigt ist.

    der servo soll sich drehen (in best. großen schritten) und wenn der us-sensor etwas ortet, soll der robi mit einer dementsprechenden richtungsänderung darauf reagieren. ansonsten soll der robi immer geradeausfahren.
    im prinzip ist es also ein roboter, der sich mit nur einem sensor in einem raum bewegen kann, ohne anzuecken.

    hier aber mein problem:

    ich habe die hardware schon komplett fertig, nur die software fehlt noch.
    ich habe einen atmega32, einen l293 als motortreiber und einen billigen bausatz vom großen blauen c als us-sensor.
    [shadow=red:033799863b]hier mein code:[/shadow:033799863b]

    Code:
    'header
    $regfile = "m32def.dat"
    $crystal = 16000000
    $framesize = 64
    $hwstack = 32
    $swstack = 10
    '\header
    
    'subs declarieren
    Declare Sub Abfrage()
    Declare Sub Berechnung()
    Declare Sub Servo()
    '\subs declarieren
    
    'configurieren
    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 8
    Config Adc = Single , Prescaler = Auto
    Config Servos = 1 , Servo1 = Portb.0 , Reload = 10 , Timer = Timer0
    Config Portb.0 = Output
    Config Portc.5 = Output
    Config Porta.0 = Input
    '\configurieren
    'Motoren
    Config Portb.0 = Output
    Config Portb.1 = Output
    Config Portc.6 = Output
    Config Portc.7 = Output
    '\Motoren
    
    'alias-befehle
    Ml1 Alias Portb.0
    Ml2 Alias Portb.1
    Mr1 Alias Portc.6
    Mr2 Alias Portc.7
    '\alias-befehle
    
    '(
    Pwm1a = Geschw. - - > Rechter Motor
    Pwm1b = Geschw. - - > Linker Motor
    ')
    
    'variablen deklarieren
    Dim X As Word
    Dim J As Word
    Dim S As Word
    Dim Pos As Word
    Dim Nega As Word
    '\variablen deklarieren
    
    'hauptschleife
    Do
    
    Call Abfrage
    Call Servo
    'Call Berechnung
    
    Loop
    '\hauptschleife
    
    'subs
    Sub Abfrage
    X = Getadc(0)
    If X < 200 Then                                             'ultraschall-sensor ortet nichts
    Portc.5 = 0                                                 'alles ok - kein hinderrniss
    Ml1 = 1
    Ml2 = 0
    Mr1 = 1
    Mr2 = 0
    Elseif X > 200 Then                                         'ultraschall-sensor ortet etwas
    Call Berechnung
    Portc.5 = 1                                                 'hinderniss geortet
    Ml1 = 0
    Ml2 = 1
    Mr1 = 0
    Mr2 = 1
    Waitms 800
    End If
    End Sub
    
    Sub Berechnung
    Pos = J - 20                                                'j = 20 to 170
    Pwm1a = Pos + 50                                            'pwm1a & pwm1b = 50 to 200
    Nega = Pos + 50
    Pwm1b = 250 - Nega                                          'pwm1a & pwm1b = geschw. der motoren
    End Sub
    
    Sub Servo
    If J < 170 Then
    S = S + 30
    Elseif J >= 170 Then
    S = 20
    End If
    Servo(1) = J
    Waitms 300
    End Sub
    '\subs
    
    End
    pwm1a und pwm1b sind für die geschwindigkeitsregelung der motoren.
    ich weis, dass noch viele fehler drin sind, hab manches einfach so ohne zu überlegen hineingeschrieben, ich hoffe, ihr könnt mich auf ein paar fehler aufmerksammachen, und ggbf. sogar eine lösung mit mir bearbeiten?!

    mein größtes problem ist allerdings, dass wenn ich das ganze complimieren will, eine fehlermeldung kommt:
    assignment error (servo(1) .......) blablabla
    anscheinend habe ich einen fehler beim servo-config gemacht, mir fällt er aber nicht auf!
    könntet ihr mir sagen, wo der fehler liegt?!?!

    ich bedanke mich jetzt schon für eure beiträge und freue mich auf anregungen/feststellungen.

    mfg
    chris

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.02.2005
    Ort
    Südtirol
    Beiträge
    283
    Hi, wenn mich nicht alles teuscht arbeitet der befehl Servo(1)=J mit einem Byte-Wert, du hast aber ne Word-Variable declariert. Versuchs mal mit Dim J As Byte passt von der Größe her doch auch noch

    Mfg Kalle

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    24
    Beiträge
    1.544
    hallo kalle,

    erst mal danke für deine antwort.
    allerdings war das auch nicht der fehler!!

    gruß
    chris

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.02.2005
    Ort
    Südtirol
    Beiträge
    283
    hi, mir is noch aufgefallen daß J nirgends einen definierten Wert bekommt, oder haste den Teil nur nich reinkopiert??

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    24
    Beiträge
    1.544
    oh, hab ich vergessen, funzt aber dann auch nicht, dann kommt noch eine fehlermeldung:

    assignment error [j: 0 20: 112]

    gruß
    chris

  6. #6
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    24.05.2007
    Ort
    Im hohen Norden
    Beiträge
    227
    Hi Che Guevara,
    Dein Problem liegt wo anders. Du hast eine Sub mit dem Namen Servo() deklariert. Gleichzeitig rufst Du aber die Bewegung des Servos in der Sub Servo() mit Servo(1) auf. Das geht natürlich nicht. Entweder ist es eine Sub oder ein Befehl. Beides gleichzeitig mit ein und dem selben Namen muss schief gehen. Deklariere die Sub Servo() in Serv() um und benenne die Sub selbst und deren Aufruf auch entsprechend um und schon klappt das mit dem Nachbarn.

    Hier einmal die Umbennungen als Beispiel:

    Mache aus Declare Sub Servo() nun Declare Sub Serv()
    Mache beim Aufruf aus Call Servo ein Call Serv und
    benenne die Sub Servo in Sub Serv um. Das war es dann auch schon.

    Tschuesss Peter

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    24
    Beiträge
    1.544
    hallo peter,

    danke für deine antwort, jetzt funzts!!

    daran habe ich gar nicht gedach, ist ja eigentlich logisch!!
    hast du sonst noch irgendwelche anregungen, was ich besser machen könnte?!?!
    das gilt selbstverständlich an alle

    gruß
    chris

  8. #8
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.02.2005
    Ort
    Südtirol
    Beiträge
    283
    Son mist, das is mir doch glatt nich aufgefallen

  9. #9
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    24.05.2007
    Ort
    Im hohen Norden
    Beiträge
    227
    Guten morgen,
    so genau bin ich Dein Programm nicht durchgegangen. Ich muss gestehen, als aller erstes habe ich erst einmal alles entsprechend eingerückt, damit es besser lesbar für mich war. Verstehen tue ich die folgenden Zeilen nicht:

    If J < 170 Then
    S = S + 30
    Elseif J >= 170 Then
    S = 20
    End If

    Die Variable S wird nirgends benötigt. Oder ist das hier nicht der ganze Source-Code?

    Tschuesss Peter

  10. #10
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    24
    Beiträge
    1.544
    gutn mittag

    danke, dass du mich draf aufmerksam machst!
    natürlich sollte dort j stehen, damit sich der servo dreht

    gruß
    chris

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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