Forum: Mikrocontroller und Digitale Elektronik Ardinuo --> 54 MAX7219 --> 3456 LEDS


von Christian (Gast)


Lesenswert?

Hallo,

Ich habe vor mir mittel eines Arduino UNO und 54 MAX7219 eine große 
LED-Leinwand zu bauen.

Jetzt kurz beine Frage bevor ich mich in das Projekt stürtze.

Wieviele MAX7219-ICs kann man denn in Reihe schalten? (also DOUT->DIN 
usw.)
Gibt es hier einen Maximalwert?

Oder gibt es eine maximale Länge für die LOAD- und CLK-Signalkabel?

Was haltet Ihr von der Idee? oder kenn ihr einen einfacheren Weg für die 
Umsetzung?

LED-Leinwand habe ich mir als 48x72 Pixel, mit 10mm LEDs und 15mm 
Abstand.
Könnt ihr mir auch einen Empfehlung für die LEDs geben?
Dachte da an LEDs mit einem Abstrahlwinkel von 40° und einer Leuchtkraft 
von min. 8000mcd.

Vielen Dank

von Jochen (Gast)


Lesenswert?

Wieso sollte es einen Maximalwert geben? Schau doch ins Datenblatt.

von Christian (Gast)


Lesenswert?

Im Datenblatt habe ich dazu eben nichts gefunden.
Ich dachte hier mal nach Erfahrungswerte zu fragen.

hat jemand schonmal so ein ähnliches Projekt mit MAX7219/MAX7221 und 
Arduino durchgezogen?

Danke

von Karl (Gast)


Lesenswert?

http://arduino.cc/playground/Main/MAX72XXHardware

If you read the datasheet for the MAX72XX you know that the drivers can 
be cascaded by simply connecting the signal DOut from one chip to DIn on 
the next chip. The signals Clk and Load(/CS) have to be connected in 
parallel to each MAX72XX. There is no strict limit as to how many 
drivers can be cascaded that way. But the SPI-interface is not capable 
of any error checking on the transmitted data, so you are already 
limited with the length of the cables that run from one MAX72XX to the 
next one. If your cables get longer than 10cm between each MAX72XX you 
might already run into trouble.

von MaWin (Gast)


Lesenswert?

Der MAX7219 liefert im Mittel nur 5mA an eine LED.

Schau erst mal, ob dir deine LEDs bei diesem geringen Strom überhaupt 
hell genug sind, bevor da tausende von Euros sinnlos versenkst.

> Wieviele MAX7219-ICs kann man denn in Reihe schalten?

Hängt von der Taktrate ab. Ein einzelner Chip kann 10MHz Takt, 10 in 
Reihe nur noch 2MHz, du musst die 25ns SetUpSeit von DI gegenüber CLK 
einhalten, obwohl DO erst 25ns nach DI stabil ist.

> Was haltet Ihr von der Idee?

So ein endloses Schieberegister erlaubt keine schnellen Bildwechsel.

Besser nur wenige in Reihe schalten, und so viele wie möglich parallel, 
z.B. 8 an ein Ausgangsport des uC, dann können 8 bit pro CLK auf ein mal 
übertragen werden und die Software muß sich nicht um Bitfummelei 
kümmern.

von Christian (Gast)


Lesenswert?

10cm ist aber nicht viel. Ich bräuchte 20cm. So ein Mist, schon das 
erste Problem...

Oder ich setze alle MAX7219 ziemlich nebeneinander, dann ich die 
Kabellänge zu den LEDs größer.

Danke für die Hilfestellung

von Christian (Gast)


Lesenswert?

MaWin schrieb:
> Der MAX7219 liefert im Mittel nur 5mA an eine LED.
>
> Schau erst mal, ob dir deine LEDs bei diesem geringen Strom überhaupt
> hell genug sind, bevor da tausende von Euros sinnlos versenkst.
>
>> Wieviele MAX7219-ICs kann man denn in Reihe schalten?
>
> Hängt von der Taktrate ab. Ein einzelner Chip kann 10MHz Takt, 10 in
> Reihe nur noch 2MHz, du musst die 25ns SetUpSeit von DI gegenüber CLK
> einhalten, obwohl DO erst 25ns nach DI stabil ist.
>
>> Was haltet Ihr von der Idee?
>
> So ein endloses Schieberegister erlaubt keine schnellen Bildwechsel.
>
> Besser nur wenige in Reihe schalten, und so viele wie möglich parallel,
> z.B. 8 an ein Ausgangsport des uC, dann können 8 bit pro CLK auf ein mal
> übertragen werden und die Software muß sich nicht um Bitfummelei
> kümmern.

