Forum: Mikrocontroller und Digitale Elektronik Frage zur Beschaltung eines PCF 8574T


von Frank S. (hobbyist)


Angehängte Dateien:

Lesenswert?

Ich möchte zwei PCF8574T an einen Arduino Nano anschließen, um damit 
über 220R Widerstände diverse BUZ11 anzusteuern (ja ich weiss, 
Steinzeitbausteine... Aber ich habe davon noch einen ganzen Haufen hier 
liegen). Die BUZ11 sollen lediglich wie ein Relais ein- und ausschalten. 
Kein PWM und keine Taktung wird kleiner als 5 Sekunden sein.

In den Beschreibungen, die ich dazu bisher gefunden habe, habe ich 
(teilweise) den Hinweis gefunden, dass SCL und SDA jeweils mit 10K gegen 
Vcc geschaltet werden müssen. Das habe ich gemacht.

Aber die Informationen zu INT (Pin13) sind sehr widersprüchlich. Muss 
ich den auch mit dem Arduino Nano verbinden? Falls ja, mit welchem Pin?

Ist die variable Adressierung, wie ich sie gezeichnet habe so okay oder 
sollte man das anders machen?

Frank

von Max D. (max_d)


Lesenswert?

Frank S. schrieb:
> In den Beschreibungen, die ich dazu bisher gefunden habe, habe ich
> (teilweise) den Hinweis gefunden, dass SCL und SDA jeweils mit 10K gegen
> Vcc geschaltet werden müssen. Das habe ich gemacht.

Ist korrekt so, I²C braucht PullUps

Frank S. schrieb:
> Aber die Informationen zu INT (Pin13) sind sehr widersprüchlich. Muss
> ich den auch mit dem Arduino Nano verbinden? Falls ja, mit welchem Pin?

Den brauchst du nur wenn du von den PCFs über Änderungen an den Pins 
asynchron informiert werden willst. Z.B. wenn ein Knopf dranhängt und du 
nicht alle zig ms via I²C "nachschauen" willst ob der denn jetzt 
gedrückt ist. Wenn der PCF nur als AUsgang arbeitet brauchst du den int 
pin nicht.

von Udo (Gast)


Lesenswert?

Den INT brauchst du wenn du Eingänge einlesen möchtest. Für reine 
Ausgabe brauchst du den nicht

von Joachim B. (jar)


Lesenswert?

Max D. schrieb:
> Ist korrekt so, I²C braucht PullUps

aber nur je einen SDA und SCL am Ende der Kette also dem letzten PCF, 
denn I2C ist ein Bus, also auch so routen, vom Controler nach alle PCF 
und immer so weiter, kein Stern wenn möglich.

PS billiger als Einzel PCF sind diese China Kracher PCF LCD Platinen
http://www.ebay.de/itm/I2C-Modul-fur-LCD-Display-1602-IIC-TWI-Arduino-PCF8574AT-PCF8574-/252119221288?hash=item3ab37a0428:g:R90AAOSw0JpV4sLL

Poti und Transistor für LED kann man ja rauswerfen und die fehlende 
Leitung nachlegen für alle 8 Ausgangs- oder Eingangsports

Ich nutze die gerne als I2C Tastatur ohne Portverlust.

von Frank K. (fchk)


Lesenswert?

Frank S. schrieb:
> Ich möchte zwei PCF8574T an einen Arduino Nano anschließen, um damit
> über 220R Widerstände diverse BUZ11 anzusteuern (ja ich weiss,
> Steinzeitbausteine... Aber ich habe davon noch einen ganzen Haufen hier
> liegen). Die BUZ11 sollen lediglich wie ein Relais ein- und ausschalten.
> Kein PWM und keine Taktung wird kleiner als 5 Sekunden sein.

Der PCF8574 ist für Dich ungeeignet, da die Ausgangsstufen nur nach GND 
ziehen können. Es sind nur sehr schwache Pullups an den Ausgangspins 
vorhanden. Ein MCP23017 wäre für Dich geeigneter - erstens hat der 16 
IOs, und zweitens hat der richtige Push-Pull-Ausgangsstufen, die sowohl 
nach VCC als auch nach GND treiben könne (was Du zur Ansteuerung des 
Gates brauchst).

