-         

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

Thema: Codebeispiel (Bascom Basic) rn-control-->I2C-->sn20 ?

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    03.12.2004
    Alter
    29
    Beiträge
    33

    Codebeispiel (Bascom Basic) rn-control-->I2C-->sn20 ?

    Anzeige

    Hi @ all
    Ich hab jetzt schon 10 min die "Suchfunktion" strapaziert und hab leider nur Codebeispiele zum Ansteuern eines s20 in C gefunden.

    Leider komme ich mit der I²C-Adresse "0xC2" nicht zurecht.

    Hab es so versucht:
    Code:
    Const Servoid = 0xc2 
    Sub servoset() 
    Local Befehle As String * 2
    Befehle = Chr(63) + Chr(200)
    I2csend Servoid , Befehle , 2
    End Sub
    Es kommen aber Fehlermeldungen...

    ...wie geht es richtig?

    Danke

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.12.2004
    Alter
    64
    Beiträge
    277

    Re: Codebeispiel (Bascom Basic) rn-control-->I2C-->s20

    Hallo,

    Zitat Zitat von ReiniXXL
    Const Servoid = 0xc2
    ohne s20 (was immer das sei) nun zu kennen, fällt mir auf, daß die Notation für einen Hexwert in Bascom so lauten muß:

    Const Servoid = &Hc2

    Grüße
    Henrik

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    03.12.2004
    Alter
    29
    Beiträge
    33
    Es geht um den "anx-S20 - 20 Kanal I²C+RS232 Servocontroller"

    http://www.autonomics.de/assets/own/...datenblatt.pdf

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.12.2004
    Alter
    64
    Beiträge
    277
    Zitat Zitat von ReiniXXL
    Es geht um den "anx-S20 - 20 Kanal I²C+RS232 Servocontroller"

    http://www.autonomics.de/assets/own/...datenblatt.pdf
    Hübsch komplex, aber ausführliches Datenblatt. Na dann lies Dir mal die Hilfe zu I2C durch und entscheide mal zunächst, ob Du nun via I2C oder via RS232 au den Controller zugreifen möchtest. Mit I2C wirst du mit CHR(xxx) usw. keinen Erfolg haben.

    Die paar Zeilen Code werden doch hoffentlich nicht alles sein, was Du bisher für den S20 geschrieben hast. Die Wahrscheinlichkeit, daß Dir hier jemand ein komplettes Beispiel schreibt, ist gering.

    Viel Vergnügen
    Henrik

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    03.12.2004
    Alter
    29
    Beiträge
    33
    Zitat Zitat von hrei
    entscheide mal zunächst, ob Du nun via I2C oder via RS232 au den Controller zugreifen möchtest.
    Ich möchte Den Servocontroller per I2C ansteuern!

    Zitat Zitat von hrei
    Mit I2C wirst du mit CHR(xxx) usw. keinen Erfolg haben.
    Und was ist Dein Vorschlag?


    Zitat Zitat von hrei
    Die paar Zeilen Code werden doch hoffentlich nicht alles sein, was Du bisher für den S20 geschrieben hast. Die Wahrscheinlichkeit, daß Dir hier jemand ein komplettes Beispiel schreibt, ist gering.
    Das verlange ich auch nicht...aber ich hab nunmal nix (bis auf das was ich oben steht) gefunden wie ich die Befehle über I2C schicken kann (mit Bascom Basic).

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.12.2004
    Alter
    64
    Beiträge
    277
    Zitat Zitat von ReiniXXL
    Zitat Zitat von hrei
    entscheide mal zunächst, ob Du nun via I2C oder via RS232 au den Controller zugreifen möchtest.
    Ich möchte Den Servocontroller per I2C ansteuern!

    Zitat Zitat von hrei
    Mit I2C wirst du mit CHR(xxx) usw. keinen Erfolg haben.
    Und was ist Dein Vorschlag?
    Dir die Hilfe zu I2C durchzulesen.
    Das geht z.B. für den Anfang am einfachsten mit

    I2Cstart
    I2Cwbyte data
    .....
    .....
    I2Cstop

    Was Du im Einzelnen übertragen musst, verrät Dir das Datenblatt.

    Zitat Zitat von hrei
    Die paar Zeilen Code werden doch hoffentlich nicht alles sein, was Du bisher für den S20 geschrieben hast. Die Wahrscheinlichkeit, daß Dir hier jemand ein komplettes Beispiel schreibt, ist gering.
    Das verlange ich auch nicht...aber ich hab nunmal nix (bis auf das was ich oben steht) gefunden wie ich die Befehle über I2C schicken kann (mit Bascom Basic).
    Es gibt in der Bascom Hilfe und in den Samples eine Reihe von Beispielen, die zeigen, wie I2C mit Bascom grundsätzlich funktioniert.

    Da Du offensichtlich noch überhaupt nicht mit I2C gearbetet hast und wohl auch Bascom nur sehr oberflächlich kennst, kann ich nur empfehlen, Dich mit den Grundlagen vertraut zu machen, bevor Du an so komplexe Aufgaben gehst. Das fängt mit der Syntax von Bascom an und hört bei den I2C Befehlen noch lange nicht auf. Schau mal in die Rubrik "Wissen", da findet sich sehr viel nützliches und gut aufbereitetes für Anfänger.

    Grüße
    Henrik

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    03.12.2004
    Alter
    29
    Beiträge
    33
    Vielleicht gibt es ja jemanden der bereit ist, sein Basic-Code zur Ansteuerung zu posten
    Wie ich gesehen hab gibt es ja doch einige die diesen Servocontroller verwenden!

    Ich komm bei meinem Code einfach nicht weiter
    Es will sich einfach kein Servo bewegen... mit einem funktionierenden Code könnte ich sicherstellen das es nicht doch an der Hardware liegt (Kabel, Stecker, ...)

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    03.12.2004
    Alter
    29
    Beiträge
    33
    Ich hab gestern bzw. heute Nacht noch weiter verschiedene Arten versucht:
    (Das Servo 1 soll auf den Wert 200 gesetzt werden)

    Code:
    $regfile = "m32def.dat"
    $hwstack = 32
    $framesize = 32
    $swstack = 32
    $crystal = 16000000                                         'Quarzfrequenz
    $baud = 9600
    Porta.7 = 1                                                 'Pullup Widerstand ein
    
    '+++++++++++++++++++++++++++++++++++++++++++++++
    
    Dim Ton As Integer
    Dim I As Integer
    Dim I2 As Integer
    Dim Taste As Word
    Dim Menuetext As String * 1
    Dim Volt As Single
    Dim Servonr As String * 1
    Dim Servopos As String * 1
    Const Ref = 5 / 1023                                        'Für Batteriespannungsberechnung
    Const Servoid = &HC2                                        'I2C Servokarte-SlaveAdresse
    '+++++++++++++++++++++++++++++++++++++++++++++++
    
    'SUB-Programmteile:
    
    Declare Sub Write_servo(byval Adres As Byte , Byval Value As Byte)
    Declare Sub Batteriespannung()
    Declare Sub Hauptmenue()
    
    Declare Sub Rnlcd_cursor(byval Spalte As Byte , Byval Zeile As Byte)
    Declare Sub Rnlcd_clr()
    Declare Function Rnlcd_getscan() As Word
    
    Config Adc = Single , Prescaler = Auto                      'Für Tastenabfrage und Spannungsmessung
    
    
    Waitms 1                                                    'Warte bis LCD bereit
    Print Chr(27) ; Chr(122) ; Chr(0);                          'Autosend deaktivieren
    Print Chr(27) ; Chr(119) ; Chr(1);                          'Tasten Scanmodus aktivieren
    Rnlcd_clr                                                   'Display löschen
    Print "Halloeoeole!"
    Print "Wenn dieser Text"
    Print "erscheint, dann"                                     'Anfangstext
    Print "klappt RS232 Modi" ;
    Sound Portd.7 , 400 , 450                                   'BEEP
    Sound Portd.7 , 400 , 250                                   'BEEP
    Sound Portd.7 , 400 , 450                                   'BEEP
    Waitms 200
    
    
    
    Do
       If I > 30 Then
          I = 1
          I2 = I2 + 1
          Call Hauptmenue()
          Print "###############"
          Print "Bitte auswählen:"
          Print Menuetext
          Print "###############" ;
       End If
       I = I + 1
       Taste = Rnlcd_getscan()
       If Taste <> 0 Then
          Select Case Taste
          Case 1
             Call Batteriespannung
          Case 2
             Call Write_servo(63 , 200)
          Case 4
             Call Write_servo(63 , 20)
          End Select
          Sound Portd.7 , 400 , 500
       End If
    Waitms 100
    Loop
    End
    
    
    
    
    Sub Write_servo(byval Adres As Byte , Byval Value As Byte)
        I2cinit
        I2cstart                                                'start
        I2cwbyte Servoid                                        'slave address
        I2cwbyte Adres                                          'Servonummer
        I2cwbyte Value                                          'Servo Position
        I2cstop                                                 'stop
    End Sub
    
    
    
    
    
    Sub Batteriespannung()
    I = 0
    I2 = 1
       Local W As Word
       Start Adc
       W = Getadc(6)
       Volt = W * Ref
       Volt = Volt * 5.2941
       Gosub Rnlcd_clr
       Print ""
       Print "Logik-Spannung: "
       Print Volt ; " Volt "
       Select Case Volt
          Case 0 To 6.8
          Print "schlecht<+------->OK";
          Sound Portd.7 , 400 , 500
          Sound Portd.7 , 400 , 500
          Sound Portd.7 , 400 , 500
          Sound Portd.7 , 400 , 500
          Case 6.8 To 7.5
          Print "schlecht<-+------>OK";
          Sound Portd.7 , 400 , 500
          Sound Portd.7 , 400 , 500
          Case 7.5 To 8.2
          Print "schlecht<--+----->OK";
          Case 8.2 To 9
          Print "schlecht<---+---->OK";
          Case 9 To 9.7
          Print "schlecht<----+--->OK";
          Case 9.7 To 10.4
          Print "schlecht<-----+-->OK";
          Case 10.4 To 11.1
          Print "schlecht<------+->OK";
          Case 11.1 To 18
          Print "schlecht<-------+>OK";
       End Select
    End Sub
    
    
    
    
    Sub Hauptmenue()
       If I2 > 3 Then
          I2 = 1
       End If
       Select Case I2
          Case 1
          Menuetext = "1:BatSpannung"
          Case 2
          Menuetext = "2:I2CTest200"
          Case 3
          Menuetext = "3:I2CTest20"
       End Select
    End Sub
    Wenn ich am Rn-Keylcd die 1 drücke bekomm ich wunderbar meine Spannung angezeigt... aber wenn ich die 2 drücke (also "Write_servo") braucht er ca. 20 sek um diesen Sub-Teil zu bearbeiten ist das normal?

    Ist der Code so OK? [-o< und vor allem:
    Ist die I2C-Adresse richtig angegeben??? --> (auf Seite 1) http://www.autonomics.de/assets/own/...datenblatt.pdf

    Sind die I2C-Befehle richtig?
    Im Datenblatt steht (auf Seite 12)
    "8bit-Position Servo 1: <63>,<0-255>
    8bit-Position Servo 2: <62>,<0-255>"

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    03.12.2004
    Alter
    29
    Beiträge
    33
    Kann mir keiner helfen?

  10. #10
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.12.2004
    Alter
    64
    Beiträge
    277
    Zitat Zitat von ReiniXXL
    Kann mir keiner helfen?
    Können? Für meinen Teil habe ich einfach keine Lust, jemandem zu helfen, der einfach nur wild irgendwelchen Code ins Forum schreibt, bei dem er beim compilieren schon Fehlermeldung über Fehlermeldung erhalten müsste und dann erwartet, daß jemand ihm ein fertiges Beispiel daraus macht.

    So hast Du Dir z.B. den verwendetet Select Case Befehl bestimmt nicht in der Hilfe angesehen.

    Als letzten Tip: Die Register werden genauso angesprochen, wie die der kleinen 24xx I2C-EEproms (ein Byte zur Adressierung). Da bist Du also schon auf dem richtigen Weg.

    Henrik

    EDIT: Ich sehe gerade, daß Du Deinen Beitrag nachträglich noch editiert hast. Select Case stimmt jetzt. Bitte vermerke Änderungen zukünftig.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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