Hallo MaWin,

Da ich bei dem Arduino UNO nur 14 Ausgänge habe, werde ich damit dann 
wohl ein Problem bekommen oder? da ich bei 54 MAX7219 7 * 3(DI, LOAD, 
CLK) = 21 Ausgänge bräuchte. Oder sehe ich das Falsch?

Sorry so tief bin ich in dem Thema dann doch nicht.

von &KUNZderkann'z (Gast)


Lesenswert?

hast du ueberhaupt schon mal eine LED mit 7219 zum leuchten gebracht ?

von Christian (Gast)


Lesenswert?

&KUNZderkann'z schrieb:
> hast du ueberhaupt schon mal eine LED mit 7219 zum leuchten gebracht ?

Nein,
aber 3 Pins an dem Arduino einzuschließen, die 3 Pins zum MAX7219 zu 
führen ung deine Matrix aus LEDs zu Löten sollte jetzt nicht das große 
Problem sein.
Oder meinst du ich würde solche Fragen stellen wenn überhaupt keine 
Ahnung von der Materie hat?

Bestellt sind die ersten Teile, damit ich klein anfangen kann.
Wenn ich aber dann 4 MAX7219 inkl. LEDs verlötet habe und sehe, dass das 
ganze funktioniert. Dann fange ich mit dem großen bestellen an und 
nichts funktioniert, dann frag ich doch lieber vorher nach.

Da hat mir die Antwort von MaWin schon weiter gebracht.

von Pink S. (pinkshell)


Lesenswert?

und 8000 mcd bei 40 Grad wirst du auch nicht finden.

Die mit >10000 mcd erreichen diesen Wert nur, weil sie sehr stark 
fokussiert sind (10-15 Grad).

Zu den Schieberegistern: Wenn die Länge des Schieberegisters ein Problem 
ist, kannst du auch parallel erweitern. 8 bit parallel auf 8 
Schieberegister wie oben erwähnt ist schon mal eine gute Idee. Mehr Bit 
parallel geht mit Port-Expander, das sind Latches, die die Portbits 
adressierbar speichern. So haben früher die ersten Prozessoren ihren 
Speicher angesprochen, da ging es um 65535x8 bit, die mit 8 Leitungen 
bedient wurden (plus ein paar Steuerleitungen).

Natürlich wird es nicht schneller, wenn man erst x Latches und y 
Schieberegister bedienen muss, um seine LEDs zu ändern, aber da kommst 
du nicht dran vorbei.

Eine Alternative wäre mehrere (einfache) Controller, der eine ist der 
Master, und die andern kümmern sich um die Massen von LEDs. So läuft es 
ja auch in der Politik :-)

von Christian (Gast)


Lesenswert?

