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
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
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.
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.
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
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.
&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.
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 :-)
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
> 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.
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
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
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
> 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 -----+--|>--+--|>--+--|>--+--|>--+----
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
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.
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.
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
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."
> Aus dem Datenblatt: "The MAX7219/MAX7221’s maximum> recommended segment current is 40mA."
Ja ... , was genau hast du am Datenblatt nicht verstanden ?
&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."
> 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.
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.
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