Forum: Mikrocontroller und Digitale Elektronik Schaltung mit 74HC595 Schieberegister


von Alex (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich wollte vor kurzem eine Schaltung mit den 74HC595 Schieberegistern 
aufbauen. Also habe ich mich etwas informiert und eine kleine Platine 
erstellt.
Leider funktioniert diese nicht und kann den Fehler nicht entdecken.
Evtl. kann mir jemand von euch helfen (übersehe ich nur eine 
Kleinigkeit?)

Im Anhang die Schaltung, der Arduinocode dazu sowie ein Bild der 
Platine.
Hier das Datenblatt der verwendeten Schieberegister
https://datasheet.lcsc.com/lcsc/2202252130_Shenzhen-Fuman-Elec-74HC595A_C110383.pdf

Den Attiny24 kann ich über einen Arduino programmieren allerdings 
leuchtet keine einzige LED.
Ich würde mich echt freuen, wenn mir jemand einen Tipp hat :)

Viele Grüße
Alex

von Wolfgang (Gast)


Lesenswert?

Alex schrieb:
> Im Anhang die Schaltung

Ich vermisse Abblockkondensatoren an den 74HC595

> Hier das Datenblatt der verwendeten Schieberegister
Da hört es bei mir auf, sorry

von Wolfgang (Gast)


Lesenswert?

p.s.
Warum verwendest du nicht das SPI vom ATtiny?

von D. T. (tuxiuser)


Lesenswert?

Alex schrieb:
> Ich würde mich echt freuen, wenn mir jemand einen Tipp hat :)

Hi,
wie schon erwähnt wurde, fehlen die Abblockkondensatoren.
Hast Du wirklich das IC von dem verlinkten DB verbaut?
Wen ja, warum hast Du PIN 10 und 13 angeschlossen?

Laut Google Translator bedeuten die PINs "floating".

Gruß
D.T.

von McMix (Gast)


Lesenswert?

Tausch mal A5 und A7

von Gerhard O. (gerhard_)


Lesenswert?

Das geht so nicht. Der HC595 braucht nach dem Einlesen der Daten einen 
positiven  (LHL) Übernahme Impuls am RCLK Pin-12. das ist der 
zugrundeliegende Fehler.

Dann suche Dir besser ein englischsprachiges Datenblatt. Mein Chinesisch 
ist nicht zu gut:-)

https://www.ti.com/lit/ds/symlink/sn74hc595.pdf?ts=1656755164079&ref_url=https%253A%252F%252Fwww.google.com%252F

Dann ist auch der "NC" Pin-13 befremdlich, weil der normalerweise bei 
westlichen Chips der "OE" Pin-13 ist, um die Ausgänge aktiv zu machen. 
Der ist allerdings dem Schaltbild nach richtig beschaltet.

Spass beiseite. Um den HC595 richtig zu steuern, muss das etwas geändert 
werden. Da fehlt ein viertes Steuersignal am RCLK Pin-12.

Die SPI Shift Clock muss an SCK. Das sind jeweils acht Taktimpulse für 
jeden HC595. Wenn Du alle sechs HC595 mit Daten beschickt hast, muß an 
die RCLK Pins ein LHL "Übernahme Impuls" ausgegeben werden um die soeben 
erhaltenen Daten im Eingangs Shift Register in die Ausgangsdatenregister 
zu übernehmen. Das ist deshalb notwendig, weil der HC595 doppelt 
gepuffert ist um Datenverschiebungen während des Einlesens zu vermeiden.

Dann sollte es funktionieren, insofern der zugehörige Code funktioniert. 
Den habe ich mir allerdings nicht näher angeschaut.

von Harald A. (embedded)


Lesenswert?

Mal wieder ein Fall, wo die Investition von 10€ in einen Logic Analyzer 
sinnvoll wäre. Ansonsten Ausgabe sehr stark verlangsamen und meinetwegen 
mit LEDs an den Leitungen schauen, ob alles erwartungsgemäß taktet.

von Gerhard O. (gerhard_)


Lesenswert?

Übrigens, mit einen MAX7219/7221 LED Driver könntest Du die ganzen HC595 
einsparen.
https://datasheets.maximintegrated.com/en/ds/MAX7219-MAX7221.pdf

