Forum: Mikrocontroller und Digitale Elektronik Shift Register richtig auf Null setzen


von Student T. (hberg)


Lesenswert?

Hi,

ich möchte 20 MOSFETs über 3 74HC595 Shift Register schalten und mache 
mir gerade Gedanken über eine "saubere" Initialisierung. Bisher habe ich 
noch nicht viel mit den Teilen gemacht und wollte sichergehen, dass die 
mir später nicht willkürlich schalten.


Bisher sind mir zwei mögliche Lösungen eingefallen:

1) Shift und Storage Clock gleichzeitig
OUTPUT_ENABLE (OE) durch einen 10k Pullup deaktivieren. D.h. erst wenn 
durch den µc die Line auf LOW gesetzt wird, schalten die Shift Register 
durch. Davor sind die Ausgänge hochohmig.
Problem ist nur, dass OE (soweit ich das gesehen habe) nur das Storage 
Register an/aus schaltet, nicht aber das Shift Register resettet.

Folgender Fall:
3x 74HC595
Beim Start ist Müll im Shift Register (undefinierter Zustand)
OE durch Pullup deaktiviert
Ich schreibe 2 Byte
OE aktiv

Die ersten beiden Bytes sollten nun korrekt dargestellt werden, das 
dritte Byte (welches Müll enthält) wird aber nun auch ausgegeben. Wäre 
in dem Fall ein Programmfehler. Das Initialisieren könnte man durch das 
Schreiben von 3x 0x00 durchführen.


2) Shift und Storage Clock unterschiedlich + Clear
Anstelle jedes Bit gleich dem Storage mitzugeben, shiftet man 8 Bits ins 
Shift Register, und übernimmt dann mit einem Rutsch durch einmaliges 
takten der Storage Clock die 8 Bits auf die Ausgänge.

Hier könnte man nun die Clear Line mit einem Pullup auf HIGH ziehen und 
dadurch sicherstellen, dass kein Mist im Shift Register liegt. Selbst 
wenn man durch einen Programfehler nur 2 Bytes ins Shift Register 
reintaktet und OE aktiviert, hätte man Nullen im 3 Byte. Zusätzlich wäre 
der Zustand der Ausgänge durch leeres Shift Register und deaktivierem OE 
auch ohne laufende Firmware sichergestellt.


Ich bin mir nicht sicher welche Lösung (oder überhaupt eine) die 
"richtige" ist. Bei 1) habe ich weniger Leitungen, 2) scheint mir 
"failsafer". Oder wie stellt Ihr sicher, dass an den Ausgängen der Shift 
Register beim initialiseren keine ungewollten Werte stehen?

Würde mich sehr interessieren wie man das richtig macht.

: Bearbeitet durch User
von Bernie (Gast)


Lesenswert?

Im Datenblatt gibt es die Zeile:

shift register clear; parallel outputs in high-impedance OFF-state
dazu sind auch die Eingangsbedingungen genannt:
!MR = L
!OE = H
(das vorgestellte "!" soll den Negationsstrich ersetzen)

Das ist der einzig sinnvolle Start-Zustand, denn den Zustand,
dass alle Ausgänge sofort NULL sind, kann man nicht so einfach
bereitstellen.

Je nachdem, ob du die !MR-Eingänge (z.B. bei einem Soft-Reset)
nochmal brauchst, musst du dir überlegen, ob du sie mit einem
PullDown versiehst, oder mit einem RC-Glied, das ihn nur beim
Einschalten auf NULL zieht.

von Student T. (hberg)


Lesenswert?

Dann werde ich es genau so machen. Im STM Datenblatt war es nicht ganz 
so deutlich. Zusätzlich werde ich noch vor jedem Schreiben ins Register 
!MR toggeln bevor ich !OE aktiviere, damit sollte dann sichergestellt 
sein, dass keine Reste mehr im Shift Register liegen.
Zusätzlich noch Pullup für !OE und Pulldown für !MR und die Sache sollte 
funktionieren.

Danke!

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.