PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LED Matrix Schaltung



Virtuelx
29.11.2014, 23:12
Hallo,

habe bisher nur sehr wenige und nur sehr kleine Schaltungen entworfen und habe ein paar Fragen.
Die beiden ICs sind Schieberegister, links PNP- und unten NPN-Transistoren. Ausgelegt ist die Schaltung noch nicht, da es nur eine Prinzipschaltung sein soll.

Stimmt der Aufbau der Schaltung prinzipiell? Wird sie so funktionieren?
Ist die Anordnung von PNP/NPN Transistoren korrekt?
Macht es einen Unterschied ob ich die Widerstände vor bzw. nach den LEDs schalte?
Habe die Schaltung in EAGLE gemacht, gibt es eine Möglichkeit die Schaltung in ein Board Design zu importieren?
Welche andere Software ist für das Leiterplattendesign empfehlenswert?

Danke und LG

29423

Peter(TOO)
29.11.2014, 23:27
Hallo,

Im Prinzip stimmt es, aber:
1. Zwischen IC-Ausgang und Basis der Transistoren braucht es noch einen Widerstand!

2. Bei der Ansteuerung ist immer nur einer der Transistoren Q5 bis Q8 leitend, Q1 bis Q4 sind je nachdem geschalten. So wie es jetzt ist, klappts auch mit den Widerständen.
Wenn du die Widerstände in die Kollektoren von Q5 bis Q8 verlegst, musst du anders ansteuern! Dann ist immer nur einer der Transistoren Q1 bis Q4 leitend und Q5 bis Q8 je nach den Daten.

MfG Peter(TOO)

RoboHolIC
30.11.2014, 01:03
Obgleich die Schaltung prinzipiell funktionieren dürfte: Warum eigentlich zwei Schieberegister? Eines reicht doch auch - oder sehe ich da was falsch?

Peter(TOO)
30.11.2014, 05:25
Hallo,

Warum eigentlich zwei Schieberegister? Eines reicht doch auch - oder sehe ich da was falsch?

Die Frage war, ob das so im Prinzip funktioniert.
Vielleicht soll es mal eine 8x8 Matrix werden, oder was noch grösseres.
Und bevor man eine 16x16 Matrix zeichnet und dann alles falsch ist ....

MfG Peter(TOO)

wkrug
30.11.2014, 08:30
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.

oberallgeier
30.11.2014, 09:04
... 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 (https://www.roboternetz.de/community/threads/52279-LEDschaltung-im-PingPong?p=504411&viewfull=1#post504411) angesteuert hatte und in neuerer Zeit als einfaches, helles Display (https://www.roboternetz.de/community/threads/52279-LEDschaltung-im-PingPong?p=597551&viewfull=1#post597551) verwende, das über uart-Telegramme angesteuert wird. Die Schaltung ist hier zu sehen (http://www.elo-web.de/ximage/0910pingpong22.jpg) - oder an vielen Orten im www, ebenso Code und Platine. Das Video von meinen Übungen

......
http://www.youtube.com/watch?feature=player_embedded&v=k9iWDk0qdcY

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).

Bumbum
30.11.2014, 10:43
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 (https://www.roboternetz.de/community/threads/62392-Wieviel-Strom-kann-der-ULN2801-kurzzeitig-maximal)

Viele Grüße
Andreas

Virtuelx
30.11.2014, 11:29
Danke für die zahlreichen Antworten!



2. Bei der Ansteuerung ist immer nur einer der Transistoren Q5 bis Q8 leitend, Q1 bis Q4 sind je nachdem geschalten. So wie es jetzt ist, klappts auch mit den Widerständen.
Wenn du die Widerstände in die Kollektoren von Q5 bis Q8 verlegst, musst du anders ansteuern! Dann ist immer nur einer der Transistoren Q1 bis Q4 leitend und Q5 bis Q8 je nach den Daten.

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?



Vielleicht soll es mal eine 8x8 Matrix werden, oder was noch grösseres.
Und bevor man eine 16x16 Matrix zeichnet und dann alles falsch ist ....
Stimmt genau, es soll mal eine 10x11 Matrix werden.



Im Prinzip wird es so gehen, aber wirklich gut wird es nicht funktionieren ... sind an den LED's als "glimmen" sichtbar.

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?


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.
Warum ist der Zeilenstrom ein anderer als der Spaltenstrom? :confused:
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.)


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 (https://www.roboternetz.de/community/threads/62392-Wieviel-Strom-kann-der-ULN2801-kurzzeitig-maximal)
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.

Bumbum
30.11.2014, 12:35
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

wkrug
30.11.2014, 18:57
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?
Mit den Latches bekommst Du nur das " Glimmen " in den Griff.
Für eine Zeilenweiterschaltung brauchst Du nur eine einmal eingeschobene 1 mit einem Clock Signal um eins weiterschieben.
Für die Spalten müssen alle Bits für die entsprechende Zeile in das Schieberegister eingeschoben werden.
Also 8 ( bzw. wie viele Stellen Du da haben willst ) Clock Signale.
Und das geht auch langsamer, als wenn ein Controller nur einen Port mit 8 Bits Umschalten muss.
Man kann für die Schiebefunktion natürlich auch Hardware vom Controller verwenden Stichwort SPI.

Ich würde als Zeilen oder Spaltensignal das verwenden, das weniger Bits hat. Das verlängert die Brennzeit der einzelnen LED's
Bei 8 Zeilen und 16 Spalten also die 8 Zeilen. Die Widerstände sollten dabei sinnigerweise in die Spalten rein.


Zeilenstrom ist so hoch, weil ja immer nur eine Zeile an ist. Das bedeutet 16 LEDs * 20mA = 320mA
Das würde ich so nicht unterschreiben.
Erstens gibt es für jede LED einen zulässigen Maximalstrom, der nicht Überschritten werden darf.
Zweitens treten auch noch physiologische Effekte auf, die eine mit Überstrom geschaltete LED heller erscheinen lassen.


Beim Googeln bin ich hauptsächlich nur auf NPN-Transistorarrays gestoßen(vorallem was 8Bit angeht), hat das einen bestimmten Grund?
Ich denk mal, das diese Array's zu einer Zeit entwickelt wurden, als 8 bittige Controller " normal " waren. Zudem kann so ein Gehäuse nicht ohne Ende Verlustwärme abführen. Der ULN2003 hat auch nur 7 NPN Darlington-Transistoren.
Der angegebene UDN2981 ist, soweit ich weiss, eines der wenigen PNP - Arrays.
Ein weiterer Vorteil der IC's ist, das man damit keine Vorwiderstände braucht, weil die schon im Array mit drin sind.
Ein großer Nachteil dieser Array's ist eine doch recht hohe U-ce Spannung, die immer höher liegt als bei einem FET.

Vorschlag:
Lass das Ganze gesagte erstmal sacken, Guck Dir ein paar fertige Schaltungen an und rühr Dich wieder, wenn's konkrete Probleme gibt.

Peter(TOO)
01.12.2014, 05:28
Hallo,

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?


Und wenn die LEDs in der 2ten und 3ten Zeile der 4ten Spalte gleichzeitig leuchten sollen?

MfG Petr(TOO)