Ich hab nun ein Takt von 10kHz eingestellt:
Code:
void i2c_init(void)
{
/* initialize TWI clock: 100 kHz clock, TWPS = 0 => prescaler = 1 */
//TWSR = 0; /* no prescaler */
//TWBR = ((F_CPU/SCL_CLOCK)-16)/2; /* must be > 10 for stable operation */
TWSR = 1;
TWBR = 192;
}/* i2c_init */
Hier jedoch auch kommt er nur so weit wie im Code eingezeichnet:
Code:
unsigned char i2c_start(unsigned char address)
{
uint8_t twst;
// send START condition
TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
// wait until transmission completed
while(!(TWCR & (1<<TWINT)));
// check value of TWI Status Register. Mask prescaler bits.
twst = TW_STATUS & 0xF8;
if ( (twst != TW_START) && (twst != TW_REP_START)) return 1;
! HIER KOMMT ER NICHT MEHR HIN!
// 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) ) return 1;
return 0;
}/* i2c_start */
Ich bin am verzweifeln...
Lesezeichen