Forum: Mikrocontroller und Digitale Elektronik Frage zu 8574 I2C I/O-Expander


von Sven S. (stepp64) Benutzerseite


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

von Andreas K. (a-k)


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.

von Gerhard. (Gast)


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

von Sven S. (stepp64) Benutzerseite


Lesenswert?

Das heißt also, wenn ich die drei Ausgänge verändern will, ist es 
besser, wenn ich die restlichen Bits mit High sende? Denn nach GND zieht 
der IC ja den Ausgang schon und dann währe ein High des Fertigmodules 
schon fatal. Denn das liefert ja den Strom. Sehe ich das so richtig?

Sven

von Gerhard. (Gast)


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

von Sven S. (stepp64) Benutzerseite


Lesenswert?

Danke Gerhard, so hatte ich mir das schon gedacht, war mir aber nicht 
sicher. Das mit Widerständen in Reihe ist eine gute Idee. Werde ich mit 
vorsehen und schadet ja nicht. Hilft aber, falls ich mich doch mal 
verprogrammiere.

Sven

von Gerhard. (Gast)


Lesenswert?

Hallo Sven,
das stimmt genau. Mit H-Pegeln kann nie was passieren. Sonst nimm 
Schutzwiderstaende.

von Bernd G. (Gast)


Lesenswert?

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

von Gerhard. (Gast)


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

von Andreas K. (a-k)


Lesenswert?

Gerhard. wrote:

> Das ist meiner Ansicht doch etwas gefaehrlich

Ich hatte es deshalb ja auch ausdrücklich anders herum beschrieben.

von Andreas K. (a-k)


Lesenswert?

Bernd G. wrote:

> PCA 9554 mit Steuerregister für I/O-Zuweisung der Pins.

Oder MCP23008/16.

von Gerhard. (Gast)


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

von Gerhard. (Gast)


Lesenswert?

Andreas,

Gerhard. wrote:

> Das ist meiner Ansicht doch etwas gefaehrlich

"Ich hatte es deshalb ja auch ausdrücklich anders herum beschrieben."

Stimmt;-)

Gerhard

von Bernd G. (Gast)


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?

von Gerhard. (Gast)


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

von sven (Gast)


Lesenswert?

Den 9554 gibt aber nicht als DIP bei R. Mit SMD tue ich mich noch ein 
wenig schwer.

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.