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