Forum: Compiler & IDEs ATmega8 und PCF8574


von Carsten (Gast)


Lesenswert?

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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Carsten wrote:

> Auf dem Oszilloskop sehe ich sowohl auf SCL als auch SDA einen Rechteck
> mit dem Bustakt.

Kurzschluss zwischen beiden?

Der Code sieht korrekt aus.  Es muss irgendwas mit der Hardware zu
tun haben.

Die Pullups hast du dran, ja?

von Carsten (Gast)


Lesenswert?

Pullups habe ich 1k dran, tausche aber gerade gegen 4k7. Der Controller 
kann die 1k aber problemlos auf low ziehen.

von Carsten (Gast)


Lesenswert?

Vielen Dank für den Tip mit dem Kurzschluss! Es war tatsächlich einer 
da! Jetzt gehts!

73

Carsten

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.