Forum: Mikrocontroller und Digitale Elektronik Anschluss & Beschaltung 74hc595 für definierten Ausgangszustand beim Start


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 Michael W. (neuer_nutzer)


Lesenswert?

Hallo zusammen!

Ich erarbeite mir gerade ein Schaltungs- und Platinenlayout für einen 
Atmega µC mit 16 Ein- und 16 Ausgänge über je zwei Schieberegister, 
angesteuert über I/O Pins (nicht über SPI). Für die Ausgänge fällt meine 
Wahl im Moment auf das 74HC595 (mit ULN2803 als Treiber f. Relais).

Das AVR-Tutorial: Schieberegister habe ich inzwischen mehrfach hoch 
und runter gelesen um die ersten Grundlagen zu verinnerlichen.

Zunächst stellt sich mir eine grundsätzliche Frage. Brauche ich 
überhaupt einen µC Pin zum Reset des Schieberegisters (SCL)? Ich kann 
doch einfach auch alle Nullen schrittweise hineintakten, bevor ich 
durchschalte (RCK), oder?

An der Stelle

>Achtung beim Startup!
>
>Die Ausgänge des '595 führen beim Einschalten undefinierte, also zufällige
>Pegel! Und der Eingang ¬SCL löscht nur die Schieberegister (=
>unnütz, um mit ¬RESET zu verbinden).

stellen sich mir ein paar spezielle Fragen.

Wenn beim Neustart (z.B. nach Stromausfall) die 595er irgendeinen Pegel 
an den Ausgängen haben, dann wäre dies nur für kurze Zeit, da eine 
Intitialisierung durch die µC Software erfolgen soll, bei der 0 auf 
alles durchgeschoben und durchgeschaltet wird. Wäre diese kurze Zeit 
trotzdem ausreichend um ein Relais oder einen Stromstoßschalter zum 
Zucken zu bringen? Wenn nicht, dann wäre das kein Problem.

Falls das kurzzeitig anliegende zufällige Ausgangssignal beim Neustart 
Probleme macht wären

>definierte Pegel beim Einschalten unerlässlich

und ich muss

>¬OE beschalten.
>   - Entweder mit einem weiteren Mikrocontroller-Ausgang (der mit einem externen
>    Pull-Up-Widerstand zu beschalten ist und nach dem ersten Durchschieben
>    dauerhaft auf LOW gelegt wird)

Verstehe ich, die 595er erst nach der Initialisierung scharf schalten :)

>   - Oder mit einer RC(D)-Kombination, die die Ausgänge für eine gewisse Zeit auf
>    Tristate hält. Spart ein Mikrocontroller-Pin.

Verstehe ich zumindest im Ansatz. Aber wie sieht das konkret aus? Ist 
der Reset des µC irgendwie einzubinden, wie im Tutorial im Zusammenhang 
mit SCL angedeutet? Bei den Schaltplänen mit 595ern die ich bisher 
gefunden habe lag OE eigentlich immer auf Masse.

>Obendrein sind, wie sonst am Mikrocontroller, die betreffenden Ausgänge mit
>externen Pull-Up- oder Pull-Down-Widerständen zu beschalten.

Was ist hier mit "die betreffenden Ausgänge" gemeint? Die µC Pins, die 
das Schieberegister steuern, also vor allem SCL, ggf. OE, und evtl sogar 
Serial in und Clock? Oder sind sogar noch die Ausgänge des 
Schieberegisters gemeint? Bei den 595er Plänen die ich kenne ist mir 
nichts besonderes dahingehend aufgefallen.


Ich würde mich sehr freuen wenn jemand ein paar kurze Antworten für mich 
übrig hätte :) Im Voraus vielen Dank für eure Hilfe.

Viele Grüße,


Michael

von Georg (Gast)


Lesenswert?

Michael W. schrieb:
> und ich muss
>
>>¬OE beschalten.

Der 595 ist leider eine Fehlkonstruktion bez. Reset, aber das ist nun 
einmal nicht zu ändern. Mir einem externen Reset wird nur das 
Schieberegister gelöscht, aber nicht das Ausgangsregister, dazu bräuchte 
man zusätzlich einen Impuls an RClk, aber den Eingang muss man vom 
Controller ansteuern um zu vermeiden, dass das Durchtakten an den 
Ausgängen erscheint.

Es bleibt daher nur, /OE mit dem invertierten /Reset zu verbinden (oder 
mit einem Controllerausgang mit Pullup, der nach Reset ein Eingang ist) 
und mit Pullups/Pulldowns dafür zu sorgen, dass ohne /OE nichts 
eingeschaltet wird.

Georg

von Peter R. (pnu)


Lesenswert?

Das sind viel zu viele Frage auf einmal, verdau erstmal die ersten 
Antworten und dann stell die noch offenen Fragen, aber nicht alle auf 
einmal, sondern halte Dich daran: Man frisst Vorspeise, Hauptspeise und 
Nachtisch nicht alles auf einmal, sondern eins nach den andern.

Vielleicht hilft die Beschreibung einer Schrittfolge:

Nach dem Einschalten des Kontrollers sind alle seine Ausgänge erst 
einmal hochohmig. Ob das ertragen wird, muss man anhand der Beschaltung 
klären.

Der 595 bräuchte unbedingt erst einmal shiftclock und latchclock auf 
Null (pulldown)damit beim Aufwachen des Kontrollers keine pos.Flanke 
entstehen kann, die ungewolte Aktivität auslöst.
Ob OE aktiv sein darf und welche Werte Qa bis Qh haben sollen bestimmt 
der angeschlossene Kram.

1.Schritt des Kontrollers: mit reset, den Zähler des SRG auf low setzen 
und dann  wieder auf high.
2. Schritt: Bit anlegen (zuerst die Folge eingeben, die der 
angeschlossenen Schaltung mit Sicherheit nicht wehtut, zum Beispiel alle 
Stellen aus und alle Segmente aus, wenn es sich um ein 7-Segment Display 
handelt.
3.Schritt: shift Clock aus den pull-down-Zustand anheben (pos Flanke) 
und wieder zurück. also serielles Bit aufnehmen
2 und 3 achtmal. bis das 8-bit-byte geladen ist.
Dann latch clock aus pull-down anheben und wieder senken. Damit die 
daten ans Latch übergeben.
4. wenn OE noch auf high ist, oder pull up, jetzt OE auf low.

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

Michael W. schrieb:
> Wäre diese kurze Zeit
> trotzdem ausreichend um ein Relais oder einen Stromstoßschalter zum
> Zucken zu bringen?

Ja.
Ein Quarz braucht mehrere ms zum Anschwingen, die Resetzeit wird dann 
noch um einen Sicherheitsaufschlag höher gewählt, z.B. 100ms.
Relais können schon ab 1ms schalten.

von Gerhard O. (gerhard_)


Lesenswert?

Hallo Michael,

Eigentlich berühren Deine Fragen meiner Ansicht nach einige etwas heikle 
(entwicklungstechnische) Themen.

Der Reset via SCL ist zum Startup nicht unbedingt notwendig weil man die 
Möglichkeit hat, anfangs mit dem  OE- die Ausgänge zu deaktivieren. Der 
MCU braucht nur alle Ausgänge auf NULL stellen und dann erst den OE- zu 
aktivieren. Dabei sparst Du Dir einen Port Pin bzw. Steckerbelegung mit 
dem SCL Pin. Das Problem mit dem SCL Eingang ist, dass nur das erste 
Shift-Register davon beintroffen ist. Das zweite behält seinen 
jeweiligen Zustand.

Der heikle Teil besteht in der Frage wie sich Dein System im Fehlerfall 
verhalten muß. Da das Shiftregister die Datenzustände speichert, behält 
es seinen Wert dauerhaft auch wenn die Steuerung ausfällt. Wenn Du z.B. 
Mit den Ausgängen Lasten wie Heizungen, Motoren steuern willst, kann ein 
Fehler unter Umständen gefährliche Folgen nach sich ziehen. Dehalb 
empfiehlt sich ein Hardware Watchdog der die Ausgänge unabhängig von der 
Steuerung durch z.B hochziehen des OE- deaktiviert.  Ich habe den 
Eindruck dass Du Dir darüber schon Gedanken gemacht hast. Auch Fail-Safe 
Ausgangs-Schutzschaltungen werden manchmal eingesetzt um die Sicherheit 
zu erhöhen. Allerdings nichts in der Welt ist perfekt.

Eine gewisse Sicherheit kann man erreichen den OE- Pin durch eine 
Schutzschaltung dynamisch zu steuern. Man könnte z.B einen FET am GATE 
mit mittels einer geigneten Beschaltung mit einer gepulsten Spannung 
Kondensator getrennt vom MCU steuern. Wenn sich der MCU aufhängen 
sollte, dann schaltet der FET automatisch nach kurzer Zeit ab. 
Allerdings darfst Du dazu keinen Interrupt nehmen weil unter Umständen 
auch wenn das Hauptprogramm hängt, die Timer Interrupts 
weiterfunktionieren.

Irgendwie gefällt mir auch weniger dass sich die Ausgangszustände beim 
HC 595 nicht zurücklesen lassen. Ein IO-Expander wie PCA9554 oder 
MCP23008 ist da günstiger weil man elektrisch aktiv, die 
augenblicklichen Pin-Zustände jederzeit abfragen kann. Besser noch wäre, 
den Schaltzustand von der Last her durch Optocoupler zurückzuführen.

Wie gesagt, rate ich Dir Beim Design Deiner Schaltung von den 
Gesammtrahmenbedingen auszugehen und Dir überlegen was in den einzelnen 
Fehler Zuständen passieren darf und dann Deine Schaltung dementsprechend 
zu konzipieren.

Bezüglich dem Gebrauch von Pull-Ups oder Pull-Down will man verhindern 
dass Schaltelemente wie CMOS oder MOSFETS im Falle eines Versagens der 
Steuerung selber Einschalten können. Das ist der Fall wenn der 
Kontroller im RESET ist und alle Port Pins hohe Impedanz haben. Dann 
kann es passieren dass sich an den extrem hochohmigen MOSFET oder CMOS 
Eingängen unbeabsichtigte Spannungen durch Ladungseffekte oder 
Leckströme aufbauen können und sich Lasten dann unbeabsichtigt 
einschalten können. Entsprechende Widerstände schaffen in einem solchen 
Fall definierte Schaltzustände.

Im Falle des HC595 brauchst Du nur Schutzwidersände nach Masse wenn Du 
hochohmige Lasten wie MOSFETS steuerst. Beim ULN2803 brauchst Du die 
wegen der eingebauten Ableit und Serienwiderstände an den Eingängen 
natürlich nicht.

Im einfachsten Fall würde ich sicherstellen wollen, dass der OE- beim 
Einschalten vor der Initialisierung des MCUs immer durch Einsatz eines 
Pull-Up Widerstand hochgelegt wird. Dann können sich Deine Lasten nicht 
selber einschalten wenn die Datenspeicherzellen im HC595 nach dem 
Einschalten undefiniert sind.

Auch rate ich Dir den Watchdog einzusetzen, so dass sich im Fehlerfall 
beim Ausfall des MCUs die Ausgänge erst nach dem Restart des MCUs wieder 
einschalten können weil der OE durch den Pullup automatisch auf H geht 
und die Ausgänge deaktiviert.


Gruß,
Gerhard

: Bearbeitet durch User
von Michael W. (neuer_nutzer)


Lesenswert?

Hallo zusammen,

vielen Dank für eure Unterstützung. Ich werde im Folgenden auf die 
jeweiligen Beiträge eingehen.

Georg schrieb:
> Der 595 ist leider eine Fehlkonstruktion bez. Reset
Schient mir auch irgendwie so. Aber es ist ja lösbar, wenn auch 
vielleicht umständlicher als eigentlich nötig :/


Peter R. schrieb:
> Das sind viel zu viele Frage auf einmal

Ich versuchs nochmal übersichtlicher:
a) Brauche ich zwingend einen µC Pin für SCL? Ich kann die Nullen doch 
auch in mit Serial In und Clocksignal in das Schieberegister 
hineinschieben anstatt mit SCL alle auf einmal zu setzen. Natürlich gibt 
es zumindest einen Zeitunterschied...
b) Bis alles initialisiert ist sollten ggf. die Ausgänge mit OE geblockt 
sein, z.B. über µC Pin. Wenn ich den Pin sparen will ist RC-Beschaltung 
an OE zur zeitverzögerten Aktivierung scheinbar möglich. Aber wie sieht 
das konkret aus?

