mikrocontroller.net

Forum: Compiler & IDEs PCF8574 mit Atmega8 ansteuern - OHNE TWI


Autor: TeXoR (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

für die Schule soll ich eine LCD über den I2C-Bus ansteuern. Die Pins 
für das TWI sind leider schon belegt, also kann ich das TWI nicht 
benutzen.

Also habe ich zuerst eine Platine mit dem PCF8574 und eine 
Ausgabeplatine mit 8 LEDs gelötet.
Die Ausgabeplatine funktioniert, ich habe ein Lauflicht mit der Platine 
getestet.

Nun habe ich das I2C-Protokoll durchgeackert und ein Programm 
geschrieben, welches an die Adresse 0x20 (die Adressleitungen des 
PCF8574 sind alle auf LOW) ein Byte 0x55 sendet. Jedoch bleiben die LEDs 
alle an.

Ich habe die Daten- und die Clock-Leitungen mit einem Logic-Analyzer 
aufenommen, das Ergebnis und der C-Code sind im Anhang.

Nach der Adresse und dem R/W-Bit erfolgt kein Acknowledge vom Slave.
Die Zeiten dürften doch keine Rolle spielen, solange sie groß genug 
sind, oder?

Vlt. kann jmd. den Code ausprobieren. Möglicherweise habe ich trotz 
mehmaligem Duchklingeln einen Fehler in der Schaltung. Im dümmsten Fall 
ist das IC defekt...
Oder ist der Code fehlerhaft?

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ZIP kann ich direkt öffnen, RAR nicht

Autor: TeXoR (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ups, da habe ich nicht drüber nachgedacht...
Hier die zip.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ TeXoR (Gast)

>geschrieben, welches an die Adresse 0x20 (die Adressleitungen des

Ist die Adresse nicht eher 0x40 beim PCF8574?

[[Port-Expander PCF8574]]

Und Vorsicht, der PCF8574 A hat die Adresse 0x70.

>Nach der Adresse und dem R/W-Bit erfolgt kein Acknowledge vom Slave.

Klar, falsche Adresse.

>Die Zeiten dürften doch keine Rolle spielen, solange sie groß genug
>sind, oder?

Ja.

MFG
Falk

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK, Entwarnung. Das Timingdiagramm sieht gut aus, mal abgesehen davon, 
dass der IC kein ACK sendet :-(

Das mit der Adresse 0x20 bzw 0x40 ist Ansichtsache. Betrachtet man 
streng nur die Adressbits ist es 0x20, betrachtet man das erste Byte mit 
R/W Bit ist es 0x40 ;-)

MFG
Falk

Autor: TeXoR (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Blitz soll mich treffen, ich habe die Kathoden der LEDs auf GND 
geschaltet.
Ist das IC jetzt hin? (Leuchten tun sie noch^^)
Danke schonmal, ich melde mich ob es funktioniert, wenn ich die LEDs 
umgelötet habe.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ TeXoR (Gast)

>Der Blitz soll mich treffen, ich habe die Kathoden der LEDs auf GND
>geschaltet.
>Ist das IC jetzt hin? (Leuchten tun sie noch^^)

Nöö.

>Danke schonmal, ich melde mich ob es funktioniert, wenn ich die LEDs
>umgelötet habe.

Hast luego.
Falk

Autor: Hubert G. (hubertg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn das TWI nur an den belegeten Pin scheitert, die Fleury-Lib kann 
auch SW-TWI mit beliebigen Pin.

Autor: Hubert G. (hubertg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und hier gibts die passende LCD-Lib dazu. 
http://computerheld.de/i2clcd/

Autor: TeXoR (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey,

mein Lehrer und ich haben jetzt herausgefunden, dass das Acknowledge bei 
der Adresse 0111000 fast vorhanden ist. D.h. der Pegel ist beim 
Acknowledge bei ca. 2-3 V, also weder HIGH noch LOW. Ich habe zuerst 
4,7k Widerstände benutzt, und jetzt 10k, vomit es allerdings auch nicht 
funktioniert.
Woran kann das liegen? Muss man am AVR noch etwas einstellen?

Vielen Dank schonmal soweit.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ TeXoR (Gast)

>der Adresse 0111000 fast vorhanden ist. D.h. der Pegel ist beim
>Acknowledge bei ca. 2-3 V, also weder HIGH noch LOW.

Da zieht wohl jemand nach HIGH.

> Ich habe zuerst
>4,7k Widerstände benutzt, und jetzt 10k, vomit es allerdings auch nicht
>funktioniert.

Ist eagl, beides müsste problemlos laufen.

>Woran kann das liegen? Muss man am AVR noch etwas einstellen?

Deine SOFT-TWI Routine ist vielleicht buggy. Die muss SDA nach dem 8. 
Bit loslassen (auf Tristate schalten). Es kann sein dass sie durch einen 
Fehler SDA aktiv nach HIGH treibt. Dagegen kommt der PCF8574 natürlich 
nicht an.
Siehe

Ausgangsstufen Logik ICs

BINGO! Ich schaue gerade in deinen Quelltext. Du greifst NIRGENDS auf 
dass DDRD Register zu. Das MUSST du aber! Denn um das ACK zu LESEN, muss 
der AVR SDA loslassen (auf Eingang schalten) und NICHT aktiv nach HIGH 
treiben!

MFG
Falk

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
P.S. Das gleiche gilt für SCL. Auch die Taktleitung ist Open Collector, 
denn der Slave darf den Takt auf LOW halten, wenn er ihm zu schnell ist.

MFG
Falk

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>BINGO! Ich schaue gerade in deinen Quelltext. Du greifst NIRGENDS auf
>dass DDRD Register zu.

Ohne einen Blick ins Programm geworfen zu haben:
Muß man TWI/I²C nicht grundsätzlich über das DDR realisieren?
Ich würde das PORT-Register auf 0 setzen, dem Port-Pin einen 
Pull-Up-Widerstand verpassen (wie es ja I²C-Standard ist) und dann die 
Daten über das DDR ausgeben. Wenn man dem DDR eine "1" zuweist, wird der 
Port zum Ausgang und ist niederohmig/liefert L-Pegel, da das 
PORT-Register ja 0 ist. Weist man ihm eine 0 zu, wird er als Eingang 
konfiguriert, ohne dass der Pull-Up eingeschaltet ist.
Dadurch hat man leider eine negative Logik, die sich aber mit etwas 
Hirnschmalz ertragen lässt...
Oder liege ich falsch?

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  STK500-Besitzer (Gast)

>>BINGO! Ich schaue gerade in deinen Quelltext. Du greifst NIRGENDS auf
>>dass DDRD Register zu.

>Ohne einen Blick ins Programm geworfen zu haben:
>Muß man TWI/I²C nicht grundsätzlich über das DDR realisieren?

Beim AVR: Ja.

>Oder liege ich falsch?

Nein.

MFG
Falk

P.S. Ich meine natürlich DDRC.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kleiner Nachtrag. Die selbstgestricktehn Warteschleifen sind meist nicht 
so gut. Besser so.

http://www.mikrocontroller.net/articles/AVR-GCC-Tu...

MFG
Falk

Autor: TeXoR (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

alles klar, es funktioniert jetzt ;)

Wenn der Code fertig ist, dann poste ich ihn, jedoch kann das noch 
einige Wochen dauern.

Autor: kalli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi All... bin neu hier...
Anmeldung folgt...

@TeXoR...

Ich habe das gleiche Problem...

Kannst du zwischendurch mal kurz Beschreiben woran es lag ???

Danke im Voraus...

mfg
Kalli

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ kalli (Gast)

>Ich habe das gleiche Problem...
>Kannst du zwischendurch mal kurz Beschreiben woran es lag ???

Vielleicht mal den Thread in Ruhe lesen?

"BINGO! Ich schaue gerade in deinen Quelltext. Du greifst NIRGENDS auf
dass DDRD Register zu. Das MUSST du aber! Denn um das ACK zu LESEN, muss
der AVR SDA loslassen (auf Eingang schalten) und NICHT aktiv nach HIGH
treiben!"

MG
Falk

Autor: kalli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Falk...

Ja- danke für den Hinweis...
hab's wohl mitten in der Nacht - überlesen :-)

ich habe das Problem bereits selbst gelöst...
( ich benutze nicht die Routinen von @TeXoR -
sondern - eigene)...

- der Fehler war aber der Gleiche...

mfg
Kalli

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.