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.