PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit cmps03 magnetfeldsensor



Green Hell
22.05.2006, 14:47
Hallo,
habe einen cmps03 Magnetfeldsensor mit C programmiert. Ich kann auch die Softwareversion aus register 0 auslesen und bekomme auch Werte wenn ich die entsprechenden Register auslese. Einziges Problem ist, dass der Sensor meistens die Werte 900 und 1800 ausgibt egal wie man ihn dreht. Nur ganz selten bekomme ich andere Werte, die mir aber auch ziemlich sinnlos erscheinen.
Hat irgendjemand ne Idee woran das liegen könnte???

Danke schon mal
Green Hell

Madgyver
22.05.2006, 20:55
bescheidende Frage, wie sieht den der Quelltext aus?

Green Hell
23.05.2006, 08:00
stimmt das wär wohl ganz nützlich:

also ich hab folgenden code hier um forum gefunden:


int read2_compass()
{
int data;

i2c_start(0xc0); // start the I2C bus
i2c_write(0xc1); // device address of the compass
i2c_write(1); // memory address first part
i2c_stop();

i2c_start(0xc1); // restart
data = i2c_readAck(); // read 1 byte
data += i2c_readNak(); // read 1 byte
i2c_stop(); // stopp

return data; // return the number of direction
}

das hat aber nicht wirklich funktioniert, also hab ich selber was geschrieben:


int read_compass()
{
int data_1;
int data_2;
int value;

i2c_start(compass_add+I2C_WRITE);
i2c_write(2);
i2c_stop();

i2c_start(compass_add+I2C_READ);
data_1=i2c_readNak();
i2c_stop();

i2c_start(compass_add+I2C_WRITE);
i2c_write(3);
i2c_stop();

i2c_start(compass_add+I2C_READ);
data_2=i2c_readNak();
i2c_stop();


value=(data_1*256)+data_2;

return value;
}

Für beides sind die bibliotheken von Peter Fleury benutzt worden, vielleicht weiß ja jemand was dararn nicht stimmt

Sommer
23.05.2006, 11:14
Hi,

also hier ein kleines Beispiel wie es funktioniert.
Es ist zwar unter Proton+ geschrieben, kann aber umgeschrieben werden.
Das Problem mit 900 und 1800 hatte ich auch schon mal ich weiß nur nicht mehr genau was da war.


HBSTART ' Busstart
HBUSOUT $C0 ' Adresse vom Kompass
HBUSOUT 0 ' erst high Byte
HBUSOUT 0 ' dann low Byte
HBRESTART ' Bus neustart
HBUSOUT $C1 ' mit read/write bit 0xC1
CMPS_Byte = HBUSIN ' lese Register 1 // Wert 0 --> 255
HBUSACK ' erneuter ACK
CMPS_WORD = HBUSIN ' lese Register 2,3 // Wert 0 --> 3599
CMPS_NAVI = CMPS_WORD / 10
CMPS_TX = CMPS_WORD / 10 ' Wert kürzen auf volle Grad ( 0 --> 360 )
HBSTOP ' Busstop

Ich glaube das war weil ich das flasche Register gelsen habe.... sicher bin ich mir aber nicht mehr.

Vieleicht hilft dier der Code um das Problem zu lösen.

Bye Ulli

Green Hell
29.05.2006, 19:11
Danke für die Hilfe, der Fehler lag allerdings gar nicht in der Software, aber wer rechnet denn damit, dass der Sensor defekt ist. Habs mit nem anderen Sensor versucht und jetzt funktioniert das Ganze einwandfrei.

Kunki
21.12.2006, 17:52
Hallo,

ich versuche gerade auch das Kompassmodul CMPS03 unter C in Betrieb zu nehmen. Ich benutze die Peter Fleury Bibliothek. Aber leider empfange ich immer nur falsche Werte(zwischen 190-255 in dez). Die Kalibrierung des Moduls ist in Ordnung. In Bascom klappt die Kommunikation wunderbar.
Mein Code:
i2c_start(CMP_adr_Write); //auch mit +I2C_WRITE geht es nicht
i2c_write(1);
i2c_stop();

i2c_start(CMP_adr_Read);
data=i2c_readNak();
i2c_stop(); // stopp

Ich habe alle Codes, die ich gefunden habe ausprobiert, aber bei keinem klappt es. Wie mache ich eigetnlich das ACK ?Wäre echt super, wenn mir jemand kurz helfen könnte.
gruß
Alex