PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PC nach I2C und RN-Motor will nicht.



uli88
04.03.2005, 21:07
PC nach I2C und RN-Motor will nicht.

Ich verwende die I2C Version in Rev. 1.2

PC nach I2C-Adapter:
---------------------------
-Den PC nach I2C Adapter habe ich als Bausatz aufgebaut. Welchen der beiden Wannen für den I2C-Bus verwendet wird scheint egal zu sein.
-Die Kurzschlussbrücke am Adapter habe ich gesteckt, bei nur einem I2C-Anschluss spielt das ja keine Rolle.
-Die Wannenstecker am I2C Kabel sind so angebracht, dass PIN 1 der Adapter-Wanne an PIN 1 der Wanne am RN-Motor-Board anliegt.

Am RN-Board
----------------
-Das Board betreibe ich mit einem PC-Netzteil und nutze dessen 12V Spannung.
Beim Einschalten des Netzteils Flackert kurz die grüne LED am Board.

Gesetzte Jumper
-I2C5V
-RSMODE (waren bei Lieferung gesetzt PIN1-2 und nebenan genauso, habe ich zu Testzwecken auch mal entfernt)
-Jumper 1 und Jumper 2 sind innen gesetzt (wo PWM steht) also für Schrittmotor

Angeschlossener Motor (Motor ist neu, habe mehrere und mit keinem tuts)
-------------------------------------------------------------------------------------
Elite 127E02633
Bipolarer Schrittmotor
5 V Betriebsspannung und
15 ° Schrittwinkel.
Strangwiderstand 11,5 Ohm
5V / 11,5 Ohm = 430mA

Die 4 Kabel die der Motor besitzt habe ich so durchgemessen und angeschlossen, dass je ein Paar mit einem Widerstand von 11.5 Ohm, an den beiden Äußeren Schraubklemmen des Motoranschlusses liegen.


Software:
-----------
Ich steuere noch Befehl für Befehl mit der Mitgelieferten Visual Basic Software I2C-Beispiel (also die Software, wo die Slave-Adresse und alle Befehle einzeln und manuell in Textfelder eingegeben werden müssen, und dann per Senden-Button an das RN-Motor-Board gesendet werden)

SDA-Pegel und SCL-Pegel werden von der Software grün markiert.

Der Ablauf ist folgender (die SlaveID ist immer 112)
-I2C-Init
-Motor einschalten = 10 10 0
-Stromwert setzen = 10 1 0 43
-Drehrichtung setzen = 10 4 0 0
-Schrittgeschwindigkeit setzen = 10 8 0 9
-Endlos drehen = 10 6 0

Bei keinem der Befehle flackert die grüne LED, wenn ich jedoch die Slaveadresse per Befehlseingabe ändere, dann flackert die LED.

Irgendwie weiß ich mir jetzt nichtmehr zu helfen! Wenn ich nicht weiter komme, dann muss ich noch ein ISP-Programmierkabel und die RS232-Firmware kaufen, damit ich das Board RS232 fähig mache und somit Fehlerquellen der PC nach I2C-Verbindung und der Softwareanwendung ausschließen kann.

Vielleicht fällt ja jemandem etwas zu meinem Problem ein.

Uli

uli88
04.03.2005, 21:25
Da fällt mir noch ein, das I2C Kabel ist ca. 1,5m Lang, daran kann es aber kaum Liegen!?

Uli

Frank
04.03.2005, 21:37
Hallo Ulli,

die RS232 Jumper solltest du möglichst stecken lassen, so ei bei Auslieferung. Die RS232 Schnittstelle kannst du nämlich mit PC verbinden und siehts dann nach jedem I2C-Befehl der richtig ankommt eine Quittung am Terminalprogramm. Ginge natürlich nur wenn du 2 Schnittstellen hast. Jumper kannst du aber in jedem Fall einstecken.

Deine Befehle können so noch nicht gehen, du hast siche rüberlesen das immer 5 Byte pro Befehl gesendet werden müssen, auch wenn manchmal nicht alle Bytes gebraucht werden. Also Rest immer mit 0 füllen!

Das Flackern -(blinken würde ich es nennen) :-) ist ein gutes Zeichen. Es zeigt ein RESET an! Beim ändern der SLave ID wird immer automatisch ein Reset ausgeführt. Also probier es mal mit den 5er Bytefolgen. Wenn alles Protokoll stimmt und du nach jeden 5 Bytes dem Board einige ms Zeit zur Ausführung gibts, dann sollte alles bestens klappen.

Gruß Frank

uli88
05.03.2005, 07:03
Hurra es funtioniert,

danke Frank, es lag wirklich an den 5 Bytes! Zwar habe ich den Hinweis gelesen, aber nachdem ich in den Quellcode gesehen habe

#######################################
Private Sub buttSendByte_Click()
Dim i As Integer
buttSendByte.Enabled = False

i2c_start
i2c_SendByte (txtwert(0))
For i = 1 To 5
If txtwert(i) = "" Then Exit For
i2c_SendByte txtwert(i)
delay
Next i
i2c_stop

ZeigePegel
buttSendByte.Enabled = True
End Sub
#########################################

war ich mir sicher, dass die Abfrage ***If txtwert(i) = "" Then Exit For*** dazu dient, freigelassene Textfelder abzufangen.
Um solch einen Fehler zukünftig abzufangen, könnte man die Zeile abändern in:
If txtwert(i) = "" Then txtwert(i)=0

Uli