Hallo,
ich mache gerade meine ersten Gehversuche mit I2C am mega8 und habe dazu
einen PCF8574 mit LEDs an den Controller angeschlossen sowie ein kleines
Testprogramm geschrieben. Leider funktioniert es nicht :-(
Folgendes Problem:
Ich setze den Takt mit den Teilerfaktoren in TWBR und TWSR, das geht
soweit.
Danach kommt folgender Code, um den I2C-Chip anzusprechen:
1 | TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN); //Start
|
2 | loop_until_bit_is_set(TWCR,TWINT); //Hier ist das Problem
|
3 | //Bis hierher läuft das Programm gar nicht mehr
|
4 |
|
5 | TWDR = adress;
|
6 | TWCR = (1<<TWINT)|(1<<TWEN);
|
7 | loop_until_bit_is_set(TWCR,TWINT);
|
Leider bleibt TWINT nach dem Start aber immer 0, d.h. das Programm
bleibt in der loop_until-Anweisung gefangen.
Auf dem Oszilloskop sehe ich sowohl auf SCL als auch SDA einen Rechteck
mit dem Bustakt. Ist das normal? Sollte nicht SCL high und SDA low sein
als Start-Condition?
Hat jemand eine Idee was das Problem sein könnte oder gar eine Lösung
parat?
Vielen Dank für alle Hinweise!
Gruß
Carsten