Hier mal das Testprogramm mit Servos an 1 und 3, jeweils hin und herpendeln von Position 0 bis 255. wie gesagt der erste abschnitt sorgt dafür das die Servos immer doppelte Bewegung in einer ausführt was sich durch ein winziges unterbrechen der Fahrt sowie einen größeren Stellwinkel bemerkbar macht. Aber nur manchmal. In diesem übersteuerten Bereich hat es auch keine wirkliche Kraft... als ob es ein verspätetes Echo der Signale mit anderer Pulsweite wäre, warum habe ich eigentlich noch keinen Oscar???. Spannungversorgung der Servo ist es nicht, abgesehen davon habe ich mikroservos daran. Vielleicht die Abschlußwiderstände des I2C-Bus... ??? Stimmt da müssten doch bei der C-Control welche rein? Weiss jemand wie das nochmal war? Also nutze Port 7 und 8 der C-Control 1

mfg



[define SDA Port[7]
define SCL Port[8]

define I2C_Daten byte
define N byte 'Schleifenvariable
define Startbyte byte
define Kommandobyte byte
define ServoNummer byte
define ServoWinkel byte

'I2C Bus Ruhezustand
SDA=ON
SCL=ON

'*********** Hauptprogramm********************************
#Main


gosub I2C_Start ' I2C-Startbedingung
I2C_Daten=194 ' Adresse des SD20 am I2C Bus
gosub I2C_Write ' Adresse übertragen
I2C_Daten = 3' Register des Servos, der angesprochen werden soll schreiben
gosub I2C_Write ' Register übertragen
I2C_Daten = 0' Winkel auf den dieser Servo drehen soll schreiben
gosub I2C_Write ' Winkel schreiben
gosub I2C_Stop ' I2C-Stopbedingung.

gosub I2C_Start ' I2C-Startbedingung
I2C_Daten=194 ' Adresse des SD20 am I2C Bus
gosub I2C_Write ' Adresse übertragen
I2C_Daten = 1' Register des Servos, der angesprochen werden soll schreiben
gosub I2C_Write ' Register übertragen
I2C_Daten = 255' Winkel auf den dieser Servo drehen soll schreiben
gosub I2C_Write ' Winkel schreiben
gosub I2C_Stop ' I2C-Stopbedingung.

pause 100

gosub I2C_Start ' I2C-Startbedingung
I2C_Daten=194 ' Adresse des SD20 am I2C Bus
gosub I2C_Write ' Adresse übertragen
I2C_Daten = 3' Register des Servos, der angesprochen werden soll schreiben
gosub I2C_Write ' Register übertragen
I2C_Daten = 255' Winkel auf den dieser Servo drehen soll schreiben
gosub I2C_Write ' Winkel schreiben
gosub I2C_Stop ' I2C-Stopbedingung.

gosub I2C_Start ' I2C-Startbedingung
I2C_Daten=194 ' Adresse des SD20 am I2C Bus
gosub I2C_Write ' Adresse übertragen
I2C_Daten = 1' Register des Servos, der angesprochen werden soll schreiben
gosub I2C_Write ' Register übertragen
I2C_Daten = 0' Winkel auf den dieser Servo drehen soll schreiben
gosub I2C_Write ' Winkel schreiben
gosub I2C_Stop ' I2C-Stopbedingung.

pause 100





'*********** I2C Bus Standard Routinen********************

#I2C_Start
SDA=OFF
SCL=OFF
return

#I2C_Stop
SDA=OFF
SCL=ON
SDA=ON
return

#I2C_Write
for N=1 to 8 ' 8 Bit schreiben in For-Next-Schleife
SDA=OFF
if (I2C_Daten and 12 =128 then SDA=ON
pulse SCL
I2C_Daten=I2C_Daten shl 1
next
pulse SCL
Return

#I2C_Read
I2C_Daten=0
deact SDA
for n=1 to 8 ' 8 Bit lesen in For-Next-Schleife
I2C_Daten=I2C_Daten shl 1
SCL=ON
if SDA then I2C_Daten=I2C_Daten+1
SCL=OFF
next
Return

#Ack
SDA=0
pulse SCL
return

#NoAck
SDA=1
pulse SCL
return
][/code]