Also von der Befehlsfolge her siehts eigentlich ziemlich so aus wie bei mir.
Wo was anders ist, ist die Bus-Initialisierung.
Hier mal die Funktionen, die ich verwend. Evtl. hilft dir das weiter.
Damit sollte zumindest mal ein "Bin da!" des EEPROMs kommen.Code:void I2C_Init(ui32_t scl_clock) { // Initializes the I2C/TWI Hardware as Master TWSR = 0; // no prescaler TWBR = ((F_CPU/scl_clock)-16)/2; // must be > 10 for stable operation } e_errors I2C_Start(ui8_t address) { ui8_t twst = 0; ui8_t retval = ERR_OK; TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN); // send START condition while(!(TWCR & (1<<TWINT))); // wait until transmission completed twst = TW_STATUS & 0xF8; // check value of TWI Status Register. Mask prescaler bits. if ( (twst != TW_START) && (twst != TW_REP_START)) { retval = ERR_TWI_NO_START; } if (retval == ERR_OK) { // send device address TWDR = address; TWCR = (1<<TWINT) | (1<<TWEN); // wail until transmission completed and ACK/NACK has been received while(!(TWCR & (1<<TWINT))); // check value of TWI Status Register. Mask prescaler bits. twst = TW_STATUS & 0xF8; if ((twst != TW_MT_SLA_ACK) && (twst != TW_MR_SLA_ACK)) { retval = ERR_TWI_NO_ACK; } } return retval; } void I2C_Stop(void) { TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO); // send stop condition while(TWCR & (1<<TWSTO)); // wait until stop condition is executed and bus released }







Zitieren

Lesezeichen