bescheidende Frage, wie sieht den der Quelltext aus?
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
bescheidende Frage, wie sieht den der Quelltext aus?
stimmt das wär wohl ganz nützlich:
also ich hab folgenden code hier um forum gefunden:
das hat aber nicht wirklich funktioniert, also hab ich selber was geschrieben:Code: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 }
Für beides sind die bibliotheken von Peter Fleury benutzt worden, vielleicht weiß ja jemand was dararn nicht stimmtCode: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; }
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.
Ich glaube das war weil ich das flasche Register gelsen habe.... sicher bin ich mir aber nicht mehr.Code: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
Vieleicht hilft dier der Code um das Problem zu lösen.
Bye Ulli
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.
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
Lesezeichen