von Harald A. (embedded)


Lesenswert?

Ob ihm ein MAX7219 jetzt soviel spart weiß ich nicht so recht. Layout 
wird ggf. anspruchsvoller und Multiplex muss man auch mögen.

von HildeK (Gast)


Lesenswert?

Gerhard O. schrieb:
> Dann ist auch der "NC" Pin-13 befremdlich, weil der normalerweise bei
> westlichen Chips der "OE" Pin-13 ist, um die Ausgänge aktiv zu machen.
> Der ist allerdings dem Schaltbild nach richtig beschaltet.
Ja, seltsam, so dürfte er sich nicht HC595 nennen.

> Spass beiseite. Um den HC595 richtig zu steuern, muss das etwas geändert
> werden. Da fehlt ein viertes Steuersignal am RCLK Pin-12.

Ich hätte jetzt (ohne pers. Erfahrung mit dem 595) gesagt, dass das 
soweit richtig ist. SER ist das serielle Eingangssignal, CLOCK ist der 
Schieberegistertakt und DATA ist der Übernahmepuls (RCLK) auf die 
Ausgänge.
Welches vierte Signal meinst du?
Ob jedoch die SW das richtig macht, habe ich nicht geprüft.
Auch Pin 10 (/MR) liegt auf HIGH. Müsste aus HW-Sicht gehen.

von HildeK (Gast)


Lesenswert?

HildeK schrieb:
> Müsste aus HW-Sicht gehen.

Nicht ganz - ich muss mich korrigieren und es wurde oben schon erwähnt: 
die fehlenden Blockkondensatoren an den HC595! Schließlich schalten 
mindestens 48 Flipflops gleichzeitig ...

von Alex (Gast)


Lesenswert?

Erstmal wow, vielen Dank für die ganzen Antworten :D

Wolfgang schrieb:
> Ich vermisse Abblockkondensatoren an den 74HC595
D. T. schrieb:
> wie schon erwähnt wurde, fehlen die Abblockkondensatoren.
HildeK schrieb:
> … die fehlenden Blockkondensatoren an den HC595!
Sind die Kondensatoren wirklich (zwingend) notwendig? Ist mir bei vielen 
Beispielschaltungen nicht aufgefallen.

D. T. schrieb:
> Wen ja, warum hast Du PIN 10 und 13 angeschlossen?
> Laut Google Translator bedeuten die PINs "floating".
Hab mich aus Unwissenheit einfach an die Beispielschaltungen gehalten 
und das übernommen. Werde morgen die Platine aber mal mit Lötkolben und 
Skalpell bearbeiten!

McMix schrieb:
> Tausch mal A5 und A7
Bringt leider nichts – habe inzwischen schon alle Kombinationen 
ausprobiert :D

Gerhard O. schrieb:
> Das geht so nicht. Der HC595 braucht nach dem Einlesen der Daten
> einen positiven  (LHL) Übernahme Impuls am RCLK Pin-12. das ist der 
zugrundeliegende Fehler.
> …
> Da fehlt ein viertes Steuersignal am RCLK Pin-12.
Also aktuell versuche ich mit den Pins 14  12  11 (+9) die 
Schieberegister zu steuern.
Wenn ich das richtig verstanden habe, wird das Schieberegister mit 
Daten- und Clocksignal gefüttert. Wenn man dann alle Ausgänge schreiben 
möchte, aktiviert man den Pin 12.

von Gerhard O. (gerhard_)


Lesenswert?

HildeK schrieb:
> Ich hätte jetzt (ohne pers. Erfahrung mit dem 595) gesagt, dass das
> soweit richtig ist. SER ist das serielle Eingangssignal, CLOCK ist der
> Schieberegistertakt und DATA ist der Übernahmepuls (RCLK) auf die
> Ausgänge.
> Welches vierte Signal meinst du?

Ich bezog mich auf das RCLK Signal als "Viertes" Signal. Also müssen 
alle PIN-12 zusammen an einen weiteren uC Pin gelegt werden und nach dem 
Beschreiben aller HC595, schickt man ein einmaliges Übernahme 
Taktsignal. So habe ich es immer bei mir gemacht. Fehlende etwaige 
Abblock_Cs sollten natürlich nicht fehlen.

