Hallo,
ich versuche jetzt schon länger den TWI an meinem ATmega168 zum laufen
zu bringen. Am TWI hängt ein PCA9540B (I²C Multiplexer).
Der Controller hängt in der Schleife zur Abfrage, ob ein Start-Bit
gesendet wurde. Ein Oszi bestätigt, dass nichts gesendet wird. An SDA
und SCL hängen jeweils 1,8k Widerstände auf 3,4V VCC.
1 | F_CPU = 14745600;
|
2 |
|
3 | DDRB |= (1<<PB2);
|
4 | PORTB |= (1<<PB2);
|
5 |
|
6 | // I2C-TEST
|
7 | TWSR = 0;
|
8 | TWBR = 0xff;
|
9 |
|
10 | // send START condition
|
11 | TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
|
12 |
|
13 | // wait until transmission completed
|
14 | while(!(TWCR & (1<<TWINT)));
|
15 |
|
16 | PORTB &= ~(1<<PB2);
|
17 |
|
18 | while(1);
|
Habs schon mit verschiedenen Werten für TWBR ausprobiert. Im Beispiel
sind es nach meiner Rechnung ca.28 kHz. Habs aber auch schon mit knapp
100kHz versucht (wäre dann TWBR = 0x42);
Wenn ich den PCA9540B raus nehme funktioniert der Code.
Vielleicht jemand eine Idee warum das nicht funktioniert?