Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit cmps03 magnetfeldsensor
Green Hell
22.05.2006, 15: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, 21:55
bescheidende Frage, wie sieht den der Quelltext aus?
Green Hell
23.05.2006, 09: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
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, 20: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.
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
 
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.