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
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
@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?
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
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.
@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
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
@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
@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
@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
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
@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
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.
@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
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
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
@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
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.
@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
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.