PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RN-Motor läuft nur manchmal



ISI05
30.03.2006, 15:23
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:

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<

robo_wolf
30.03.2006, 17:14
Hallo ISI05,
muß du die I2C Routine nicht mit "I2Cstart" starten.
Oder habe ich da was überlesen?
Warum hast du die Baudrate nur 2400 anstatt 9600 - sollte doch bei 8MHz kein Problem sein.
### Silvio ###

ISI05
30.03.2006, 18:55
Ich habe das mit I2Cstart inzwischen wieder drinstehen, es tritt aber immer noch das gleiche Problem auf. Das mit der Baudrate ist eigentlich auch kein problem. Weiß auch nich was mich da geritten hat :-k

Frank
01.04.2006, 23:39
DU musst die neuste Bascom Version nutzen. Zudem sollte man die Befehle nicht zu schnell hintereinander senden, eventuell ist der letzte noch nicht abgearbeitet. Mach mal probehalber hinter i2csend waitms 4

ISI05
02.04.2006, 14:08
mit der neusten bascom version hats funktioniert.
Danke für die hilfreichen tipps