> Vielleicht hilft die Beschreibung einer Schrittfolge:
>
> Nach dem Einschalten des Kontrollers sind alle seine Ausgänge erst
> einmal hochohmig. Ob das ertragen wird, muss man anhand der Beschaltung
> klären.
Wenn die grundlegenden Fragen so wie hier geklärt sind kann ich einen 
Entwurf der Schaltung für Anregungen und zur Diskussion zeigen. Noch bin 
ich nicht so weit.

> Der 595 bräuchte unbedingt erst einmal shiftclock und latchclock auf
> Null (pulldown)damit beim Aufwachen des Kontrollers keine pos.Flanke
> entstehen kann, die ungewolte Aktivität auslöst.
Sehr konkret, verstehe ich gut, Danke!

> Ob OE aktiv sein darf und welche Werte Qa bis Qh haben sollen bestimmt
> der angeschlossene Kram.
Wenn es um den an die Ausgänge des 595 angeschlossenen Kram geht, da 
sind 5V Relais (monostabil) und Stromstoßschalter (bistabil) über 
ULN2803 dran.

> 1.Schritt des Kontrollers: mit reset, den Zähler des SRG auf low setzen
> und dann wieder auf high.
Verstehe ich richtig: Mit Reset (SCL) auf low das Schieberegister zuerst 
komplett auf 0 setzen, SCL dann wieder auf high (aber warum brauche ich 
das vorher, es kommt doch jetzt Schritt 2, der eh alles überschreibt, s. 
Frage a) oben)

> 2. Schritt: Bit anlegen (zuerst die Folge eingeben, die der
> angeschlossenen Schaltung mit Sicherheit nicht wehtut)
In diesem Fall alle angeschlossenen Relais aus, also 0. Aber diesen 
Zustand habe ich eh schon durch Schritt 1.

> 3.Schritt: shift Clock aus den pull-down-Zustand anheben (pos Flanke)
> und wieder zurück. also serielles Bit aufnehmen
Verstehe ich, einmal Takt

> 2 und 3 achtmal. bis das 8-bit-byte geladen ist.
> Dann latch clock aus pull-down anheben und wieder senken. Damit die
> daten ans Latch übergeben.
Klar, für jedes Bit, aber dann hier insgesamt 16mal weil zwei Stück 595 
kaskadiert sind ;)

> 4. wenn OE noch auf high ist, oder pull up, jetzt OE auf low.
Verstehe ich auch. Aber für diese letzte und einmalige Aktion einen 
kostbaren µC Pin zu opfern erscheint mir in Anbetracht der im Tutorial 
angebotenen Alternative mit RC-Beschaltung nicht die beste Lösung zu 
sein.



Peter Dannegger schrieb:
> Michael W. schrieb:
>> Wäre diese kurze Zeit
>> trotzdem ausreichend um ein Relais oder einen Stromstoßschalter zum
>> Zucken zu bringen?
>
> Ja.
Danke für diese klare und verständlich erläuterte Antwort :) Also muss 
ich ich auf jeden Fall mit OE, SCL und RCK etc. rumschlagen :/

von Wolfgang (Gast)


Lesenswert?

Peter Dannegger schrieb:
> Ja.
> Ein Quarz braucht mehrere ms zum Anschwingen, die Resetzeit wird dann
> noch um einen Sicherheitsaufschlag höher gewählt, z.B. 100ms.
> Relais können schon ab 1ms schalten.

Aber nur, wenn die Versorgungsspannung für die Relais freigegeben ist, 
bevor der µC hochgefahren ist ;-)

von Frank K. (fchk)


Lesenswert?

Michael W. schrieb:
> Ich versuchs nochmal übersichtlicher:
> a) Brauche ich zwingend einen µC Pin für SCL? Ich kann die Nullen doch
> auch in mit Serial In und Clocksignal in das Schieberegister
> hineinschieben anstatt mit SCL alle auf einmal zu setzen. Natürlich gibt
> es zumindest einen Zeitunterschied...

So mache ich es immer.

> b) Bis alles initialisiert ist sollten ggf. die Ausgänge mit OE geblockt
> sein, z.B. über µC Pin. Wenn ich den Pin sparen will ist RC-Beschaltung
> an OE zur zeitverzögerten Aktivierung scheinbar möglich. Aber wie sieht
> das konkret aus?

Denkbar ist auch ein 74HC74, das nach einem Power-On gelöscht ist und 
erst nach dem ersten RCK gesetzt wird. !Q käme dann an !OE.

Ich habe es in einem Design auch so gemacht, dass ich zu jedem HC595 
einen HC597 quasi parallel geschaltet habe, um nach einem (ungewollten) 
Reset etc. den Ausgang des Latches zurücklesen zu können. Ohne diese 
Maßnahme kann man ja nur das Schieberegister zurücklesen, nicht aber das 
Ausgangsregister.

> Wenn es um den an die Ausgänge des 595 angeschlossenen Kram geht, da
> sind 5V Relais (monostabil) und Stromstoßschalter (bistabil) über
> ULN2803 dran.

Wenn Du mit weniger Bauteilen auskommen möchtest, darfst Du Dir auch 
gerne mal den TI TPIC6?595/596 anschauen, wobei das ? für einen 
Buchstaben A,B,C oder nichts steht. Die verschiedenen Versionen haben 
unterschiedliche Ausgangstreiberleistung. ST/NXP haben NPIC* oder Micrel 
MIC5821/22/41/42.