> In den Beschreibungen, die ich dazu bisher gefunden habe, habe ich
> (teilweise) den Hinweis gefunden, dass SCL und SDA jeweils mit 10K gegen
> Vcc geschaltet werden müssen. Das habe ich gemacht.

Ja, wobei 10k möglicherweise etwas hoch ist. Du kannst bis auf 2k2 
herunter gehen, wenn Du Probleme auf dem I2C hast.

> Aber die Informationen zu INT (Pin13) sind sehr widersprüchlich. Muss
> ich den auch mit dem Arduino Nano verbinden? Falls ja, mit welchem Pin?

Interrupt-Pins sind optional, das musst Du nicht benutzen.

> Ist die variable Adressierung, wie ich sie gezeichnet habe so okay oder
> sollte man das anders machen?

nö, schon ok so.

von Max D. (max_d)


Lesenswert?

Frank K. schrieb:
> Der PCF8574 ist für Dich ungeeignet, da die Ausgangsstufen nur nach GND
> ziehen können. Es sind nur sehr schwache Pullups an den Ausgangspins
> vorhanden.

Beim anschalten werden die Ports kurz mit starkem Strom beaufschlagt 
(siehe dB) und danach muss man ja nur den leckstrom liefern, mosfets 
sind ja spannungsgesteuert.

von (prx) A. K. (prx)


Lesenswert?

Max D. schrieb:
> Beim anschalten werden die Ports kurz mit starkem Strom beaufschlagt

1mA ist nicht grad Starkstrom.

von Pete K. (pete77)


Lesenswert?

Die Adresspins kannst Du auch mit Lötjumpern kodieren. Das spart 
Bauteile und muss ja sowieso nur einmal gemacht werden.

Und vergiss die Abblockkondensatoren nicht.

von Max D. (max_d)


Lesenswert?

A. K. schrieb:
> Max D. schrieb:
> Beim anschalten werden die Ports kurz mit starkem Strom beaufschlagt
>
> 1mA ist nicht grad Starkstrom.

Ein Relais ist auch keine nennenswerte last für den mosfet, da dürften 
die schaltverluste klein ausfallen...

von Gate Auflader (Gast)


Lesenswert?

Frank K. schrieb:
> Der PCF8574 ist für Dich ungeeignet, da die Ausgangsstufen nur nach GND
> ziehen können.

Die paar Mikrosekunden zum Laden des Gates kann man sich auch mit
einem einfachen Pullup-Widerstand leisten.

Warum einfach wenn's umständlich auch geht ....

von Frank S. (hobbyist)


Lesenswert?

Vielen Dank für die ganzen Tips. Die Abblockkondensatoren habe ich hinzu 
gefügt und beim Routen werde ich den Tip es wie einen Bus zu routen 
beherzigen. Ich hoffe das klappt auch so, wie ich mir das vorstelle.

Die nächste Frage passt zwar nicht ganz zur Überschrift, gehört aber zu 
meiner Schaltung. Ich möchte einen SD-Karten-Adapter per SPI 
anschließen. In den diesbezüglichen Beiträgen wird darauf hin gewiesen, 
dass man einen Levelshifter verwenden soll. Wäre ein Levelshifter wie 
dieser (nur eben für 3 statt 2 Leitungen) schnell genug für diesen 
Einsatzzweck? Für die 3,3V Spannung würde ich einen AMS1117-3,3 nehmen.

http://playground.arduino.cc/Main/I2CBi-directionalLevelShifter
http://playground.arduino.cc/uploads/Main/i2c-level-shift-mosfet.png

Wenn ich es richtig verstehe, kann man die Widerstände komplett weg 
lassen. Ist das richtig?

Frank

von Fred R. (fredylich)


Lesenswert?

Frank Saner,

muss mal Nachfragen. Geht es hier nur um die Hartware oder auch um 
Software.
Wenn es wie in deiner Schaltung nur um Ausgang geht, kannst du Pin INT 
unbeschaltet lassen.
Wichtig ist nur den Ausgang Pin mit GND zur „Last“ nach VCC zu 
verbinden.

