Problem mit Arduino-Nano und HCT595

Gast #6552900
Lesenswert?

Hallo,

ich habe ein seltsames Problem mit einem 74HCT595 (8-bit Schieberegister 
mit parallelem Ausgang), der von einem Arduino Nano angesteuert wird. 
Die Pins clk, strb, data und ~clr sind mit dem Arduino verbunden, ~oe 
liegt fest auf GND.
Der Arduino braucht nach dem Starten 1-2 Sekunden, bis die Pins als 
Ausgänge konfiguriert sind. In dieser Zeit macht der HCT595 seltsame 
Dinge: Er schaltet (fast immer) alle Ausgänge auf 1, was für die 
nachfolgende Schaltung ziemlich fatal ist.
Im Moment wird der Arduino noch von USB und die 595-Schaltung von einem 
Labornetzteil versorgt. Wird der Arduino zuerst eingeschaltet und die 
595-Schaltung einige Sekunden später, dann tritt das Problem mit dem 
High-Level an den Ausgängen nicht auf.
Folglich war meine Idee, dass der 595 diesen Unsinn macht, weil die 
Eingänge am Anfang noch floaten, bis sich  der Ardunio konfiguriert hat. 
Also habe ich alle Eingänge gepullt (~clr mit 10k gegen 5V, die anderen 
mit 10k gegen GND). Das hatte jedoch keinerlei Effekt.
Dieser Unsinn, dass der 595 alle Ausgänge auf 1 legt, ist mir vorher 
noch nicht begegnet. Und selbst wenn es so wäre: Warum tut er das nicht, 
wenn er nach Prozessor eingeschaltet wird, aber Pull-Widerstände 
keinen Effekt haben?
#6553058
Lesenswert?

Vancouver schrieb:
> Und selbst wenn es so wäre: Warum tut er das nicht,
> wenn er nach Prozessor eingeschaltet wird, aber Pull-Widerstände
> keinen Effekt haben?

Vermutlich werden durch Einkopplungen viele virtelle Taktpulse erzeugt. 
Wenn dann zufällig oder systematisch der Dateneingang auf HIGH liegt, 
wandern die alle ins Schieberegister.

Leg OE an den Arduino und pack einen externen Pull-Up dran. Dann beim 
Reset erst das Schieberegister mit 0 laden, speichern und dann erst OE 
auf Ausgang schalten und LOW ziehen.
Moderator (Firma: Titel) Persönliche Seite #6553238
Lesenswert?

Vancouver schrieb:
> Folglich war meine Idee, dass der 595 diesen Unsinn macht, weil die
> Eingänge am Anfang noch floaten
Tun sie das wirklich? Was sagt das Oszilloskop?

> Im Moment wird der Arduino noch von USB und die 595-Schaltung von einem
> Labornetzteil versorgt.
Die Masse der beiden ist aber schon verbunden?
Ich frage nur, weil diese ungemein wichtige Verbindung in deinem 
verbalen Schaltplan "Pins clk, strb, data und ~clr sind mit dem Arduino 
verbunden, ~oe liegt fest auf GND" nicht auftaucht...
Gast #6553286
Lesenswert?

Lothar M. schrieb:
> Tun sie das wirklich? Was sagt das Oszilloskop?

Das Oszi sagt nichts and dieser Stelle, insbesondere dann nicht, wenn 
die Pull-Widerstände drin sind. Aber ich muss das nochmal genauer 
anschauen. Vllt gibt es irgendwelche Spikes beim Einschalten, die ich 
noch nicht gesehen habe.
Und ja, die GND-Verbindung existiert natürlich, das hätte ich erwähnen 
sollen, sorry. Nachdem der HCT595 korrekt initialisiert ist, 
funktioniert die ganze Schaltung problemlos.

Vor einigen Jahren hatte ich mal ein ähnliches Design mit einem PIC 
statt Arduino. Da ist das Problem nicht aufgetreten, oder ich habe es 
nicht bemerkt, weil der PIC seine Ports schneller konfiguriert, da er 
sich nicht erst durch den Bootloader durcharbeiten muss.

