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
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
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.
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.
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.
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.
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 ...
Erstmal wow, vielen Dank für die ganzen Antworten :D
Wolfgang schrieb:> Ich vermisse Abblockkondensatoren an den 74HC595D. 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.
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.
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?
> 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.
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.
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?
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!
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 ;-)
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.
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
...
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.
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.
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/ShiftRegister74HC595https://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
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.
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.
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.
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.
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.