Estoy intentando usar un atmega2560 pero no puedo hacer funcionar el I2C. Cuando envío el byte de dirección, nunca recibo una respuesta automática. ¿Alguien ve lo que estoy haciendo mal? ¿Usé el código de la hoja de datos? Lo probé con un analizador lógico y funciona, así que sé que el IC no está defectuoso.
void i2csend(uint8_t addr, uint8_t reg, uint8_t data){
TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
while(!(TWCR & (1<<TWINT)));
if ((TWSR & 0xF8) != 0x08)//A START condition has been transmitted
{
stopi2c();
return;
}
TWDR = addr;
TWCR = (1<<TWINT) | (1<<TWEN);
while(!(TWCR & (1<<TWINT)));
if ((TWSR & 0xF8) != 0x18)//SLA+W has been transmitted;
ACK has been received
{
stopi2c();
return;
}
TWDR = reg;
TWCR = (1<<TWINT) | (1<<TWEN);
while (!(TWCR & (1<<TWINT)));
if ((TWSR & 0xF8) != 0x28)//Data byte has been transmitted;
ACK has been received
{
stopi2c();
return;
}
TWDR = data;
TWCR = (1<<TWINT) | (1<<TWEN);
while (!(TWCR & (1<<TWINT)));
if ((TWSR & 0xF8) != 0x28)//Data byte has been transmitted;
ACK has been received
{
stopi2c();
return;
}
stopi2c();
return;
}