PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Rn-Control ATMEGA2560 mit Kompass CMPS03



flammenvogel
03.02.2009, 13: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???

Dirk
03.02.2009, 19:34
Probier die CMPS03 Leseroutine 'mal so:

'Register auswählen
I2cstart
I2cwbyte Cmps_slaveid , Ack
I2cwbyte 2
Waitms 10

I2cstart
I2cwbyte Cmps_slaveid_read , Ack
I2crbyte Hib , Ack
I2crbyte Lob , Nack
I2cstop

Gruß Dirk

P.S.: Hat dein Board Pullup-Widerstände an SCL/SDA? Wenn nein, müßte man sie noch ergänzen.

flammenvogel
04.02.2009, 22:10
Also ich habe jetzt einfach mal das Programm dementsprechend geändert. Leider lässt es sich so nicht kompelieren. Der Compiler beschwert sich jedes Mal über den Datentyp Cmps_slaveid und Cmps_slaveid_read (sind beide als Byte definiert).

Ich bin mir nicht ganz sicher ob mein Board Pullup Widerstände besitzt. Ich habe jetzt einfach mal auf Verdacht 10kOhm Widerstände eingebaut. Mein altes Programm hängt sich jetzt schonmal nicht mehr auf, aber ich kriege nur extrem hohe Werte ca. 65000 oder so.

Sind die Pullup Widerstände eventuell zu hoch? Wie groß sollten diese im normalfall sein?

Jon
05.02.2009, 15:42
4,7kOhm ist bei mehreren Geräten am I2C Bus das passende, mehr als 10kOhm sollten es aber nicht sein.
Diese beiden Pull-Up Widerstände werden auf jeden Fall benötigt, da das Board keine hat.

Sonst stimmt das Programm von dir aber, da ich dieses auch so verwende, ebenso am RN2560.

jon