Ich werde heute mal die Signale vom Arduino abklemmen und auf harte 
Logiklevel legen und schauen was beim Einschalten passiert, dann 
schrittweise immer größere Pull-Widerstände einbauen.

Die Lösung mit dem ~oe wäre ziemlich aufwändig, weil ich dann an den 
595-Ausgängen überall Pulldowns bräuchte und eine zusätzliche Leitung 
zum Controller, der aber keinen Pin mehr frei hat. Das wäre in 
komplettes Redesign.
Gast #6553288
Lesenswert?

Was ich mal noch fragen wollte: hat schon mal jemand beobachtet, dass 
der 595 alle Ausgänge auf high legt, bevor man ihn initialisiert? Ist 
dieses Verhalten normal? Im Datenblatt steht dazu nichts.
Gast #6553291
Lesenswert?

Hi,
>Die Lösung mit dem ~oe wäre ziemlich aufwändig, weil ich dann an den
>595-Ausgängen überall Pulldowns bräuchte und eine zusätzliche Leitung
>zum Controller, der aber keinen Pin mehr frei hat. Das wäre in
>komplettes Redesign.

und wie wäre es ~MR auf low zu halten?
Viel Erfolg, Uwe
Gast #6553294
Lesenswert?

Vancouver schrieb:
> Was ich mal noch fragen wollte: hat schon mal jemand beobachtet, dass
> der 595 alle Ausgänge auf high legt, bevor man ihn initialisiert? Ist
> dieses Verhalten normal? Im Datenblatt steht dazu nichts.

Der Punkt ist, dass der initiale Zustand nach dem Anlegen der 
Versorgungsspannung undefiniert ist. Also ja, deine Beobachtung fällt in 
den Bereich des normalen. Jeder beliebige Zustand ist normal.

Wenn dich das stört, musst du wie gesagt mit /OE und Widerständen an den 
Ausgängen arbeiten.

> und wie wäre es ~MR auf low zu halten?

oder das
#6553300
Lesenswert?

Vancouver schrieb:
> as ich mal noch fragen wollte: hat schon mal jemand beobachtet, dass
> der 595 alle Ausgänge auf high legt, bevor man ihn initialisiert? Ist
> dieses Verhalten normal?

Mehr oder weniger. Der Zustand der Ausgänge beim Einschalten ist 
ZUFÄLLIG! Das Ding hat keinerlei Power Up Reset oder so eingebaut. Der 
Reseteingang hilft hier auch nicht, denn der wirkt nur auf des 
Schieberegister, nicht auf das Ausgangsregister.
Gast #6553345
Lesenswert?

Im Datenblatt steht: "A HIGH on OE causes the outputs to assume a 
high-impedance OFF-state."

Ein Pull-Up Widerstand an diesem Signal würde während der Zeit der 
undefinierten Zustände, also kurz nach dem einschalten, die Ausgänge im 
Tri-State halten.

An den Ausgängen dieses ICs bzw. an den Eingängen Deiner Schaltung, 
benötigst Du je nach Fall Pull-Up- oder Pull-Down-Widerstände; das kommt 
auf deine Schaltung an, was Du an die Ausgänge dieses ICs angeschlossen 
hast.

Die PUs und/oder PDs halten die Leitungen auf definierten Pegeln, bis 
die Initialisierung des '595 abgeschlossen ist. Nach der 
Initialisierung, also wenn die Schaltung ganz normal läuft, 
überschreiben sozusagen die Push-Pull-Ausgänge des '595 dann die 
vordefinierten Pegel der PUs/PDs.
Gast #6553351
Lesenswert?

Du schriebst: "Die Lösung mit dem ~oe wäre ziemlich aufwändig, weil ich 
dann an den 595-Ausgängen überall Pulldowns bräuchte und eine 
zusätzliche Leitung
zum Controller, der aber keinen Pin mehr frei hat."

Dann benötigt die Schaltung ein Monoflop, das den OE-Eingang für die 
kurze Zeit der Initialisierung auf HIGH legt.

Evtl. ergeben sich auch noch weitere Möglichkeiten, wenn du uns zeigst, 
was du an den Ausgängen des '595 angeschlossen hast.
Gast #6553352
Lesenswert?

Mich würde es ja stören, wenn mein Mikrocontroller 1-2 Sekunden braucht, 
bis er mal dazu kommt, seine Peripherie zu initialisieren.

Die Pinfunktionen sind normalerweise das erste, was definiert wird.

Und wenn Du schreibst, dass es fatale Folgen für Deine Schaltung hat, 
wenn die Ausgänge des Schieberegisters zufällige Pegel haben, dann ist 
die zwingende Konsequenz, dass Du !OE ebenfalls mit Deinem 
Mikrocontroller verbindest und erst auf LOW ziehst, wenn Du ein 
Initial-Byte (z.b. 00000000) zu dem 74*595 übertragen hast. Bis dahin 
wird !OE über ein Pullup Widerstand auf HIGH gehalten, so dass keine 
zufälligen Ausgangspegel zustande kommen.

Erst dann bist Du im definierten Bereich.
#6553356
Lesenswert?

Falk B. schrieb:
> Der Zustand der Ausgänge beim Einschalten ist
> ZUFÄLLIG! Das Ding hat keinerlei Power Up Reset oder so eingebaut.

Exakt so ist es. Logik-ICs haben typisch kein POR und stehen deshalb 
beim Einschalten rein zufällig.
Deshalb zieht man beim 595 den /OE mittels Pullup auf tristate und setzt 
ihn erst auf low, nachdem man gültige Daten eingeschoben hat.
In tristate kann man dann die Ausgänge des 595 mittels Pulldowns auf low 
ziehen.
Gast #6553378
Lesenswert?

Lothar M. schrieb:
> Läuft zu diesem Zeitpunkt evtl. schon das Programm, das laufend gültige
> Daten rausschreibt.

Das ist normalerweise der Fall, aber ich habe die SW testweise so 
geändert, dass sie nur die Pins konfiguriert und auf einem definierten 
Level hält, sonst nichts. Also genau das gleiche, was PU/PD-Widerstände 
tun würden.
#6553393
Lesenswert?

Vancouver schrieb:
> Die Lösung mit dem ~oe wäre ziemlich aufwändig, weil ich dann an den
> 595-Ausgängen überall Pulldowns bräuchte und eine zusätzliche Leitung
> zum Controller, der aber keinen Pin mehr frei hat. Das wäre in
> komplettes Redesign.

Tja...

Vancouver schrieb:
> Was ich mal noch fragen wollte: hat schon mal jemand beobachtet, dass
> der 595 alle Ausgänge auf high legt, bevor man ihn initialisiert?

Der Zustand ist nicht definiert, daher gibt es MR und OE.
Einzig richtig ist es die Schaltung so auszulegen, das die Ausgänge in 
Ruhe via Pullup/-down im sicheren Zustand verleiben bis ein gültiges 
Datenwort geschrieben und via OE angelegt wird.

Vancouver schrieb:
> Da ist das Problem nicht aufgetreten, oder ich habe es
> nicht bemerkt, weil der PIC seine Ports schneller konfiguriert, da er
> sich nicht erst durch den Bootloader durcharbeiten muss.

Du hast im PIC keinen Bootlader benutzt und jetzt im AVR auch noch einen 
der sich lange Zeit lässt.
Programmiere den Chip mittels ISP und setze das SR direkt in den ersten 
Zeilen, dann geht es deutlich schneller.
Und/oder versuch Optiboot, der ist ein wenig schneller.
Gast #6553422
Lesenswert?

Du schriebst: "Das ist normalerweise der Fall, aber ich habe die SW 
testweise so geändert, dass sie nur die Pins konfiguriert und auf einem 
definierten
Level hält, sonst nichts. Also genau das gleiche, was PU/PD-Widerstände
tun würden."

Das ist leider nicht so. Während die PU/PD-Widerstände SOFORT 
funktionieren, ohne zeitliche Verzögerung, legt dein Arduino die Pegel 
erst nach ein, zwei Sekunden an. Nachdem der Bootloader durchlaufen 
wurde.