: Bearbeitet durch User
von Wolfgang (Gast)


Lesenswert?

Alex schrieb:
> Bringt leider nichts – habe inzwischen schon alle Kombinationen
> ausprobiert :D

Blindes Probieren ist bei Elektronik oft nicht ratsam.
Guck dir die Signale an, die vom µC kommen und prüfe, ob das so 
aussieht, wie im Datenblatt des 74HC595.
Was hast du für Messmittel?
Besitzt du zum Programmieren eine IDE mit Simulator/Debugger?

Nochmal: Warum benutzt du nicht das USI des µC als SPI?

von Otto (Gast)


Lesenswert?

> Blindes Probieren ist bei Elektronik oft nicht ratsam.

Er muss es kombinatorisch durchpermutieren!
Dann bestehen 100%ige Erfolgsaussichten.

Noch schlauer waere ein Versuchaufbau auf einem Brotbrett gewesen.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Alex schrieb:
> Sind die Kondensatoren wirklich (zwingend) notwendig? Ist mir bei vielen
> Beispielschaltungen nicht aufgefallen.

Nö. Das schreiben alle Teilnehmer hier nur, weil sie Langeweile haben -- 
nicht.
Ja, sie sind zwingend nötig. Und vor allem bei Chips mit CMOS Ausgängen. 
Das liegt in der Natur der CMOS Endstufen begründet.

Mir ist bei solchen Dingen nicht klar, warum man nicht mal vorher auf 
einem Steckbrett so einen 595 durchtestet oder sich das Datenblatt von 
NXP anguckt, oder beides. Da wird schon mal eine Platine hergestellt und 
erst dann werden die Fehler entdeckt.

von Alex (Gast)


Lesenswert?

Wolfgang schrieb:
> Alex schrieb:
> Guck dir die Signale an, die vom µC kommen und prüfe, ob das so
> aussieht, wie im Datenblatt des 74HC595.
> Was hast du für Messmittel?
> Besitzt du zum Programmieren eine IDE mit Simulator/Debugger?
>
> Nochmal: Warum benutzt du nicht das USI des µC als SPI?

Aktuell nur ein etwas besseres Multimeter (Brymen BM869s).
Oszi etc. fehlt mir leider noch.

Ich verwende zum Programmieren die normale Arduino IDE (+einen Arduino 
Nano as ISP und den ATTinyCore).

Otto schrieb:
> Noch schlauer waere ein Versuchaufbau auf einem Brotbrett gewesen.
Matthias S. schrieb:
> Mir ist bei solchen Dingen nicht klar, warum man nicht mal vorher auf
> einem Steckbrett so einen 595 durchtestet oder sich das Datenblatt von
> NXP anguckt, oder beides.

Normalerweise mache ich das auch so. Allerdings hatte ich die Chips 
nicht zur Hand und dachte mir "was soll schon schief gehen :D"

Nochmal wegen den Kondensatoren:
Was für eine Größe/Typ würdet ihr mir da empfehlen. An welchen Pins?

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Alex schrieb:
> Was für eine Größe/Typ würdet ihr mir da empfehlen. An welchen Pins?

Pro Chip einen 100nF von VCC nach GND - und das dicht am IC.

: Bearbeitet durch User
von Alex (Gast)


Lesenswert?

Wolfgang schrieb:
> Nochmal: Warum benutzt du nicht das USI des µC als SPI?
Einfach bisher noch nie verwendet - d.h. gibt keinen speziellen Grund 
außer keine Erfahrung.

Matthias S. schrieb:
> Pro Chip einen 100nF von VCC nach GND - und das dicht am IC.
Dann probiere ich das als erstes!

von Wolfgang (Gast)


Lesenswert?

Alex schrieb:
> Aktuell nur ein etwas besseres Multimeter (Brymen BM869s).
> Oszi etc. fehlt mir leider noch.

Ein kleiner Logikanalysator kostet 1/20 von deinem DMM.
Vielleicht wäre das etwas für Weihnachten ;-)