Wäre es dann Möglich, wenn ich einen Arduino Mega 2560 
(http://arduino.cc/en/Main/ArduinoBoardMega2560) nehmen würde, der hätte 
54 Ausgänge.

Dann könnte ich mit dem MAX7219 8 in Reihe schalten und 6 Parallel und 
hätte so eine Matrix von 64x48.

Das mit dem MAX7219 und einem Arduino kam mir halt als einfachste Lösung 
vor.
Die Programmierung scheint einfach und der Lötaufwand sollte auch zu 
erledigen sein.

Danke für eure super Unterstützung

von Christian (Gast)


Lesenswert?


von MaWin (Gast)


Lesenswert?

> Da ich bei dem Arduino UNO nur 14 Ausgänge habe, werde ich damit dann
> wohl ein Problem bekommen oder? da ich bei 54 MAX7219 7 * 3(DI, LOAD,
> CLK) = 21 Ausgänge bräuchte. Oder sehe ich das Falsch?

Wozu die LOAD und CLK Eingänge einzeln zum uC führen ?
Das muß man doch nur mit den DI Eingängen machen.

Also sind bei 13 Ausgängen 11 parallel möglich, so daß
man nur noch je 5 in Reihe schalten muss und 'nur noch'
80 bits 8 mal in alle 11 parallel reinschreiben muss
um ein Bild zu laden, also 640 Takte.

von Christian (Gast)


Lesenswert?

MaWin schrieb:
> Wozu die LOAD und CLK Eingänge einzeln zum uC führen ?
> Das muß man doch nur mit den DI Eingängen machen.

Laut LedControl-Libary müssen für 8 MAX7219 imme runterschiedliche Pins 
verwendet werden.
http://arduino.cc/playground/Main/LedControl

von Reinhard Kern (Gast)


Lesenswert?

Christian schrieb:
> Laut LedControl-Libary müssen für 8 MAX7219 imme runterschiedliche Pins
> verwendet werden.

Das ist zwar zutreffend, heisst aber nix anderes als dass die Library 
für den Zweck ungeeignet ist. Für die Verwendung getrennter Ketten von 
MAX7219 musst du eben den Code selber schreiben. Tip: wenn du LOAD und 
CLK gemeinsam verwendest, musst du natürlich die Daten an alle Ketten 
gleichzeitig (in derselben Routine) ausgeben.

Wenn du das nicht schaffst, brauchst du eben 3mal soviele Pins. So ist 
das Programmiererleben.

Gruss Reinhard

von Peter D. (peda)


Lesenswert?

MaWin schrieb:
> Hängt von der Taktrate ab. Ein einzelner Chip kann 10MHz Takt, 10 in
> Reihe nur noch 2MHz

Das ist Unsinn.
Schieberegister kann man unendlich kaskadieren. Der maximale Takt bleibt 
exakt der gleiche wie bei einem IC.
Es ist immer eine volle Taktperiode Zeit für das Signal von DOUT des 
einen zum DIN des nächsten.

Allerdings kann die kapazitive Last der gemeinsamen Takt- und 
Latchleitungen etwas hoch werden.
Daher ist es sinnvoll, z.B. alle 10 ICs die 3 Signale zu treiben 
(74HC04). Die Datenleitung auch, damit die Delays gleich sind.


Peter

von Christian (Gast)


Lesenswert?

Die Informationen muss ich jetzt erstmal sammeln ;)

Weiß jemand ob ich aus dem MAX mehr als 5mA pro LED heraus holen kann, 
da die LEDs bis 20mA gehen? Oder hat jemand eine Idee, was ich für LEDs 
nehmen soll, sollte halt ziemlich hell alles sein, dass man es auch noch 
in 100m Entfernung erkennen kann. Ich dachte die 10mm LEDs mit 8500mcd 
hätten das geschafft. Hat da jemand Erfahrungswerte?

Danke

von MaWin (Gast)


Lesenswert?

> Schieberegister kann man unendlich kaskadieren.

Das ist grober Unsinn.

Da die CLK-Leitung bei allen parallel ist,
die Daten jedoch daisy-chain'd,
kommen die Daten ab einem bestimmten IC
nicht mehr mit der nötigen setuptime an,
wenn man zu schnell taktet.

             |<-- 50ns -->|
       +---+  +---+  +---+  +---+  +---+
DATA --|   |--|   |--|   |--|   |--|   |--
       +---+  +---+  +---+  +---+  +---+
         |      |      |      |      |
CLK -----+------+------+------+------+----