Genau dafür sind PU/PD-Widerstände zu berücksichtigen: Definierte 
Zustände dort zu haben, wo erst etwas später ICs ihre Arbeit aufnehmen.
Gast #6553467
Lesenswert?

Der müde Joe schrieb:
> Genau dafür sind PU/PD-Widerstände zu berücksichtigen: Definierte
> Zustände dort zu haben, wo erst etwas später ICs ihre Arbeit aufnehmen.

Genau richtig. Aber warum haben PU/PDs dann keinen Effekt, ein zuvor 
hochgefahrener Arduino hingegen schon?
Das ist ja genau das Rätsel. Wenn ich den 595 mit PU/PDs starte, sieht 
er definierte Pegel auf den Steuerleitungen und legt trotzdem alle 
Ausgänge auf High. Starte ich ihn mit einem bereits einige Sekunden 
zuvor gebooteten Arduino, so sieht er die gleichen definierten Pegel, 
aber alle Ausgänge sind auf 0.
#6553498
Lesenswert?

Vancouver schrieb:
> Genau richtig. Aber warum haben PU/PDs dann keinen Effekt,

Vermutlich weil sie falsch angeschlossen sind.

> ein zuvor
> hochgefahrener Arduino hingegen schon?

Was macht der? Hält der nur die Pegel konstant oder schreibt der 
periodisch 0x00 ins Register?

> Das ist ja genau das Rätsel. Wenn ich den 595 mit PU/PDs starte, sieht
> er definierte Pegel auf den Steuerleitungen und legt trotzdem alle
> Ausgänge auf High. Starte ich ihn mit einem bereits einige Sekunden
> zuvor gebooteten Arduino, so sieht er die gleichen definierten Pegel,
> aber alle Ausgänge sind auf 0.

Wie willst du denn dein 595 einzeln "starten"? Das braucht eine 
Versorgungsspannung. Die kann man nicht einfach abschalten, denn dann 
wird dein IC parasitär über die Eingangsschutzdioden versorgt.
Gast #6553515
Lesenswert?

Hi,
>von  Falk B. (falk)
>Stefan ⛄ F. schrieb:
>> und wie wäre es ~MR auf low zu halten?
>>
>> oder das

>Nö. Mal wieder so ein aus der Hüfte geschossener "Expertentip" . . .
Dein Tipp ist aber auch nicht so viel wert.
Ja, du hast recht.
Aber etwas weiter im DB zum 74HCT595 geschaut findet sich die Tabelle3
Schau doch mal nach Zeile 2.
Ich würde damit eine ganz einfache Lösung bauen( so mit C und R)
Viel Erfolg, Uwe
#6553541
Lesenswert?

Uwe schrieb:
>>Nö. Mal wieder so ein aus der Hüfte geschossener "Expertentip" . . .
> Dein Tipp ist aber auch nicht so viel wert.
> Ja, du hast recht.

Das reicht.

> Aber etwas weiter im DB zum 74HCT595 geschaut findet sich die Tabelle3
> Schau doch mal nach Zeile 2.

Es gibt nicht nur ein Datenblatt von dem IC, sondern viele verschiedene.
Was steht in DEINEM Datenblatt dort?
Gast #6553588
Lesenswert?

Falk B. schrieb:
> Vermutlich weil sie falsch angeschlossen sind.

Ich bin ziemlich sicher, dass sie richtig angeschlossen sind.

Falk B. schrieb:
> Was macht der? Hält der nur die Pegel konstant oder schreibt der
> periodisch 0x00 ins Register?

Er konfiguriert die Pins als outputs, schreibt eine 1 auf ~clr und 0 auf 
die anderen und tut dann nichts mehr, bis etwas über den CAN-Bus kommt 
(und da kommt aktuell nichts).

Falk B. schrieb:
> Wie willst du denn dein 595 einzeln "starten"? Das braucht eine
> Versorgungsspannung. Die kann man nicht einfach abschalten, denn dann
> wird dein IC parasitär über die Eingangsschutzdioden versorgt.

