Hallo
und sorry, aber vielleicht habe ich nicht genau hingesehen:
Wo siehst du, daß die Treiber bei 'low' schalten???
Tido
Hallo, bin neu hier
Ich arbeite gerade an einem Projekt, das ich später noch vorstellen will.
Nun bräuchte ich so etwas wie eine Relaisplatine, um verschiedene Verbraucher zu steuernm und zwar mit mehreren I²C Busbausteinen (PCF857), die von einem Atmega32 kontrolliert werden. Die Relais sind einfache 12V Relais.
Um mir die ganze Löterei etwas zu vereinfachen habe ich div. Foren durchsucht und folgende Lösung ausgearbeitet:
Bild hier
Dabei sind mir folgende Fragen eingefallen:
A) Wenn man die Spannung einschaltet, ist ja das Problem beim PCF8574 dass dieser die Portausgänge auf HIGH schaltet, und somit bei einer normalen Transistor-Relaisschaltung das Relais anziehen würde. Das ist aber auf keinen Fall erwünscht und somit bin ich auf den ULN2803 gekommen.
Da dieser aber genau das gleiche wie ein normaler Transistor macht hab ich den UDN2981 gefunden, der nicht invertiert ist, dafür aber statt der Masse die Spannung (12V) schaltet.
In der oben gezeigten Schaltung dürfte somit beim Einschalten der Versorgung kein Relais anziehen, erst wenn man im PCF8574 ein Bit auf '0' setzt zieht das entsprechende Relais an. Stimmt das so?
B) Das die restliche Schaltung mit 5V arbeitet und die Relais mit 12 stört weiter nicht, muss ja so funktionieren oder nicht?
Schönen Dank auch und Grüsse, Stefan
PS: Datenblatt des UDN: http://www.reichelt.de/?SID=202zJ5m6...81%2523ALG.pdf
Hallo
und sorry, aber vielleicht habe ich nicht genau hingesehen:
Wo siehst du, daß die Treiber bei 'low' schalten???
Tido
Tun sie das nicht? Dachte ich zumindest weil das Symbol im Datenblatt nicht invertiert zeigt und beim ULN es aber so ist.
Wie kann ich sonst das Problem mit dem Einschalten beseitigen, gibt es da vielleicht einen passenden Treiberbaustein?
Ja,das sehe ich auch nicht.
Die Stufe ist schon vom Symbol her nicht invertierend und wenn man ins Datenblatt schaut dann sieht eine Stufe so aus.
Bild hier
Recht Simpel oder ?
@Geronet
Der ULN2803 ist ein Invertierender Lowside Treiber und der UDN 2981 ein nichtinvertierender Highsidetreiber.
Der Effekt ist der gleiche.
Beide schalten bei High am Eingang durch.
Was du brauchst ist entweder einen nichtinvertierenden Lowsidetreiber oder einen invertierenden Highsidetreiber.
Wenn du da nix findest dann tuts auch ein einfacher Inverter zwischen 2803/2981.
Das Symbol ist schon richtig.Tun sie das nicht? Dachte ich zumindest weil das Symbol im Datenblatt nicht invertiert zeigt und beim ULN es aber so ist.
Denk mal ganz genau nach.
Der 2803 ist invertierend dargestellt und das Ausgangssignal geht ja auch nach Masse (Low) wenn der Eingang "High" ist.
Beim 2981 das gleiche nur umgekehrt.
Der Ausgang wird High wenn derEingang High ist.
Er ist nicht invertierend.
Den Rest hab ich ja schon gesagt.
Gruß
Ratber
Hallo,
du könntest z.B. einen pnp-Transistor in die gemeinsame Masseleitung der Relais zum GND-Anschluß schalten.
Dieser sperrt beim Einschalten (sofern der Port, an dem er am mC angeschlossen ist, beim Einschalten auch High ist) und nachdem der 8574 initialisiert (und damit alle Ausgänge 'low') ist schaltest du den Transistor durch.
Tido
Danke für die Antworten, jetzt habe ich das Prinzip vom ULN verstanden
Die Transistorlösung ist aber eher ein workaround um das eigentliche Problem herum...
Könnte man denn die Ausgänge vom PCF mit Pulldown-Widerständen am Start auf Low-Pegel herunterziehen oder ziehen die dann zuviel Strom bzw. kriegt er den Pegel nicht mehr hoch genug?
Andere Lösungsmöglichkeit:
Der MAX7300 z.B. hat beim Starten alle Ausgangsports auf Input ohne Pullup gestellt (im Shutdown mode), würde der ULN mit diesem (undefiniertem?) Pegel durchschalten? Würden Pulldowns in diesem Fall helfen?
Grüsse, Stefan
Datenblatt MAX7300: http://datasheets.maxim-ic.com/en/ds/MAX7300.pdf
Nein, das würde nur funktionieren, wenn der Pulldown-Widerstand sehr viel kleiner wäre als der Widerstand des PCF-Ausgangs und ein so kleiner Widerstand würde den Port zerstören.Zitat von geronet
Wenn du z.B. einen 10K-Pulldown nimmst, so liegt beim Einschalten der Betriebsspannung nach wie vor +5V am Ausgang und damit am ULN (und am Widerstand. Der Widerstand ist dann nur ein parallelgeschalteter 'Verbraucher'.
Den MAX hab' ich mir nicht angeschaut.
MfG
Tido
Die logische Konsequenz ist, das Signal, welches nach dem Einschalten vorliegt, so anzupassen, daß es für den ULN2803 / UDN2981 paßt, also zu invertieren.
Dazu verwende ich den 74??540, 8 invertierende Leitungstreiber. Der 540 ist pin-kompatibel mit dem 541, der 8 nicht-invertierende Treiber hat.
Um sicher ein High-Signal zu haben, setze ich noch 8 PullUp-Widerstände an die I/O-Pins (SIL9-8 10k).
MfG Karl-Heinz
HobbyElektronik hier klicken ....
Zitat von geronet
Denk mal genau nach was du da gerade vorschlägst.
Du willst einen Ausgang der beim Powerup auf High steh mit gewalt auf Low ziehen.
Und wie soll er dann je wieder High werden ?
Mach es doch wie viele andere auch.
Zwischen PCF8574 und dem folgenden Baustein einen Inverter (zb .74HCT240/540 etc.) dann sind deine Relais beim Einschalten "Aus".
Im Programm arbeitest du dann einfach mit Inverser logik
Edit: Kalle war schneller
Gruß
Ratber
Hallo,
es gibt da doch das RN-Relais Board, da ist auch ein PCF8574 und danach ein UDN2981, dort is es so, das nach dem UDN2981 Pulldowns (10k) an den Ausgängen sind.
Ich hab dieses Board nicht, kann deshalb nicht sagen wie es sich verhält.
zum Board:
http://www.shop.robotikhardware.de/s...products_id=22
Lesezeichen