fchk

von Michael W. (neuer_nutzer)


Lesenswert?

Hallo Gerhard!

Haben uns knapp verpasst, da ist mir deine Antowrt durchgegangen. Auch 
dir herzlichen Dank für deinen ausführlichen Beitrag und deine Hilfe.

Gerhard O. schrieb:
> Eigentlich berühren Deine Fragen meiner Ansicht nach einige etwas heikle
> (entwicklungstechnische) Themen.
Oh, heikel :o

> Der Reset via SCL ist zum Startup nicht unbedingt notwendig weil man die
> Möglichkeit hat, anfangs mit dem  OE- die Ausgänge zu deaktivieren. Der
> MCU braucht nur alle Ausgänge auf NULL stellen und dann erst den OE- zu
> aktivieren. Dabei sparst Du Dir einen Port Pin bzw. Steckerbelegung mit
> dem SCL Pin.
So dachte ich es mir auch. Hätte dann SCL frei gemacht und ggf. OE 
stattdessen drangehängt, das passt von den Pins her gut.

> Das Problem mit dem SCL Eingang ist, dass nur das erste
> Shift-Register davon beintroffen ist. Das zweite behält seinen
> jeweiligen Zustand.
Meinst du erstes und zweites in der Reihenfolge der Kaskadierung? Dafür 
hätte ich natürlich jedes der beiden (oder ggf. mehr) Schieberegister 
mit SCL an den entsprechenden µC Pin gehängt. Ebenso natürlich mit OE, 
so dass der µC Pin ggf. alle Schieberegister blockt.

> Der heikle Teil besteht in der Frage wie sich Dein System im Fehlerfall
> verhalten muß. Wenn Du z.B.
> ... Lasten wie Heizungen, Motoren steuern willst, kann ein
> Fehler unter Umständen gefährliche Folgen nach sich ziehen.
Im Moment hängen an den monostabilen Relais Rollos dran und an den 
bistabilen Licht. Im Grunde ist egal wie die Ausgänge sind, passieren 
würde nichts, ausser dass die Rollos kurz zucken oder irgendwo ein Licht 
angeht wegen des Impulses am Stromstoßschalter. Möchte ich aber 
natürlich trotzdem vermeiden, da ich mich langfristig, wenn ich mehr 
Erfahrungen habe, auch an Dinge wie Heizungssteuerung begeben möchte.

> Dehalb
> empfiehlt sich ein Hardware Watchdog der die Ausgänge unabhängig von der
> Steuerung durch z.B hochziehen des OE- deaktiviert.
Es geht hier nicht mehr um einen Restart nehme ich an, sondern um einen 
Freeze des µCs? Kannst du genauer ausführen, wie das aussehen würde?

> Ich habe den
> Eindruck dass Du Dir darüber schon Gedanken gemacht hast. Auch Fail-Safe
> Ausgangs-Schutzschaltungen werden manchmal eingesetzt um die Sicherheit
> zu erhöhen.
Mache mir im Moment um einige Sachen Gedanken, das meiste in dieser Welt 
ist neu für mich. Hardware Watchdog bin ich zwar noch nicht drüber 
gestolpert. Wenn es aber gedanklich an sicherheitsrelevante Dinge wie 
Heizung geht habe ich natürlich sofort auch Dinge wie mechanische 
Temperaturschalter hinter dem Relais o.ä. zur 
Sicherheitstemperaturbegrenzung im Kopf. Absturz oder Fehlfunktion der 
Elektronik sollte nicht zu einem kritischen Zustand führen. Aber, wie du 
sagst,
> nichts in der Welt ist perfekt.

> Eine gewisse Sicherheit kann man erreichen den OE- Pin durch eine
> Schutzschaltung dynamisch zu steuern. Man könnte z.B einen FET am GATE
> mit mittels einer geigneten Beschaltung mit einer gepulsten Spannung
> Kondensator getrennt vom MCU steuern. Wenn sich der MCU aufhängen
> sollte, dann schaltet der FET automatisch nach kurzer Zeit ab.
> Allerdings darfst Du dazu keinen Interrupt nehmen weil unter Umständen
> auch wenn das Hauptprogramm hängt, die Timer Interrupts
> weiterfunktionieren.
Das sieht mir aus wie der genannte Hardware Watchdog. Das muss ich ggf. 
zu späterem Zeitpunkt nochmal aufgreifen. Spricht denn etwas gegen den 
µC internen Watchdog?