Wie oben beschrieben, hängt der 595 an einem Labornetzteil, das getrennt 
vom Arduino eingeschaltet werden kann. Wenn der 595 später als der 
Arduino eingeschaltet wird, verhält er sich so, wie ich es gerne hätte. 
Das mit der parasitären Versorgung muss ich mal genau untersuchen, das 
könnte gut sein.

Uwe schrieb:
> Ich würde damit eine ganz einfache Lösung bauen( so mit C und R)

Ja, das macht Sinn. Das RC-Glied wird die Signale etwas verschleifen, 
dass ich die Impulsebreite im normalen Betrieb vermutlich größer machen 
muss. Aber das ist kein Problem in diesem Fall.
Gast #6553613
Lesenswert?

Vancouver schrieb:
> Wenn ich den 595 mit PU/PDs starte, sieht
> er definierte Pegel auf den Steuerleitungen und legt trotzdem alle
> Ausgänge auf High.

Vermutlich weil zwischen dem Einschalten der Stromversorgung und dem 
ersten Taktimpuls Zeit vergeht.

Für genaueres brauchen wir mal deinen Schaltplan. Es ist nämlich nicht 
klar, welche Pegel die zahlreichen Eingänge nun initial haben.
Gast #6553621
Lesenswert?

Vancouver schrieb:
> Wie oben beschrieben, hängt der 595 an einem Labornetzteil, das getrennt
> vom Arduino eingeschaltet werden kann. Wenn der 595 später als der
> Arduino eingeschaltet wird, verhält er sich so, wie ich es gerne hätte.

Da hast du aber großes Glück. Denn eigentlich darf die Spannung an 
keinem seiner Eingänge höher sein, als die Versorgungsspannung. Wenn 
dein Netzteil ausgeschaltet ist, hast du aber diese Situation.
Gast #6553650
Lesenswert?

Vancouver schrieb:
> Wenn ich den 595 mit PU/PDs starte, sieht
> er definierte Pegel auf den Steuerleitungen und legt trotzdem alle
> Ausgänge auf High.

Ich glaube, Du hast das Problem mit der Initialisierung noch nicht ganz 
überblickt.

Die Steuerleitungen und Eingänge sind in erster Instanz gar nicht sooo 
wichtig. Es geht hier vielmehr um den Zustand der internen Latches. Und 
der ist undefiniert - ganz egal, was Du gerade an den Eingängen machst.
Um zu verhindern, dass diese undefinierten Zustände des Latches auf die 
Ausgänge des Schieberegisters gelangen, musst Du !OE auf HIGH halten.

Das ändert natürlich nichts an der Tatsache, dass auch die anderen 
Eingänge des Schieberegisters definierte Pegel haben sollten, aber das 
hat nicht zwangsläufig eine Auswirkung auf den Zustand der Ausgänge beim 
Einschalten.

Also:

1) Power On + !OE HIGH
2) Initiale Serielle Daten auf das SR schicken
3) Latch + !OE auf LOW

So "initialisiert" man ein Schieberegister.
Gast #6553658
Lesenswert?

Stefan ⛄ F. schrieb:
> Da hast du aber großes Glück. Denn eigentlich darf die Spannung an
> keinem seiner Eingänge höher sein, als die Versorgungsspannung. Wenn
> dein Netzteil ausgeschaltet ist, hast du aber diese Situation.

Ja, das ist nicht optimal, ist mir schon klar. War ja auch nur zum 
Experimentieren. Dummerweise macht die Schaltung damit, was sie machen 
soll.
Gast #6553660
Lesenswert?

Noch als Erweiterung zu der schon sehr guten Klarstellung von Summi:

Es ist deine Aufgabe den IC so zu betreiben, dass er im spezifizierten 
Bereich läuft. (Bezogen auf die Pegel vom Arduino obwohl der HCT595 vom 
Labornetzteil noch nicht gespeißt wird.)

