- 12V Akku mit 280 Ah bauen         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: Rn-Control - Servosteuerung über I2C

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied Avatar von Dennis2006
    Registriert seit
    11.01.2006
    Beiträge
    166

    Rn-Control - Servosteuerung über I2C

    Anzeige

    Powerstation Test
    Hi!

    Habe das RN-Control 1.4 verbunden mit dem anx-s20:

    http://www.autonomics.de/pd1123341209.htm?categoryId=1

    Nun möchte ich das Servo 1 auf Mittelstellung setzen. Dazu habe ich folgenden Code:

    Code:
    $regfile = "m32def.dat"                                     'Die Anweisung bestimmt Ccntrollertyp, hier AVR Mega 32
    $crystal = 16000000
    
    $baud = 9600
    
    ' I2C SETUP
    Config Scl = Portc.0
    Config Sda = Portc.1
    Config Twi = 100000
    
    ' CONSTANTS
    Const ANX = &HC2
    
    ' FUNCTIONS
    Declare Sub AnxWrite(byval Servo As Byte, byval Pos As Byte)
    
    I2cinit
    'Startet den I2C Bus
    
    Sub AnxWrite(Servo As Byte, Pos As Byte)
       I2cstart
       I2cwbyte ANX
       I2cwbyte Servo + 62                                      ' 8-Bit Register ab Reg. 63
       I2cwbyte Pos
       I2cstop
    End Sub
    
    Call Anxwrite(1 , 127)
    Print "Servo 1 ist jetzt in Mittelstellung"
    Doch beim Compilieren mit Bascom spuckt er mir immer eine Fehlermeldung in der folgenden Zeile aus:

    Code:
     I2cwbyte Servo + 62                                      ' 8-Bit Register ab Reg. 63
    Woran liegt das?

    Kann das mit dem Code funktionieren?

    Danke!

    Gruß

    Dennis

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

    es kann sein, das Bascom in der gleichen Zeile nicht rechnen kann, probier mal den Wert vorher extra zu berechnen, und dann diesen angeben.

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied Avatar von Dennis2006
    Registriert seit
    11.01.2006
    Beiträge
    166
    Hi!

    Danke für die schnelle Antwort!

    Ich bin leider Anfänger in Sachen BASCOM!

    Kannst Du mir bitte das so machen und mir dann erläutern was Du da getan hast damit ich das verstehe?

    Danke!

    Gruß

    Dennis

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Ganz einfach, Du rechnest vor dem Schreiben mit I2cwbyte den Wert den Du da übergeben willst aus, und übergibts den Wert dann in der Zeile bei I2cwbyte.
    Soll heissen nicht in der gleichen Zeile eine Berechnung durchführen, in der auch I2cwbyte steht.
    Code:
    ...
    Servo = Servo + 62
    ...
    I2cwbyte Servo
    ...

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied Avatar von Dennis2006
    Registriert seit
    11.01.2006
    Beiträge
    166
    Hi!

    Habe das auch ausprobeirt jedoch funktioniert dies auch nicht!

    Zur Verkabelung:

    An dem RN-Control befindet sich eine 10 polige Wannenbuchse die mit I2C beschriftet ist.

    An dem ANX-S20 befindet sich genau die gleiche Buchse.

    Nun habe ich mir zwei Wannenstecker gekauft und ein passendes 10 adriges Flachbandkabel.

    Dann habe ich die Stecker auf beiden Enden draufgequetscht!

    Somit habe ich folgende 1:1 Verbindung zwischen den Steckern:

    Pin 1 des ersten Wannensteckers auf Pin 1 des zweiten Wannensteckers
    Pin 2 des ersten Wannensteckers auf Pin 2 des zweiten Wannensteckers
    Pin 3 des ersten Wannensteckers auf Pin 3 des zweiten Wannensteckers
    ...

    Das dürfte doch so richtig sein oder?

    Sonst kann ich mir da keinen Verbindungsfehler vorstellen...

    Danke!

    Gruß

    Dennis

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied Avatar von Dennis2006
    Registriert seit
    11.01.2006
    Beiträge
    166
    Hi!

    Sind denn überhaupt die Pin's 1+3 jeweils mit einem 10k-Widerstand gegen +5V gelegt? Das muss doch auf dem RN-Control geschen oder?

    Danke!

    Gruß

    Dennis

  7. #7
    Administrator Robotik Visionär Avatar von Frank
    Registriert seit
    30.10.2003
    Beiträge
    5.116
    Blog-Einträge
    1
    Bei RN-Control sind diese Widerstände schon drin. Also daran liegts nicht.
    Das Board anx-s20 ist nicht 100% Steckerkompatibel. Pass auf das du Pin 9 bei RN-Control durch einen Jumper deaktivierst. Das anx-s20 Board hat diesen Pin mit der Servospannung verbunden, was etwas ungünstig ist. Die Servospannung ist zu niedrig um RN-Control eigenständig mit Spannung zu versorgen. Und umgekehrt in die RN-Control Spannung zu hoch für anx-s20 bzw. die Servos.
    Also den entsprechenden Jumper rausziehen (siehe RN-Control Doku) und beide Boards mit eigener Spannung versorgen.

    Die Synstax vom anx-s20 Board kenn ich nicht näher, frage am besten mal beim Hersteller nach einem kleinen Ansteuerbeispiel in Bascom Basic.

    Siehe auch:
    Roboternetz Steckerbelegungungen aller RN-Boards:
    https://www.roboternetz.de/wissen/in...N-Definitionen

    Und wenn dann was nicht klappt, dann hier möglichst das ganze Programm posten, aus oberer Zeile kann man keine Fehler ersehen.

  8. #8
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    VOr allem schau mal nach, ob das 1. Servo nun die Nummer "1" oder vielleicht doch die nummer "0" hat
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied Avatar von Dennis2006
    Registriert seit
    11.01.2006
    Beiträge
    166
    Hi!

    Also das ANX-S20 ist ein Slave-Board.

    An den Pins 5,7 und 9 des I2C Anschlusses vom ANX-S20 Board liegt Spannung an.

    An dem I2C Anschluss des RN-Control Boards liegt keine Spannung an, da ich alle 3 Jumper vom JP6 vorher schon alle rausgezogen hatte.

    Die PullUp Widerstände sind dann schon zu SCL und SDA am RN-Control geschaltet? Oder muss man die dann noch mit einem Befehl aktivieren?

    Ich habe den Hersteller kontaktiert der hat mir folgenden Beispielcode zugesendet der mit dem Mega8 getestet worden ist:

    Code:
    '--------------------------------------------------------------
    ' I2C-Example1 for communication with anx-S20 servo controller
    
    '
    ' don't forget to set the I2C-Pin options in Options / Compiler / I2C
    '--------------------------------------------------------------
    Declare Sub Write_i2c_b(byval Command As Byte , Byval Value As Byte)
    Declare Sub Write_i2c_w(byval Command As Byte , Byval Value As Integer)
    Declare Sub Write_i2c_b4(byval Command As Byte , Byval V1 As Byte , Byval V2 As Byte , Byval V3 As Byte , Byval V4 As Byte)
    
    Const Addressw = 194                                        'slave write address
    Const Addressr = 195                                        'slave read address
    
    Dim B1 As Byte
    Dim I As Integer
    
    B1 = 5
    Do
       ' set servo1+2+3 at once
       Call Write_i2c_b4(107 , 1 , B1 , B1 , B1)
    
       ' set servo4
       Call Write_i2c_b(66 , B1)
    
       I = 0                                                    ' PWMtime=0 means constant low
       If B1 > 120 Then I = 5000                                ' PWMtime=5000 means constant high
    
       ' set servo9 to high/low (output-pin)
       Call Write_i2c_w(9 , I)
    
    
       B1 = B1 + 10
       Waitms 300
    Loop
    
    
    End
    
    
    'writing a byte to I2C-chip
    Sub Write_i2c_b(byval Command As Byte , Byval Value As Byte)
        I2cstart                                                'start condition
        I2cwbyte Addressw                                       'slave address
        I2cwbyte Command                                        'command
        I2cwbyte Value                                          'value to write
        I2cstop                                                 'stop condition
        Waitms 2                                                'wait a short moment
    End Sub
    
    ' writing a Integer to I2C-chip
    Sub Write_i2c_w(byval Command As Byte , Byval Value As Integer)
       Dim H As Byte
       Dim L As Byte
    
       H = High(value)
       L = Low(value)
    
       I2cstart                                                 'start condition
       I2cwbyte Addressw                                        'slave address
       I2cwbyte Command                                         'command
       I2cwbyte H                                               'high-byte first
       I2cwbyte L                                               'low-byte last
       I2cstop                                                  'stop condition
       Waitms 2                                                 'wait a short moment
    End Sub
    
    'writing 4 byte-command to I2C-chip
    Sub Write_i2c_b4(byval Command As Byte , Byval V1 As Byte , Byval V2 As Byte , Byval V3 As Byte , Byval V4 As Byte)
        I2cstart                                                'start condition
        I2cwbyte Addressw                                       'slave address
        I2cwbyte Command                                        'command
        I2cwbyte V1                                             'value to write
        I2cwbyte V2                                             'value to write
        I2cwbyte V3                                             'value to write
        I2cwbyte V4                                             'value to write
        I2cstop                                                 'stop condition
        Waitms 2                                                'wait a short moment
    End Sub
    Kann mir noch einer sagen das &HC2 beudeutet in meinem Code:

    Code:
    Const ANX = &HC2
    Danke!

    Gruß

    Dennis[/code]

  10. #10
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803

    Hex-Wert

    Hallo Dennis2006,

    Kann mir noch einer sagen das &HC2 beudeutet in meinem Code:
    Das ist der Hex-Wert von 194.
    In dem Hersteller-Beispiel ist das die Konstante Addressw.

    Gruß Dirk

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

Labornetzteil AliExpress