Man könnte auch die CLK-Leitungen verzögern,
das kostet aber extra Bauteile (ein Gatter
pro MAX7219 bzw. eine Delay-Line mit genügend
taps, oder ein Verzögerungsglied alle xxx
MAX7219.

       +---+  +---+  +---+  +---+  +---+
DATA --|   |--|   |--|   |--|   |--|   |--
       +---+  +---+  +---+  +---+  +---+
         |      |      |      |      |
CLK -----+--|>--+--|>--+--|>--+--|>--+----

von Peter D. (peda)


Lesenswert?

MaWin schrieb:
> Da die CLK-Leitung bei allen parallel ist,
> die Daten jedoch daisy-chain'd,
> kommen die Daten ab einem bestimmten IC
> nicht mehr mit der nötigen setuptime an,
> wenn man zu schnell taktet.


Ein Schieberegister hat keine "daisy-chain". Es schiebt mit jedem 
Taktzyklus genau ein Bit weiter. Jeder IC syncronisiert sich neu auf den 
Takt. Das Eingangsbit erscheint daher erst nach 16 Takten am Ausgang. 
Wann das Bit 16 Takte zuvor mal anlag interessiert den folgenden IC 
nicht mehr.

Der Ausgang ist 25ns nach der 1-0 Flanke gültig, der Eingang muß 25ns 
vor der 0-1 Flanke anliegen. Paßt also ganz genau zu der Low-Dauer von 
50ns und zu der 100ns Periode (= 10MHz).


Mal Dir einfach mal ein Schieberegister aus D-FFs (74HC74) auf. Ob 2 FFs 
oder 1000, die Maximalfrequenz ist genau gleich.


Peter

von MaWin (Gast)


Lesenswert?

> Ein Schieberegister hat keine "daisy-chain".

Stimmt. Datenblatt fehlinterpretiert.

von D. S. (datasheet)


Lesenswert?

Die arduinos haben doch so einen ftdi Chip drauf, der eine serielle 
Schnittstelle emuliert, oder?
Da bekommt man doch maximal 250 kBaud durch. Bei 3456 leds mit je 256 
Graustufen sind das ca. 3,5s pro Frame. Da isses egal, wie schnell die 
Daten in die Chips kommen, wenn es Ewigkeiten braucht die in den 
Controller zu laden.
Irgendwie hab ich schon als ich den Thread angeklickt habe an Totgeburt 
gedacht. Ich lassemich aber auch gern eines besseren belehren.

Ich hätte echt keine Lust so viele Leds zusammenzulöten. Ums verecken 
nicht.

von &KUNZderkann'z (Gast)


Lesenswert?

54 Maexe 34567 Leds
Jung,da wirste alt !
Haste schon ein NT ?

von Christian (Gast)


Lesenswert?

D. S. schrieb:
> Die arduinos haben doch so einen ftdi Chip drauf, der eine serielle
> Schnittstelle emuliert, oder?
> Da bekommt man doch maximal 250 kBaud durch. Bei 3456 leds mit je 256
> Graustufen sind das ca. 3,5s pro Frame. Da isses egal, wie schnell die
> Daten in die Chips kommen, wenn es Ewigkeiten braucht die in den
> Controller zu laden.
> Irgendwie hab ich schon als ich den Thread angeklickt habe an Totgeburt
> gedacht. Ich lassemich aber auch gern eines besseren belehren.
>
> Ich hätte echt keine Lust so viele Leds zusammenzulöten. Ums verecken
> nicht.


Wer braucht denn schon Graustufen ;), soweit habe ich noch nicht 
gedacht. Wobei ich keine 256 Graustufen benötige, mir würden auch 8 
reichen. Habe mich aber noch nicht informiert, wie ich Graustufen 
darstelle.


&KUNZderkann'z schrieb:
> 54 Maexe 34567 Leds
> Jung,da wirste alt !
> Haste schon ein NT ?

NT kann so vie bedeuten ;)
Keine Angst es sind nur 3456 (ohne 7). Außerdem habe ich nicht vor alles 
alleine zu löten.

von Christian (Gast)


Lesenswert?

MaWin schrieb:
>> Ein Schieberegister hat keine "daisy-chain".
>
> Stimmt. Datenblatt fehlinterpretiert.

Kann mir bitte, nach dem ganzen hin und her, mal jemand erklären was und 
wie das jetzt funktioniert. Kann ich jetzt alle MAXs hintereinander 
kaskatieren oder ist es doch sinnvoller immer nur 8-10 auf einen Ausgang 
zu legen.

Danke

von ... (Gast)


Lesenswert?

Christian schrieb:
> Weiß jemand ob ich aus dem MAX mehr als 5mA pro LED heraus holen kann,
>
> da die LEDs bis 20mA gehen?

Aus dem Datenblatt:
"The MAX7219/MAX7221’s maximum recommended segment
current is 40mA."

von Uwe N. (ex-aetzer)


Lesenswert?

Christian schrieb:
>> Weiß jemand ob ich aus dem MAX mehr als 5mA pro LED heraus holen kann,
>> da die LEDs bis 20mA gehen?

Aus dem MAX7219 nicht, aber mit externen Treiber geht es:

http://www.maxim-ic.com/app-notes/index.mvp/id/1196

Gruss Uwe

von MaWin (Gast)


Lesenswert?