Natürlich zeigt der IC auch ein Verhalten außerhalb seiner 
Spezifikationen, jeder IC verhält sich da irgendwie und oft genug kommt 
auch kein Rauch raus. Aber das Verhalten kann sich von IC zu IC 
verändern und auch der gleiche IC kann sich je nach Temperatur, Lust und 
Laune unterschiedlich verhalten.

In diesem Fall ist zusätzlich noch der Zustand der internen Latches 
spezifiziert undefiniert. Es gibt sicher Wege da irgendwie, im Rahmen 
der Statistik, Einfluss zu nehmen - scheinbar hast du so einen Weg 
gefunden. Um herauszufinden, wieso das so einen Einfluss hat, bräuchte 
man die exakte Schaltung von dem Ding.

Drauf verlassen kannst du dich natürlich trotzdem nicht.

Also mach es richtig.
Gast #6553674
Lesenswert?

>> Da hast du aber großes Glück. Denn eigentlich darf die Spannung an
>> keinem seiner Eingänge höher sein, als die Versorgungsspannung. Wenn
>> dein Netzteil ausgeschaltet ist, hast du aber diese Situation.
> Ja, das ist nicht optimal, ist mir schon klar.
Würde ich mal als Design-Fehler bezeichnen (auch wenn's nur eine 
Experimentierschaltung ist)
Gast #6553729
Lesenswert?

Johannes schrieb:
> Es gibt sicher Wege da irgendwie, im Rahmen
> der Statistik, Einfluss zu nehmen

Ja, da hast du vermutlich recht. Durch irgendwas werden alle Bits 
manchmal zu Null, so wie ich es gerne hätte, aber man kann sich 
natürlich nicht darauf verlassen.

Ich denke es wird darauf hinauslaufen, entweder den Bootloader so 
umzubauen, dass er den 595 sofort resettet, oder ich versuche das mit 
RC-Gliedern zu erreichen. Die sauberste Lösung mit gesteuertem ~oe wird 
aufwändig wegen der zusätzlichen Pull-Widerstände.

Nun, mal sehen was daraus wird. Danke jedenfalls für eure Hinweise, das 
hat mir sehr geholfen!
Gast #6553845
Lesenswert?

Falk B. schrieb:
> Siehe Pegelwandler. Miss einfach mal die Versorgungsspannung am 595
> wenn dessen Versorgung ausgeschaltet ist.

Das habe ich vor, allerdings hängen da noch andere Lasten an der 
5V-Domain. Ich schätze da wird nicht viel Spannung übrig bleiben. Aber 
das getrennte Einschalten von Arduino und HCT595 ist wohl so oder so 
keine gute Idee.
Gast #6554005
Lesenswert?

Ich möchte nochmal auf diesen Vorschlag zurück kommen, den Falk leider 
ohne Begründung abgelehnt hat:

Uwe schrieb:
> und wie wäre es ~MR auf low zu halten?

Wenn ich initial mittels Pull-Widerstände folgenden Zustand herstelle, 
müssten die Ausgänge initial alle auf Low sein, denke ich:

/MR = LOW
STCP = HIGH
/OE = LOW

Damit kann man sich die vielen Widerstände an den Ausgängen sparen.

Falls da jetzt wieder ein "nein" kommt, dann bitte mit Begründung und 
ohne persönliche Angriffe.

https://assets.nexperia.com/documents/data-sheet/74HC_HCT595.pdf
Angehängte Dateien:
Gast #6554043
Lesenswert?

Stefan ⛄ F. schrieb:
> Wenn ich initial mittels Pull-Widerstände folgenden Zustand herstelle,
> müssten die Ausgänge initial alle auf Low sein, denke ich:

Laut Datenblatt ist STCP ein echtes Clock-Signal, d.h. die Daten aus dem 
Schieberegister werden mit einer aktiven Flanke in das Ausgangsregister 
übernommen. Wenn nun alle Signale gleichzeitig die von dir beschriebenen 
Werte annehmen (beim Einschalten), dann wird das Schieberegister 
gleichzeitig gelöscht und ins Ausgangsregister übertragen. Die Frage 
ist, ob das zuverlässig für alle Bits funktioniert. Wäre STCP ein 
Latch-Enable, dann wäre es kein Problem, aber wie gesagt, des Datenblatt 
verlangt hier eine steigende Flanke. Diese könnte man etwas verzögert 
mit einem RC-Glied erzeugen, wie schon vorgeschlagen wurde.
Gast #6554056
Lesenswert?

