Forum: Mikrocontroller und Digitale Elektronik Definierter Einschaltzustand beim 74HC595


von Jörg Günzel (Gast)


Lesenswert?

Hallo,
mein ATMega16 steuert über drei Leitungen zwei kaskadierte 74HC595 an,
die wiederum über einen ULN2803-Treiber Relais ansteuern. Der
Controller füllt beim Einschalten die Schieberegister mit Null. Mir ist
jetzt aufgefallen, dass die Relais beim Einschalten des Aufbaus kurz
schalten, was unbedingt zu verhindern ist. Es scheint also kurz hach
dem Einschalten ein zufälliger Zustand an den Ausgängen der 74HC595
anzuliegen. Laut Datenblatt (Philips) sollte man mit /OE auf Low und
/MR auf High die Ausgänge hochohmig schalten können. Auf einer
Testpatine mit an die Registerausgänge angeschlossene LEDs klappte aber
auch das nicht zuverlässig, wenn auch das Aufleuchten einzelner LEDs
beim Einschalten  sehr selten auftrat (die drei Eingänge waren dabei
offen, aber das entspricht ja auch dem Zustand in der endgültigen
Schaltung, wenn der Controller noch nicht bereit ist). Ausserdem
bräuchte ich ja dann 5 Leitungen, weil (OE und /MR ja wieder auf High
bzw. Low gestellt werden müssen.
Gibt es mit dem 74HC595 irgendeine Lösung oder mit einem anderen
Baustein?
Gruß
  Jörg

von Mark H. (haemi)


Lesenswert?

Salve,

schon mal einen RC-Tiefpaß an /MR gehängt? Das ist eigentlich die
Standardlösung, um beim Einschalten den Reset zu verzögern (bzw.
überhaupt auszulösen).

Mark

von Jörg Günzel (Gast)


Lesenswert?

@Mark
In meiner endgültigen Schaltung liegt /MR auf High , das heisst, es
wird gar kein Reset ausgelöst, oder? Und welchen Zweck hat es, den
Reset zu verzögern?

von Manfred Glahe (Gast)


Angehängte Dateien:

Lesenswert?

Laut Datenblatt (Philips) sollte man mit /OE auf Low und
/MR auf High die Ausgänge hochohmig schalten können.

Hallo,
das ist auch richtig, aber nun mußt Du noch über 8 (16) Widerstände ein
definiertes Nullpotential vorgeben!

Eine Alternative ohne die Widerstände ist meine Lösung mit dem
automatischen Laden der geresetteten Schieberegister in die
Ausgangsregister.
Siehe im Anhang!

MfG Manfred Glahe

von TravelRec. (Gast)


Lesenswert?

Beschalte den Output-Enable (OE) des / der 595 mit einem PullUp nach Vcc
(4,7k) und legen ihn an einen Prozessorpin, setze im Prozessor gleich
nach dem RESET und Stackpointer-Laden den entsprechenden Pin auf High
(erst PortX auf 1, dann DDRD auf 1, sonst gibt´s eine kurzes Low!!!),
dann lade die Register mit Nullen, führe Strobe aus und erst dann setze
OE auf Low - siehe da, es wird kein Relais klicken.

von Peter Dannegger (Gast)


Lesenswert?

@TravelRec.

genau so mache ich es auch.

/OE wird erst dann auf low gesetzt nachdem ein gültiges Datenbyte in
den 595 geladen wurde.

Den /MR brauche ich daher nicht (liegt direkt auf VCC) und auch keine
sonstigen Trickschaltungen.


Peter

von Manfred Glahe (Gast)


Lesenswert?

Den /MR brauche ich daher nicht (liegt direkt auf VCC) und auch keine
sonstigen Trickschaltungen.
________________________

Solange OE=1 ist, sind die Ausgangspegel des 595 nicht definiert und
könnten nachfolgende Eingänge NICHT sicher gegen GND Schalten. Erst
wenn der µP definierte Werte geladen hat ist Deine Schaltung
verläßlich. Was aber machst Du, wenn der µP nicht oder zu langsam
startet und die angehängte Elektronik wegen offener Eingängen zur
Zerstörung neigt?

MfG Manfred Glahe

von Jörg Günzel (Gast)


Lesenswert?

@alle
Danke schön
@TravelRec und Peter
Eure Lösung scheint mir am einfachsten. Dazu aber noch zwei Fragen.
1. Ich programmiere in C (WinAVR), habe also mit Stackpointern direkt
nichts zu tun. Geht das dann auch oder dauert in C die Initialisierung
zu lange?

2. Ich verstehe trotzdem nicht, warum das funktionieren soll. Wie ich
schon schrieb leuchten meine LEDs beim Einschalten auch dann (ab und
zu) kurz auf, wenn ich per Jumper /OE dauerhaft auf High lege (ohne
einen Controller anzuschließen). Was ist da der Unterschied zu eurer
Beschaltung, die ja auch beim Einschalten High-Potential anlegt und
durch eben dieses das Aufleuchten verhindern soll? Genau das mache ich
ja auch.

@Manfred Glahe
Meinst Du (jetzt bezogen auf meine LED-Schaltung) ich muss an den
Ausgängen parallel zu Diode und Vorwiderstand jeweils noch einen
Widerstand anbringen? Wie müsste der denn dimensioniert sein?
Gruß
  Jörg

von Peter Dannegger (Gast)


Lesenswert?

@Manfred,

"Solange OE=1 ist, sind die Ausgangspegel des 595 nicht
definiert..."


Hier ging es ja um den ULN2803 und der sperrt sicher bei offenen
Eingängen.

In meiner Anwendung habe ich aber am Ausgang des 74HC595 Pullups und
Pulldowns vorgesehen, je nachdem, ob die nachfolgenden Schaltungen low
oder high als Ruhepegel benötigen.


Es muß natürlich garantiert werden, daß bei CPU im Reset der /OE immer
auf High ist, d.h. z.B. beim AVR muß da ein Pullup ran.
Beim 8051 ist das nicht nötig, der zieht alle P1..P3-Anschlüsse über
den internen Pullup auf High.


Peter

von Peter Dannegger (Gast)


Lesenswert?

@Jörg,

"leuchten meine LEDs beim Einschalten auch dann (ab und zu) kurz auf,
wenn ich per Jumper /OE dauerhaft auf High lege"

Das darf nur passieren, wenn die VCC noch nicht den minimalen Pegel
erreicht hat. Das Netzteil sollte also die Spannung möglichst schnell
hochfahren.

Wenn es stört, dann mußt Du eine Unterspannungserkennung einbauen, die
die Relaisspannung erst dann zuschaltet, wenn VCC den Endwert erreicht
hat.


Peter

von Jörg Günzel (Gast)


Lesenswert?

Sorry habe ich noch vergessen:

Laut Datenblatt (Philips) sollte man mit /OE auf Low und
/MR auf High die Ausgänge hochohmig schalten können.

Da habe ich natürlich High und Low vertauscht, aber dass schent ja kein
Hindernis gewesen zu sein

@Manfred Glahe
Dein pdf zum automatischen Resetten der SR sieht ja ordentlich
kompliziert aus. Ich blicke da leider nicht durch. Könntest Du nicht
einfach mal nur für ein SR die Umgebungsschaltung angeben? Welche
Bauteile braucht man denn da?

@Peter
Nach Deinem vorletzten und letzten Beitrag denke ich, dass es
vielleicht so ist, dass Deine Lösung für den Treiber funktioniert (was
ja auch das Wichtige ist) und nur bei meiner Testplatine mit den LEDs
Probleme macht. Ist das so?
Gruß
 Jörg

von Manfred Glahe (Gast)


Lesenswert?

@Manfred Glahe
Meinst Du (jetzt bezogen auf meine LED-Schaltung) ich muss an den
Ausgängen parallel zu Diode und Vorwiderstand jeweils noch einen
Widerstand anbringen? Wie müsste der denn dimensioniert sein?
Gruß
  Jörg
_________________________

Nein, meine Aussage galt nur für angehängte Logikeingänge die ja einen
offenen Ausgang (OE=+UB)durchaus über den Logikpegel 1 ziehen
können.

Schreib doch mal, wie Du die LED's angeschlossen hast. Sink or Source
Betrieb?

Stabile Verhältnisse für angeschlossene Verbraucher welche auch Strom
ziehen (einige mA) bekommst Du erst, wenn ein MR generiert wurde (und
das möglichst schnell) und ein Datenbyte gezielt geladen wurde und dem
Ausgangsregister übergeben wurde.

Zeig doch mal Deine Schaltung in dem Bereich, dann läßt sich sicher der
Fehler finden.

MfG Manfred Glahe

Abends NUR unter: manfred.glahe@web.de

von TravelRec. (Gast)


Lesenswert?

Hallo Jörg!

Wenn Du über den ULN 2803 Deine Relais ansteuerst, brauchst Du Dir
keine Sorgen machen. Die schalten erst ab etwa 3V und 1,8 oder so mA
durch, so daß das Einschaltblitzen der LEDs zu vernachlässigen ist. Ab
3V funktioniert ein HC595, ab etwa 4V ein HCT595. Du darfst auch nicht
vergessen, daß Relais eine Anzug-Trägheit haben, die im 5-20ms-Bereich
liegt, bis dahin wird die Betriebsspannung wohl oben sein (wenn Du
nicht gerade ´nen Kondensator von der Größe einer Bierbüchse verbaut
hast :-)). Wenn OE nun auf Vcc gezogen wird (mittels PullUp), dann kann
der Prozi auch ruhig mal nicht starten, deswegen bleibt OE trotzdem
High. Sollte der Prozi dann starten, behält er (AVR-Familie) alle Ports
solange auf "tristate", bis Du ihm per Befehl was anderes sagst. Ob
du´s nun gleich nach dem Reset, oder Stunden später machst, ist
ziemlich egal, solange Du OE nicht vorher als Low definierst, bevor Du
die 595er mit Nullen gefüttert hast. Beachte auch die oben genannte
Reihenfolge der Portinitialisierung, dann kann nichts schiefgehen.