> Irgendwie gefällt mir auch weniger dass sich die Ausgangszustände beim
> HC 595 nicht zurücklesen lassen. Ein IO-Expander wie PCA9554 oder
> MCP23008 ist da günstiger weil man elektrisch aktiv, die
> augenblicklichen Pin-Zustände jederzeit abfragen kann.
Habe ich bei meinen bisherigen Überlegungen noch nicht vermisst. Da es 
sich (des Stromsparens wegen) zumeist um Stromstoßschalter handelt gibt 
es an den Schieberegistern eigentlich eh immer nur kurze Impulse.

> Besser noch wäre,
> den Schaltzustand von der Last her durch Optocoupler zurückzuführen.
Ist vielleicht eine interessante Idee um den Schaltzustand der 
Stromstoßschalter zu erfassen. Bei dem Gedanken µC Kleinspannungsebene 
mit 230V Lastseite über etwas anderes als Relais zu verbinden stellen 
sich mir dennoch irgendwie die Nackenhaare auf. Auch wenn Optokoppler 
auch galvanisch getrennt sind und die Isolationsspannung reichen 
sollte...

> Wie gesagt, rate ich Dir Beim Design Deiner Schaltung von den
> Gesammtrahmenbedingen auszugehen und Dir überlegen was in den einzelnen
> Fehler Zuständen passieren darf und dann Deine Schaltung dementsprechend
> zu konzipieren.
Bin gerade dabei und versuche die offenen Fragen auszuräumen. Sobald ich 
etwas vorzeigbares habe diskutiere ich das gerne weiter im konkreten 
Zusammenhang.

> Bezüglich dem Gebrauch von Pull-Ups oder Pull-Down will man verhindern
> dass Schaltelemente wie CMOS oder MOSFETS im Falle eines Versagens der
> Steuerung selber Einschalten können. Das ist der Fall wenn der
> Kontroller im RESET ist und alle Port Pins hohe Impedanz haben. Dann
> kann es passieren dass sich an den extrem hochohmigen MOSFET oder CMOS
> Eingängen unbeabsichtigte Spannungen durch Ladungseffekte oder
> Leckströme aufbauen können und sich Lasten dann unbeabsichtigt
> einschalten können. Entsprechende Widerstände schaffen in einem solchen
> Fall definierte Schaltzustände.
Das Thema ist mir bei den ersten praktischen Erfahrungen sofort 
transparent geworden. Zunächst hatten sich Zustände an den Eingängen des 
µC schon durch annähern mit dem Finger geändert, als der interne PullUp 
nicht gesetzt war. Im ersten Feldversuch haben sich die Eingänge dann 
über die angeschlossenen langen Kabel Fehler eingefangen, trotz interner 
PullUps. Externe Pullups mit niedrigerem Widerstand haben dann auch hier 
Abhilfe geschaffen. Die Grundlagen sind also klar :)

> Im Falle des HC595 brauchst Du nur Schutzwidersände nach Masse wenn Du
> hochohmige Lasten wie MOSFETS steuerst. Beim ULN2803 brauchst Du die
> wegen der eingebauten Ableit und Serienwiderstände an den Eingängen
> natürlich nicht.
Dachte ich mir schon, dass es nur um Pull Ups und Downs zwischen µC Pin 
und Steuerpins des Schieberegisters handelt, und nicht um die Ausgänge.

> Im einfachsten Fall würde ich sicherstellen wollen, dass der OE- beim
> Einschalten vor der Initialisierung des MCUs immer durch Einsatz eines
> Pull-Up Widerstand hochgelegt wird. Dann können sich Deine Lasten nicht
> selber einschalten wenn die Datenspeicherzellen im HC595 nach dem
> Einschalten undefiniert sind.
So habe ich es im Moment auch vor Augen. Einen µC Pin mit PullUp and OE, 
dann zur Initialisierung über Serial In mit Clock Signal 16 Nullen 
durchschieben, ins Ausgaberegister durchschalten (RCK), und dann erst 
den µC Pin an OE auf low setzen um die Ausgänge zu aktivieren.

> Auch rate ich Dir den Watchdog einzusetzen, so dass sich im Fehlerfall
> beim Ausfall des MCUs die Ausgänge erst nach dem Restart des MCUs wieder
> einschalten können weil der OE durch den Pullup automatisch auf H geht
> und die Ausgänge deaktiviert.
Für die Rollo- und Lichtsteuerung glaube ich ist das im Moment 
vielleicht noch etwas zu viel. Dennoch werde ich sehen, ob ich hierfür 
noch Platz auf der Platine finde. Schadet ja nicht auch für späteres 
vorauszudenken.


