- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 10 von 48

Thema: RP6 Kompass

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    @Berghuhn,

    hier: https://www.roboternetz.de/community...vantech-CMPS03

    ... gab es schon mal ein Programmbeispiel für den CMPS03.
    Gruß
    Dirk

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.09.2010
    Alter
    30
    Beiträge
    129
    Dirk
    @Berghuhn,

    hier: https://www.roboternetz.de/community/...vantech-CMPS03

    ... gab es schon mal ein Programmbeispiel für den CMPS03.
    OKay... danke =)
    werd das nacher mal ausprobieren


    RP6conrad
    Normalerweise programmieren sie so etwas in der 'Main' Schleife. Al sie Functionen sind programmiert in die lib von RP6, die muss du nicht neu einprogrammieren. Wichtig : das I2C Kompass hat eine bestimmte Adresse. Das muss naturlich eingegeben werden : sieht dan so aus : [c]// Define the addresses of our devices - in this simple example we only have
    // our PCF8574:
    #define PCF8574_8LEDS_ADR 0x70
    // With this routine we write the data byte to the PCF8574 port:
    I2CTWI_transmitByte(PCF8574_8LEDS_ADR, (~runningLight) );

    // We need to invert the bits with "~" because the LEDs are
    // switched on when the port is LOW. The PCF8574 can only sink
    // up to 25mA of current. It is only able to source about 300µA
    // of current. Thus you need to connect the cathode of the LED
    // to the ports - in series with a 1K or 2K2 resistor connected to
    // VDD.[/c]
    So wird dan eine Byte nach das I2C Slave gesendet. Gelesen wird dan mit : I2CTWI_requestDataFromDevice(SRF_ADR, MEASURE_US_HIGH, 1);
    Ist das Kompass mit der RP6 verbunden, oder mit beide (RP6 /M32).
    Welchen compilierfehler hasst du ?
    Ja ich muss es dann wohl mit Define machen ^^
    Nein ich habe keinen Compilierfehler. Es Compiliert alles ganz normal so wie sonst.

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.09.2010
    Alter
    30
    Beiträge
    129
    Also,
    jetzt habe ich das ganze mal über die defines gemacht:

    Code:
     
        #ifndef  LSM303
        #define  LSM303
    
        #define ACC_ADDRESS           (0x30)
        #define MAG_ADDRESS           (0x3C)
        
    
        #define CTRL_REG1_A           (0x20)
        #define CTRL_REG2_A           (0x21)
        #define CTRL_REG3_A           (0x22)
        #define CTRL_REG4_A           (0x23)
        #define CTRL_REG5_A           (0x24)
        #define HP_FILTER_RESET_A     (0x25)
        #define REFERENCE_A           (0x26)
        #define STATUS_REG_A          (0x27)
    
        #define OUT_X_L_A             (0x28)
        #define OUT_X_H_A             (0x29)
        #define OUT_Y_L_A             (0x2A)
        #define OUT_Y_H_A             (0x2B)
        #define OUT_Z_L_A             (0x2C)
        #define OUT_Z_H_A             (0x2D)
    
        #define INT1_CFG_A            (0x30)
        #define INT1_SOURCE_A         (0x31)
        #define INT1_THS_A            (0x32)
        #define INT1_DURATION_A       (0x33)
        #define INT2_CFG_A            (0x34)
        #define INT2_SOURCE_A         (0x35)
        #define INT2_THS_A            (0x36)
        #define INT2_DURATION_A       (0x37)
    
        #define CRA_REG_M             (0x00)
        #define CRB_REG_M             (0x01)
        #define MR_REG_M              (0x02)
    
        #define OUT_X_H_M             (0x03)
        #define OUT_X_L_M             (0x04)
        #define OUT_Y_H_M             (0x05)
        #define OUT_Y_L_M             (0x06)
        #define OUT_Z_H_M             (0x07)
        #define OUT_Z_L_M             (0x08)
    
        #define SR_REG_M              (0x09)
        #define IRA_REG_M             (0x0A)
        #define IRB_REG_M             (0x0B)
        #define IRC_REG_M             (0x0C)
        //////////////////////////////////////
    
    
        void LSM303Init()
        {
      
    
            //enable magnetometer
            i2c_start(); 
            i2c_write_byte(0x3C); // (MAG_ADDRESS)  
            i2c_write_byte(0x02); // MR_REG_M
            i2c_write_byte(0x00); 
            i2c_stop();
        }
        #endif

    und in der Main versuche ich dann die Daten so zu lesen:

    Code:
            .... 
    
            unsigned char Kompass_Data[6]; 
            LSM303Init();
    
            .....
    
            i2c_start();
            i2c_write_byte(0x3C); 
            i2c_write_byte(OUT_X_H_M);   // Select register OUT_X_H_M
            i2c_start();         
            i2c_write_byte(0x3D); 
        
            Kompass_Data[0] = i2c_read_byte();
            Kompass_Data[1] = i2c_read_byte();
            Kompass_Data[2] = i2c_read_byte();
            Kompass_Data[3] = i2c_read_byte();
            Kompass_Data[4] = i2c_read_byte();
            Kompass_Data[5] = i2c_read_last_byte();
            i2c_stop();

    Doch mein Problem hat sich dadurch immer noch nicht gelöst.
    er belibt wie davor in dieser Zeile beim ausführen hängen:

    i2c_write_byte(0x3C);

    Ich habe aber keine Compiler fehler oder ähnliches.

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    @Berghuhn:

    Der RP6 bringt ja eine eigene Library (RP6I2CmasterTWI) für die I2C-Kommunikation mit.
    Die brauchst du nur einzubinden, wie ich vorgestern in dem Beispiel von 2007 gepostet hatte.
    Geändert von Dirk (18.12.2011 um 19:32 Uhr)
    Gruß
    Dirk

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.09.2010
    Alter
    30
    Beiträge
    129
    Oh ja ganz vergessen ^^

    Habe das ganze mal umgeschrieben, aber ob ich das so:


    Code:
    I2CTWI_transmitByte(0x3D, OUT_X_H_M); 
    I2CTWI_readBytes(0x3D, ACC_Data, 6);

    oder so:

    Code:
    ACC_Data[0] = I2CTWI_readByte(OUT_X_H_M);
    ACC_Data[1] = I2CTWI_readByte(OUT_X_L_M);
    ACC_Data[2] = I2CTWI_readByte(OUT_Y_H_M);
    ACC_Data[3] = I2CTWI_readByte(OUT_Y_L_M);
    ACC_Data[4] = I2CTWI_readByte(OUT_Z_H_M);
    ACC_Data[5] = I2CTWI_readByte(OUT_Z_L_M);
    Es bleibt immer beim lesen hängen...
    irgend etwas mache ich wohl falsch ^^

  6. #6
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    09.04.2008
    Beiträge
    384
    Verwenden sie die M32 als Master ? Die I2C Schnittstelle zwischen M32 und Base functioniert also ? Nach verbinden von das Kompass functioniert noch immer die M32-Base Schnittstelle ? (muss normal so sein). Gibt diese I2C_Transmission_error() immer eine Failure ?

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.09.2010
    Alter
    30
    Beiträge
    129
    Ja ich verwende die M32 Platine als Master. Die Kommunikation funktioniert so wie immer, es kommen zumindest auch keine Fehler.

Ähnliche Themen

  1. Kompass für RP6
    Von axel88 im Forum Robby RP6
    Antworten: 40
    Letzter Beitrag: 04.08.2008, 18:01
  2. Kompass für nur 5€?
    Von Rohbotiker im Forum Elektronik
    Antworten: 5
    Letzter Beitrag: 03.07.2007, 21:11
  3. Kompass
    Von sulu im Forum Vorstellung+Bilder+Ideen zu geplanten eigenen Projekten/Bots
    Antworten: 14
    Letzter Beitrag: 15.08.2005, 10:06
  4. Kompass???
    Von Static im Forum Sensoren / Sensorik
    Antworten: 30
    Letzter Beitrag: 18.01.2005, 23:58
  5. !!!KOMPASS!!!
    Von phönix im Forum Sensoren / Sensorik
    Antworten: 12
    Letzter Beitrag: 17.05.2004, 17:14

Berechtigungen

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

LiFePO4 Speicher Test