von Jörg Günzel (Gast)


Lesenswert?

@Travel
Ja danke, werde ich dann mal versuchen.

@Manfred
Die LEDs-Widerstands-Schaltung ist an einer Seite mit den Ausgängen an
der anderen an Masse angesclossen. Das ist dann wohl Sink-Betrieb,
oder?
Aber wie gesagt war das nur zum Testen. Das Wichtige sind die Relais.
Trotzdem nochmal zu den LEDs. Du schreibst oben, dass das Festlegen
eines Potentials an den Ausgängen bei Tri-State nur wichtig ist, wenn
weitere Logikstufen folgen, was ja auf die LEDs nicht zutrifft. Die
LEDs  dürfen ja nur leuchten, wenn am Ausgang 5 Volt anliegt und dass
dürfte im Tri-State Betrieb ja nicht der Fall sein. Da sie trotzdem
kurz aufblitzen scheint es doch mit dem langsamen Anstieg der
Versorgungsspannung zusammenzuhängen. Daran würde wohl auch Deine
Beschaltung zum Resetten nicht ändern, oder? Trotzdem interessiert mich
dieser Schaöltungsteil weiterhin

von Hagen (Gast)


Lesenswert?

Die ULN's sind doch Sink Treiber mit gemeinsammen GND Potential. Wenn
du dieses GND per MOSFET oder so zuschaltbar machen würdest ? D.h. die
GND's der ULN's gehen auf einen MOSFET der per Widerstand immer auf
gesperrt gezogen wird. Das Gate dieses MOSFET's wird dann durch den
AVR angesteuert.