Nochmal Danke für deinen ausführlichen Beitrag!

Viele Grüße,


Michael

von Michael W. (neuer_nutzer)


Lesenswert?

Hallo Wolfgang, Hallo Frank!

Auch euch beiden vielen Dank für eure Hilfe.

Wolfgang schrieb:
> Aber nur, wenn die Versorgungsspannung für die Relais freigegeben ist,
> bevor der µC hochgefahren ist ;-)
Ist natürlich auch ein Weg, die Relais freizuschalten. Ob ich nun aber 
einen Pin zum Freischalten des Schieberegisters mit OE verwende oder den 
Pin zum Freigeben der Relais ist von der Pineffizienz her kein 
Unterschied.


Frank K. schrieb:
> Michael W. schrieb:
>> Ich versuchs nochmal übersichtlicher:
>> a) Brauche ich zwingend einen µC Pin für SCL...
>
> So mache ich es immer.
Danke für die Bestätigung :)

>> b) Bis alles initialisiert ist sollten ggf. die Ausgänge mit OE geblockt
>> sein, z.B. über µC Pin.
>
> Denkbar ist auch ein 74HC74, das nach einem Power-On gelöscht ist und
> erst nach dem ersten RCK gesetzt wird. !Q käme dann an !OE.
Ich versuche im Moment noch alles so gut es geht auf begrenztem Platz 
unterzubringen. Noch sieht alles ganz gut aus (bis mein Entwurf in der 
noch anstehenden Diskussion zerpflückt wird). Mit 74HC74 wirds dann eng. 
Wenns sein muss, ändere ich natürlich das Layout, aber aktive (IO-Pin) 
bzw. passive (RC) Beeinflussung von OE scheint mir platzsparender zu 
sein.

> Ich habe es in einem Design auch so gemacht, dass ich zu jedem HC595
> einen HC597 quasi parallel geschaltet habe, um nach einem (ungewollten)
> Reset etc. den Ausgang des Latches zurücklesen zu können...
Ich habe derzeit keine Anwendung vor Augen, bei der ich nicht nach jedem 
Reset zur Initialisierung einfach alles erstmal auf 0 setzen kann. Mir 
ist nur wichtig, dass bis dahin nicht ungewollt eine 1 (wenn auch nur 
für kurze Zeit) bis zum Relais durchschlägt, da dies ungewollt etwas 
schalten könnte. Wäre zwar auch nicht schlimm, aber eben ungewollt.

>> Wenn es um den an die Ausgänge des 595 angeschlossenen Kram geht, da
>> sind 5V Relais (monostabil) und Stromstoßschalter (bistabil) über
>> ULN2803 dran.
>
> Wenn Du mit weniger Bauteilen auskommen möchtest, darfst Du Dir auch
> gerne mal den TI TPIC6?595/596 anschauen
Danke für den Hinweis. Habe mir gleich mal ein Datenblatt angeschaut. 
Sieht auf den ersten Blick durchaus hilfreich aus. Weniger Bauteile = 
mehr Platz kommt mir im Moment auch entgegen :) Muss das DB aber erstmal 
etwas ausführlicher studieren.


Nochmal Danke an alle für eure Bemühungen!

Viele Grüße,


Michael

von Frank K. (fchk)


Lesenswert?

Michael W. schrieb:

>> Denkbar ist auch ein 74HC74, das nach einem Power-On gelöscht ist und
>> erst nach dem ersten RCK gesetzt wird. !Q käme dann an !OE.
> Ich versuche im Moment noch alles so gut es geht auf begrenztem Platz
> unterzubringen. Noch sieht alles ganz gut aus (bis mein Entwurf in der
> noch anstehenden Diskussion zerpflückt wird). Mit 74HC74 wirds dann eng.

Es gibt ihn auch als Einerpackung:

http://www.nxp.com/documents/data_sheet/74LVC1G74.pdf

Und im SOT833-1-Gehäuse ist der dann auch nur 1.95mm*1.00mm groß. Das 
passt dann bestimmt :-)

fchk

von Michael W. (neuer_nutzer)


Lesenswert?

Hallo zusammen!

Ich habe auf Grundlage der bisherigen Diskussionsergebnisse einen ersten 
Schaltplan und einen Entwurf für das Platinenlayout erstellt. Wer möchte 
ist herzlich eingeladen hier seine Meinung dazu abzugeben :)