von Nautilus (Gast)


Lesenswert?

Alex schrieb:
> Matthias S. schrieb:
>> Pro Chip einen 100nF von VCC nach GND - und das dicht am IC.
> Dann probiere ich das als erstes!

Die vergessliche Edelbastler aus den 80igern haben diesen Kondensator 
oben auf den Schaltkreis gesetzt und die Beinchen mit den GND und Ub 
Pins verbunden.

von Gerhard O. (gerhard_)


Lesenswert?

Alex,

mein Rat wäre, einen Arduino (Nano?) und Steckbrett mit einem HC595 
drauf zusammenzuschalten und dann diese Anordnung testen und 
Fehlersuchen bis das funktioniert.



Ich verwende bei mir z.B. diesen Code (Nicht Arduino Syntax):
#include <SPI.h>

void SPI_MasterInit()
{
  SPCR |= (1<<SPE)|(1<<MSTR);
  SPSR |= (1<<SPI2X);
}

// nicht vergessen PortPins als Ausgaenge zu setzen

// Sample Daten um bei jeden HC595 ein LED mehr einzuschalten
uint8_t HC595data[] = {0x01,0x03,0x07,0x0F, 0x1F, 0x3F};

void spi_drive_U2()
{
    SPDR = HC595data[0]; // Sende Daten nacheinander zu den HC595ern
    while(!(SPSR & (1<<SPIF))); // Warte bis Daten raus sind
    SPDR = HC595data[1]; // Sende Daten
    while(!(SPSR & (1<<SPIF))); // Warte bis Daten raus sind
    SPDR = HC595data[2]; // Sende Daten
    while(!(SPSR & (1<<SPIF))); // Warte bis Daten raus sind
    SPDR = HC595data[3]; // Sende Daten
    while(!(SPSR & (1<<SPIF))); // Warte bis Daten raus sind
    SPDR = HC595data[4]; // Sende Daten
    while(!(SPSR & (1<<SPIF))); // Warte bis Daten raus sind
    SPDR = HC595data[5]; // Sende Daten
    while(!(SPSR & (1<<SPIF))); // Warte bis Daten raus sind
    UPDATE_STROBE_HC595  // RCLK Impuls an PIN-12
}
// Geht auch als Loop zum Schreiben
UPDATE_STROBE_U2_U4 ist ein Macro: (Passe das an Deinen uC an)

#define UPDATE_STROBE_HC595   PORTB &= ~(1 << 2); \
                              delayMicroseconds(1);         \
                              PORTB |= (1 << 2);  \
                              delayMicroseconds(1);         \
                              PORTB &= ~(1 << 2);
// oder diesen Macro:
#define WAIT_SPI_SEND_COMPLETE  while(!(SPSR & (1<<SPIF)));

    SPDR = HC595data[0]; // Sende Daten nacheinander zu den HC595ern
    WAIT_SPI_SEND_COMPLETE // Warte bis Daten raus sind
...

: Bearbeitet durch User
von Wolfgang (Gast)


Angehängte Dateien:

Lesenswert?

Nautilus schrieb:
> Die vergessliche Edelbastler aus den 80igern haben diesen Kondensator
> oben auf den Schaltkreis gesetzt und die Beinchen mit den GND und Ub
> Pins verbunden.

Die richtigen Edelbastler haben einfach einen Sockel mit integriertem 
Kondensator auf der Leiterplatte bestückt - keine Bastelei.

von Wolfgang (Gast)


Lesenswert?

Gerhard O. schrieb:
> mein Rat wäre, einen Arduino (Nano?) und Steckbrett mit einem HC595
> drauf zusammenzuschalten und dann diese Anordnung testen und
> Fehlersuchen bis das funktioniert.

Ohne Messmittel ist das leichter gesagt als getan.
Da kann man sich allenfalls mit ein paar LEDs und super-slow Motion 
durchfummeln.

von Gerhard O. (gerhard_)


Lesenswert?

