Phönix
04.11.2004, 19:51
Hallo!
Ich habe ein Problem mit dem Kompass CMPS03von Devantech. Ansteuern kann man mittels I2C. Ausgben sollte er den Winkel in auf einen Wert, der normiert auf 0-255 ist. Aber meiner macht das irgendwie nicht. das ist mein Quellcode:
define SDA port[9] 'DATENLEITUNG
define SCL port[10] 'TAKTLEITUNG
define I2C_DATEN byte[1]
define Z byte[2]
define KOMPASSWERT byte[3]
'RUHEZUSTAND FÜR I2C-LEITUNGEN
SDA = ON
SCL = ON
'BEGINN DES HAUPTPROGRAMMS
#KOMPASS
gosub I2C_START
I2C_DATEN = 192
gosub I2C_WRITE
I2C_DATEN = 1
gosub I2C_WRITE
gosub I2C_STOPP
gosub I2C_START
I2C_DATEN = 193
gosub I2C_WRITE
gosub I2C_READ
KOMPASSWERT = I2C_DATEN
print " "
print KOMPASSWERT
gosub NO_ACK
gosub I2C_STOPP
goto KOMPASS
'I2C-STANDARDROUTINEN
#I2C_START
SDA = OFF
SCL = OFF
return
#I2C_STOPP
SDA = OFF
SCL = ON
SDA = ON
return
#I2C_WRITE
for Z = 1 to 8
SDA = OFF
if (I2C_DATEN and 128) = 128 then SDA = ON
pulse SCL
I2C_DATEN = I2C_DATEN shl 1
next
pulse SCL
return
#I2C_READ
I2C_DATEN = 0
deact SDA
for Z = 1 to 8
I2C_DATEN = I2C_DATEN shl 1
SCL = ON
if SDA then I2C_DATEN = I2C_DATEN + 1
SCL = OFF
next
return
#ACK
SDA = 0
pulse SCL
return
#NO_ACK
SDA = 1
pulse SCL
return
end
Habe ich vielleicht irgendwo einen Fehler oder kennt jemand das Problem? Für Hilfe wäre ich dankbar!
MfG
Jonas
Ich habe ein Problem mit dem Kompass CMPS03von Devantech. Ansteuern kann man mittels I2C. Ausgben sollte er den Winkel in auf einen Wert, der normiert auf 0-255 ist. Aber meiner macht das irgendwie nicht. das ist mein Quellcode:
define SDA port[9] 'DATENLEITUNG
define SCL port[10] 'TAKTLEITUNG
define I2C_DATEN byte[1]
define Z byte[2]
define KOMPASSWERT byte[3]
'RUHEZUSTAND FÜR I2C-LEITUNGEN
SDA = ON
SCL = ON
'BEGINN DES HAUPTPROGRAMMS
#KOMPASS
gosub I2C_START
I2C_DATEN = 192
gosub I2C_WRITE
I2C_DATEN = 1
gosub I2C_WRITE
gosub I2C_STOPP
gosub I2C_START
I2C_DATEN = 193
gosub I2C_WRITE
gosub I2C_READ
KOMPASSWERT = I2C_DATEN
print " "
print KOMPASSWERT
gosub NO_ACK
gosub I2C_STOPP
goto KOMPASS
'I2C-STANDARDROUTINEN
#I2C_START
SDA = OFF
SCL = OFF
return
#I2C_STOPP
SDA = OFF
SCL = ON
SDA = ON
return
#I2C_WRITE
for Z = 1 to 8
SDA = OFF
if (I2C_DATEN and 128) = 128 then SDA = ON
pulse SCL
I2C_DATEN = I2C_DATEN shl 1
next
pulse SCL
return
#I2C_READ
I2C_DATEN = 0
deact SDA
for Z = 1 to 8
I2C_DATEN = I2C_DATEN shl 1
SCL = ON
if SDA then I2C_DATEN = I2C_DATEN + 1
SCL = OFF
next
return
#ACK
SDA = 0
pulse SCL
return
#NO_ACK
SDA = 1
pulse SCL
return
end
Habe ich vielleicht irgendwo einen Fehler oder kennt jemand das Problem? Für Hilfe wäre ich dankbar!
MfG
Jonas