deklariere eine Funktion mit allen Übergabeparametern und ruf diese dann jeweils auf.
declare function.........(byval...byval...)as
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 ======================
Wenn ich nun meine 17 Servos damit ansteiere gibt das seitenweise Code!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
Gibt es eine Möglichkeit den Code zu vereinfachen?
Danke!
Gruß
Dennis
deklariere eine Funktion mit allen Übergabeparametern und ruf diese dann jeweils auf.
declare function.........(byval...byval...)as
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
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
Hi!
Wenn ich nun noch die Servogeschwindigkeit mit in den Call Aufruf einbinden will, muss der Code dann so aussehen?:
Ich glaube Du hattest einen Fehler in Deinem Code. Die Servo_adr ist die I2C Adresse von dem Controller.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
Ist mein Code so richtig?
Gruß
Dennis
Lesezeichen