Obgleich die Schaltung prinzipiell funktionieren dürfte: Warum eigentlich zwei Schieberegister? Eines reicht doch auch - oder sehe ich da was falsch?
Obgleich die Schaltung prinzipiell funktionieren dürfte: Warum eigentlich zwei Schieberegister? Eines reicht doch auch - oder sehe ich da was falsch?
Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?
Im Prinzip wird es so gehen, aber wirklich gut wird es nicht funktionieren.
1. Die Flackerfreiheit von einer Matrixansteuerung hängt von der Frequenz ab, mit der die einzelnen Zeilen / Spalten umgeschaltet werden.
Das dauert prinzipbedingt bei einem Schieberegister länger. Wenn Du also nicht gerade einen Portmangel an deiner Ansteuerschaltung hast, würde ich mir die Schieberegister sparen.
2. Du benutzt Schieberegister ohne Latch. Das bedeutet die Schiebevorgänge sind an den LED's als "glimmen" sichtbar.
3. - Gibt es für die Ansteuerung der Zeilen und Spalten Transistorarrays in IC Form wie z.B. den ULN2808 bzw. den UDN2981.
Eine Matrixschaltung sollte sich im Internet problemlos finden lassen. Guck doch mal wie die Kollegen das da gelöst haben.
Eine Matrixschaltung - aber ohne Transistoren - ist in der erprobten und weit verbreiteten PingPong-Platine realisiert´, die ich als Übung mit eigenem C-Programm angesteuert hatte und in neuerer Zeit als einfaches, helles Display verwende, das über uart-Telegramme angesteuert wird. Die Schaltung ist hier zu sehen - oder an vielen Orten im www, ebenso Code und Platine. Das Video von meinen Übungen... Eine Matrixschaltung sollte sich im Internet problemlos finden lassen. Guck doch mal wie die Kollegen das da gelöst haben.
......
zeigt, dass mit dem mega8 ohne Quarz eine gut flimmerfreie Darstellung mit den 120 Dioden (10 Zeilen, 12 Spalten) möglich ist. Dabei ist die Helligkeit so hoch, dass die Ausgangsleistung der Schieberegister keine Transistoren als Treiber benötigen. (Anm.: der Zappelphilip in der untersten Zeile ist (m)eine übliche Heartbeatanzeige).
Ciao sagt der JoeamBerg
Hallo,
eine 16x16er Matrix geht schon mit Schieberegistern auf Zeilen und Spalten. Ich habe es umgesetzt und sogar eine 10-Stufige PWM-Dimmung mit eingebracht. Der Code ist tricky, läuft aber komplett in IRQs auf einem AVR @ 20MHz. Das angezeigte Bit-Muster liegt im RAM und es sind mehrere "Bildschirme" realisierbar für einen flackerfreien Wechsel.
Die Wiederholrate meiner LED's ist 100 Hz, damit es nicht flackert. Die Schieberegister müssen aber auf jeden Fall ein Latch haben, sonst wird es nichts. Ich habe 74595 dafür genommen. Als Spaltentreiber bietet sich bei einer 16x16 Matrix zwei UDN2981 an. Da reicht der nötige Strom gerade noch so. Für die Zeilentransistoren (auf GND) habe ich dann 16x IRLML2502 genommen. Der Zeilenstrom ist bei einer Matrix wie dieser >5A. Das war der Knackpunkt. Und dann darf die Schaltung und Software keinen Fehler haben, sonst rauchts!Stichwort: Watchdog mit schnellem ausschalten aller LEDs direkt nach Programmstart. Hat mir beim entwickeln der Software schon das eine oder andere mal das stundenlange neulöten der LED-Matrix erspart.
Hier ein Link, bei dem man auch das fertige Projekt am Ende sieht:
https://www.roboternetz.de/community/threads/62392-Wieviel-Strom-kann-der-ULN2801-kurzzeitig-maximal
Viele Grüße
Andreas
Danke für die zahlreichen Antworten!
Das habe ich jetzt nicht ganz verstanden was du meinst. Die Ansteuerung ist doch recht simpel oder nicht? Will ich die LED in der 2ten Zeile und 4ten Spalte zum leuchten bringen, schalte ich die Transistoren Q2 und Q8?
Stimmt genau, es soll mal eine 10x11 Matrix werden.
Soweit ich Latches verstanden habe sind das Zwischenspeicher die immer den letzten State halten. Wenn ich Schieberegister mit Latches verwende, sollten somit Punkt 1 und Punkt 2 hinfällig werden. Danke für den Tipp mit den Transistorarrays!
Beim Googeln bin ich hauptsächlich nur auf NPN-Transistorarrays gestoßen(vorallem was 8Bit angeht), hat das einen bestimmten Grund?
Warum ist der Zeilenstrom ein anderer als der Spaltenstrom?
Was hat denn zu Rauchen begonnen? Die LEDs?(Wie kann das passieren?)
Wie genau meinst du das mit Watchdog? Mit ist der Begriff nur bekannt im Sinne eines "Wachhundes" der das System auf Fehler überprüft und entsprechend handelt. (Hätte zu Beginn des Programm einfach mal alle IOs mal standardmäßig mit LOW initialisiert.)
Witzig, denn ich bau die LED Matrix in genau so eine Uhr ein(Meine ist allerdings 10x11). Kann mich noch erinnern wie ich vor fast nem Jahr mal auf das Bild von deiner Uhr gestoßen bin.
Hast sicherheitstechnisch auf irrgendwelche Dinge geachtet oder eingebaut? Möchte nicht unbedingt dass die Uhr im Falle des Falles zu brennen beginnt.
Hallo Virtulex,
der Zeilenstrom ist so hoch, weil ja immer nur eine Zeile an ist. Das bedeutet 16 LEDs * 20mA = 320mA. Jetzt kommt aber noch dazu, dass die 16 Zeilen sich die Zeit teilen müssen. Um also die gleiche Helligkeit wie bei Dauerbetrieb der LEDs zu erreichen muss man den Strom der LED mit 16 Mulitplizieren und auch die Vorwiderstände entsprechend auslegen. 16 * 320mA = 5,12A! Bei mir waren die Vorwiderstände glaube ich 2,2 Ohm @ 5V. Es kommt aber auch auf deine verwendeten LEDs an. Die Daten zu meinen müsste ich bei Interesse rauskramen, wenn ich sie überhaupt noch finde.
Zu beachten ist beim Spaltentreiber, dass er den 16-fachen Strom auch liefern kann (320mA pro Spalte) Der von mir vorgeschlagene kann das. Die Zeilentreiber müssen dann entsprechend auch dimensioniert werden. Bei 5A kommen da eigentlich nur FETs in Frage. Damit sparst du dir auch den Vorwiderstand am Gate. Der müsste eh Richtung 10 Ohm sein, damit man die Ladung des Gates schnell genug umladen werden kann. Dann kann man ihn auch gleich ganz weglassen.
(100 Hz * 10 Stufen PWM * 16 Zeilen = 16kHz)
Zum Watchdog und der Sicherheit: Wenn dir die Software abstürzt oder ein anderer (logischer) Fehler vorliegt bleibt durch die Latches der Schieberegister eine LED dauerhaft an (320mA anstatt 20mA). Das macht sie nur ganz kurz mit und dann rauchts an der Stelle. Wenn du Pech hast eine ganze Zeile.
Ein Watchdog "resettet" den Controller automatisch, wenn er nicht regelmäßig in der Software zurück gesetzt wird. Damit kann man also einen Absturz erkennen und somit größere Gefahr für die LEDs vermeiden, indem man direkt beim Start des Programms (also nach dem Reset) erst mal alles abschaltet. Das zurücksetzen des Watchdog muss demnach an eine passende Stelle gesetzt werden. Ich empfehle für mehr Informationen die Datenblätter der AVR-Controller.
Ein Watchdog schützt dich aber nicht vor logischen Fehlern. Beim Prototyp ist es also empfehlenswert die Vorwiderstände der LEDs steckbar zu machen und erst mal so zu bestücken, dass eine LED maximal 20mA erhält. Das wird zwar nur schwach glimmen, spart aber eine Menge Arbeit und Frust. Wenn dann die Software stabil läuft kann man die Widerstände auf den tatsächlichen Strom umbauen.
Viele Grüße
Andreas
Lesezeichen