PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Brauche Hilfe mit I2C



jagdfalke
21.12.2005, 17:44
Hi,
ich will einen Schrittmotor ansteuern. Nach dem Bascombeispiel, das mit dem rnbfra mitgeliefert wurde, wird da I2C benutzt. Ich weiß dummerweise nicht wie ich das was ich da sehe in C umsetzen kann:

'################################################# ##
'Testprogramm 5
'fr
'RoboterNetz Standard-Roboter Board RBNFRA 1.2
'
'Aufgabe:
'Testen der Schrittmotortreiber
'Dreht erst linken Schrittmotor in beide Richtungen
'und dann rechten Schrittmotor in beide richtungen
'
'Autor: Frank
'Weitere Beispiele und Beschreibung der Hardware
'unter http://www.Roboternetz.de
'################################################# ##

Declare Sub Ledein
Declare Sub Ledaus


Const Writepowerport_adr = &H72 'I2C Adr PCF 2
Const Readpowerport_adr = &H73 'I2C Adr PCF 2

Dim I2cdaten As Byte 'Datenbyte aus PCF8574


Dim I As Word


$crystal = 8000000 'Quarzfrequenz
Config Scl = Portc.0 'Ports fuer IIC-Bus
Config Sda = Portc.1
I2cinit


'******** Diese 4 Befehle sind nur ab RNBFRA Version 1.2 (nicht in V 1.1)
' notwendig und bzw. m�lich (erweiterte Energiesparfunktion und LEDs)
' Bei Board 1.1 bitte auskommentieren oder l�chen
I2cstart
I2cwbyte &H74 'Schreibbefehl an PCF3 schicken
' Leds ein ,Motorendstufen ein, Port-Peripherie ein, RBN-Bus Sleep Modus aus (also Peripherie aktiv)
I2cwbyte &B00000010 'Datenbyte an PCF3
I2cstop
'*********




Config Pind.6 = Output 'Schrittmotoren Ein/Aus
Config Pinc.5 = Output 'Schrittmotor Links Richtung
Config Pinc.3 = Output 'Schrittmotor Links Step

Config Pinc.4 = Output 'Schrittmotor Rechts Richtung
Config Pinc.2 = Output 'Schrittmotor Rechts Step

Ledaus
Portd.6 = 0 'Schrittmotoren erst mal ausschalten

Wait 2

Ledein
Portd.6 = 1 'Beide Schrittmotoren einschalten

'Linker Schrittmotor
Portc.5 = 0 'Richtung
Portc.3 = 0
I = 400 'Anzahl der Schritte die Motor bewegt werden soll
Do
Ledaus
Portc.3 = 0
Waitms 5
Portc.3 = 1
Ledein
Waitms 5
I = I - 1
Loop Until I < 1

Portc.5 = 1 'Andere Richtung
I = 400 'Anzahl der Schritte die Motor bewegt werden soll
Do
Ledaus
Portc.3 = 0
Waitms 5
Portc.3 = 1
Ledein
Waitms 5
I = I - 1
Loop Until I < 1

Wait 2

'Rechter Schrittmotor
Portc.4 = 0 'Richtung
I = 400 'Anzahl der Schritte die Motor bewegt werden soll
Do
Ledaus
Portc.2 = 0
Waitms 5
Portc.2 = 1
Ledein
Waitms 5
I = I - 1
Loop Until I < 1

Portc.4 = 1 'Andere Richtung
I = 400 'Anzahl der Schritte die Motor bewegt werden soll
Do
Ledaus
Portc.2 = 0
Waitms 5
Portc.2 = 1
Ledein
Waitms 5
I = I - 1
Loop Until I < 1



Portd.6 = 0 ' Schrittmotoren erst mal ausschalten
Ledaus

End




Sub Ledein()
I2cstart
I2cwbyte Writepowerport_adr 'Schreibbefehl an PCF schicken
I2cwbyte 15 'Datenbyte an PCF
I2cstop
End Sub

Sub Ledaus
I2cstart
I2cwbyte Writepowerport_adr 'Schreibbefehl an PCF schicken
I2cwbyte 0 'Datenbyte an PCF
I2cstop
End Sub

Ich steh mal wieder völlig ohne ansatz da :(

mfg
jagdfalke

xanadu
21.12.2005, 22:06
Sieh dir mal bei Atmel die Application Notes 311 und 315 an. Da sind tolle Beispiele für die Verwendung von I²C (TWI), wenn bereit ist, sich damit auseinanderzusetzen. Danach versteht man auch die Beschreibung im Datasheet zum Prozessor ;-)

linux_80
21.12.2005, 22:06
Hallo,
es gibt da die bekannte I2C Bibliothek von Peter Fleury.
einfach mal danach suchen, wird hier im Forum auch öfter erwähnt.
oder gleich http://jump.to/fleury