PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Servocontroller anx-S20 per I²C ansteuern



nose
06.01.2006, 20:57
nabend zusammen,
ich möchte einen Servo mithilfe des Servocontrollers anx-S20 über I²C mit einer C-Control V1.1 steuern. Zum Testen habe ich analog zu dem Programm für einen SD20 auf dieser Seite (http://www.the-starbearer.de/Roboterelektronik/servo/SD20.htm) ein Testprogramm geschrieben was folgendermaßen aussieht:


define SDA Port[11]
define SCL Port[12]
define I2C_Daten byte
define N byte
SDA=ON
SCL=ON


#Main
gosub I2C_Start
I2C_Daten=194
gosub I2C_Write
I2C_Daten=63
gosub I2C_Write
I2C_Daten=0
gosub I2C_Write
gosub I2C_Stop
pause 50

gosub I2C_Start
I2C_Daten=194
gosub I2C_Write
I2C_Daten=63
gosub I2C_Write
I2C_Daten=255
gosub I2C_Write
gosub I2C_Stop
pause 50

goto main




#I2C_Start
SDA=OFF
SCL=OFF
return

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

#I2C_Write
for N=1 to 8
SDA=OFF
if (I2C_Daten and 128) =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
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

Das Programm soll einen Servo von der ganz linken Position nach einer kleinen Pause auf die ganz rechte Position fahren und das dann immer wieder hin und her. 194 ist die I²C Adresse des anx-S20 und 63 der Befehlscode für Servo Nr. 1 im 8-bit Modus.
Allerdings tut sich mit diesem Programm rein gar nichts der Servo gibt keinen mucks von sich. Habe alle Anschlüsse überprüft und konnte keinen Fehler erkennen. Am Servo liegts auch nicht, ahbe ich seperat getestet. Ich schätze mal der Fehler liegt in meinem Programm. Weiß jemand einen Tip für mich? In der Anleitung des anx-S20 hab ich leider nichts bez. I²C Ansteuerung gefunden.

Vielen Dank schon mal und Viele Grüße
Daniel

PicNick
07.01.2006, 13:18
Was mir auffällt: beim Senden (Write) mach du am Schluß "PULSE", es ist dir aber vollkommen wurst, ob der Slave Acked oder nicht und WANN er das tut.
Eigentlich solltest du SCL freigeben (high), dann lesen, und erst, wenn er wirklich high ist, dann erst auf Low ziehen
https://www.roboternetz.de/wissen/index.php/Clock_Stretching

nose
07.01.2006, 14:14
Danke für die Antwort, aber ich hab jetzt den Fehler gefunden. Auf der starbear Seite hat der das mit den Digitalports 15 und 16 gemacht. Ich dachte, da im C-Control Bestückungsplan port 11 und 12 extra als I²C-Leitungen ausgegeben sind, dass ich diese benutzen müsste.
Naja habe es jetzt auch mal mit Port 15 und 16 ausprobiert und siehe da jetzt gehts. Aber jetzt frag ich mich doch warum werden 11 und 12 als I²C Datenleitungen in der Anleitung der C-Control angegeben und funktionieren dann nicht?
Naja so klappts jetzt... ;)

Gruß
Daniel

PicNick
07.01.2006, 14:23
warum werden 11 und 12 als I²C Datenleitungen in der Anleitung der C-Control angegeben und funktionieren dann nicht

Klingt nach einer guten Frage. Leider kann ich da nix zu sagen

PicNick
07.01.2006, 14:23
warum werden 11 und 12 als I²C Datenleitungen in der Anleitung der C-Control angegeben und funktionieren dann nicht

Klingt nach einer guten Frage. Leider kann ich da nix zu sagen