Beitrag "Atmega mit je zwei 74HCT597 und 74HC595 - Diskussion Platinenlayout"

Danke im Voraus!

Viele Güße,


Michael


Frank K. schrieb:
> Und im SOT833-1-Gehäuse ist der dann auch nur 1.95mm*1.00mm groß. Das
> passt dann bestimmt :-)
Zumindest bisher habe ich praktisch noch keinerlei Erfahrung mit SMD 
löten. Solange wie alles auf Lochasterplatine passt möchte ich dabei 
auch erstmal bleiben. Nicht wegen des Lotens, sondern vor allem wegen 
der Anfertigung der Platine. Einzelstücke machen zu lassen ist einfach 
zu teuer :/

von Frank K. (fchk)


Lesenswert?

Michael W. schrieb:

> Ich habe auf Grundlage der bisherigen Diskussionsergebnisse einen ersten
> Schaltplan und einen Entwurf für das Platinenlayout erstellt. Wer möchte
> ist herzlich eingeladen hier seine Meinung dazu abzugeben :)

Ich möchte nicht. Bitte lerne, Dich der Standard-Ausdrucksweise eines 
E-Technikers zu befleißigen - eines normgerechten Schaltplans. Es gibt 
genug Weichware, die Dir dabei hilft. Der dargestellte Wirrwarr Deines 
PNGs ist mir zu anstrengend.

fchk

von Michael W. (neuer_nutzer)


Lesenswert?

Hallo Frank,

danke für deine Meinung. Kann ich verstehen. Werde mich darum bemühen 
mir Kenntnisse in entsprechender Software anzueignen.

VG Michael

von Frank K. (fchk)


Lesenswert?

Falls Du die Anzahl Deiner Bauteile minimieren möchtest, möchte ich 
Deinen Blick auf diese Bauteile lenken:

MCP23S17: 16 Bit IO-Chip über SPI, kann sowohl Ein- als auch Ausgänge 
bereitstellen so wie Gimmicks wie Pin Change Interrupts etc. Davon 
brauchst Du nur zwei, und Du kommst mit 4 Signalen zum AVR aus: !CS, 
MOSI, MISO, SCK. Wenn Du mehrere von diesen Chips hast, selektierst Du 
einen bestimmen über ein Adressbyte. Jeder Chip hat eine eigene Adresse, 
die Du über die Pins 15-17 einstellst.

http://ww1.microchip.com/downloads/en/DeviceDoc/21952b.pdf

Dann gibt es Widerstandsnetzwerke, wo mehrere Widerstände eines Wertes 
in einem Gehäuse enthalten sind. Spart Lötarbeit.
Schau her:

http://www.reichelt.de/8-Widerstaende-9-Pins/2/index.html?&ACTION=2&LA=2&GROUPID=4500

(als Pullups)

http://www.conrad.de/ce/de/product/1055162/Widerstandsnetzwerk-220-radial-bedrahtet-DIP-16-025-W-Bourns-4116R-1-221LF-1-St?ref=list

(als Serienwiderstand, Beispiel)

fchk

von Michael W. (neuer_nutzer)


Lesenswert?

Hallo Frank!

Vielen Dank für deinen Beitrag und die Tips :-)

Über den MCP23S17 bin ich im Artikel Porterweiterung mit SPI auch 
schon gestolpert. Ich habe auch kurz damit geliebäugelt ihn zu 
verwenden, habe aber im Moment noch zu viel Scheu vor der SPI 
Schnittstelle. Ich möchte vor allem auch die Anzahl der Baustellen 
minimieren, an denen ich arbeiten muss. Die Ansteuerung der 
Schieberegister mit Pins ist für mich transparent und mit einem Byte 
Array und Zählschleifen recht elegant in wenigen Zeilen Code zu 
handhaben. Kann sein, dass das mit SPI auch so ist, aber was ich bisher 
an Code gesehen habe hat mich eher erstmal abgeschreckt.

Die Widerstandsnetzwerke habe ich auch schon entdeckt und an anderer 
Stelle eingesetzt. Sind tolle Bauteile, bei meinem aktuellen Layout so 
aber leider nicht sinnvoll einzusetzen. Etwas vergleichbares sollte es 
imho auch mit Kondensatoren geben, könnte ich mir z.B. bei RC 
Beschaltung für den Kondensator nach Masse gut vorstellen.

Nochmals vielen Dank für deine Hilfe!

Viele Grüße,


Michael

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.