Hello,
I found this -> https://www.roboternetz.de/phpBB2/ze...highlight=sd20
This could be a start.
Greetings,
Drifter2006
Hallo
Ich wollte mal Fragen ob jemand eine Art TestProgramm hat für die steuerung eines Servos (C-Control und SD20).
Am besten wäre es wenn man die c-control direkt über den Pc ansteuern könnte und so die winkelstellung beeinflussen.Z.BSp mit einem Schieberegler oder auch durch direkte eingabe von Zahlen (0-255)
Ich bräuchte in jedem fall beide Codes die für die C-Control und die für den Pc (VB oder C++).
Ich denke das wäre für viele Anfänger eine grosse Hilfe die wie ich erstmall ein passendes Servo suchen bzw das servo hacken wollen.
Desweiteren kann man bestimmt das ganze besser nachvolziehen und daraus lernen wenn man diese Möglichkeit hat.Falls keiner so ein TestProgramm in der Schublade hat wäre es natürlich extrem cool wenn einer der zahlreichen Profis hier die Zeit und die lust hat eins zu schreiben.
Bin in jedem Fall für alle Infos dankbar !!
H.M
Hello,
I found this -> https://www.roboternetz.de/phpBB2/ze...highlight=sd20
This could be a start.
Greetings,
Drifter2006
Moin!
Also ich habe mal mein alte CControl 1 Unit rausgeholt und mit dem SD20 das angegebene Testprogramm compiliert und übertragen. Also irgendwie stimmt da was nicht mit den Impulslängen?? Denn das Servo läuft zwar in die soll-Position aber bei einer Schleife in der es hin und her laufen soll, mit Pause 100 nach erster Position und Pause 100 nach zweiter Position, scheint es so, als ob es zwei Bewegungen in einer durchführt.. wie ein verspäteter Impuls.. allerdings völligt unregelmässig... Auch andere Servos zeigen diese Verhalten. Woran könnte das liegen? Dies ist nur bei einahme von Position 0 zu 255 umgekehrt zeigt das Servo diese Verhalten niemals??
Zerhackt doch nicht immer eure ServosIch denke das wäre für viele Anfänger eine grosse Hilfe die wie ich erstmall ein passendes Servo suchen bzw das servo hacken wollen.
Die C-Control, bzw. der SD20 ist doch in der Lage jedes handelsübliche Servo anzusteuern.
mfg
Stefan
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]
Hallo,
setze doch testweise mal 10k von beiden Leitungen auf 5V.
Im Programm wird die Zuweisung "=0" und "=1" benutzt. Dies sollte "off" und "on" heissen.
mfg
Stefan
Ja genau das wars... ich Blödian... ohne die Resistors gehts ja nicht auf dem Bus...
So jetzt laufen beide in die richtige Position und keine Echos mehr...
Aber.. jetzt muss ich mich mal mit der Basic-Programmierung beschäftigen...
Denn jetzt bemerke ich das, das Servo an Kanal 1 ja im Programm als zweites seine Daten vom sd20 bekommt.
Und hier gibt es ein Problem.. Manchmal wird dieses ausgelassen???.
Da war doch irgendwas mit der Ruhezeit bevor der SD 20 wieder das nächste Servo ansteuert?
Also für Servo an Kanal 3: i2cstart dann Adresse und Byte 1 und Byte 2 und i2cstop... und dann musste man doch eine Wartezeit einbauen??? und dann für Servo an Kanal 1: wieder i2cstart dann Adresse ... etc?
Allerdings bringt auch eine Pause von 10 zwischen den Blöcken nichts?
Hmm jetzt habe ich mal die Graupner Microservos gegen Conrad-Modelle getauscht... da gibt es das Problem anscheinend nicht???????
Auch die anderen Graupner-Mikroservos zeigen, das Sie manchmal die Befehle nicht bekommen?????
Ob es da Unterschiede gibt?? Sollte ja bei Graupner nicht sein... eher wohl beim großen C und nicht umgekehrt?
nighteagle
Hello nighteagle,
I have looked through the *I2C Bus Standard Routinen* and I must say that I am not very impressed.
The *I2C Bus Standard Routinen* does not support I2C clock stretching and I2C Nack.
This “could” be the reason why you are having problems controlling your servos.
Try the download “SD20 VIA EMULATED I2C BUS b1.0 for CCIMainU1.1 with CCISB.bas” here - > https://www.roboternetz.de/phpBB2/ze...highlight=sd20 and see if this works.
Greetings,
Drifter2006
Hi there,
oh good... but have any problems with your program, its not working?
I use port 7 and 8 for sda and scl, i have change it in your programm and the print function on the starter board is deleted.. Hmm where the malfuncion?
thanx
Simple Programm
Code:'**************** I/O PORTS ****************' define sda port[7] define scl port[8] '*******************************************' '**************** A/D PORTS ****************' '*******************************************' '**************** D/A PORTS ****************' '*******************************************' '**************** VARIABLES ****************' define control_flags byte[1] define i2c_nack bit[1] define i2c_last bit[2] define i2c_nack_count byte[2] define i2c_byte byte[3] define i2c_out_bit bit[24] define i2c_in_bit bit[17] define i2c_loop byte[4] define servo_number byte[5] define servo_position byte[6] '*******************************************' '**************** CONSTANTS ****************' define sd20_i2c_address 194 '*******************************************' '****************** SETUP ******************' '*******************************************' '***************** PROGRAM *****************' #start servo_number = 1 if (servo_number = 0) or (servo_number > 20) then goto start servo_position = 200 gosub sd20_servo_driver goto start ....and the rest of your program...
Hi,
Please try the original software first (with your port numbers).
If this works then we can work from there.
Greetings,
Drifter2006
Lesezeichen