Frage zu 8574 I2C I/O-Expander

Persönliche Seite #817954
Lesenswert?

Hallo,

ich möchte gerne 3 Pins des PCF8574 als Ausgang benutzen und 5 Pins als 
Eingang. An den Eingängen soll ein fertiges Modul gehängt werden, 
welches definiert High (5V) und Low (0V) liefert, also kein Tristate. An 
die Ausgänge sollen drei Transistorschaltstufen, welche wiederum ein 
Relais schalten.

Nun meine Frage: Woher weis der IC was ich als Eingang und was ich als 
Ausgang beschaltet habe? Es gibt ja kein Richtungsregister in diesem IC. 
Was passiert, wenn ich ein Byte in den IC schiebe mit den Bits für die 
Eingänge auf Low, während das Fertigmodul an seinen Ausgängen High hat? 
Das müsste doch einen Kurzschluss geben. Aus dem Datenblatt kann ich nur 
soviel entnehmen, dass der IC das scheinbar über den Strom erkennt. Aber 
wie funktioniert das genau? Oder kann ich den IC nur komplett entweder 
als Eingang oder also Ausgang benutzen?

Danke schon mal
Sven
#817969
Lesenswert?

Sven Stefan wrote:

> Nun meine Frage: Woher weis der IC was ich als Eingang und was ich als
> Ausgang beschaltet habe?

Es gibt beim 8574 keine echten Eingänge. Ein Ausgang im "high" Zustand 
liefert so wenig Strom, dass er gefahrlos kurzgeschlossen werden kann. 
Das nennt sich dann Eingang.
Gast #817990
Lesenswert?

Hallo Sven,

ich bin auch ein PCF8574 Neuling;-)

Wie dem Datenblatt zu entnehmen ist, ist das reinschieben kein Problem, 
da die Ausgaenge erst mit dem STOP Signal gesetzt werden. Also, es gibt 
auf keinen Fall ein Problem mit Bits die beim "reinschieben" die 
Ausganege kurzzeitig veranderen wuerden. Ds geht einfach nicht. Die Port 
pins koennen gemischt als Ein und Ausgaenge betrieben werden, solange 
man aufpasst dass die Einganege vorher immer auf H gestellt werden, 
sonst liest man nur ein L Pegel und der Eingang ist ein Kurzschluss fuer 
das Externe Signal. Da man muss dann schon aufpassen.

Am Besten immer mit einer Maske arbeiten die ein versehentliches 
Verstellen der Portbits verhindert, so wie:

portbits = portbits | 0b00000001; // Um BIT0 hochzustellen
portbits = portbits & 0b11111110; // Um Bit0 wieder zu loeschen
(Oder portbits &= 0xFE;)

Mit dieser Methode bleiben die anderen Portbits unbeinflusst.

Solange man nicht explizit die Ausgaenge mit den externen Signalen auf 
Null stellt, kann da eigentlich nichts passieren. Andernfalls wuerde ich 
zu Sicherheit vorschlagen Schutzwiderstaende in Serie einzubauen(240 
Ohm) die das Schlimmste verhindern wuerden. Der 8574 hat ja nur 100uA 
Hochziehfaehigkeit. Also kann da nicht viel in der Hinsicht passieren. 
Nur mit dem Null stellen der Eingange musst Du aufpassen und ggf. das 
Datenwort immer mit einer Maske beschuetzen, die sicherstellt dass die 
Eingaenge immer einen H-Pegel haben.

Solange die Datenregister alle auf Hoch stehen, kann der 8574 den 
Zustand der Ports richtig lesen. Natuerlich wenn irgendein Bit auf Null 
steht, dann geht das mit dem Port Lesen nicht.

MFG,
Gerhard
Gast #817994
Lesenswert?

Hallo Andreas,

"Es gibt beim 8574 keine echten Eingänge. Ein Ausgang im "high" Zustand
liefert so wenig Strom, dass er gefahrlos kurzgeschlossen werden kann.
Das nennt sich dann Eingang."

Das ist meiner Ansicht doch etwas gefaehrlich, da wenn ein 
Hochpegel(z.B. 5V ohne Strombegrenzung)) anliegt und dann ein Portbit 
(versehentlich) auf Null gestellt wird, dann wird der Ausgang 
ueberlastet.

Gruss,
Gerhard
Gast #818003
Lesenswert?

Bei meinen Schaltungen, baue ich zum Schutz von externen Leitung so oft 
es geht, immer Schutzwiderstaende ein, weil dann die Ausgaenge (bei 
Ueberspannung) immer eine gewissen Uberlebensschutz aufweisen, da bei 
normalen Fehlspannung dann der Strom so begrenzt ist, dass die interne 
Schaltung das einigermassen aushaelt oder gar ein "interner Latchup" 
verhindert wird.

Gerhard
Gast #818012
Lesenswert?

Hallo Bernd,

"Besseren Stein nehmen: PCA 9554 mit Steuerregister für I/O-Zuweisung 
der
Pins."

Der interessiert mich auch. Welche Erfahrungen hast Du mit dem PCA9554 
schon gemacht? Den gibts ja auch mit DIP16 Gehaeuse. Dem Datenblatt nach 
ist das ja ein feiner Baustein.

Gerhard
Gast #818034
Lesenswert?

Hat bei mir bestens geschnurpelt. Ich hatte das Problem mit der 
I/O-Zuweisung derart, daß ich 3 + 5 brauchte.
Da der \INT dann nur noch von wirklichen Eingängen ausgelöst wird, 
vereinfacht sich die SW leicht (die hatte ich allerdings wegen Blödheit 
nicht selbst gemacht - war zu umfangreich).
Das Ding ist eben einfach moderner, auch schneller. Warum soll man mit 
der Technik von Gestern die Geräte für Morgen bauen?
Gast #818051
Lesenswert?

Hallo Bernd,

werde mir vielleicht bei einer neuen Bestellung ein paar zukommen 
lassen. Mit den Bausteinen geht es doch eleganter.

Frueher habe ich uebriegens oft die MAX7301 eingesetzt, sind aber SPI. 
Nur finde ich I2C etwas angenehmer da man keine aufwendigen Chip Selects 
braucht.

"Das Ding ist eben einfach moderner, auch schneller. Warum soll man mit
der Technik von Gestern die Geräte für Morgen bauen?" - Das ist schon 
wahr;-)

Gerhard

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren