PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ansteuern über I2C



BlackBroom
27.04.2007, 17:27
Hallo
Ich habe das RN-Control 128 Funkboard, daran habe ich ein Servoboard. Dieses ist über I2C angeschlossen. Am Servoboard habe ich ein Kontronik Jazz 55-6-18 Drehzahlsteller. Wenn ich diesen an ein normales RC Empfänger anschliesse und dann per Fernsteuerung ihn ansteuere läuft dieser. Über das Servoboard läuft er aber nicht.
Richtig angeschlossen ist alles. Über ein C-Control 2 habe ich den Drehzahlsteller schon einmal angesteuert aber über den PLM Anschluss.
Ich benutze folgenden Code:



'################################################# ##
'microservoboard.bas
'für
'RoboterNetz Board RN-CONTROL ab Version 1.1
'und das Micro Servo Board
'Aufgabe:
' Dieses Testprogramm bewegt ein Servo das am Anschluss SERVO7
' des Micro Servo Board steckt, hin und her.
' Der Jumper am Servoboard muss gesteckt sein, da der MINI SSC MODE
' zur Ansteuerung von Servos genutzt wird
'Autor: Frank
'Weitere Beispiele und Beschreibung der Hardware
'unter http://www.Roboternetz.de oder robotikhardware.de
'################################################# ######
$regfile = "m128def.dat" ' Bei Mega 128 "
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 16000000 'Quarzfrequenz
$baud = 19200 'Baudrate für Funkmodul
$baud1 = 9600

Sound Portg.2 , 400 , 450
Sound Portg.2 , 400 , 250
Sound Portg.2 , 400 , 450

Dim Servonummer As Byte
Dim Servodevice As Byte
Dim Servocommand As Byte
Dim Servodata1 As Byte
Dim Servodata2 As Byte
Dim Servodrehbereich As Byte

'Erweiterter Drehbereich des Servos
Servodevice = 1 'Jedes Servoboard hat eine Device-Nummer
Servonummer = 7 'Servonummer 0 bis 7
Servocommand = 0 'Befehl: Setze verschiedene Parameter (siehe Doku)
Servodrehbereich = 255 'Servo Drehbereich 0 bis 31 (Vorgabe 15)
Servodata1 = &B01000000 Or Servodrehbereich 'Richtung, Servo Drehbereich etc. festlegen
Print Chr(128) ; Chr(servodevice) ; Chr(servocommand) ; Chr(servonummer) ; Chr(servodata1)

'Hier wird die Position in Bytes angegeben, das High Bit wird im ersten Databyte (Bit0)übertragen
Servodevice = 1 'Jedes Servoboard hat eine Device-Nummer
Servonummer = 7 'Servonummer 0 bis 7
Servocommand = 3 'Befehl: Setze Position (0 - 256 in 2 Byte)
Servodata1 = 1 'Position High (Bit0 = Bit8 der Position)
Servodata2 = 254 'Position Low Bit0 bis 7
Print Chr(128) ; Chr(servodevice) ; Chr(servocommand) ; Chr(servonummer) ; Chr(servodata1) ; Chr(servodata2)

End


Er ist auch richtig am servo7 Anschluss des Servoboards. Woran könnte das liegen? Brauche dringend Hilfe!

magic33
03.05.2007, 15:02
ist die masse des frehzahlstellers mit dem board verbunden

ansonsten kann das signal nicht durchkommen

wenn du einen oszilografen bei der hand hast kanst du auch das servo signal
am port überprüfen ob da auch was ankommt
sollte zwischen 0.5 und 2.5ms liegen mit minimum 10ms zum nächsten signal

Dani-Bruchflieger
03.05.2007, 20:26
sollte zwischen 0.5 und 2.5ms liegen mit minimum 10ms zum nächsten signal

Hi,

Ich weiß nicht, was für Servos du benutzt, aber die die ich verwende brauchen eine PWM bei der die Impulsdauer zwischen 1,0 und 2,0ms liegt (1,5ms ist Mittelstellung), und einer Pause von normalerweise 20ms. Aber die Pause kann man auch verkürzen - ja bis zu 10ms. (verlängern der Pause geht zwar auch, aber das kostet Genauigkeit und Stellkraft.

Grüße Dani.