Vancouver schrieb:
> Ich denke es wird darauf hinauslaufen, entweder den Bootloader so
> umzubauen, dass er den 595 sofort resettet, oder ich versuche das mit
> RC-Gliedern zu erreichen. Die sauberste Lösung mit gesteuertem ~oe wird
> aufwändig wegen der zusätzlichen Pull-Widerstände.

Es gibt beim uC kein 'sofort'. Die GPIO Pins verbleiben im 
High-Impedance Zustand solange die Resetsequenz noch nicht abgeschlossen 
ist. Das bedeutet die Spannung muss einen gewissen Level erreicht haben, 
und der Taktgenerator muss angeschwungen sein. Das kann je nachdem wie 
das Powersupply hochkommt und wie die Taktfrequenz gewählt ist, von ein 
paar Mikrosekunden bis Millisekunden dauern. In dieser Zeit, noch bevor 
der Bootloader läuft, macht der 595 was er will. Ob das für deine 
angeschlossene Hardware kritisch ist, musst du beurteilen.

Vancouver schrieb:
> ich habe ein seltsames Problem mit einem 74HCT595 (8-bit Schieberegister
> mit parallelem Ausgang), der von einem Arduino Nano angesteuert wird.
> Die Pins clk, strb, data und ~clr sind mit dem Arduino verbunden, ~oe
> liegt fest auf GND.

Wenn ~OE immer auf GND liegt, benötigst du die Tri-State Fähigkeit ja 
nicht. Weshalb nimmst du dann nicht ein 74HCT594, das hat keine 
Tri-State Ausgänge, dafür aber zwei Reset-Eingänge, die Shift und 
Storage Register definiert zurücksetzen. Wenn du diese beiden Eingänge 
(~SHR und ~STR) zusammenhängst, über einen Pull-Down auf GND legst und 
mit deinem '~clr' des Arduino verbindest, dann bleiben die Ausgänge 
solange auf Low bis der Arduino den '~clr' auf High setzt.
Gast #6554238
Lesenswert?

Kuno schrieb:
> Weshalb nimmst du dann nicht ein 74HCT594

Verflucht... der wäre wesentlich besser gewesen. Vor allem, weil beide 
Reset-Inputs Level-getriggert sind und keine Flanke benötigen.
Bis auf den zusätzlichen Reset ist der sogar pinkompatibel. Mit einer 
durchtrennten Leiterbahn und einer Brücke zwischen den beiden Resets 
wäre mein Problem gelöst.

Ein großes Danke für diesen Tip.

Notiz an mich selbst (frei nach Schiller): Drum prüfe, wer den Stein 
verlöte, ob sich nicht was bessres böte.
Gast #6554554
Lesenswert?

Hi,
Ok, 594 wäre die eindeutig bessere Variante, aber
MR mit 10K gegen GND
und STCP mit 470p gegen GND und 47K nach 5P wäre doch einfach mal einen 
Versuch wert.
Könnte mir gut vorstellen das damit ein vernünftiges Reset erzeugt wird.
Das sind 5 Lötpunkte. Ist denn das so schwer?

Viel Erfolg, Uwe
#6554587
Lesenswert?

Stefan ⛄ F. schrieb:
> Komisch, der 74HC594 kann man bei Reichelt und Conrad nicht kaufen. TME
> hat ihn aber. Die deutschen Händler kann man immer mehr in die Pfeife
> rauchen.
>
> Bei Amazon bekommt man auch nur den 595er.

Vermutlich einer der Gründe, warum sich der für die meisten Anwendungen 
besser geeignete 594 NICHT etabliert hat und sie alle Welt mit dem 
Resetproblem rumplagt. 8-0

Digikey hat das Zeug tonnenweise in allen Gehäusetypen.
Gast #6554723
Lesenswert?

