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:
Ist teilweise aus dem Beispiel übernommen.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
Bin für jede Hilfe dankbar [-o< [-o< [-o< [-o<







Zitieren


Lesezeichen