Mit freundlichen Grüßen
Fred

von Frank S. (hobbyist)


Lesenswert?

Es geht hier erst mal nur um die Hardware.

"Wichtig ist nur den Ausgang Pin mit GND zur „Last“ nach VCC zu
verbinden."

So ganz verstanden habe ich das ehrlich gesagt jetzt nicht. Was mir aber 
jetzt aufgefallen ist, ist dass der Mosfet gar nicht schalten kann. Der 
Ausgang des PCF8574 ist Opendrain.(das meintest Du wahrscheinlich damit) 
Entweder muss ich den 220R Widerstand weg nehmen und statt dessen einen 
Pullup mit beispielsweise 10K setzen, oder es so machen, wie Frank K. es 
vorgeschlagen hat. Jetzt verstehe ich auch, was er damit sagen wollte.

Was wäre sinnvoller? Den PCF8574 gegen den vorgeschlagenen MCP23017 zu 
tauschen oder den Gatewiderstand ganz weg zu lassen und statt dessen 
einen Pullup zu installieren?

Frank

: Bearbeitet durch User
von Treiber (Gast)


Lesenswert?

Frank S. schrieb:
> Der
> Ausgang des PCF8574 ist Opendrain

Der Interrupt-Ausgang ist Open Drain, die anderen nicht, sie können aber 
nur 300µA oder so treiben.

von Fred R. (fredylich)


Lesenswert?

Hallo Frank,

Opendrain meinte ich. Bin nicht so firm mit Fachausdrücken.

Mit freundlichen Grüßen
Fred

von Frank K. (fchk)


Lesenswert?

Frank S. schrieb:
> Es geht hier erst mal nur um die Hardware.
>
> "Wichtig ist nur den Ausgang Pin mit GND zur „Last“ nach VCC zu
> verbinden."
>
> So ganz verstanden habe ich das ehrlich gesagt jetzt nicht. Was mir aber
> jetzt aufgefallen ist, ist dass der Mosfet gar nicht schalten kann. Der
> Ausgang des PCF8574 ist Opendrain.(das meintest Du wahrscheinlich damit)
> Entweder muss ich den 220R Widerstand weg nehmen und statt dessen einen
> Pullup mit beispielsweise 10K setzen, oder es so machen, wie Frank K. es
> vorgeschlagen hat. Jetzt verstehe ich auch, was er damit sagen wollte.
>
> Was wäre sinnvoller? Den PCF8574 gegen den vorgeschlagenen MCP23017 zu
> tauschen oder den Gatewiderstand ganz weg zu lassen und statt dessen
> einen Pullup zu installieren?

Den Gatewiderstand lässt Du nicht weg. Ich würde ihn kleiner machen, so 
22Ω. Dann schaltet der Transistor schneller durch.
Der PCF8574 ist, wie ich schon geschrieben habe, nicht wirklich gut 
geeignet. Wenn Du einen MCP23017 oder einen PCA9535 oder einen PCA9555 
(die haben auch Push-Pull oder "Totem-Pole" Ausgänge und 16 
Ausgangspins) nimmst, hast Du weniger Verdrahtungsaufwand, und es 
funktioniert besser. Der klitzekleine Haken ist die etwas höhere 
Komplexität der Chips. Die haben mehrere Register (pro 8-Bit Port ein 
Datenregister zum lesen, eines zum Schreiben, ein 
Datenrichtungsregister, und ggf noch ein Interrupt-Register; ganz 
ähnlich wie ein AVR DDR, PORT und PIN Register hat). Du musst die Pins 
erstmal auf Ausgang stellen. Das ist eine minimale Unbequemlichkeit, 
aber genau weil Du die Pins dediziert auf Ausgang stellen kannst, 
funktioniert es besser.

fchk

von Wolfgang (Gast)


Lesenswert?

Joachim B. schrieb:
> aber nur je einen SDA und SCL am Ende der Kette

Das Ende der Kette ist für SDA aber mal beim PCF und mal beim µC - je 
nach Datenrichtung.

von Max D. (max_d)


Lesenswert?

Bei I²C hat man ja eh PullUps und keine terminierungswiderstände (wie 
bei rs485 zb), da ist der Ort egal (nur sollten es nicht zu viele 
werden, weil dann ergibt die Parallelschaltung einen bösen Strom).

von Joachim B. (jar)


Lesenswert?

Wolfgang schrieb:
> Das Ende der Kette ist für SDA aber mal beim PCF und mal beim µC - je
> nach Datenrichtung.

da der µC beim Atmel üblicherweise kein OC ist gilt weiterhin am PCF.

von spess53 (Gast)


Lesenswert?

Hi

>da der µC beim Atmel üblicherweise kein OC ist gilt weiterhin am PCF.

Wenn du mit OC Open-Collector meinst, irrst du:

http://www.atmel.com/Images/doc2565.pdf

Siehe S.4 SCL and SDA Pins

Die Position der Widerstände am Bus ist deshalb vollkommen egal.

MfG Spess

von Michael U. (amiga)


Lesenswert?

Hallo,

Philips selbst (jetzt bei NXP zu finden) empfiehlt 2-10k PullUp.
http://www.nxp.com/documents/application_note/AN10216.pdf

Die PullUp waren anfangs bei Philips meist nahe beim Master, die Slaves 
hatten noch 100-150 Ohm Serienwiderstände in SDL und SCL an jedem Slave.
Findet man auch in der Applikationen der alten ICs, Videotextdecoder 
usw.)

Die Serienwiderstände habe ich aktuell schon lange eingespart, PullUp 
ist meist ein 10k oder 4,7k und der landert gewohnheitsmäßig in der Nähe 
des AVR.

Stern ist kein Problem, das war ja Sinn der Sache: ein µC für die 
Steuerung und die Slaves teilweise auf verschiedenen Leiterplatten im TV 
oder der Anlage.

Gruß aus Berlin
Michael

von Joachim B. (jar)


Lesenswert?

spess53 schrieb:
> Wenn du mit OC Open-Collector meinst, irrst du:

muss ich dann mit irgendeinem anderen verwechselt haben, man kann sich 
nie drauf verlassen das alle I2C oc sind.

Michael U. schrieb:
> PullUp
> ist meist ein 10k oder 4,7k und der landert gewohnheitsmäßig in der Nähe
> des AVR.
>
> Stern ist kein Problem, das war ja Sinn der Sache: ein µC für die
> Steuerung und die Slaves teilweise auf verschiedenen Leiterplatten im TV
> oder der Anlage.

mache ich ja auch oft so und habe bis jetzt keine Probleme gehabt, aber 
man sollte das mit der Terminierung am Ende im Hinterkopf behalten.

von Frank S. (hobbyist)


Lesenswert?

Dass die Slaves nicht zwangsläufig hintereinander geroutet werden 
müssen, wird das Routing erleichtern. :)

Den PCF8574T habe ich im Schaltplan inzwischen gegen den empfohlenen 
MCP23017 getauscht. Eine Frage, die ich weiter oben gestellt habe, ist 
in der Diskussion leider unter gegangen. Vielleicht könnte noch jemand 
etwas dazu schreiben:

"Die nächste Frage passt zwar nicht ganz zur Überschrift, gehört aber zu
meiner Schaltung. Ich möchte einen SD-Karten-Adapter per SPI
anschließen. In den diesbezüglichen Beiträgen wird darauf hin gewiesen,
dass man einen Levelshifter verwenden soll. Wäre ein Levelshifter wie
dieser (nur eben für 3 statt 2 Leitungen) schnell genug für diesen
Einsatzzweck? Für die 3,3V Spannung würde ich einen AMS1117-3,3 nehmen.

http://playground.arduino.cc/Main/I2CBi-directiona...
http://playground.arduino.cc/uploads/Main/i2c-leve...

Wenn ich es richtig verstehe, kann man die Widerstände komplett weg
lassen. Ist das richtig?"

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.