> Aus dem Datenblatt: "The MAX7219/MAX7221’s maximum
> recommended segment current is 40mA."

Ja ... , was genau hast du am Datenblatt nicht verstanden ?

von ... (Gast)


Lesenswert?

MaWin schrieb:
>> Aus dem Datenblatt: "The MAX7219/MAX7221’s maximum> recommended segment current 
is 40mA."Ja ... , was genau hast du am Datenblatt nicht verstanden ?

Ich habe das Datenblatt sehr gut verstanden, aber DU hast es jetzt schon 
zum zweiten mal nicht verstanden.

an TO:

Eine günstigere Alternative und Baugleich zum MAX7219 ist der AS1107.
http://de.rs-online.com/web/p/led-driver/6691510/?searchTerm=AS1107&relevancy-data=636F3D3226696E3D4931384E4B6E6F776E41734D504E266C753D6465266D6D3D6D61746368616C6C7061727469616C26706D3D5E5C772B2426706F3D313326736E3D592673743D4D414E5F504152545F4E554D424552267573743D4153313130372677633D424F544826

von &KUNZderkann'z (Gast)


Lesenswert?

der ist aber nicht 'cascadable' sondern 'daisy chain'

von ... (Gast)


Lesenswert?

&KUNZderkann'z schrieb:
> der ist aber nicht 'cascadable' sondern 'daisy chain'

Quatsch. Der ist genauso aufgebaut wie der MAX7219/7221.
Auch wenn im Datenblatt bei der Pinbeschreibung Daisy Chain steht, heißt 
das noch lange nicht das es auch das ist was man im landläufigen Sinne 
als Daisy Chain versteht.
Um als "Daisy Chain" durchzugehen fehlt eine wichtige Voraussetzung:
"Wichtig ist bei dieser Verschaltung der Komponenten, dass Prioritäten 
vergeben werden können. Somit kann festgelegt werden, dass Informationen 
zum Beispiel nur dann übermittelt werden können, wenn die Leitung frei 
ist, oder dass einige Komponenten unbedingten Vorrang gegenüber anderen 
haben. Dadurch lassen sich Konflikte und Fehlfunktionen verhindern."

von Christian (Gast)


Lesenswert?

was haltet ihr von dieser Schaltung um den Strom an den LEDs zu erhöhen.
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1212882269/13#13

von ... (Gast)


Lesenswert?

wenn du pro Segment nur EINE Diode hast brauchst du die Schaltung nicht.
Der 7219 liefert genug Strom.

von MaWin (Gast)


Lesenswert?

> wenn du pro Segment nur EINE Diode hast brauchst du die
> Schaltung nicht. Der 7219 liefert genug Strom.

Hirnie.

Natürlich hat er 8.

3456  54  8

Also nur 1/8 des Stroms.

Was ... nicht alles tut, um von seinem Unvermögen abzulenken.

von ... (Gast)


Lesenswert?

MaWin schrieb:
> Hirnie.
> Natürlich hat er 8.
> 3456  54  8
> Also nur 1/8 des Stroms.
> Was ... nicht alles tut, um von seinem Unvermögen abzulenken.

Ach MaWin, je oller desto doller?
Ich empfehle dir Fielmann für ne neue Brille, damit du die Threads und 
Datenblätter wieder genau lesen kannst.

von MaWin (Gast)


Lesenswert?

> Ich empfehle

Was ... nicht alles tut, um von seinem Unvermögen abzulenken.

von ... (Gast)


Lesenswert?

MaWin schrieb:
>> Ich empfehle
>
> Was ... nicht alles tut, um von seinem Unvermögen abzulenken.

Du wiederholst dich. Alzheimer?

von Christian (Gast)


Lesenswert?

Kaum schaut man mal kurz nicht hin schon streiten die ersten ... 
Auseinander ;)
Könnten wir bitte wieder sachlich bleiben.

Hat sich jemand mal die Schaltung angeschaut?
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1212882269/13#13

Wenn ich die gleiche Spannung am MAX7219 und am UDN2981. brauch ich dann 
überhaupt noch ULN2803 und den Inverter? Gibts Inverter die 8 Ein- und 
Ausgänge haben. Das würde die Fummelei auf der Platine erleichtern.
Sind bei dieser Schaltung dann noch "Graustufen" möglich?

Danke

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
Noch kein Account? Hier anmelden.