Forum: Mikrocontroller und Digitale Elektronik pcf8574 mit ULN2803 I"C Ansteuerung


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Stefan K. (roadrunner1980)


Lesenswert?

Hallo Leute

Bei meinen Projekt in der Abendschule benötigten wir einen Bus mit dem 
wir unsere Taster und Leds am Bedinfeld verwalten können. Zusätzlich 
schalten wir über eine Triacansteuerung mit Moc3043 230V~ Aktorik. 
Einfach und kostengünstig I2C. Also etwas im www. gesurft hab ich  mich 
für den Portexpander pcf8574 entschieden. So für die Taster ist die 
Sache abgeschlossen. Um den Strom der Leds zu schalten hab ich den 
Treiberbaustein uln2803 zwischen Portexpander und Leds geschalten.

µC---PCF8574--ULN2803--Led.

Die Platine ist gerade beim ätzen. Laut meiner info sendet der µC ein 
high für das leuchten der Led. Also geht z.b. der Pin 1 des Portexpander 
auf high steuert den Treiberbaustein an und die Led leuchtet.

So und jetzt kommts:

Stimmt das, das ein µC beim hochfahren alle Pins auf high legt???!!!!

Hab ich einen Denkfehler oder würden dann alle meine Leds beim 
hochfahren leuchten bzw. alle meine Triacs die 230V~ Aktorik 
einschalten.

Weiters wenn man sich das Blockschaltbild vom ULN2803 ansieht schaut es 
aus wie wenn er eine Inventierung zur Freilaufdiode eingebaut hat.

Hat wer Erfahrung mit diesen Bausteinen?

Bitte um euer Hilfe und Rat wenn das stimmt ist das eine Katastrophe.

steve

von Jadeclaw D. (jadeclaw)


Lesenswert?

Also, ob der µC die Portpins alle auf 1 legt, hängt vom Controllertyp 
ab.
AVR schaltet die Portleitungen nach Reset auf Eingang. Und selbst wenn 
der µC alles auf 1 legt, ist es egal, weil da noch der PCF8574 
dazwischenhängt, der muß erst initialisiert werden, bevor sich da was an 
den Ausgängen tut. Aber genau der PCF8574 ist hier das Problem. Aus dem 
Datenblatt:
> At power-on the I/Os are HIGH. In this mode
> only a current source to VDD is active.
Das heißt, nach dem Einschalten sind sind alle Transistoren im ULN 
durchgesteuert bis die Ausgänge über I2C abgeschaltet werden. Das können 
dann schon einige Millisekunden sein.
Zu den Freilaufdioden im ULN:
Die Transistoren im ULN2803 schalten gegen Masse. Damit bei induktiven 
Lasten keine Transistoren sterben, legt man Pin11 auf V+ der 
angeschlossenen Last. Richtig, der ULN invertiert:
Eingang = 1, Ausgang auf Masse;
Eingang = 0, Ausgang offen.

Persönliche Anmerkung: Den PCF-Krempel für mehr Portleitungen erspare 
ich mir mittlerweile ganz, ein AVR passend programmiert ist einfacher zu 
verwenden, flexibler und billiger. Sinn machen eigentlich nur 
Spezialitäten wie die Uhren und LCD-Treiber.

Gruss
Jadeclaw.

von Stefan K. (roadrunner1980)


Lesenswert?

Hallo Jadeclaw,

Danke für deine Antwort. Das du mit mir die Meinung teilst ist für mich 
nicht gut. Einige Pins sind auch direkt angeschlossen gegen Masse also 
ohen Protexpander etc. Da muss eine Lösung mit einem Inverterbaustein 
her. Wir verwenden einen ADUC 832 8051 derivat. Die Ansteuerung über I2C 
haben wir durchgeführt da wir sonst nicht genügend Ports für die gesamte 
Steuerung zu Verfügung haben.

Ist die Programmierung des AVR nicht kompilzierter als 8051?

steve

von Jadeclaw D. (jadeclaw)


Lesenswert?

> Ist die Programmierung des AVR nicht kompilzierter als 8051?
Nein, im Grunde genommen nicht.
Nur da du auf 8051-Basis arbeitest, ist es natürlich ein höherer 
Aufwand, weil du dann natürlich eine neue Architektur samt 
Programmierumgebung erlernen müsstest. Anders ist es bei mir, ich 
arbeite sowieso mit AVR-Controllern, da ist es natürlich einfach, einen 
als Portexpander zu verwenden. Auf der 8051-Schiene gibt es ebenfalls 
kleine billige Flash-Controller, nämlich AT89C2051 und AT89C4051 sowie 
den AT89S51. Tools und Programmiergeräte finden sich bei Atmel und im 
Netz.

Als weitere und sehr billige Lösung zur Porterweiterung bieten sich 
Schieberegister(74HC595 / CD4094) und 8-bit-Latches (74HC573) an. Diese 
verfügen über Freigabeeingänge, damit lassen sich die Ausgänge sperren, 
bis der Controller erwacht ist.

Gruss
Jadeclaw.

von condor (Gast)


Lesenswert?

lese dir das Datenblatt des pcf8574 nochmal durch.

der schaltest alle Ports auf high (Eingang)
die Ausgänge werden über low geschalten (kann auch LED´s treiben)

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.