-         

Ergebnis 1 bis 6 von 6

Thema: Problem mit cmps03 magnetfeldsensor

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    26.04.2006
    Beiträge
    18

    Problem mit cmps03 magnetfeldsensor

    Anzeige

    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

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    15.07.2004
    Alter
    32
    Beiträge
    807
    bescheidende Frage, wie sieht den der Quelltext aus?

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    26.04.2006
    Beiträge
    18
    stimmt das wär wohl ganz nützlich:

    also ich hab folgenden code hier um forum gefunden:

    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 
    }
    das hat aber nicht wirklich funktioniert, also hab ich selber was geschrieben:

    Code:
    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

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    06.08.2004
    Beiträge
    378
    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.

    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
    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

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    26.04.2006
    Beiträge
    18
    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.

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    27.02.2004
    Beiträge
    39
    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

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •