Hallo zusammen! Ich muss mit 3 Ausgängen 16 Relais ansteuern. Dafür möchte ich 2 Schieberegister kaskadieren. Die Relais sollen vom durchschieben der Ausgänge nichts mitbekommen. Ich habe mir die Schaltung im Anhang ausgedacht. Über DS (DataSerial) und SHCP (shift register clock) wird das Register gefüllt. Nach Abschluss des Füllens wird über OE auf low der Inhalt des Schieberegisters in das Speicherregister geschrieben. Nach Abschluss des Schaltvorgangs wird mit OE auf high die Ausgänge wieder abgeschaltet und das nächste Wort eingetellt. Ich nutze folgendes Schieberegister: http://de.farnell.com/nxp/74hc595n/74hc-cmos-74hc595-dip16-5v/dp/3166028 Klappt das so? Grüße, Steffi
Stephanie schrieb: > Füllens wird über OE auf low der Inhalt des > Schieberegisters in das Speicherregister geschrieben. Hallo Stefanie, Du hats dei Funktion des OE nicht richtig verstanden. OE ist nur zum EINSCHALTEN der Ausgänge. Um die internen Schieberegister auf dei Ausgangsregister zu schreiben brauchst Du STCP. Viertiefe Dich nochmals in das Datenblatt. UND: Bitte auch Ansteuerpegel beachten! rgds
Siehe Porterweiterung mit SPI, da werden die gleichen SR genutzt. Ich würde /OE konstant auf Low lassen und so vorgehen: 1) Daten die die SR schieben 2) STCP auf High um die Daten des SR in die Ausgangslatches zu kopieren 3) STCP auf Low BTW: Bei CMOS ICs nie Eingänge offen/floatin lassen. Uwe Bonnes schrieb: > Und warum keine I2C Portextender? Komplizierter und langsamer als die SR?
:
Bearbeitet durch User
Wenn der Einschaltzustand deiner Relais keine Rolle spielt, kannst du OE fest auf GND legen und die dritte Leitung für STCP statt OE verwenden. Dummerweise sind die Anfangszustände bei den mir bekannten Versionen des 74HC595 nämlich nicht festgelegt.
Stephanie schrieb: > Ich muss mit 3 Ausgängen 16 Relais ansteuern. Dafür möchte ich 2 > Schieberegister kaskadieren. Gute Entscheidung. > Die Relais sollen vom durchschieben der > Ausgänge nichts mitbekommen. Ist gewährleistet. Wie man es richtig macht, steht hier: http://www.mikrocontroller.net/articles/AVR-Tutorial:_Schieberegister
Es gibt schon sehr viele Beiträfe zu diesem Thema in dem Forum. Muss man nur finden.
Felix Pflaum schrieb: > Dummerweise sind die Anfangszustände bei den mir bekannten Versionen des > 74HC595 nämlich nicht festgelegt. Dafür kann man /OE verwenden: man verbindet es mit dem invertierten /Reset oder mit einem freien Pin und einem Pullup - dann ist beim Einschalten /OE hi und alle Relais aus. Wurde aber wirklich schon unzählige Male durchdiskutiert. Es ist eine Fehlkonstruktion des 595, dass /MR nicht auf die Ausgänge wirkt, obwohl das jeder vernünftige Mensch annehmen würde. Georg
Georg schrieb: > Felix Pflaum schrieb: >> Dummerweise sind die Anfangszustände bei den mir bekannten Versionen des >> 74HC595 nämlich nicht festgelegt. > > Dafür kann man /OE verwenden: man verbindet es mit dem invertierten > /Reset oder mit einem freien Pin und einem Pullup - dann ist beim > Einschalten /OE hi und alle Relais aus. > > Wurde aber wirklich schon unzählige Male durchdiskutiert. Es ist eine > Fehlkonstruktion des 595, dass /MR nicht auf die Ausgänge wirkt, obwohl > das jeder vernünftige Mensch annehmen würde. Ja, diese Lösung ist mir bekannt. Wollte nur drauf hinweisen, dass es diesen Fallstrick gibt, um die Threaderstellerin davor zu bewahren, den gleichen Fehler zu machen wie ich damals. Hatte im Vertrauen darauf, dass die Ausgänge mit 0 initialisiert werden, OE auf GND gelegt und damit das Problem, dass einige meiner MOSFETs nach Anlegen der Betriebsspannung voll durchgeschaltet haben, was in der damaligen Anwendung nicht hätte passieren dürfen. Im Redesign wurde dann die Lösung mit OE über externen Pullup (4,7k) an Betriebsspannung und einen Portpin sowie der entsprechenden Schaltsequenz (internen Pullup aktivieren, OE-Pin auf Ausgang schalten, Nullen ins Schieberegister schreiben, ins Ausgaberegister übernehmen, OE low) und Pulldown-Array an den Ausgängen umgesetzt - funktioniert einwandfrei.
:
Bearbeitet durch User
Das ist eine Fehlkonstruktion des 595, dass /MR nicht auf die Ausgänge wirkt, das ist absichtlich so gemacht. Obwohl ich mich auch nich so gut damit auskenne.Aber wie man den ansteuert habe ich schon beschrieben hier im Forum. Beispiel:
1 | -- 74HC595 output port expander |
2 | -- Hoow to use: |
3 | -- hc595_send(value) |
4 | |
5 | |
6 | -- pin defines |
7 | -- any other pin can be used |
8 | var volatile bit clock_595 is pin_b5 -- SH pin11 |
9 | var volatile bit latch_595 is pin_b6 -- ST pin12 |
10 | var volatile bit data_595 is pin_b7 -- DS pin14 |
11 | |
12 | var volatile bit clock_595_dir is pin_b5_direction |
13 | var volatile bit latch_595_dir is pin_b6_direction |
14 | var volatile bit data_595_dir is pin_b7_direction |
15 | |
16 | |
17 | latch_595_dir = output |
18 | clock_595_dir = output |
19 | data_595_dir = output |
20 | |
21 | |
22 | -- load a byte into the '595 |
23 | procedure hc595_send(byte in val) is |
24 | var byte stemp |
25 | stemp = val |
26 | for 8 loop |
27 | data_595 = low |
28 | if ((stemp & 128) != 0) then |
29 | data_595 = high |
30 | end if |
31 | clock_595 = high |
32 | asm nop |
33 | clock_595 = low |
34 | stemp = stemp << 1 |
35 | end loop |
36 | latch_595 = high |
37 | asm nop |
38 | latch_595 = low |
39 | |
40 | end procedure |
Deinem Schaltbild nach wirkt -OE lt. "Fig 1. Functional diagram" auf die Steuerung der "3-STATE OUTPUTS". OE = 1 bewirkt, dass alle 8 Ausgänge in den hochohmigen Zustand gehen. Egal ob der "geschobene" Zustand 1 oder 0 war. OE = 0 sorgt dafür, dass die aktuellen Zustände wieder ausgegeben werden. Eine Änderung von OE verändert, im klassischen Sinne nichts. Also Vorher = Nachher. Was aber eine eventuelle Endstufe, mit den drei Zuständen macht, ist eine andere Sache.
Wie wär's damit bei der Initialisierung einfach 0x00 in die SR zu schieben, diese paar µs die die Relais eventuell an sind werde schon kein Weltuntergang sein, und wenn doch könnte man ein RC-Glied an /OE hängen und damit die Ausgänge ein paar Millisekunden lang nach dem Anlegen der Spannung auf hochohmig schalten.
:
Bearbeitet durch User
Der Baustein hat ein MR. Warum diesen nicht mit den µP-Reset koppeln. Ob diese "0" dann der richtige Ausgangszustand ist, ist eine andere Sache. Wenn mich nicht alles täuscht, wäre die richtige Wahl: MR: Mit Reset vom Rechner oder konstant 1. DS und SHCP: Zum Datenschubsen. STCP: Nach vollständiger Ausgabe aller 16/?? Bit einmal kurz auf 1 und dann wieder 0. OE: Finger weg und Konstant 0 ... oder so.
Das Schaltbild von Stephanie ist nicht richtig, weil der pin 12 STCP nirgendwo angeschlossen ist. Und dieser Pin ist sehr wichtig weil er die Latch steuert. Und die ist dafür da um die empfangenen Daten auf den Ausgang von hc595 zu leiten.Zuerst schiebt man sie rein aber sie werden im internen Register gespeichert, und die Ausgangspins des hc595 werden dabei noch nicht betrofen.Erst wenn mann die Latch schaltet werden die Daten auf die Ausgangspins geleitet.
Hier ist noch ein Beispiel: http://wiki.t-o-f.info/Arduino/ExempleD%C3%A9multiplexeurNum%C3%A9rique74HC595
Amateur schrieb: > Der Baustein hat ein MR. Warum diesen nicht mit den µP-Reset koppeln. Ob > diese "0" dann der richtige Ausgangszustand ist, ist eine andere Sache. Der MR hat nur Einfluss auf das interne Schieberegister, nicht auf das Ausgangsregister. Wenn man den MR auf 0 zieht, muss trotzdem noch eine steigende Flanke an STCP ausgelöst werden, um die Schieberegistereinstellung auf die Ausgänge durchzuschalten. Das "Problem" mit den zufälligen Ausgangswerten ist in manchen Fällen - z.B. LED-Lauflicht - kein wirkliches. In anderen Fällen kann es fatal sein, wenn ein Schaltungsteil beim Einschalten anspringt, obwohl er das nicht soll. Da gibt es dann eben die hier beschriebenen Gegenmittel
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.