Hat sich mit deinem vorherigem Post geklärt. Danke!
Hab hier noch Fragen zum Datenblatt.
Was ist hier mit "All segments and decimal point on, ISEG_ = -40mA" ?
Nehme an, dass der Imax = 330mA, wenn alle LED´s eingeschaltet sind, nicht überschritten werden darf. Ein Segment aber bis zu 40mA haben darf. Also wenn die 40mA ausgereizt werden würden, dürfte man bis zu 8 LED´s betreiben - passt also. Wenn ich jedoch eine Matrix mit 64 LED´s habe, brauche ich eine externe Quelle für die Maxis, oder?! Der Vcc vom Arduino liefert, soweit ich das dem Datenblatt entnehmen kann, nur 200mA.
64 LED´s a 20mA = 1,28A, was sich jedoch wieder auf zwei Maxis aufteilt. Also 0,64A.
Mir scheint Du hast nicht verstanden wie eine Matrix angesteuert wird. Sie wird in multiplex angesteuert:
(für die folgende Erklährung konnen "Zeilen" und "Spalten" vertauscht werden. Was eine Spalte bzw Zeile ist, ist nur ein Betrachtungsdefinition.)
Es werden immer nur die 8 LED einer Zeile angesteuert. Diese werden ja nach Daten ein oder ausgeschaltet. Eine Zeile wird nur für eine kurze Zeit angesteurt und dann die nächste. So wird jede Zeile und damit jede LED mit einer gewissen Frequenz angesteuert und damit durch die Trägheit des Auges nicht flimmert. (Scan Frequenz ist ca 800Hz, das heißt es wird mit 800Hz zwischen den Zeilen herumgeschaltet; Eine Zeile ist damit ca 1,25mS an und 8,75mS aus (bei einer 8x8 Matrix))
Also immer bis zu 8 LED gleichzeitig angeschaltet, 8 dieser LED-Gruppen hintereinander.
Der Gesamtstrom einer 8x8 Matrix in Multiplexing ergibt sich darum aus 8* dem LEDStrom. Bei 20mA sind das dann 160mA maximal. Sind nicht alle LED einer Zeile angeschaltet ist der Strom kleiner.
Außer daß Deine Annahme zu Berechnung des Gesamtstroms falsch ist verstehe ich nicht wieso Du den Strom durch 2 teilst. Ein MAX kann 64 LEd ansteuern und 2 MAX zwei mal 64.LED. Der Gesamtstrom pro MAX bleibt immer gleich egal ob Du einen oder 2 MAX mit jeweils 64 LED verwendest.
Das bedeutet daß der Gesamtstrom des MAX7219 (an den Versorgungsspannungspins) bei einem eingestellten LED -Strom von -40 mA ( das minus Zeichen weil der Strom in das Pin hineinfließt) und allen LED eingeschaltet typischerweise 330 mA sein wird (8x40 + eigenverbrauch = 320+10 = 330mA
Das ist nicht vom Arduino sondern das ist der max zulässige Strom der Stromversorgungspins (VCC bzw GND pins) des ATmega328. Der braucht ein wenig für sich (so um die 10mA) und dazu kommt der Strom der aus den Pins, wenn diese als Ausgang geschaltet sind heraus (HIGH) oder hinein (LOW) fließt. Der Strom fließt von den 5V Pin zu den HIGH Ausgängen bzw von den LOW Ausgängen zu den Masse Pin.
Der maximale Strom, der vom 5V Pin des Arduino UNO R3 entnommen werden darf, ist:
bei Versorgung über USB ca 450mA ( 50mA - Eigenverbrauch des Arduino) weil dieser eine 500mA Sicherung nach der USB Buchse hat.
bei Versorgung über Vin oder Netzteilbuchse hängt der maximale Strom von der Versorgungsspannung ab. Bei 7V ca 450mA , bei 12V nur ca 100mA.
Eine Matrix kannst Du über den über USB versorgten Arduino versorgen. Bei 2 oder mehr Matrix brauchst Du eine externe 5V Quelle mit ca 330 mA pro Matrix.
Multiplexing ist so:
Du arbeitest in einer Firma, dessen Kantine 8 Plätze hat. Da die Firma aber 16 Angestellte hat, die die Kantine aufsuchen, wird die Kantine in 2 Zeiten eingeteilt. 8 Bedienstete dürfen um 12:00 in die Kantine kommen und die anderen 8 um 13:00. Das ist Timemultiplexing. Hat die Firma nun 64 Bedienstete müssen sie in 8 Zeitfenster eingeteilt werden. Nach dem Mittagessen fangen dann die Zeitfenster für das Abendessen an.( ist zwar etwas unrealistisch, erklährt aber den MAX7219)
Doch. Jedoch ist mir entgangen, dass dies bei dem Max der Fall ist. Dachte erst, dass es eine schöne Kombination aus Shift-Register und Array-Transitor wäre, der noch ein wenig mehr kann. Bei einem Shift-Register, also bspw. dem ULN2003A, wenn ich hier nicht auch falsch liege, können alle 8 Ausgänge gleichzeitig geschaltet werden.
Der Max ist ganz neu für mich und ich bin nicht so geübt mit Datenblättern und co. Möchte mich da aber bessern! Der Hauptvorteil beim Mux liegt wohl in der Strombegrenzung, da nicht alle Ausgänge gleichzeitig beschlatet werden. Könnt ihr mir grob sagen, wann es besser ist einen Mux und wann es besser wäre ein Shift o. Ä. zu nutzen? - Für meine zukünftigen Entscheidungen. Hab noch viel zu lernen. Ist aber nur ein Teilzeithobby, das ich jetzt stärker ausbauen möchte.
Bei der Berechnung hatte ich mich vertan - richtig. Meine Gedanken hatten sich darauf gestützt, dass jeder der beiden Maxis alle 8 Ausgänge gleichzeitig schalten kann. Da ich 121 LED´s plane und jede 20mA braucht, ging ich von 2,42A gesamt aus - für alle LED´s. - auf zwei Maxis aufgeteilt. Bei zwei Shift-Registern würde das zutreffen, oder? - bei höheren Stömen müsste ich dann ohnehin über Triacs oder Transitoren gehen?!
Besten Dank für deine Zeit und Mühe Uwe - auch an die Anderen!
Schönen Abend noch und guten Start in die Woche :)
Nein. Der ULN2003A hat 7 Transistorarrays. Du meinst vieleicht den ULN2803?
Es gibt 2 Möglichkeiten zu "muliplexen":
Multiplexen das kennst Du schon.
Charlieplexing Man kann mit wenigen Ausgängen sehr viele LED ansteuern aber nur immer nur eine LED einschalten. Darum eignet sich Charlieplexing nur wenn wenige LED von vielen eingeschaltet werden.
Würde sagen wenn Du mehr als 8 bis 16 LED hast, dann ist es besser Multiplexen.
Wenn Du LED in Helligkeit regeln willst sind PWM LED-Treiber besser.
Es gibt auch einen Bibliothek für PWM mit Shiftregister.
Oder besser WS281x LEDs mit integrierten Controller.
vom elektrischen abgesehen:
der MAX7219 übernimmt das Multiplexing der 8x8 Matrix. Du schickst "einmal" was leuchten soll - der MAX7219 steuert dann die Matrix an.
Bei einer Matrix mit zwei Shiftregister 74HC595 muss der Microcontroller das Multiplexing machen. kommt es im Programm irgendwo zu einer längeren Verzögerung und kann das Multiplexing nicht schnell genug durchgeführt werden, bleibt das Display hängen.
-->
den MAX7219 würde ich wählen wenn ich LEDs antreiben müsste.
den 74HC595 würde ich wählen wenn ich Bits durch ein Schieberegister jagen müsste.
Steht die 5 für 5 Maxis, ohne dass die 0, als erster Max, mitgezählt wird?
In der for-Schleife werden alle 5 angesteuert und hochgefahren?! Hier wird dann aber mit 0 gestartet, wobei 0 für den ersten (1) Max steht?! Und über die Funktion getDevice() Schaut der Max was wir in der Funktion LEDControl, also 5, angegeben habe?
Will mir nur sicher sein. Finde keine Seite, wo das 100%ig erklärt wird.
Shutdown false bedeutet, dass der jeweilige Maxi hochfährt? Finde die Wortwahl irreführend.
Und ob nun lc1=LedControl(12,11,10,5); oder LEDControl lc1=(12,11,10,5); geschrieben wird, ist egal/gleich? Verstehe ich das richtig, dass LEDControl der Konstruktor ist und dass lc1 das erzeugte Objekt ist? Frage, da ich es ohne „=“ kenne.
Um mir auch damit zukünftig besser selbst weiterhelfen zu können, habt ihr Tipps für eine Art roten Faden, mit dem ich mich durch die Libs hangeln kann? Die Libs für den Max scheinen sehr umfangreich und auf mehrere Dateien zerstreut zu sein.
Da musst du in die Lib gucken.
Das gilt sowohl für den Konstruktor LedControl(12,11,10,5)
als auch für die beiden Methoden getDeviceCount() und shutdown()
Ja, ist beides falsch
Im ersten Fall fehlt vor lc1 noch die Deklaration des Datentyps.
Now we need a LedControl to work with.
***** These pin numbers will probably not work with your hardware *****
pin 12 is connected to the DataIn
pin 11 is connected to the CLK
pin 10 is connected to LOAD
We have only a single MAX72XX.
*/
LedControl lc=LedControl(12,11,10,1);
Das Beispiel ist für einen MAX7219.
Warum benötigst du nun 5?
die Anmerkung zu "vielen" Files kann ich bei der originalen LedControl nicht nachvollziehen. Da gibts genau zwei Files, eine .h und eine .cpp
/*
Now we need a LedControl to work with.
***** These pin numbers will probably not work with your hardware *****
pin 12 is connected to the DataIn
pin 11 is connected to the CLK
pin 10 is connected to LOAD
***** Please set the number of devices you have *****
But the maximum default of 8 MAX72XX wil also work.
*/
LedControl lc=LedControl(12,11,10,8);
das ist nicht falsch.
Aber er schrieb in #1 von einer Matrix mit 5x5 LEDs ... und später von zwei Schieberegister.
Und das geht aus meiner Sicht nur mit Multiplexing. Oder 25/8 = 4 Schieberegister.
Der MAX7219 kann Zeilen abschalten und so eine Matrix 5x8 multiplexen. siehe Scan-Limit Register.
So kannst am einfachsten von einer 8x8 Matrix auf eine 5x8 Matrix kommen wobei Du eben nur 5 Ausgänge mit LED bestückst.
Wenn ich ein Byte von B11111111 habe und dieses nicht geändert wird, werden alle Ausgänge gleichzeitig beschaltet?
Dann hätte ich noch folgende Fragen.
Der Gesamtstrom und die Spannung, die für die LED´s benötigt wird, läuft nur über den V+ des Max, oder?
Bsw. wie erkenne ich sowas im Plan?
Auf Seite 12 erkenne ich nicht, was die da noch für eine Schaltung dargestekkt haben, mit dem Max 394.
Nehme mal an Du redest von Schieberegister und Du schickst dieses Byte an das Schieberegister dann Ja. Alle Ausgänge gehen auf HIGH und LED die zwischen Ausgang und Masse geschaltet sind leuchten.
Das erkennst Du auf dem Bild auf Seite 1 rechts Typical Applicatins Circuit.
Das Display in diesem Fall ein 7 Segment Display mit Dezimalpunkt und 8 Stellen ( = (7+1) * 8 = 64 Segemnte = LED)
und Functional Diagram Seite 5
Du siehst daß das Display nur am MAX7219 angeschlossen ist und somit der ganze Strom, der durch die LEDs fließt auch durch den MAX fließen muß. Also von V+ durch die Segment Treiber - durch die LED der Segmente / Matrix - durch die Digit Treiber nach GND.
Für eien LED MAtrix gibt es mi Netz noch diesen Schaltplan, der im Datenblatt nicht vorhanden ist:
Würde sagen indem Du den Bildtext bzw das Datenblatt genau studierst.
Bei dem genannten Bild steht:
"MAX7219/MAX7221 Driving 2.3in Displays"
Auf Seit 10 Steht:
"The example in Figure 2 uses the MAX7219/MAX7221’s
segment drivers, a MAX394 single-pole double-throw
analog switch, and external transistors to drive 2.3”
AND2307SLC common-cathode displays. The 5.6V zener
diode has been added in series with the decimal point
LED because the decimal point LED forward voltage is
typically 4.2V. For all other segments the LED forward
voltage is typically 8V. Since external transistors are
used to sink current (DIG 0 and DIG 1 are used as logic
switches), peak segment currents of 45mA are allowed
even though only two digits are displayed. In applications
where the MAX7219/MAX7221’s digit drivers are used
to sink current and fewer than four digits are displayed,
Table 9 specifies the maximum allowable segment
current. RSET must be selected accordingly (Table 11)"
Wenn Du dann das Datenblett des AND2307SLC suchst ( zB https://www.digchip.com/datasheets/download_datasheet.php?id=1930175&part-number=AND2307 ) wirst Du sehen daß da 4 LED pro Segment in Reihe geschaltet sind und die Forward Voltage/ Segment 8,4 bis 12V ist. Der MAX7219 kann aber nur mit 5V betrieben werden. Der zusätzliche MAX394 steuert MOSFETS an die die Kathoden der Displays auf -5V schalten und somit das Segment fast 10V bekommt und somit es für die rote Variante reicht und es leuchtet.