LED - Matrix, erweiterbar

  • Hallo liebe Community,


    ich habe mir vor ein paar Wochen meinen Arduino Uno R3 gekauft und angenfangen mich mit MikroControllern mal grundsätzlich auseinander zu setzen.
    Leichte Schaltungen habe ich aufgebaut und programmiert. Schieberegister 595 wurde verstanden.


    Jetzt möchte ich mich gerne an eine LED - Matrix begeben.
    Ich habe heute eine Schaltung auf einem Breadboard testweise aufgebaut (Ohne 74HC595) mit 4 Spalten und 3 Reihen und habe Reihen-Multiplexing verwendet.
    Jetzt möchte ich das ganze gerne mal richtig aufbauen (Lochrasterplatine).
    Die benötigten Komponenten muss ich mir noch suchen und ausrechnen, dass sie auch zusammen passen.


    Ich habe aber ein paar Fragen:


    1. Wie kann ich die Helligkeit bei den LEDs bei Multiplexing erhöhen? Geht das mit geringerem Vorwiederstand?
    2. Gibt es eine Möglichkeit LEDs über den Arduino zu dimmen (Auch im Multiplexing-Betrieb). Hintergrund ist, dass die LEDs Tagsüber heller scheinen sollen als Nachts.
    3. Wie sieht es mit der Erweiterbarkeit von LED-Matritzen aus?


    [Blockierte Grafik: http://i57.tinypic.com/vdz5vq.jpg]


    Könnte ich unten die 5 Pins einfach an das nächste Schieberegister führen und so weitere 8 Spalten ansprechen (Mit entsprechender Arduino Programmierung)? Sollte doch theoretisch funktionieren oder? :D


    So viele Fragen und ich hoffe auf eure Hilfe.

  • Prinzipiell kannst du die Helligkeit über einen geringeren Vorwiderstand erhöhen - pass halt auf, dass du innerhalb der Spezifikation bleibt. Häufig vertragen die LEDs den doppelten Strom problemlos, wenn du sie nur <=1/4 der Zeit belastest, was ja bei dir der Fall ist. Wenn du die Frequenz der Ansteuerung erhöhst, kann da auch noch mehr gehen (je geringer die Frequenz ist, desto länger ist die LED ja am Stück an und desto schlechter kann die Wärme entweichen)



    Die ganze Geschichte müsstest du dimmen können, indem du ein PWM-Signal an OE anlegst - sei damit aber vorsichtig, das muss recht schnell sein, damit du nicht eine Dunkelzeit zwischenrein bekommst, die eventuell einen ganzen Multiplex-Vorgang ausblendet.


    Eine schöne Seite zu dem Thema ist hier: http://www.mikrocontroller.net…Tutorial:_Schieberegister - dort wird auch das Thema der Kaskadierung behandelt (ist deinem 5-Pin-Ansatz vor zu ziehen)

  • Schonmal vielen Dank für deine Antwort.


    PWM muss ich mir dann mal ansehen. Habe ich ehrlich gesagt keine Ahnung von.


    In dem Artikel finde ich etwas, wie ich schneller ansteuern kann (Stichwort SPI - Modul, wovon ich auch keine Ahnung habe) und die Kaskadierung ist ja im Prinzip wie bei mir. Nur dass meine 5 Pins später auf eine neue 8x8 Matrix geführt werden und darüber an die ICs angeschlossen werden.


    Ich würde es halt gerne so haben, dass ich X - Matritzen noch dahinter oder darunter hängen kann.
    Sprich, statt einer 8x8 LED - Matrix verwende ich vier 8x8 Matritzen die 2 x 2 angeordnet sind.
    Das gebe ich der Software als Parameter mit und die Anzeige wird vergrößert dargestellt.
    Die Fragen die sich hier stellen sind:
    1. Wieviele ICs kann ich mit dem Arduino Uno R3 Seriell hintereinander schalten, ohne dass das Multiplexing sichtbar wird und
    2. Wenn ich mehr Reihen multiplexe muss ich die Pulsströme ja entsprechend hoch wählen da sie, ausgehend von der Prozessor-Leistung ja immer seltener angeschaltet werden.


    Die Programmierung hierfür bekomme ich schon hin. Probleme gibt es bei mir was Elektrotechnik betrifft. :D


    Also Ziel ist ist es die Matrix nach und nach auf 200 x 64 zu erhöhen. LED Abstand soll ca 10mm sein.
    Das ganze soll an einer kompletten Wand später in meinem Zimmer laufen. :D


    Deshalb frage ich wie weit man das Kaskadieren kann ;)
    Das wären also 100 x 8x8 Matritzen und jede davon hat 2 IC... Sprich 200 Schieberegister in Reihe... :D


    Ich weiss ich bin verrückt aber a) ist es ein Projekt für mein Zimmer und viel wichtiger b) um etwas zu lernen.
    Bin halt jemand der lernen und lernen und lernen will :D

  • Je nachdem wie du das ganze programmierst, kannst du auch 2 Datenleitungen aus dem Arduino raus schicken, dann musst du nicht so viel seriell arbeiten (prinzipiell doppelte Geschwindigkeit) - musst aber aufpassen, dass die auch tatsächlich atomar abgearbeitet werden, damit sie innerhalb der selben Signalzeit umgeschaltet werden.


    Irgendwann gibt es eine natürliche Grenze der Ströme - ich persönlich würde nicht viel weiter als auf den doppelten Strom gehen - 3fach eventuell (bei entsprechend hoher Frequenz), 4fach auf keinen Fall. Das ganze wird aber schwierig zu dimensionieren, weil du recht schnell in Bereiche kommst, wo 0,1V mehr mal kurz eine Verdoppelung des Stroms bewirken - und weil du das nicht messen kannst, weil sie dazu zu lange an sind und verrecken.

  • Dimmen per PWM funktioniert beim 595 - jedenfalls bei statischem Betrieb problemlos. Beim Multiplexen kann es sein, das du irgendein Timerregister manipulieren mußt, was wiederum "Nebenwirkungen" haben kann, auf andere Libs, die diesen Timer verwenden.
    Die Uhr in meinem Avatrar ist mit 6x 595 realisiert und dimmt. Die Segmente sind mit LED-Stripes realisiert. Das Ganze ist auf einem schwarzen Regalboden aufgebaut. Es ging ziemlich genau eine 5m Rolle drauf.
    Viel mehr als X x 8 ist als Matrix nicht sinnvoll, da ein Taktverhältnis über 1:8 sonst kritisch wird. Der Strom für die Pulse kann nicht ins Endlose erhöht werden. Bei 50 mA ist laut Datenblatt meist Schluss. Es sei denn, du hast sehr helle Exemplare und keine LED's, die technischer Stand vor 20 Jahren sind. Das ist aber eher bei Einzel-LED's, vorzugsweise SMD der Fall und weniger bei fertigen Segment oder Matrixanzeigen. Es gibt auch noch IC's vom Typ TPIC6x595 x steht für verschiedene Suffixe und Ströme. Ansonsten normale 595 und dann 1x die Anoden und 1x die Katoden mit npn und pnp oder p und n FETs schalten, um die Ströme handhaben zu können.
    Guck dir mal den MAX7219 an. Der kann eine 8x8 Matrix, also 64 LEDs ansteuern. Den kannst du auch kaskadieren. Den MAX7219 gibt es sowohl als IC, als auch als Bausatz mit einer kleinen Platine und einer Matrixanzeige beim freundlichen Chinesen für um die 2€ inklusive Vesand. Ich habe ein Projekt angefangen, wo ich 196 LEDs (3x8x8), also 3 MAXe kaskadiert habe. Das Ganze wird ein pseudoanaloges rund 1m großes Thermometer. Dazu noch ein paar Hundert Rechteck-LEDs als Skalenstriche und eine Handvoll 7-Segmentanzeigen als Skalenbeschriftung. Liegt aber schon ne Weile und "reift" vor sich hin ;)
    ich the mich nun wieder mit der Programmierung etwas schwerer, mir liegt mehr die Elektronik.

  • Ich danke euch schonmal.
    Werde die mir gegebenen Empfehlungen mal durchsehen.
    Gibt es denn gute Elektrotechnik - "Einfürhungen" was Bausteine, Ströme und so weiter angeht?


    Wenn du dir mit der Programmierung schwer tust und ich mit der Elektrotechnik, dann sollten wir uns ggf. zusammen tun. ;)

  • "Die elektronische Welt mit Arduino entdecken" von Erik Bartmann aus dem O'REILY Verlag richtet sich an Anfänger auf ganzer Linie. Sowohl was das Programmieren, als auch die Elektronik angeht. Dieses Buch fand ich sehr gut gemacht. Vor allen Dingen ist dort Elktronik nicht rein physikalisch, sondern eher jugendlichengerecht erklärt. Ansonsten sind wohl die Elektronikwerkbücher nicht schlecht.
    Ich habe andere Bücher, die heute allenfalls antiquarisch zu bekommen sind. Größtenteils DDR Literatur aus dem Militärverlag ;)

  • Ich habe mir den MAX7219 jetzt mal angesehen. Scheint ja genau dass zu sein was ich benötige für die einzelnen 8x8 Matritzen.
    Hier weiss nicht zufällig jemand wie viele man damit hintereinander hängen kann?
    Angeblich soll man damit aber nur 5V schalten können da es mit Transistoren Probleme gibt?


    Ich habe noch den TLC5940 gefunden. Wäre der nicht auch dafür geeignet und würde, falls ich mit höheren Strömen arbeiten muss, geeigneter um Transistoren zu schalten?
    Ich frage hier nur, was ich so lese. :D


    Es sollen halt später wirklich die Größe von 200 x 64 LEDs bekommen.
    Wobei man die 64 ja "simulieren" kann.


    Statt x x x x x x x x x x x x x x x x


    kann man ja auch


    x x x x x x x x
    x x x x x x x x


    ansteuern.

  • Bei 12800 LEDs mußt du was Größeres, als den Arduino bemühen. Da reicht der interne RAM nicht, um das Bild abzuspeichern. Oder mehrere Controller und die Matrix in Segmente untergliedern. Guck doch mal in Richtung Glediator-Software, hier im Forum. Glediator wurde genau für sowas gemacht. Große LED Ansammlungen von einem PC aus füttern :D

  • Und dann kann ich mir direkt das Matrix-Board und den Matrix-Controller dazu kaufen. xD
    Okay also bei solchen Datenmengen gibt es kein Board was ich entwerfen kann, was bis zu meiner gewünschten Größe erweiterbar ist... Mist. :D

  • Ich würde das eher am Wissen, als an der Datenmenge festmachen ;)
    Das würde ich mir ebenfalls so aus dem Stand heraus nicht zutrauen. Mir reichen 3 stellige LED Anzahlen, für mehr habe ich keine Verwendung, die mir jetzt spontan einfällt. Ab einer gewissen Komplexität ist es ganz hilfreich, wenn man sich auf des Wissen und Know How anderer Leute stützen kann, die damit Erfahrung haben. Und im Rahmen von open Source und open Hardware ist das doch auch ok.

  • Es hat mir auf jeden Fall weiter geholfen.
    War ein Traum-Projekt für meine eigene Bude aber dass lasse ich dann vermutlich doch sein.
    Es ist ein kleiner Trost für mich, dass ich eine LED-Matrix 4 x 4 auf dem Breadboard habe aufbauen und ansteuern können.


    Mit dem von dir vorgeschlagenen MAX7219 wäre es vermutlich noch einfacher geworden.
    Eventuell probiere ich noch aus, wie viele der MAX7219 ich hinterinander hängen kann. :D


    Vielen Dank euch allen trotzdem. :)

  • Nur damit ich nicht auf dem Holzweg bin frage ich zur Sicherheit mal nach:


    Der STM32 ist ein schnellerer Mikroprozessor (Hab jetzt einen mit 180 MHz gefunden) als der Arduino mit 16 MHz.
    Da mein Schieberegister eine maximale Frequenz von 59MHz laut Datenblatt hat, könnte ich somit etwas weniger als die 4-fache Geschwindigkeit beim Multiplexing erhalten, was darin resultiert, dass ich 3 - 4 x mehr Schieberegister ansteuern könnte? Es gibt ja auch noch Schieberegister mit 100 MHz...


    Ist DAS der Gedanke hinter STM32?

  • Unter anderem - genauer: Die Bilder die dein Arduino berechnen muss, brauchen ja auch eine ganze Menge an Rechenzeit - wenn du jetzt also nur 100 Operationen brauchst für die Berechnung eines Bildes (und das ist wirklich wirklich wenig, wenn du es nicht nur aus dem Speicher laden und ausgeben musst) - dann bleiben dir von deinen 16MHz nurnoch 160kHz übrig um deine Register zu treiben (Arbeitet der Arduino überhaupt mit 16 Mhz? Ich hab noch was im Kopf, dass da zumindest einige nur mit 8 MHz arbeiten)


    Ein weiterer Punkt ist, dass du mit dem STM viele viele Pins hast - also auch gar kein Problem damit mal 15 Register gleichzeitig (=parallel) zu befüllen.


    (Ich würde übrigens kein Register mit viel mehr als 10kHz betreiben - du holst dir recht schnell Hochfrequenz-Probleme ins Haus, derer du ohne E-Technik nicht mehr Herr wirst - und die auf einer Lochrasterplatine selbst dann nur schwer handlebar sind)

  • Jain... die Schieberregister sind nicht der limitierende Faktor. Wenn der Arduino mit 16 MHz taktet, so werden die Schieberegister, di er ansteuert nicht mit der selben Frequenz angesteuert. Das ganze Programm wird ja als Schleife immer wieder abgearbeitet. Je größer die Schleife, desdo länger dauert es, bis das Sieberegister wieder mal dran ist.
    Der STM32 ist schneller. Trotzdem vergleicht man da Äpfel mit Birnen. Wenn er 20x schneller taktet, arbeitet er nicht automatisch das Programm 20x schneller ab. Dazu müßte man sich auf Ebene der Maschienensprache angucken, welcher Befehl wieviel Zyklen zur Abarbeitung braucht. Dann werden die beiden Architekturen unterschiedliche Befehle unterstützen, so das der Compiler das Programm, auch wenn es das selbe tut, für beide Plattformen unterschiedlich übersetzen würde. Was hier der Knackpunkt ist, das der Atmega 328 nur 2k RAM hat - und da passen nun mal keine 12800 LEDs rein. Ohne unterschiedliche Helligkeiten - nur an oder aus sind das schon über 12K (über die Umrechnung 1024 zu 1000) machen wir uns jetzt mal keinen Kopf - es reicht nicht, das sieht man an der Größenordung. Ein Prozessor, der mehr RAM hat, oder dessen RAM sich extern erweitern läßt, hat da bessere Chancen.
    Möglicherweise geht da auch was auf Rasperry Pi Basis.
    Das Zeug kostet ja alles kaum noch was. Man muß nur seeehr viel Zeit und Nerven investieren :D

  • Ja, arbeitet mit 16 MHz.


    http://store.arduino.cc/index.…&cPath=11&products_id=195

    Zitat

    Clock Speed 16 MHz


    Kann ich denn bei meinem Arduino nicht auch 12 Register parallel befüllen?


    Liest sich auf jeden Fall sehr interessant und ist beides noch näher an der Hardware-Programmierung als der Arduino. :D


    Also was sollte ich mir ansehen für meine Heim - 12800 LED - Matrix? (Ich erkläre mich selbst für verrückt, wenn ich das so lese).
    Rasperry Pi oder STM32F4?
    Der Rasperry Pi scheint ja noch mal Leistungsstärker zu sein :D


    EDIT: Ich danke euch beiden auf jeden Fall schonmal sehr für euer Engagement und Hilfe! :)

  • Prinzipiell kannst du auch mit einem Arduino mehrere Schieberegister parallel befüllen. Zumindest der Mega hat dafür genug Pins. Nur hast du davon keinerlei Vorteil, da der Prozessor dort der limitierende Faktor ist. Der STM32F4 hat genug Pins und Leistung. Der Raspi hat nochmals mehr Leistung, allerdings ist er nicht ganz so kommunikativ zur Außenwelt. Er nur relativ wenige GIPO Pins. Um es mal ganz Lainenhaft zu sagen, der Raspi ist mehr der kopflastige Denker.
    Der ist besser für ein Betriebssystem und Multitasking geeignet.

  • Der Arduino hat nicht die Rechenleistung um die Teilbereiche der Bilder (siehe @Superluminal s Beitrag zum RAM) hintereinander zu berechnen und dann "gleichzeitig" auszugeben.


    Wobei der STM (als ARM-Prozessor) viel MEHR Befehle unterstützt - alleine von der Seite her ist das also kein Nachteil sondern eher ein Vorteil :D

  • Okay, also werde ich es vermutlich mit dem STM32F4 versuchen.
    Dann gucke ich mir nochmal den TLC5940 und den MAX7219 an und gucke wie es da mit Dimmen aussieht.
    Soll bei dem TLC5940 ja möglich sein.
    Bei dem MAX7219 dürfte es wohl über PWM gehen.


    Ich überlege auch Schieberegister zu testen und PWM-Signal an OE anzulegen wie von euch empfohlen damit ich diese auch Dimmen kann.
    Ausserdem benötige ich ja dann auch geringere Vorwiederstände weil das Multiplexing alles etwas dunkler erscheinen lässt. Das kommt aber ganz zum Schluss :D Wird erstmal mit den richtigen Vorwiederständen getestet.