PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] Kalibrierung CMPS03 via I2C



27.12.2004, 02:02
Hat schon einmal jemand das Kompassmodul CMPS03 über I²C kalibriert? Ich habe es getan weil es mir zu ungenau war. Das Resultat war das ich nur noch Werte im Bereich 1700 bis 2300 habe. Ich habe es über das Register 15 mit dem Wert 255 kalibriert in N-O-S-W und dann in Register 15 den Wert 0 geschrieben. Wo ist mein Denkfehler? Ich habe es mehrmals kalibriert über meine Routine mit einem Kompass und es gieng immer daneben. Nun ist mein Wertebereich nicht mehr im Bereich von 0 bis 3599 sondern nur noch im oben genannten Bereich.Ich habe es über I²C und über den Pin versucht. Aber die Ergebnisse sind nicht allzusehr überzeugend.

Grüsse Wolfgang

pebisoft
30.12.2004, 19:55
hallo, ich habe auch dieses kompasmodul seit kurzem. da ich es noch nicht ganz auslesen kann, wie hat du es programmiert. ich brauche etwas bascom-code für i2c damit ich die daten auslesen kann. kalibriert habe ich es noch nicht, weil ich gelesen hatte, das so auch genau ist.
mfg pebisoft

30.12.2004, 23:34
@pebisoft:
schau dir doch das Datenblatt an, da steht alles drin. Wenn du schon Bascom-Erfahrungen hast sollte doch das kein Problem sein.

pebisoft
01.01.2005, 20:14
hallo, das kompassmodul läuft jetzt zu 99% genauigkeit.
am besten ist wenn man den vorgeschlagenen druckschalter zwischen anschluss 6 und masse 9
legt. ich habe den druckschalter zwischen gelassen, wenn mal wieder kalibriert werden
muss. diese kalibrierung ist einfacher als über i2c, kann während der laufenden abfrage
des moduls gemacht werden. ich gebe jetzt über das easy-radiomodul vom arbeitsplatz
eine gradzahl vor und der robby hält gemäss programm die richtung innerhalb der vorgabe
(+-5, ist ca +- 0.5 grad). macht richtig spass. unter "album" roboterbilder" ist ein bild
vom küchenbrettroboter. wer fragen hat, soll fragen.


Declare Sub K_werte(byval Ee_adresse As Byte)

$regfile = "m16def.dat"
$crystal = 8000000
$baud = 19200

Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , Rs = Portc.5 , E = Portc.4
Config Lcd = 16 * 2

Config Scl = Portb.3
Config Sda = Portb.4

Dim Daten As Byte , Temp As Byte
Dim Ausgabe As Word
Dim Adresse As Byte
Adresse = 2

Do

Call K_werte(adresse)
Print Ausgabe
Waitms 500

Loop

End

Function K_werte(byval Ee_adresse As Byte)
Disable Interrupts
I2cstart
I2cwbyte &B11000000 , Ack
I2cwbyte Ee_adresse
Waitms 10
I2cstart
I2cwbyte &B11000001 , Ack
I2crbyte Daten , Ack
I2crbyte Temp , Nack
Ausgabe = Daten * 256
Ausgabe = Ausgabe + Temp
I2cstop
Waitms 10
Enable Interrupts
End Function

mfg pebisoft