Eventuell ein bescheuerter Vorschlag, bin da nicht so fit, aber
wenigsten ein Vorschlag ;)

Gruß Hagen

von Manfred Glahe (Gast)


Lesenswert?

Laut Datenblatt (Philips) sollte man mit /OE auf Low und
/MR auf High die Ausgänge hochohmig schalten können.
______________________

Da liegt ein Mißverständnis vor, die Ausgänge werden ALLEIN vom OE=High
auf hochohmig geschaltet, egal was der MR macht! Um das Aufblitzen der
LED's zu verhindern, mußt du nur den OE auf +5V halten bzw. mit einem
R dorthinziehen.

Meine Schaltung mit dem zusätzlichen UND Gatter macht folgendes:

Der Reseteingang wird auf GND gezogen und setzt leider nur die
Schieberegister auf logisch Null, die Ausgangsregister haben weiterhin
ihren Zufallslevel, welcher sich beim Power On eingestellt hat. Deshalb
wird mit der positiven Flanke des endenden MR Signales ein Ladeimpuls
für die paralellen Ausgangsregister generiert, welche dann den Inhalt
der seriellen Register, die ja alle mit MR auf Null gesetzt wurden,
übernehmen.

MfG Manfred Glahe

von Manfred Glahe (Gast)


Lesenswert?