Uwe schrieb:
> Könnte mir gut vorstellen das damit ein vernünftiges Reset erzeugt wird.
> Das sind 5 Lötpunkte. Ist denn das so schwer?

Nichts ist daran schwer. Das werde ich auch testweise machen. Wenn es 
klappt, bleibt es so. Der 594 wäre die Alternative. Aber bei einem neuen 
Design würde ich gleich den 594 nehmen. In der Bucht findet man den 
übrigens recht häufig.
Gast #6554850
Lesenswert?

Vancouver schrieb:
> Uwe schrieb:
>> Könnte mir gut vorstellen das damit ein vernünftiges Reset erzeugt wird.
>> Das sind 5 Lötpunkte. Ist denn das so schwer?
>
> Nichts ist daran schwer. Das werde ich auch testweise machen. Wenn es
> klappt, bleibt es so. Der 594 wäre die Alternative. Aber bei einem neuen
> Design würde ich gleich den 594 nehmen. In der Bucht findet man den
> übrigens recht häufig.

Euch beiden ist aber hoffentlich klar, daß die schnellen Bausteine der 
74HCT Serie gewissen Ansprüche an die Flankensteilheit der 
Eingangssignale stellen. TI gibt 500 nsec als Maximum an, und der 
Vorschlag von Uwe liegt da weit darüber. Ob das dann bei 
unterschiedlichen Randbedingungen noch zuverlässig funktioniert ist mehr 
als fraglich. Der C verlangsamt das Signal übrigens immer, auch wenn es 
dann später vom uC geschaltet wird.

Ich schließe mich der Meinung von Falk an, das ist ein schlechter 
Workaround der vielleicht funktioniert, aber eigentlich ist es Murks.
Gast #6554863
Lesenswert?

Uwe schrieb:
> Hi,
> Ok, 594 wäre die eindeutig bessere Variante, aber
> MR mit 10K gegen GND
> und STCP mit 470p gegen GND und 47K nach 5P wäre doch einfach mal einen
> Versuch wert.
> Könnte mir gut vorstellen das damit ein vernünftiges Reset erzeugt wird.
> Das sind 5 Lötpunkte. Ist denn das so schwer?
>
> Viel Erfolg, Uwe

Ohne jetzt nachgerechnet zu haben, aber im TI Dabla 
(https://www.ti.com/lit/ds/symlink/sn74hc595.pdf) steht z.B. drinnen, 
dass die Input Transition Time für 4.5V unter 500ns liegen muss/sollte.

Es sind ein paar Seiteneffekte aufgelistet die auftreten, wenn man es 
nicht einhält, z.B. der hier:

> If this device is used in the threshold region(from VILmax = 0.5 V to VIHmin = 
1.5 V), there is a potential to go into the
> wrong state from induced grounding, causing double clocking.

Bleibt aber alles recht vage.

Vermutlich hat kein Hersteller die Seiteneffekte vollständig 
dokumentiert weil sie normalerweise auch niemanden interessieren. 
Sicherheitshalber sollte man die RC Mimik aber mit einem Schmitt-Trigger 
Buffer ala 7014 entkoppeln, sonst ist man halt wieder außerhalb der 
Spezifikationen.
Gast #6554913
Lesenswert?

Hi,
>unter 500ns liegen muss/sollte
ok, die 470p waren auch nur aus dem Bauch raus, 160 oder 220p kann man 
ja auch testen.
Übrigens so ungewöhnlich ist das mit der RC Kombi garnicht. Geht mal 10 
bis 15 Jahre zurück, da war sowas recht oft zu finden, auch in der 
Industrie.

Viel Erfolg, uwe
Gast #6554962
Lesenswert?

Uwe schrieb:
> ok, die 470p waren auch nur aus dem Bauch raus, 160 oder 220p kann man
> ja auch testen.

Gehst du dabei davon aus, dass die Versorgungsspannung schlagartig von 
Null auf 5V springt? Falls nicht, fehlt mir gerade die Vorstellungskraft 
wie das funktionieren könnte.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren