-
        

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14

Thema: M32 Kompass über I2C Auslesen

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    09.02.2013
    Beiträge
    51

    M32 Kompass über I2C Auslesen

    Anzeige

    Hallo RN,
    ich habe mir den Kompass LSM303DLM gekauft.
    http://www.st.com/st-web-ui/static/a...DM00026454.pdf

    Diesen möchte ich nun über den I2C bus auslesen.

    Mein Script:
    #include "RP6ControlLib.h"
    #include "RP6I2CmasterTWI.h"


    void I2C_transmissionError(uint8_t errorState)
    {
    writeString_P("\nI2C ERROR - TWI STATE: 0x");
    writeInteger(errorState, HEX);

    }
    void I2C_requestedDataReady(uint8_t errorState)
    {
    writeString_P("\nI2C ERROR - TWI STATE: 0x");
    writeInteger(errorState, HEX);

    }


    int main(void)
    {
    initRP6Control();

    I2CTWI_initMaster(100);
    initLCD();
    uint8_t daten[6];

    while(true)
    {
    task_I2CTWI();
    writeString_P("Daten:");


    I2CTWI_transmitByte(0x3C,0x30);
    I2CTWI_readBytes(0x30, daten, 6);
    I2CTWI_setTransmissionErrorHandler(I2C_transmissio nError);
    I2CTWI_setRequestedDataReadyHandler(I2C_requestedD ataReady);

    writeString_P("Daten:");
    writeInteger(daten[0], DEC);
    writeInteger(daten[1], DEC);
    writeInteger(daten[2], DEC);
    writeInteger(daten[3], DEC);
    writeInteger(daten[4], DEC);
    writeInteger(daten[5], DEC);
    writeChar('\n');

    mSleep(250);
    }

    return 0;
    }
    Nur leider giebt er mir NICHTS aus?

    Woran könnte es liegen?

    LG

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    32
    Beiträge
    1.514
    Hallo,

    bist Du sicher, dass die Adressen stimmen?
    (7 Bit + 1 read/write bit welches immer 0 ist und automatisch von der Lib gesetzt wird)

    I2CTWI_transmitByte(0x3C,0x30);
    I2CTWI_readBytes(0x30, daten, 6);

    Also was nun, Adresse 0x30 oder 0x3C?
    Schau Dir die Beispiele lieber nochmal ganz genau an.

    I2CTWI_setTransmissionErrorHandler(I2C_transmissio nError);
    I2CTWI_setRequestedDataReadyHandler(I2C_requestedD ataReady);
    Das gehört übrigens an den Anfang des Programms nach I2C init.
    Nicht in die endlosschleife. (macht aber nix ausser Rechenzeit kosten).

    MfG,
    SlyD

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    09.02.2013
    Beiträge
    51
    The accelerometer and the magnetometer have separate 7-bit slave addresses on the I2C bus. The magnetometer’s slave address is 0011110b and cannot be changed. The accelerometer’s slave address has its least significant bit (LSb) determined by the voltage on the slave address selector pad (SA0_A). The carrier board pulls SA0_A to ground through a 4.7kΩ resistor, setting the accelerometer’s slave address to 0011000b by default. If the accelerometer’s selected slave address happens to conflict with some other device on your I2C bus, it is possible to access SA0_A through the untented via on the bottom of the board and pull it up. In our tests of the board, we were able to communicate with the chip at clock frequencies up to 400 kHz.

    Also ist die Adresse:



    Dirk hat gesagt ich soll mal den Script versuchen:

    Code:
    /* 
     * ****************************************************************************
     * RP6 ROBOT SYSTEM - RP6 CONTROL M32 Examples
     * ****************************************************************************
     * Example: RP6Control LSM303DLM magnetometer test
     * Author(s): Dirk
     * ****************************************************************************
     * Description:
     * In this example we show a test for the LSM303DLM magnetometer.
     * 
     * ############################################################################
     * The Robot does NOT move in this example! You can simply put it on a table
     * next to your PC and you should connect it to the PC via the USB Interface!
     * ############################################################################
     * ****************************************************************************
     */
    /*****************************************************************************/
    // Includes:
    #include "RP6ControlLib.h"     // The RP6 Control Library. 
              // Always needs to be included!
    #include "RP6I2CmasterTWI.h"   // Include the I2C-Bus Master Library
    /*****************************************************************************/
    // I2C Error handler
    /**
     * This function gets called automatically if there was an I2C Error like
     * the slave sent a "not acknowledge" (NACK, error codes e.g. 0x20 or 0x30).
     * The most common mistakes are: 
     *   - using the wrong address for the slave
     *   - slave not active or not connected to the I2C-Bus
     *   - too fast requests for a slower slave
     * Be sure to check this if you get I2C errors!
     */
    void I2C_transmissionError(uint8_t errorState)
    {
     writeString_P("\nI2C ERROR --> TWI STATE IS: 0x");
     writeInteger(errorState, HEX);
     writeChar('\n');
    }
    /*****************************************************************************/
    // Main function - The program starts here:
    int main(void)
    {
     initRP6Control(); // Always call this first! The Processor will not
          // work correctly otherwise. 
     initLCD(); // Initialize the LC-Display (LCD)
          // Always call this before using the LCD!
     setLEDs(0b1111);
     mSleep(500);
     setLEDs(0b0000);
     writeString_P("\n\nRP6Control LSM303DLM Test 1!\n"); 
     // IMPORTANT:
     I2CTWI_initMaster(100); // Initialize the TWI Module for Master operation
           // with 100kHz SCL Frequency
    
     // Register the event handler:
     I2CTWI_setTransmissionErrorHandler(I2C_transmissionError);
     setLEDs(0b1111);
     // Write a text message to the LCD:
     showScreenLCD("################", "################");
     mSleep(1500);
     showScreenLCD(" RP6Control M32", "Example Program");
     mSleep(2500); 
     showScreenLCD("   LSM303DLM", "       Test 1");
     mSleep(2500);
     clearLCD();
     setLEDs(0b0000);
     // ---------------------------------------
     uint8_t daten[6];
     startStopwatch1();
     while(true) 
     {
      if(getStopwatch1() > 1000) // 1s
      {
       I2CTWI_transmitByte(0011110b, 0xEE);
       I2CTWI_readBytes(0011110b, daten, 6); 
     
       writeString_P("Daten: ");
       writeInteger(daten[0], DEC); 
       writeInteger(daten[1], DEC);
       writeInteger(daten[2], DEC);
       writeInteger(daten[3], DEC);
       writeInteger(daten[4], DEC);
       writeInteger(daten[5], DEC);
       writeChar('\n');
        setStopwatch1(0);
      }
      task_I2CTWI();
     }
     return 0;
    }
    wenn ich die Adresse 0011110b einsetze giebt es einen fehler wegen dem B.
    und was muss ich für einen Wert senden?

    Bin ich Blind?

    LG

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791
    Was sind denn das für Zeilen:
    I2CTWI_transmitByte(0011110b, 0xEE);
    I2CTWI_readBytes(0011110b, daten, 6);
    ???

    Ich hatte geschrieben:
    I2CTWI_transmitByte(0x3c, 0x03);
    I2CTWI_readBytes(0x3c, &daten[0], 6);
    Gruß
    Dirk

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    07.03.2011
    Beiträge
    1.397
    Zitat Zitat von Spacecam Beitrag anzeigen
    wenn ich die Adresse 0011110b einsetze gibt es einen Fehler wegen dem B.
    In C heißt das ja auch 0b0011110.

    Hier: "setLEDs(0b1111);" machst du es ja auch richtig.

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    09.02.2013
    Beiträge
    51
    ich habe beides versucht geht nicht. Richtig angeschlossen ist er auch.
    Ich vermute mal er is kaputt... ich hoffe sie nehmen ihn zurück (hab ihn angelötet)

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791
    Eigentlich sind die Dinger hart im Nehmen.

    Fragen:
    1. Du hast noch nicht geschrieben, ob es mit dem letzten Programm I2C-Bus-Fehler (I2C ERROR --> TWI STATE IS: 0x??) gibt!? Welche ganau?
    2. Hast du mal irgend etwas verpolt oder kurzgeschlossen am Modul?
    Gruß
    Dirk

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    09.02.2013
    Beiträge
    51
    1. Es werden keine Fehler angezeigt.
    2. Bis jetzt noch nicht

  9. #9
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791
    1. Es werden keine Fehler angezeigt.
    Dann wirf den Sensor nicht weg, er ist über den I2C-Bus wohl ansprechbar.

    2. Bis jetzt noch nicht
    ???
    Gruß
    Dirk

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    09.02.2013
    Beiträge
    51
    Zitat Zitat von Dirk Beitrag anzeigen
    Dann wirf den Sensor nicht weg, er ist über den I2C-Bus wohl ansprechbar.


    ???
    Naja bis jetzt war ich noch nicht sooo doof und habe ihn kurz geschlossen^^
    Also müsste es Fehler geben WENN ich den Sensor nicht anschließe und das Programm laufen lasse?

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Batterie über M32 Control auslesen
    Von carlitoco im Forum Robby RP6
    Antworten: 1
    Letzter Beitrag: 30.11.2008, 22:32
  2. 12 bit AD Wandler AD7994 über I2C auslesen
    Von boogyman im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 21.06.2007, 21:20
  3. Externer AD-Wandler (Max127) über I2C auslesen
    Von Lincolnmhkn im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 5
    Letzter Beitrag: 15.05.2007, 19:20
  4. Kompass über PWM auslesen
    Von robo junior im Forum C - Programmierung (GCC u.a.)
    Antworten: 1
    Letzter Beitrag: 01.02.2007, 18:07
  5. Zustand von 6 Schaltern über I2C auslesen
    Von E-Donni im Forum Elektronik
    Antworten: 3
    Letzter Beitrag: 10.08.2006, 12:30

Berechtigungen

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