- Labornetzteil AliExpress         
Ergebnis 1 bis 5 von 5

Thema: Bascom - Code vereinfachen

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

    Bascom - Code vereinfachen

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hi!

    Ich habe an meinem RN-Control Board das SD21 Servoboard über den I2C Bus hängen.

    Nun muss ich ja wenn ich mit Bascom programmiere immer die üblichen Befehle für die Vebrindung per I2C eingeben:

    '=========================== Arm links ======================

    Code:
    Posit = 2320                                          ' position (1000 - 2000)
          Lsb = Low(posit)
          Msb = High(posit)
          I2cstart
          I2cwbyte Servo_adr                                    ' serv CTRL I2C Addr
          I2cwbyte 0                                            ' servo nr
          I2cwbyte 10                                           ' speed
          I2cwbyte Lsb                                          ' lsb of position
          I2cwbyte Msb                                          ' Msb of position
          I2cstop
          Print "Servo 1 auf Position 2000"
    
    Posit = 2420                                          ' position (1000 - 2000)
          Lsb = Low(posit)
          Msb = High(posit)
          I2cstart
          I2cwbyte Servo_adr                                    ' serv CTRL I2C Addr
          I2cwbyte 3                                            ' servo nr
          I2cwbyte 10                                           ' speed
          I2cwbyte Lsb                                          ' lsb of position
          I2cwbyte Msb                                          ' Msb of position
          I2cstop
          Print "Servo 2 auf Position 2000"
    
          'Wait 1
    
    
             Posit = 1540                                       ' position (1000 - 2000)
          Lsb = Low(posit)
          Msb = High(posit)
          I2cstart
          I2cwbyte Servo_adr                                    ' serv CTRL I2C Addr
          I2cwbyte 6                                            ' servo nr
          I2cwbyte 10                                           ' speed
          I2cwbyte Lsb                                          ' lsb of position
          I2cwbyte Msb                                          ' Msb of position
          I2cstop
          Print "Servo 3 auf Position 2000"
    
          'Wait 1
    Wenn ich nun meine 17 Servos damit ansteiere gibt das seitenweise Code!

    Gibt es eine Möglichkeit den Code zu vereinfachen?

    Danke!

    Gruß

    Dennis

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    28.02.2005
    Ort
    Salzburg
    Alter
    43
    Beiträge
    464
    deklariere eine Funktion mit allen Übergabeparametern und ruf diese dann jeweils auf.

    declare function.........(byval...byval...)as

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

    Vielen Dnak für Deine Antwort!

    Ich weiß zwar wodrauf es hinauslaufen soll aber ich verstehe nicht genau wie Du das meinst.

    Hast Du da ein konkretes Beispiel für mich?

    Danke!

    Gruß

    Dennis

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    17.09.2005
    Beiträge
    276
    Declare Sub Servo(Posit as Word, Servo_ADR as Byte) 'Im Kopf der Soft


    Call Servo(2320,12) 'so rufst Du auf

    Sub Servo(Posit as Word, Servo_ADR as Byte) 'das wird aufgerufen
    'Posit = 2320 position (1000 - 2000)
    Lsb = Low(posit)
    Msb = High(posit)
    I2cstart
    I2cwbyte Servo_ADR ' serv CTRL I2C Addr
    I2cwbyte 0 ' servo nr
    I2cwbyte 10 ' speed
    I2cwbyte Lsb ' lsb of position
    I2cwbyte Msb ' Msb of position
    I2cstop
    Print "Servo "+Servo_ADR+" auf Position "+Posit
    End Sub


    so in etwa ,aber probiere das mal aus,

    Gento

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

    Wenn ich nun noch die Servogeschwindigkeit mit in den Call Aufruf einbinden will, muss der Code dann so aussehen?:

    Code:
    $regfile = "m32def.dat"                                     'Die Anweisung bestimmt Ccntrollertyp, hier AVR Mega 32
    
     $crystal = 16000000                                        'Die Frequenz des verwendeten Quarzes
    
     $baud = 9600                                               'Die Baudrate für RS232 Ausgabe.
                             'Sie muss auch bei PC Terminalprogramm identisch sein
    
     '$lib "i2c_twi.lbx"                                         ' we do not use software emulated I2C but the TWI
    
    'Config Twi = 100000                                         ' wanted clock frequency
    
    
    
    Config Scl = Portc.0                                        'Ports fuer IIC-Bus
    Config Sda = Portc.1                                        ' wanted clock frequency
    Config Twi = 100000
    
    Const Servo_adr = &HC2                                      'I2C Adress Servo Controller
    
    Declare Sub Servo(posit As Word , Servo_adr As Byte , Servo_spd As Byte)       'Im Kopf der Soft
    
    Call Servo(1500 , 12 , 10)                                  'so rufst Du auf
    
    Sub Servo(posit As Word , Servo_nr As Byte , Servo_spd As Byte)       'das wird aufgerufen
    'Posit = 2320 position (1000 - 2000)
    Lsb = Low(posit)
    Msb = High(posit)
    I2cstart
    I2cwbyte Servo_adr                                          ' serv CTRL I2C Addr
    I2cwbyte Servo_nr                                           ' servo nr
    I2cwbyte Servo_spd                                          ' speed
    I2cwbyte Lsb ' lsb of position
    I2cwbyte Msb ' Msb of position
    I2cstop
    Print "Servo " + Servo_nr + " auf Position " + Posit + " mit einer Geschwindigkeit von " + Servo_spd + "
    End Sub
    Ich glaube Du hattest einen Fehler in Deinem Code. Die Servo_adr ist die I2C Adresse von dem Controller.

    Ist mein Code so richtig?

    Gruß

    Dennis

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad