Forum: Mikrocontroller und Digitale Elektronik 90 LEDs einzeln ansteuern


von ... dartrax .. (Firma: www.dartrax.de) (dartrax)


Lesenswert?

Hi!
Ich weiß dass es nicht wenige LED-ansteuern-Beiträge gibt... Aber als 
Anfänger fällt es mir noch schwer, die Spreu vom Weizen zu trennen ;)

90 (5+5)x9 rote LEDs für eine Wanduhr sollen einzeln ansteuerbar sein, 
möglichst in zwei Helligkeitsstufen.
Zusätzlich sollen alle LEDs gedimmt werden können für Anpassung an die 
Umgebungshelligkeit.
Wäre schön, wenn das einigermaßen stromsparend abläuft.

Meine erste Idee wäre Multiplexen. Habe da aber Bedenken wegen dem 
Flimmern, wenn man die Wanduhr zum Beispiel beim Lesen im Augenwinkel 
sieht und jedesmal das Flimmern bemerkt, dass bei der Anzahl der LEDs 
und einer Dimmstufe wohl zustand kommt?

Sollte ich besser einen fertigen Baustein dafür nehmen, der einigermaßen 
günstig ist?

Und schließlich die Ansteuerung: Die Uhr soll einige zufallsgesteuerte 
Animationen ausführen können. Ich hab' meine ersten Erfahrungen mit dem 
Atmega8 gesammelt und bin da recht schnell an die Speichergrenzen 
gestoßen. Wahrscheinlich muss ich einen anderen/größeren Microcontroller 
nehmen, oder das aufteilen. Da würde sich anbieten, der linken Ziffer 
(5x9) und rechten Ziffer (5x9) einen eigenen Controller zu spendieren 
(Die Animationen sind jeweils auf eine Ziffer beschränkt unabhängig 
voneinander) und einen Master, der dann noch solche Bonbons wie Funk 
übernehmen kann.

Was meint ihr?

Vielen Dank!
- dartrax

von Peter (Gast)


Lesenswert?

... dartrax ... schrieb:
> Ich hab' meine ersten Erfahrungen mit dem
> Atmega8 gesammelt und bin da recht schnell an die Speichergrenzen
> gestoßen.
es kann zwar sein das du an die Grenze gekommen bist, aber das lag 
vermutlich weniger am controller als in der Art der Programmierung. Für 
ein paar LEDs spielchen sollte er bequem ausreichen. Wenn man 
animationen darstellen will dann könnte es höchstens sein das sie viel 
Platz brauchen aber die kann man ja auf eine SD karte auslagern.

von Lehrmann M. (ubimbo)


Lesenswert?

... dartrax ... schrieb:
> 90 (5+5)x9 rote LEDs für eine Wanduhr sollen einzeln ansteuerbar sein,
> möglichst in zwei Helligkeitsstufen.
> Zusätzlich sollen alle LEDs gedimmt werden können für Anpassung an die
> Umgebungshelligkeit.
> Wäre schön, wenn das einigermaßen stromsparend abläuft.

Machbar.

... dartrax ... schrieb:
> Meine erste Idee wäre Multiplexen. Habe da aber Bedenken wegen dem
> Flimmern, wenn man die Wanduhr zum Beispiel beim Lesen im Augenwinkel
> sieht und jedesmal das Flimmern bemerkt, dass bei der Anzahl der LEDs
> und einer Dimmstufe wohl zustand kommt?

Da müsstest du schon verdammt schnell laufen ... wenn das korrekt 
gemacht ist gibt's kein Flimmern da muss man schon außerordentlich blöd 
sein um es flimmern zu lassen. Nachdem du ja einen Atmega nimmst hast du 
ja Puffer bis zum Umfallen.

... dartrax ... schrieb:
> Sollte ich besser einen fertigen Baustein dafür nehmen, der einigermaßen
> günstig ist?

Das erspart dir halt ein bisschen Programmierarbeit (Timingarbeit) am 
ATMEGA. Wenn du genug Pins hast dann würde ich von einem externen IC 
abraten. Nur unnötige Kosten und Einarbeitungszeit ... Ansonsten bei 
deinen Anforderung kommt man auch so sehr gut zurecht. Wenn du viel 
Puffer haben willst dann nimm einen 16MHz Quarz - alternativ nimm den 
interenen und einen zusätzlichen IC. Hier ein netter Artikel: 
http://www.mikrocontroller.net/articles/LED-Matrix

... dartrax ... schrieb:
> Und schließlich die Ansteuerung: Die Uhr soll einige zufallsgesteuerte
> Animationen ausführen können. Ich hab' meine ersten Erfahrungen mit dem
> Atmega8 gesammelt und bin da recht schnell an die Speichergrenzen
> gestoßen.

Ist meistens eine Frage des Codes. Code zu optimieren lernt man leider 
erst mit der Erfahrung / Zeit. Ich kenne einen RGB-LED-Würfel 8x8x8 und 
seinen verrückten Besitzer der macht da die aberwitzigsten Animationen 
in unglaublich kleinem Speicher. Der hat nur ein output Array. Er macht 
da eine Figur die sich im Würfel dreht und die Animation braucht 5 
Zeilen im Code. Verwendet wird nur dieses eine output Array. Die 
Shift-Operations pro Zeile füllen ausgedruckt mehrere Seiten. 
Speicherplatztechnisch braucht er aber nicht viel ..
Als Alternative sind SD/MMC Karten sehr leich anzusteuern.

... dartrax ... schrieb:
> Da würde sich anbieten, der linken Ziffer
> (5x9) und rechten Ziffer (5x9) einen eigenen Controller zu spendieren
> (Die Animationen sind jeweils auf eine Ziffer beschränkt unabhängig
> voneinander) und einen Master, der dann noch solche Bonbons wie Funk
> übernehmen kann.

Glaub mir - nimm lieber einen größeren Controller. Das mit der 
Kommunikation zwischen den 3 MEGAs macht überhaupts keinen Spaß. Es ist 
einfach viel besser einen größeren zu nehmen.

... dartrax ... schrieb:
> Was meint ihr?

Zuerst mal ein ordentliches Multiplexing zu stande bringen, dann drüber 
nachdenken, ein Uhr oder sowas zu implementieren. Halt dir die 
Schnittstellenpins offen...

von ... dartrax .. (Firma: www.dartrax.de) (dartrax)


Lesenswert?

Danke für die Antworten!

Schlechter Code kann sein, ich werd's dann einfach ausprobieren und 
sehen, ob mein vorhandener Atmega8 reicht. Code für den SD-Zugriff hatte 
ich da auch schon drin \*stolz-sei\* ;)

Hast du für die Codeoptimierungen dieser Animationen zufällig noch eine 
URL?

Ich werde also erstmal auf Einkaufstour begeben (ggf. Quarz, 3 
Schieberegister-ICs, 90 LEDs...) und versuche mich dann am Multiplexing.

- dartrax

von Fer T. (fer_t)


Lesenswert?

Eine andere Idee wäre zur ansteuerung statt der Idee Multiplexing 
Charlieplexing.
Damit hat jemand sogar schon eine 90 LED Uhr gebaut:
http://en.wikipedia.org/wiki/Charlieplexing
(siehe Bild).

Dann reichen 10 Pins für 90 LEDs, da #LED = #PINs * (#PINs - 1)

Oder anders:

10 * (10 - 1) = 10 * 9 = 90

von Löwe (Gast)


Lesenswert?

MAX7219 kann schonmal 64 LEDs. Wenn das nicht reicht, muss du den Rest 
manuell oder mit einem 2. MAX machen.

Seitdem ich das Ding einmal in der Hand hatte, will ich kein 
Software-Multiplexing auf dem Atmega mehr ;)

von Jens (Gast)


Lesenswert?

Hallo,
mit dem MAX7219 habe ich auch nur gute Erfahrungen gemacht.
Noch habe ich hier auch welche rumliegen.
Bei Bedarf:
Beitrag "MAX 7219 CNG 24 DIP 2 Stk. 10,- incl. Versand"

Der IC spricht 64 LED`s an und ist kaskadierbar, so sollten 2 Stück für 
128 LED`s genügen.Die Ansteuerung erfolgt seriell über SPI oder mit 
eigener Software.
Jens

von Uwe N. (ex-aetzer)


Lesenswert?

Oder den MAX6954, der kann allein 128 LEDs und wenn es sein muss noch 
32 Tasten gleichzeitig ansteuern/ abfragen, Helligkeit in 16 Stufen 
regelbar ...
Ansteuerung per SPI oder I2C (MAX6955). Gut aber nicht billig.

Gruss Uwe

von Joachim B. (jojo84)


Lesenswert?

Ich hatte spontan an Schieberegister gedacht. Die Ansteuerung per SPI 
ist ja recht einfach. Dann schreibst du noch eine SW-PWM für die Anzahl 
der Schieberegister und fertig. Kleiner Nachteil: ohne größeren 
Programmieraufwand haben immer jeweils alle LEDs an einem 
Schieberegister die gleiche Helligkeit -> nicht jede LED hat einen 
anderen Helligkeitswert. Aber es wäre einfach :) ...

Gruß

von ... dartrax .. (Firma: www.dartrax.de) (dartrax)


Lesenswert?

@Fer T:
(schau mir das heute Abend an)

@Löwe, Jens, Uwe:

Danke für den Tipp. Was kostet denn ein 128er? Hab' da heute morgen auf 
die Schnelle kein Preis ergooglen können.


@Joachim B:

Jede LED muss einzeln gedimmt werden können, wobei eine Dimmstufe 
ausreicht.
Schieberegister allein geht also nicht ;)

- dartrax

von Uwe N. (ex-aetzer)


Lesenswert?

Schau mal hier vorbei:
http://search.digikey.com/scripts/DkSearch/dksus.dll?vendor=0&keywords=max6954

Naja, ca.22 Euronen, wie gesagt nicht billig. Andere Bezugsquelle ist 
Maxim selbst - Stichwort Samples (Muster).

Vorteil: du benötigst nur den AVR, den MAX6954 und einen Spannungsregler 
plus das obligatorische Vogelfutter + LEDs, alles in allen sehr 
übersichtliche Software, einfaches Schematic und Routing.

Oder halt 2 MAX7219 nehmen, die bekommst du AFAIK auch bei Reichelt. Die 
kosten aber in der SMD Variante auch etwa 7 Euros (aber keine 
Tastenabfrage).

Du kannst es natürlich auch mit den "klassischen" Schieberegistern 
lösen.
Nachteil: etwas "angegraute" Technik, erinnert mich irgendwie an die 
"TTL-Gräber", weil viele IC's

Alles eine Frage des Geschmacks + Geldbeutel
Gruss Uwe

von MaWin (Gast)


Lesenswert?

Die 1. Frage ist: Welche LEDs müssen gleichzeitig leuchten können ?

Nur 1 von 60 ? Das geht mit weniger Aufwand als wenn alle 60 
gleichzeitig leuchten müssen (ausserdem reicht ein kleiner 
dimensioniertes Netzteil).

2. MAX7219 und MAX6954 funktionieren natürlich nur mit Schummerlicht. 
Wenn deine Uhr im Dunklen Zimmer ohne Fenster steht oder tagsüber nicht 
ablesbar sei muss, kann das gehen. Wenn du volle Helligkeit der 
verbauten LEDs erreichen willst, taugen die nicht.

Dimmbar mit Konstantstrom ohne Multiplexing und Flimmern wären: TLC5921 
und ähnliche.

von Uwe N. (ex-aetzer)


Lesenswert?

Nachtrag:

der MAX7219 hat die Möglichkeit, per externen Transistor stärkere, 
sprich hellere Leds anzusteuern. Das sollte beim MAX6954 prinzipiell 
auch gehen, ist hier allerdings aufgrund des "Charlieplexings" nicht 
ganz so trivial.

Gruss Uwe

von ... dartrax .. (Firma: www.dartrax.de) (dartrax)


Lesenswert?

22€ sind nicht ganz so ideal wie ich mir das vorgestellt hab'.
Da ich mit nur 1-2 Tasten rechne, würden's auch zwei MAX7219 tun, denke 
ich. Die könnten dann laut Uwe entsprechend helle LEDs betreiben. 
Momentan tendiere ich zu dieser Lösung... Oder Multiplexing mit 
Atmega...
Um nochmal sicher zu gehen: Der MAX7219 kann jede LED einzeln dimmen? Im 
Datenblatt hab' ich nur gefunden "analog and digital brightness 
control". Oder geht das nur per Soft-IWM vom Atmega aus?

@MaWin:
Es werden zwischen 24 und 46 LEDs gleichzeitig leuchten.
Was hat denn der TLC5921 für Vorteile gegenüber zwei Max7219? Ich 
brauch' wahrscheinlich nur einen, hab' einen Preis bei 
http://search.digikey.com/scripts/DkSearch/dksus.dll?Detail&name=296-10349-5-ND 
gefunden für 4$.
Wie sieht's hier mit der Dimmbarkeit einzelner LEDs aus?

@Fer T:
Ich habe hier: Beitrag "Charlieplexing Frequenz?" gelesen, 
dass Charlieplexing nicht für 24-46 LEDs brauchbar ist.

- dartrax

von Uwe N. (ex-aetzer)


Lesenswert?

... dartrax ... schrieb:
> Um nochmal sicher zu gehen: Der MAX7219 kann jede LED einzeln dimmen?

Negativ, er kann die Helligkeit nur global steuern. Genauso beim 
MAX6954, der kann segmentweise die Helligkeit steuern.


@MaWin:

Hab gestern einen älteren, fliegenden Testaufbau vom MAX6954 gefunden, 
die Helligkeit reicht nicht wirklich um zu "blenden", aber es gibt einen 
durchaus sichtbaren Unterschied zwischen den alten und den neueren,
effizienteren LEDs zu sehen.


Gruss Uwe

von MaWin (Gast)


Lesenswert?

> Was hat denn der TLC5921 für Vorteile gegenüber zwei Max7219?

Deutlich mehr Strom pro (einzelner oder parallelgeschalteter
gleichzeitig leuchtender Gruppe von) LED, nämlich 80mA statt
3.8mA des MAX7219.

Gedimmt werden muss aber per PWM vom Microconroller aus, alle
zusammen per BLANK Eingang oder unterschiedliche Helligkeit
jeder einzelnen LED durch zyklisches neuschreiben.

Wenn man das nicht in Software sondern in Hardware machen will,
geht weder der MAX7219 noch der TLC5921, sondern man braucht
so was wie den TLC5940 oder PCA9532. Kostet auch.

Geiz und hohe Anspruchshaltung geht selten zusammen.

von ... dartrax .. (Firma: www.dartrax.de) (dartrax)


Lesenswert?

Ich hoffe, du hast dich bei den Controllern nicht vertan, MaWin. Denn 
die gibt's ja fast geschenkt:

Den PCA9532 bei Reichelt für 1,90€:
http://www.reichelt.de/?ARTICLE=70043

den TLC5940 bei eBay für 2,60€:
http://cgi.ebay.de/290499654425

Wären zwei von den (welcchen?) zusammen mit einem Atmega nicht die beste 
Lösung?

- dartrax

von Uwe N. (ex-aetzer)


Lesenswert?

... dartrax ... schrieb:
> Wären zwei von den (welcchen?) zusammen mit einem Atmega nicht die beste
> Lösung?

Nicht wenn du 90 LEDs ansteuern willst. Dann benötigst du insgesamt 6 
LED Treiber. PCA9532 od. TLC5940 ist egal, weil beide "nur" 16 Ausgänge 
haben -
die werden NICHT gemultiplext.

Wenn das individuelle Steuern der Helligkeit ein "must have" ist, dann 
wird es halt aufwändiger. Aber warum nicht ? :-)

Gruss Uwe

P.S. ICs kauft man (meine Meinung) nicht in der Bucht.

von MaWin (Gast)


Lesenswert?

> Wären zwei von den

Nicht 2 sondern 6, also zumindest 11.40 EUR.

von ... dartrax .. (Firma: www.dartrax.de) (dartrax)


Lesenswert?

Ok da war der Haken.

Also doch zwei Max7219 mit Dimmen einzelner LEDs durch Soft-PWM im 
Atmega, oder gleich das ganze Multiplexing über Schieberegister direkt 
vom Atmega steuern?

Ist ein bisschen weniger zu löten, aber dafür mehr zu programmieren, 
nehme ich mal an.

- dartrax

von Uwe N. (ex-aetzer)


Lesenswert?

... dartrax ... schrieb:
> Also doch zwei Max7219 mit Dimmen einzelner LEDs durch Soft-PWM im
> Atmega, ...

Die PWM erzeugt der MAX intern selbst, da kommst du von aussen nur per 
SPI ran. Einzeln dimmen sollte machbar sein, umständlich aber.

> ... oder gleich das ganze Multiplexing über Schieberegister direkt
> vom Atmega steuern?

Die Schieberegister Variante hat mit Multiplexing nix zu tun.

> Ist ein bisschen weniger zu löten, aber dafür mehr zu programmieren,
> nehme ich mal an.

Nein, ist easy.

Gruss Uwe

von ... dartrax .. (Firma: www.dartrax.de) (dartrax)


Lesenswert?

Uwe N. schrieb:
> Die PWM erzeugt der MAX intern selbst, da kommst du von aussen nur per
> SPI ran. Einzeln dimmen sollte machbar sein, umständlich aber.

Aber schon in dem ich die zu dimmende Einzel-LED vom Atmega aus im 
entsprechenden Zeitinterval aus und ein schalte, oder?

>> ... oder gleich das ganze Multiplexing über Schieberegister direkt
>> vom Atmega steuern?
>
> Die Schieberegister Variante hat mit Multiplexing nix zu tun.

Ja nee, aber für die Multiplexing-Variante brauch' ich doch 
Schieberegister, wenn ich ganz auf MAX und Moritz verzichte, oder? 
Jedenfalls hab' ich das in dem schönen Artikel gelesen: 
http://www.mikrocontroller.net/articles/LED-Matrix

Die nur-Schieberegister-Variante wäre auch noch möglich, aber ein 
"TTL-Grab", wie du sagst, und wenn ich eh' x ICs einbauen soll, kann's 
auch der PCA9532 sein, dann wird wenigstens die Software übersichtlich 
und das zahlt sich wahrscheinlich auch aus.

>> Ist ein bisschen weniger zu löten, aber dafür mehr zu programmieren,
>> nehme ich mal an.
>
> Nein, ist easy.

Was meinst du jetzt "ist easy", die Programmierung von der 
Schieberegistervariante, Multiplexingvariante oder beide?

- dartrax

von Uwe N. (ex-aetzer)


Lesenswert?

... dartrax ... schrieb:
> Aber schon in dem ich die zu dimmende Einzel-LED vom Atmega aus im
> entsprechenden Zeitinterval aus und ein schalte, oder?

Nein, das macht der Max. Deshalb vereinfachen solche ICs ja einem das 
Leben.
Du musst dem Ding nur sagen, welche LED(s) leuchten sollen.

> Ja nee, aber für die Multiplexing-Variante brauch' ich doch
> Schieberegister, wenn ich ganz auf MAX und Moritz verzichte, oder?

Ja, meine Aussage kannste glaube ich auch vergessen. ;-)

> Die nur-Schieberegister-Variante wäre auch noch möglich, aber ein
> "TTL-Grab", wie du sagst, und wenn ich eh' x ICs einbauen soll, kann's
> auch der PCA9532 sein, dann wird wenigstens die Software übersichtlich
> und das zahlt sich wahrscheinlich auch aus.

Naja, die Software für den oder die "MAXe" ist sehr simpel, die für die 
Muxer-Variante im Prinzip auch, der AVR muss halt ständig rackern.
Wenn du irgendwelche Animationen noch ablaufen lassen willst, kann es 
dann schon mal zu "Hängern" kommen.

> Was meinst du jetzt "ist easy", die Programmierung von der
> Schieberegistervariante, Multiplexingvariante oder beide?

Ich meinte die Programmierung des MAX.

Gruss Uwe

von Uwe N. (ex-aetzer)


Lesenswert?

>> Ja nee, aber für die Multiplexing-Variante brauch' ich doch
>> Schieberegister, wenn ich ganz auf MAX und Moritz verzichte, oder?

Einen hab ich noch: Es gibt ja mehrere Arten, zu LEDs zu multiplexen: 
entweder, indem man die LEDs in Spalten und Reihen anordnet und 
ensprechend schaltet, oder mit Schieberegistern. Der Vorteil der 
"Spalten und Reihen" Muxer ist die Einsparung von Leitungen.

Gruss Uwe

von ... dartrax .. (Firma: www.dartrax.de) (dartrax)


Lesenswert?

Uwe N. schrieb:
> ... dartrax ... schrieb:
>> Aber schon in dem ich die zu dimmende Einzel-LED vom Atmega aus im
>> entsprechenden Zeitinterval aus und ein schalte, oder?
>
> Nein, das macht der Max. Deshalb vereinfachen solche ICs ja einem das
> Leben.
> Du musst dem Ding nur sagen, welche LED(s) leuchten sollen.

Dann widersprichst du aber MaWin:
MaWin schrieb:
> Gedimmt werden muss aber per PWM vom Microconroller aus, alle
> zusammen per BLANK Eingang oder unterschiedliche Helligkeit
> jeder einzelnen LED durch zyklisches neuschreiben.

Wie dimme ich denn eine einzelne LED nun konkret wenn ich den MAX7219 
oder besser den TLC5921 nehmen will? Ich denke man kann denen das nicht 
sagen??

>> Die nur-Schieberegister-Variante wäre auch noch möglich, aber ein
>> "TTL-Grab", wie du sagst, und wenn ich eh' x ICs einbauen soll, kann's
>> auch der PCA9532 sein, dann wird wenigstens die Software übersichtlich
>> und das zahlt sich wahrscheinlich auch aus.
>
> Naja, die Software für den oder die "MAXe" ist sehr simpel, die für die
> Muxer-Variante im Prinzip auch, der AVR muss halt ständig rackern.
> Wenn du irgendwelche Animationen noch ablaufen lassen willst, kann es
> dann schon mal zu "Hängern" kommen.

Die Animationen sollen einen Defekt simulieren, daher wäre ein Hänger in 
der Animation hier und da nicht so schlimm. Wenn dadurch aber die 
wie-auch-immer-einzeln-gedimmten-LEDs wieder aufleuchten oder ausgehen, 
wäre das unschön. Außerdem hat der Atmega eventuell auch noch mit einer 
SD-Karte und einem DCF-Modul zu hantieren.
Braucht der Atmega eigentlich mehr Strom wenn er ständig rackert als ein 
Atmega und zwei MAXe zusammengenommen bzw. ein Atmega und 6 PCA9532, 
oder ist das gegenüber den LEDs wahrscheinlich sowieso vernachlässigbar?

>> Was meinst du jetzt "ist easy", die Programmierung von der
>> Schieberegistervariante, Multiplexingvariante oder beide?
>
> Ich meinte die Programmierung des MAX.

Tja Leute... Da ja jetzt alles easy ist, kann ja nun nichts mehr 
schiefgehen ;P

Wenn jetzt nicht gleich das ultimative Argument kommt, mach' ich eine 
Tabelle mit allen Möglichkeiten, euren Meinungen und würfel' dann ;D

> Einen hab ich noch: Es gibt ja mehrere Arten, zu LEDs zu multiplexen:
> entweder, indem man die LEDs in Spalten und Reihen anordnet und
> ensprechend schaltet, oder mit Schieberegistern. Der Vorteil der
> "Spalten und Reihen" Muxer ist die Einsparung von Leitungen.

Und der Nachteil?

- dartrax

von Uwe N. (ex-aetzer)


Lesenswert?

... dartrax ... schrieb:
> Dann widersprichst du aber MaWin:
> MaWin schrieb:
>> Gedimmt werden muss aber per PWM vom Microconroller aus, alle
>> zusammen per BLANK Eingang oder unterschiedliche Helligkeit
>> jeder einzelnen LED durch zyklisches neuschreiben.

Nein, er sprach von den PCA9532/ TLC5940.

... dartrax ... schrieb:
> Wenn dadurch aber die wie-auch-immer-einzeln-gedimmten-LEDs wieder
> aufleuchten oder ausgehen, wäre das unschön.

Ich meinte mit Hängern eine ruckelige Darstellung, die LEDs sollten 
dabei nicht unkontrolliert an oder aus gehen.

> Außerdem hat der Atmega eventuell auch noch mit einer
> SD-Karte und einem DCF-Modul zu hantieren.

Das ist für den AVR ja schon viel gerechne, da wird es sicher bei einer 
Animation hakeln. Aber das ist ja kein Problem.

> Tja Leute... Da ja jetzt alles easy ist, kann ja nun nichts mehr
> schiefgehen ;P

Jetzt keinen Sarkasmus ;-). Einfach 2 Maxe geordert/ gesampled und 
loslegen. Nimm die AVR eigne SPI Schnittstelle und schicke einfach ein 
paar Befehle ins Senderegister. Ausser der korrekten SPI-Initialisierung 
kommt da nicht viel mehr.

... dartrax ... schrieb:
> Wenn jetzt nicht gleich das ultimative Argument kommt, mach' ich eine
> Tabelle mit allen Möglichkeiten, euren Meinungen und würfel' dann ;D

Warum baust du nicht beide ? Da lernste ne Menge, und Spass macht es 
ausserdem.

> Und der Nachteil?

Hm, ehrlich gesagt, die Schieberegister Variante habe ich selber nie 
gebaut, aber der Software Aufwand der Spalten u. Reihen Muxer ist 
vielleicht ein Ticken grösser ...

Gruss Uwe

von Uwe N. (ex-aetzer)


Lesenswert?

... dartrax ... schrieb:
> Wie dimme ich denn eine einzelne LED nun konkret wenn ich den MAX7219
> oder besser den TLC5921 nehmen will? Ich denke man kann denen das nicht
> sagen??

Beim MAX ist das eher umständlich: du müsstest vor jedem setzen einer 
neuen LED Position einen Befehl zum einstellen der Helligkeit senden. 
Solange nur eine LED leuchten soll ist das kein Problem, bei mehreren 
funktioniert das nicht mehr (gleichzeitig).

Beim TLC5921 schreibst du nur einen neuen Wert für die Helligkeit in das 
entsprechende Register, die haben, wenn ich das DB richtig überflogen 
habe, jeweils pro LED-Treiber einen eigne PWM-Erzeugung.

Den TLC5921 kannte ich bisher auch nicht, scheint aber interessant zu 
sein.

von MaWin (Gast)


Lesenswert?

> Wie dimme ich denn eine einzelne LED nun konkret wenn ich den MAX7219
> oder besser den TLC5921 nehmen will? Ich denke man kann denen das nicht
> sagen??

Die Leute hier verwechseln Multiplex und PWM.

Bei Multiplex ist eine LED zwar auch nur einen Bruchteil der Zeit an und 
den Grossteil der Zeit aus,
aber nur damit andere an derselben Leitung in der Zwischenzeit leuchten 
können.
Am MAX7219 ist eine LED also entweder voll leuchtend oder ganz dunkel, 
mit PWM für die Helligkeit hat das Multiplexen nichts zu tun.
Damit man die Helligkeit einzeln regeln kann, muss der uC dafür sorgen, 
daß sie nur eine bestimmte Prozentzahl der Zeit von MAX7219 leuchtend 
dargestellt wird.
Dazu muss der uC die Information im Speicher des MAX7219 ganz schnell 
neu scheiben, bei 100 Hz und 10 Helligkeitsstufen 1000 mal pro Sekunde, 
wobei er ja nach zu erzielender Helligkeit die LED 0 bis 9 mal als 1 und 
entsprechend 9 bis 0 mal als 0 schreibt.
Das muss man auch noch sychron zur Multiplex des MAX7219 machen, sonst 
gibt es nervende Flimmereffekte.

Der TLC5921 ist im Prinzip genau so, auch 1000 mal die LED als 0 oder 1 
neuschreiben, aber zumindest muss man bei ihm nicht auf irgendeine 
andere Frequenz synchronisieren.

Erst der TLC5940/PCA9532 ist anders, dort schreibt man direkt die 
Helligkeit der LEDs und der Chip macht alles weitere von allein, der uC 
kann sich also (bis das dargestellte Bild geändert werden soll) schlafen 
legen.

von Uwe N. (ex-aetzer)


Lesenswert?

MaWin schrieb:
> Dazu muss der uC die Information im Speicher des MAX7219 ganz schnell
> neu scheiben, bei 100 Hz und 10 Helligkeitsstufen 1000 mal pro Sekunde,

Nein. So ist es eben nicht. Der Max hat intern etwas RAM zum speichern.
Ich sag ihm nur EINMAL, welche LED leuchten soll, danach kann der AVR 
schlafen gehen.

Und nochmal: der MAX steuert die Helligkeit intern per PWM (ja, hat nix 
mit Muxen zu tun). Der µC muss hierbei nix weiter machen, als einen Wert 
in das PWM Register zu schreiben.

> Das muss man auch noch sychron zur Multiplex des MAX7219 machen, sonst
> gibt es nervende Flimmereffekte.

Umso was braucht man sich im Falle des MAX7219 keine Sorgen machen, hier 
muss nix synchron geschehen - ist schon ein netter, praktischer und 
einfacher Käfer.

von led frickler (Gast)


Lesenswert?

... dartrax ... schrieb:
> 90 (5+5)x9 rote LEDs für eine Wanduhr sollen einzeln ansteuerbar sein,
> möglichst in zwei Helligkeitsstufen.
> Zusätzlich sollen alle LEDs gedimmt werden können für Anpassung an die
> Umgebungshelligkeit.
> Wäre schön, wenn das einigermaßen stromsparend abläuft.

Ich habe mir eine LED Uhr gebaut mit 5x16 LEDS (eigentlich 5X16 
bi-color). Dazu habe ich 4x 74hc4094 verbaut und treibe damit die LEDs 
direkt. Die LEDs liegen aber verteilt an den 4094, damit diese nicht 
überlastet werden, also immer 4 pro 4094. Weitere Pins mit Transistor 
für die jew. Zeile sind ebenfalls auf die 4094 verteilt (5 rot, 5 gelb). 
Also ein "spalten-und-reihen-muxer". Beim Proggen muss man sehr 
aufpassen und testen testen testen, damit wirklich nur immer eine Zeile 
aufs Mal aktiv ist, sonst rauchen die 4094 ab.

Mein atmegaXX8 20Mhz schafft ohne Probleme 2k "Zeilen" pro Sekunde, 
damit kann ich 3 Helligkeitsstufen softwaremässig abbilden, ohne dass 
ein Flackern wahrnehmbar ist. Hab alles mit C, ohne inline/extern ASM 
programmiert.

Einfach als Gedankenanstoss, dass es auch ohne Spezial-ICs geht. :)

von Uwe N. (ex-aetzer)


Lesenswert?

led frickler schrieb:
> Einfach als Gedankenanstoss, dass es auch ohne Spezial-ICs geht. :)

Ja, denke ich auch. Aber wenn schon, dann rate ich wie led frickler auch 
zur Spalten/ Reihen Variante. Die ist vom IC Aufwand her geringer. Mit 
einem 16fach und einem 8fach Muxer kannst du 128 LEDs bedienen, d.h. mit 
2 ICs !
Wenn diese dann auch noch ordentlich Strom treiben können, kommst du um 
Nachbrenner in Form von zusätzlichen Transitoren herum.
Allerdings muss ich zugeben, das mir spontan kein Muxer mit akzeptabler 
Strom Sink/ Source Fähigkeit einfällt :-(

von ... dartrax .. (Firma: www.dartrax.de) (dartrax)


Lesenswert?

Ich werde folgende Vorschläge ausprobieren:

a) Zwei TLC5921

b) Multiplexen mit drei 74hc4094 und zwei ULN2003 (Alles richtig?)

c) Multiplexen ohne Schieberegister mit Spalten-Reihen-Schaltung (???)

@Uwe: Kannst du mir noch erklären/einen Link geben, wie die 
Spalten/Reihenschaltung ohne Schieberegister genau funktioniert?
Und falls du doch noch einen "Muxer" (sind das Schieberegister?) weißt, 
der genug Strom (wie viel?) abkann, könnte ich mir wohl die ULNs sparen.

Im Prinzip fehlen mir dann ja nur noch die LEDs, Vorwiderstände, Atmega 
und Stromquelle.

- dartrax

von Florian G. (stromflo)


Lesenswert?

Hi,

weitere Alternative?!

WS2801
Kann dann jeweils eine RGB LED ansteuern. Konstantstromquelle ist 
integriert. Allerdings ist es natürlich auch eine Kostenfrage bei 90 
Leds werden auch 90x WS2801 benötigt. Angesteuert werden können die über 
SPI. Eine Pause von größer 500µs führt zur Ausgabe der Werte. Jeder 
WS2801 wird mit 24 Bit gefüttert, je Farbe 1 Byte. Die WS2801 werden 
kaskadiert.

Gruß Flo

von Mike (Gast)


Lesenswert?

Du könntest auch einen AVR mit etwas mehr I/O verbauen (z.B. Mega 16). 
Ich würde 2 Ports für die LED-Spalten und einen für die Zeilen verwenden 
(16x8 Matrix). Du hast dann auch immer noch einen Port frei. Eventuell 
kannst du die Spalten direkt mit dem AVR ansteuern (die max. 200mA 
Gesamtstrom beachten!).

Für das Multiplexing/Dimming könntest du einen Timer mit 2 Output 
Compare Units verwenden (Timer 1 im Mega 16). Der Interupt von Unit A 
schaltet die LED-Zeilen weiter und mit dem für Unit B kannst du die 
Zeile bei einem beliebigen Zwischenstand des Zählers abschalten.

Die 2 Helligkeitsstufen könntest du damit erreichen, dass du eine Zeile 
während des Multiplexens 2x darstellst (An/An - An/Aus - Aus/Aus).

Falls du mehr Speicher brauchst: es gibt 40 Pin AVR die deutlich mehr 
davon haben (Mega 644: 64k).

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.