Hallo erstmal
Mein RN-Motor Board wo ich über I2C anspreche zeigt irgendwie ein komische verhalten und zwar wir senden die Befehle an das Board und alles funktioniert bis auf die Bewegung der Schrittmotoren die funktionieren nur jedes 3. 4. oder 5. mal nach dem der Befehl gesendet wurde.
Hier ist mal der Code:
Code:
Const Befehl_maxstrom = 1
Const Befehl_referenzspannung = 2
Const Befehl_stop = 3
Const Befehl_drehrichtung = 4
Const Befehl_schrittanzahl_drehen = 5
Const Befehl_endlos_drehen = 6
Const Befehl_einzigen_schritt = 7
Const Befehl_geschwindigkeit = 8
Const Befehl_ausschalten = 9
Const Befehl_einschalten = 10
Const Befehl_konfiguration_zeigen = 11
Const Befehl_sleep_modus = 12
Const Befehl_motor_selektieren = 13
Const Befehl_schrittmotormodus = 14
Const Motor_links = 0
Const Motor_rechts = 1
Const I2crnmotorslaveadr = &H56 'I2C SlaveAdresse von RN-Motor Erweiterung
Const I2crnmotorsreadlaveadr = &H57 'I2C SlaveAdresse von RN-Motor Erweiterung
'Achtung, wenn das Motor-Board überhaupt nicht reagiert, dann könnte dieses eine andere Slave
'Adresse besitzen. Im Zweifel schließen Sie das Motorboard an die RS232 vom PC an und
'drücken Sie die RESET-Taste am Motorboard.Dann kann die Slave ID über ein
'Terminalprogramm angezeigt werden
Dim I2cdaten(6) As Byte 'Array um Befehlsfolge auszunehmen
Dim Befehl As Byte
Enable Interrupts 'Interrupts global zulassen
$crystal = 8000000
$baud = 2400
Config Scl = Portc.5 'Ports fuer IIC-Bus
Config Sda = Portc.4
Config Pind.2 = Output
Portd 0.2 = 0
Wait 1 'Kurz warten damit RN-Motor sich initialisieren kann
Portd 0.2 = 1
Wait 1
Main:
Print "Starte"
I2cinit
'Motorstrom auf 200mA begrenzen
I2cdaten(1) = 10 'Kennung muss bei RN-Motor immer 10 sein
I2cdaten(2) = Befehl_maxstrom 'Befehlscode
I2cdaten(3) = Motor_rechts '1 Parameter
I2cdaten(4) = 200 / 10 '2 Parameter (hier Milliampere /10 in diesem Fall wird 200mA eingestellt)
I2csend I2crnmotorslaveadr, I2cdaten(1), 5 'Befehl wird gesendet (es müssen immer 5 Bytes gesendet werden, auch wenn weniger Parameter notwendig sind)
I2cstop
I2cdaten(1) = 10 'Kennung muss bei RN-Motor immer 10 sein
I2cdaten(2) = 8 'Befehlscode
I2cdaten(3) = 2 '1 Parameter
I2cdaten(4) = 9 '2 Parameter
I2csend &H56, I2cdaten(1), 5 'Befehl wird gesendet
I2cstop
'Motor einschalten
I2cdaten(1) = 10 'Kennung muss bei RN-Motor immer 10 sein
I2cdaten(2) = Befehl_einschalten 'Befehlscode
I2cdaten(3) = Motor_rechts '1 Parameter
I2csend I2crnmotorslaveadr, I2cdaten(1), 5 'Befehl wird gesendet (es müssen immer 5 Bytes gesendet werden, auch wenn weniger Parameter notwendig sind)
I2cstop
Do
Print "1 für drehen"
Input "Befehl :" , Befehl
If Befehl = 1 Then
Print "drehe"
I2cdaten(1) = 10 'Kennung muss bei RN-Motor immer 10 sein
I2cdaten(2) = Befehl_schrittanzahl_drehen 'Befehlscode
I2cdaten(3) = Motor_rechts '1 Parameter
I2cdaten(4) = 50
I2csend I2crnmotorslaveadr, I2cdaten(1), 5 'Befehl wird gesendet (es müssen immer 5 Bytes gesendet werden, auch wenn weniger Parameter notwendig sind)
I2cstop
End If
Wait 4
Loop
End
Ist teilweise aus dem Beispiel übernommen.
Bin für jede Hilfe dankbar [-o< [-o< [-o< [-o<
Lesezeichen