Hallo RoboPunk,
ganz egal ist es nicht, ob man NXTs I2C-Routinen kennt. Hier 'mal der CMPS03-Lesecode für den RP6. Es wird nur 1 Byte (Datareg) gesendet, dann werden entweder 1 oder 2 Bytes vom CMPS03 gelesen.
Vielleicht kannst du das ja auf deine I2C-Routinen anpassen.
Die Geschichte mit "Startbit" verstehe ich bei dir gar nicht,- evtl. ganz weglassen.
Gruß Dirk
Code:// The I2C slave address of the compass module CMPS03 is 0xC0: #define CMPS03_ADR 0xC0 // CMPS03 Data Registers: #define GET_VERSION 0 // Software version #define MEASURE_8_BIT 1 // 8-bit compass value #define MEASURE_16_BIT 2 // 16-bit compass value #define CALIBRATE 15 // Calibration (write only) /** * READ CMPS03 DATA REGISTERS * * This function reads the data registers of the CMPS03. * * datareg = 0 : Get the CMPS03 software version * datareg = 1 : Read 8-bit compass value [0..254] * datareg = 2 : Read 16-bit compass value [0..3599] * */ uint16_t readCMPS03(uint8_t datareg) {uint16_t result = 0xffff; uint8_t results[3]; I2CTWI_transmitByte(CMPS03_ADR, datareg); if (datareg == MEASURE_16_BIT) { I2CTWI_readBytes(CMPS03_ADR, results, 2); result = (results[0] << 8) + results[1]; } else { result = I2CTWI_readByte(CMPS03_ADR); } return result; }







Zitieren

Lesezeichen