-
        

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

Thema: Servosteuerung

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    14.09.2009
    Beiträge
    15

    Servosteuerung

    Anzeige

    Hi,

    Ich habe hier 5 Servos und ein atmega232.
    Ich möchte die Servos über die serielle schnittstelle mit dem pc steuern.

    Zum programmieren habe ich Bascom und visual c++ 2005.
    Die frage ist wie soll die kommunikation genau ablaufen, bzw was schicke ich in welcher form?
    Ich brauche ja einmal die servo-id und den winkel.

    Ich verwende diese klasse hier:http://msdn.microsoft.com/de-de/libr...ort.write.aspx

    MfG

    EDIT: ich meinte atmega32 natürlich

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von Willa
    Registriert seit
    26.10.2006
    Ort
    Bremen
    Alter
    37
    Beiträge
    1.269
    Eine sehr gut funktionierende, aber evtl. nicht die eleganteste Methode ist es Strings zu senden. z.B. "A30" für Servo1 auf 30° und "B230" für das nächste Servo auf 230°. Im µC empfängst du die Strings, und kontrollierst welcher Buchstabe am Anfang des Strings ist. Der wird dann abgeschnitten und der Rest zu einem Integer oder Byte konvertiert.
    In diesem Wiki Beitrag (ganz unten) findest du ein Beispiel für Basic. Das lässt sich einfach verstehen.....
    http://www.rn-wissen.de/index.php/Jo...eines_Roboters
    Viele Grüße, William
    -> http://william.thielicke.org/

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    14.09.2009
    Beiträge
    15
    Hey Willa,
    Danke für den Link, ist ganz gut erklärt
    Habe auch schon etwas ausprobiert:


    Code:
    $regfile = "m32def.dat"
    $framesize = 32
    $swstack = 32
    $hwstack = 32
    $crystal = 8000000
    $baud = 9600
    
    Config Servos = 5 , Servo1 = Portb.0 , Servo2 = Portb.1 , Servo3 = Portb.2 , Servo4 = Portb.3 , Servo5 = Portb.4 , Reload = 10
    Config Portb = Output
    
    Enable Interrupts
    
    Dim Inputstring As String * 5
    Dim Data_available As Byte
    Dim A_empfangen As Byte
    Dim B_empfangen As Byte
    Dim C_empfangen As Byte
    Dim D_empfangen As Byte
    Dim E_empfangen As Byte
    Dim A_string As String * 5
    Dim B_string As String * 5
    Dim C_string As String * 5
    Dim D_string As String * 5
    Dim E_string As String * 5
    Dim A_integer As Integer
    Dim B_integer As Integer
    Dim C_integer As Integer
    Dim D_integer As Integer
    Dim E_integer As Integer
    
    
    Do
       Print "Test"
       Data_available = Ischarwaiting()
       If Data_available > 0 Then
          Input "" , Inputstring
          A_empfangen = Instr(inputstring , "A")
          B_empfangen = Instr(inputstring , "B")
          C_empfangen = Instr(inputstring , "C")
          D_empfangen = Instr(inputstring , "D")
          E_empfangen = Instr(inputstring , "E")
          Print Inputstring
    
          If A_empfangen = 1 Then
             A_string = Mid(inputstring , 2)
             A_integer = Val(a_string)
          End If
          If B_empfangen = 1 Then
             B_string = Mid(inputstring , 2)
             B_integer = Val(b_string)
          End If
          If C_empfangen = 1 Then
             C_string = Mid(inputstring , 2)
             C_integer = Val(c_string)
          End If
          If D_empfangen = 1 Then
             D_string = Mid(inputstring , 2)
             D_integer = Val(d_string)
          End If
          If E_empfangen = 1 Then
             E_string = Mid(inputstring , 2)
             E_integer = Val(e_string)
          End If
       End If
    
       Servo(1) = A_integer
       Servo(2) = B_integer
       Servo(3) = C_integer
       Servo(4) = D_integer
       Servo(5) = E_integer
       Waitms 1000
    
    Loop
    End
    Aber noch nicht einmal Print "Test" funktioniert,
    weisst du woran es liegen könnte?

    Mfg

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.186
    Wie sieht denn deinen Hardware aus?
    Schon was anderes probiert das auch wirklich alles funktioniert.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    14.09.2009
    Beiträge
    15
    Ok RX und TX waren nicht connected...

    Jetzt funktioniert zumindest Print.

    Aber das Programm da oben läuft die Schleife nur solange durch bis ich ihm etwas sende und gibt dann bei Print Inputstring, wenn ich zum Beispiel "A100" eingebe, "A10 A1" zurück.

    Irgendwie komisch, sieht so aus als würde mein Programm abstürzen.

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    14.09.2009
    Beiträge
    15
    Mein Code am Pc sieht so aus:

    Code:
    serialPort1->WriteLine(textBox1->Text->ToString()+"\r");
    \r ist doch das gleiche wie chr(13)?

    Ich checks nicht, warum das nicht funktioniert

  7. #7
    Erfahrener Benutzer Roboter Genie Avatar von Willa
    Registriert seit
    26.10.2006
    Ort
    Bremen
    Alter
    37
    Beiträge
    1.269
    \r ist doch das gleiche wie chr(13)?
    Wie kommst du auf diesen Gedanken...? "\r" wird als String versendet, da kommt VB bestimmt nicht auf die Idee das vorher in einen CR zu verwandeln. Kann ich mir jedenfalls nicht vorstellen. In der Hilfe von VB.NET steht bestimmt eine Lösung.
    Viele Grüße, William
    -> http://william.thielicke.org/

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    14.09.2009
    Beiträge
    15
    jo ist mir klar aber ich schreibe in c++

  9. #9
    Erfahrener Benutzer Roboter Genie Avatar von Willa
    Registriert seit
    26.10.2006
    Ort
    Bremen
    Alter
    37
    Beiträge
    1.269
    Ahso :-D Deswegen die komische Syntax.... und verwandelt c++ Strings in einen CR? Oder sendet das einfach diesen String? Gibt es in c++ kein chr(13)?
    Viele Grüße, William
    -> http://william.thielicke.org/

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    14.09.2009
    Beiträge
    15
    Ok jetzt funktionierts
    Ich musste einen Buffer erstellen..
    Danke nochmal

    Meint ihr die Übertragung funktioniert noch wenn ich einen RS232-to-Usb-Adapter benutze?

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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