@Manfred
Die LEDs-Widerstands-Schaltung ist an einer Seite mit den Ausgängen an
der anderen an Masse angesclossen. Das ist dann wohl Sink-Betrieb,
oder?
________________________

Nein, das ist dann Source- Betrieb. Die Stromsenke solltest du für
solche Zwecke mit viel strom (>5mA) benutzen, da diese immer deutlich
größer ist ist als die Stromquellenfunktion.
Also die LED's über Widerstände, mit der Anode Richtung +UB, an +UB
klemmen und die Kathode an den Ausgang des 595. Aber bitte die
Gesamtverlustleistung des 595 beachten, die ist nämlich kleiner als die
Summe der Treiberfähigkeit eines einzelnen ausganges.

MfG Manfred Glahe

von TravelRec. (Gast)


Lesenswert?

Wenn Du die LEDs nach Vcc (also +) anschließt, invertiert sich natürlich
vor dem Auge des Betrachters all das, was man in die 595´s
hineingeschoben hat. Source-Betrieb ist hingegen nichtinvertiert. Die
ULNs sind Source-Treiber (npn-Darlington) und schalten bei logisch 1 am
Eingang am Ausgang auf Masse.

von Jörg Günzel (Gast)


Angehängte Dateien:

Lesenswert?

@Manfred
"Da liegt ein Mißverständnis vor, die Ausgänge werden ALLEIN vom
OE=High
auf hochohmig geschaltet, egal was der MR macht! Um das Aufblitzen der
LED's zu verhindern, mußt du nur den OE auf +5V halten bzw. mit einem
R dorthinziehen."

Also das angehängte Datenblatt sagt was anderes (Seite 3). Da steht
klipp und klar /OE = High und /MR = Low für hochohmig.

Gruß
 Jörg

von TravelRec. (Gast)


Lesenswert?

Nee, das Datenblatt sagt in dem Fall Quatsch, Du kannst es probieren,
sowie Du OE auf Vcc legst, passiert an den Ausgängen nichts mehr.

von Manfred Glahe (Gast)


Lesenswert?

Also das angehängte Datenblatt sagt was anderes (Seite 3). Da steht
klipp und klar /OE = High und /MR = Low für hochohmig.

Gruß
 Jörg
__________________

Hallo Jörg,

TravelRec. hat es bereits geschrieben und ich habe mir das Philips
Datenblatt mal angeschaut. Das ist nicht nur mißverständlich, daß ist
eindeutig falsch dargestellt.
Suche mal bei ti nach diesem Baustein, bei denen habe ich solche Gehler
noch nicht gesehen.

MfG Manfred Glahe

von A.K. (Gast)


Lesenswert?

TravelRec hat völlig Recht, das Philips Datenblatt erzählt hier Quatsch,
das ergibt auch absolut keinen Sinn so. Siehe TI Datenblatt, da steht's
richtig drin. TI hat zudem die nette Angewohnheit, die Funktionsweise
auch anhand eines Schaltbildes zu erklären.

http://focus.ti.com/docs/prod/folders/print/cd74hc595.html

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.