flammenvogel
03.02.2009, 14:42
Hallo Leute,
ich versuche mit meinem ATMEGA2560 Bord den Kompass CMPS03 (der Kompass hier aus dem Shop, allerdings ohne Quarz, wenn ich das richtig sehe) über I2C anzusteuern.
Allerdings funktioniert das nicht so ganz. Ich habe den Kompass an Port D 0 und 1 angeschlossen (laut Datenblatt sind das die I2C Ports). Zusätzlich habe ich noch +5V und GND Leitung vom Kompass mit den entsprechenden Pins auf dem Board verbunden.
Wenn ich dann allerdings versuche den Kompass im Programm anzusprechen, hängt sich das Programm auf:
$prog , 255 , &B11011001 , 'Quarz an / Teiler aus / Jtag aus
$regfile = "m2560def.dat"
$hwstack = 82 '80
$framesize = 68 ' 64
$swstack = 68 '44
$crystal = 16000000 'Quarzfrequenz
Config Com4 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Open "com4:" For Binary As #4 'USB Buchse
Config Scl = Portd.0 'Ports fuer IIC-Bus
Config Sda = Portd.1
Config Pind.5 = Output
Led Alias Portd.5
Led = 0
Declare Function Rn_cmps_himmelsrichtung() As Word
Print #4 , "Test"
Dim Himmelsrichtung As Word
Dim Grad As Single
Dim V As Byte
Wait 3 'Warte 3 Sekunde
I2cinit
Print #4 , "RN-Control CMPS03 Kompass Testprogramm "
V = 1
Do
Himmelsrichtung = Rn_cmps_himmelsrichtung()
Print #4 , "Himmelsrichtung in 0,1 Grad Schritten: " ; Himmelsrichtung
Grad = Himmelsrichtung / 10
Print #4 , "Himmelsrichtung genau in Grad: " ; Grad
V = V + 3
Wait 1
Loop
End
Function Rn_cmps_himmelsrichtung() As Word
Local Lob As Byte
Local Hib As Byte
Local Cmps_slaveid As Byte
Local Cmps_slaveid_read As Byte
Cmps_slaveid = &HC0
Cmps_slaveid_read = Cmps_slaveid + 1
'Register auswählen
I2cstart
I2cwbyte Cmps_slaveid
I2cwbyte 2
I2cstop
I2cstart
I2cwbyte Cmps_slaveid_read
I2crbyte Hib , Ack
I2crbyte Lob , Nack
I2cstop
Rn_cmps_himmelsrichtung = Makeint(lob , Hib)
End Function
Die LED (Portd.5) brennt und auch die Ausgabe "Test" ist auf dem Terminal noch zu lesen. Allerdings das "RN-Control CMPS03 Kompass Testprogramm " nicht mehr. Daher schätze ich mal das sich das Programm nach dem I2CInit aufhängt.
Kann mir einer sagen warum das so ist oder was ich falsch gemacht habe???
ich versuche mit meinem ATMEGA2560 Bord den Kompass CMPS03 (der Kompass hier aus dem Shop, allerdings ohne Quarz, wenn ich das richtig sehe) über I2C anzusteuern.
Allerdings funktioniert das nicht so ganz. Ich habe den Kompass an Port D 0 und 1 angeschlossen (laut Datenblatt sind das die I2C Ports). Zusätzlich habe ich noch +5V und GND Leitung vom Kompass mit den entsprechenden Pins auf dem Board verbunden.
Wenn ich dann allerdings versuche den Kompass im Programm anzusprechen, hängt sich das Programm auf:
$prog , 255 , &B11011001 , 'Quarz an / Teiler aus / Jtag aus
$regfile = "m2560def.dat"
$hwstack = 82 '80
$framesize = 68 ' 64
$swstack = 68 '44
$crystal = 16000000 'Quarzfrequenz
Config Com4 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Open "com4:" For Binary As #4 'USB Buchse
Config Scl = Portd.0 'Ports fuer IIC-Bus
Config Sda = Portd.1
Config Pind.5 = Output
Led Alias Portd.5
Led = 0
Declare Function Rn_cmps_himmelsrichtung() As Word
Print #4 , "Test"
Dim Himmelsrichtung As Word
Dim Grad As Single
Dim V As Byte
Wait 3 'Warte 3 Sekunde
I2cinit
Print #4 , "RN-Control CMPS03 Kompass Testprogramm "
V = 1
Do
Himmelsrichtung = Rn_cmps_himmelsrichtung()
Print #4 , "Himmelsrichtung in 0,1 Grad Schritten: " ; Himmelsrichtung
Grad = Himmelsrichtung / 10
Print #4 , "Himmelsrichtung genau in Grad: " ; Grad
V = V + 3
Wait 1
Loop
End
Function Rn_cmps_himmelsrichtung() As Word
Local Lob As Byte
Local Hib As Byte
Local Cmps_slaveid As Byte
Local Cmps_slaveid_read As Byte
Cmps_slaveid = &HC0
Cmps_slaveid_read = Cmps_slaveid + 1
'Register auswählen
I2cstart
I2cwbyte Cmps_slaveid
I2cwbyte 2
I2cstop
I2cstart
I2cwbyte Cmps_slaveid_read
I2crbyte Hib , Ack
I2crbyte Lob , Nack
I2cstop
Rn_cmps_himmelsrichtung = Makeint(lob , Hib)
End Function
Die LED (Portd.5) brennt und auch die Ausgabe "Test" ist auf dem Terminal noch zu lesen. Allerdings das "RN-Control CMPS03 Kompass Testprogramm " nicht mehr. Daher schätze ich mal das sich das Programm nach dem I2CInit aufhängt.
Kann mir einer sagen warum das so ist oder was ich falsch gemacht habe???