PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : I2C: Errorcode 0x20 und 0x48



RobotMichi
25.09.2010, 13:52
Hallo,

ich habe folgendes Programm für die M32 geschrieben, das die Lichtsensorenwerte von der Base ausliest:


#include "RP6ControlLib.h"
#include "RP6I2CmasterTWI.h"

#define RP6_I2C_ADDR 10


void I2C_transmissionError(uint8_t errorState)
{
writeString_P("\nI2C ERROR - TWI STATE: 0x");
writeInteger(errorState, HEX);
writeChar('\n');
beep(200, 50);
}


void readLightSensors(void)
{
uint8_t Lichtsensoren[4];

I2CTWI_transmitByte(RP6_I2C_ADDR, 13);
I2CTWI_readBytes(RP6_I2C_ADDR, Lichtsensoren, 4);
clearLCD();
setCursorPosLCD(0,0);
writeIntegerLCD(Lichtsensoren[0] + (Lichtsensoren[1]<<8), DEC);
setCursorPosLCD(1,0);
writeIntegerLCD(Lichtsensoren[2] + (Lichtsensoren[3]<<8), DEC);

}

int main(void)
{
initRP6Control();
initLCD();


//I2C-Bus initialisieren
I2CTWI_initMaster(100);
I2CTWI_setTransmissionErrorHandler(I2C_transmissio nError);

startStopwatch1();

while(true)
{
if(getStopwatch1()>100)
{
readLightSensors();
setStopwatch1(0);
}

}
return 0;
}

Am Anfang bekomme ich immer drei Fehlermeldungen im Terminal:

I2C ERROR - TWI STATE: 0x20
I2C ERROR - TWI STATE: 0x20
I2C ERROR - TWI STATE: 0x48

danach funktioniert das Programm tadellos.
Woran könnte das liegen?

lg
Michi

PicNick
25.09.2010, 16:22
0x20 heisst, auf das Adressbyte (write) ist kein ACK zurückgekommen
0x48 heisst, auf das Adressbyte (read) ist kein ACK zurückgekommen

wenn es danach funzt, ist der Slave (die Base) offenbar erst etwas später bereit. Du kannst es in dieser Situation eigentlich ignorieren.

RobotMichi
25.09.2010, 17:53
danke! :)

lg
Michi