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.
Übrigens, mit einen MAX7219/7221 LED Driver könntest Du die ganzen HC595 einsparen. https://datasheets.maximintegrated.com/en/ds/MAX7219-MAX7221.pdf
Ob ihm ein MAX7219 jetzt soviel spart weiß ich nicht so recht. Layout wird ggf. anspruchsvoller und Multiplex muss man auch mögen.
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 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.
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
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?
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
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 ...
:
Bearbeitet durch User
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/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
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.
Ich benutze 74HC595 in meinem Multiplexer. Das funktioniert. Ich benutze zwar PIC aber trotzdem könnte vielleicht dir das helfen.
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.
B. P. schrieb: > Matthias S. schrieb: >> hast du nix kaskadiert > > doch! Ja, sorry, jetzt sehe ich es auch.
McMix schrieb: > Tausch mal A5 und A7 Daher sollte man im Schaltplan und in der Source die gleichen Namen verwenden.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.