Wolfgang schrieb:
> Gerhard O. schrieb:
>> mein Rat wäre, einen Arduino (Nano?) und Steckbrett mit einem HC595
>> drauf zusammenzuschalten und dann diese Anordnung testen und
>> Fehlersuchen bis das funktioniert.
>
> Ohne Messmittel ist das leichter gesagt als getan.
> Da kann man sich allenfalls mit ein paar LEDs und super-slow Motion
> durchfummeln.

Das sehe ich nicht ganz so schwarz. In solchen Fällen ist es am Besten 
es zuerst mit bekannt, funktionierendem Code und HW auszuprobieren. 
Speziell bei AVR ist der Gebrauch der SPI HW nicht schwer. Und wenn man 
funktionierenden Code schon hat, dann funktioniert das schon mit etwas 
Glück ohne Messmittel. Es gibt ja auch Bibliotheken für Arduino und 
HC595. Mein einfaches Programmbeispiel von vorher stammt ja auch aus 
funktionierendem Code.

Es sind ja auch nur wenig Bedingungen zu erfüllen um den SPI Port 
benutzen zu können:

Benutzte Pins als Outputs setzen
SPI Control Register setzen um den SPI Port zu aktivieren

SPI Data Register schreiben
Wiederholt SPI-Flag Bits checken um zu warten bis alle Bits weggeschickt 
wurden.
Die nächsten Bytes so senden; wenn fertig:
Dann am Ende den Übernahme Taktpuls senden um die Daten an die Ausgänge 
der HC595 zu transferieren.

Hier die Arduino SPI Lib:
https://github.com/Simsso/ShiftRegister74HC595
https://github.com/Simsso/ShiftRegister74HC595/blob/master/examples/example/example.ino

Oder

https://timodenk.com/blog/shift-register-arduino-library/

https://learn.adafruit.com/adafruit-arduino-lesson-4-eight-leds/the-74hc595-shift-register

: Bearbeitet durch User
von Meinereiner (Gast)


Lesenswert?

Ist denn auf der Verbindung der Schieberegister eine Veränderung zu 
sehen?
Nimmt der Schaltkreise etwas Strom auf?
Es gibt ja immer mal wieder leere ICs.

von s.c.n.r. (Gast)


Lesenswert?

Meinereiner schrieb:
> Es gibt ja immer mal wieder leere ICs.

Es gibt auch immer mal Leute, denen der Himmel auf den Kopf fällt.
Shit happens - ist aber ausgesprochen selten und gefährdet den 
Fortbestand der Menschheit nicht wirklich.

von Meinereiner (Gast)


Lesenswert?

Wenn ich aus China nicht schon welche erhalten hätte, würde ich es mir 
auch kaum vorstellen, daß jemand diesen Aufwand betreibt. Das wird ja 
eigentlich schnell entdeckt. Auch in meinem Fall waren die Kommentare 
dann entsprechend.

von B. P. (skorpionx)


Angehängte Dateien:

Lesenswert?

Ich benutze 74HC595 in meinem Multiplexer. Das funktioniert.
Ich benutze zwar PIC aber trotzdem könnte vielleicht dir das
helfen.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

B. P. schrieb:
> Das funktioniert.

Gut, man könnte drüber streiten, ob der Power-On Reset reicht. 
Allerdings hast du nix kaskadiert, was einer der Knackpunkte in der 
Schaltung des TE ist.
Vor 20 Jahren hätte ich gesagt, nimm SAA1064 für die LEDs und fertig.

von B. P. (skorpionx)


Lesenswert?

Matthias S. schrieb:
> hast du nix kaskadiert

doch!

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

B. P. schrieb:
> Matthias S. schrieb:
>> hast du nix kaskadiert
>
> doch!

Ja, sorry, jetzt sehe ich es auch.

von Peter D. (peda)


Lesenswert?

McMix schrieb:
> Tausch mal A5 und A7

Daher sollte man im Schaltplan und in der Source die gleichen Namen 
verwenden.

von Wolfgang (Gast)


Lesenswert?

Matthias S. schrieb:
> Ja, sorry, jetzt sehe ich es auch.

Das kommt davon, wenn als Symbol diesen komischen Kästen verwendet 
werden, denen man man absolut nichts über die Funktion ansieht und deren 
Pinanordnung jeglicher funktional-logischen Anordnung entbehrt.

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.