Forum: Analoge Elektronik und Schaltungstechnik 10*11 LED Matrix mit Raspberry Pi


von Hero n. (heronation)


Lesenswert?

Hallo zusammen,

ich habe noch nicht wirklich Erfahrung mit dem Erstellen von 
elektrischen Schaltungen. Daher verzeiht mir die ein oder andere 
Begriffsstutzigkeit.

Mein Projekt:
Ich möchte eine LED Matrix mit 10 Zeilen und 11 Spalten aufbauen und mit 
dem Raspberry Pi über die GPIO Schnittstelle ansteuern. Letztendlich 
möchte ich damit eine Wordclock programmieren, aber meine Fragen 
beziehen sich hier erstmal auf die Bauteile.

Bisher liegen folgende Sachen in meinem Warenkorb:
3* 74HC 595 Schieberegister
ausreichend 3mm LED rot 300mcd diffus 2.1V (von leds.de)
21 BC 337-40 Transistoren

Über Multiplexing und Schieberegister habe ich mich schon ein bisschen 
eingelesen, blicke allerdings noch nicht ganz durch :-).

Meine erste Frage ist: Welche Widerstände brauche ich?
Dazu kommt noch: Je LED einen Widerstand oder pro Zeile/ Spalte?

Gruß
Heronation

von Guest (Gast)


Lesenswert?

Hero nation schrieb:
> Meine erste Frage ist: Welche Widerstände brauche ich?
> Dazu kommt noch: Je LED einen Widerstand oder pro Zeile/ Spalte?

Wenn du multiplext fließt durch jede LED nur 1/#Zeilen der Zeit Strom, 
also auch Leistung.
Energie = Leistung mal Zeit und die Leuchtstärke der LEDs ist 
proportional zur Energie.
Soll heißen, um die maximale Leuchtstärke aus den LEDs zu bekommen, 
musst du sie mit so viel Strom speisen, damit sich die geringere 
Leuchtdauer ausgleicht. Die Widerstände sollten also so dimensioniert 
sein, dass das #Zeilen-Fache des normalen Vorwärtsstromes fließt.

VORSICHT: Wenn du das machst und einen Fehler im Programm hast, brennen 
dir die LEDs gnadenlos ab.
VORSICHT: LEDs verkraften normalerweise nicht das 10-Fache ihres 
normalen Stroms, auch nicht im Multiplexbetrieb, das Datenblatt der LEDs 
gibt hier Auskunft über den maximalen Peak-Strom. Der liegt wenn ich 
mich nicht täusche normalerweise so beim etwa 7-Fachen des normalen 
Stroms, du kannst die Teile also nicht mit voller Helligkeit fahren, 
wenn du eine 10x11 Matrix baust.

Ein Widerstand pro Spalte, wenn du über die Zeilen multiplext.

von MaWin (Gast)


Lesenswert?

Wenn du die 10 x 11 Matrix auch so aufbauen willst braucht eine LED 
200mA also 10 mal mehr Strom in der kurzen 1/10 Zeit als wenn sie mit 
20mA dauerleuchtet, und eine Zeile den Strom von 11 solchen LEDs also 
2.2A das schaffen keine BC337.
Es reichen 11 Widerstände.

Wenn man etwas klüger ist erkennt man dass nicht alle 10 Zeilen zugleich 
leuchten sondern maximal 4. Dann reichen 80mA und 880mA.

Für 80mA muss man keine 595 mit nachgeschalteten Transistoren nehmen, 
sondern es gibt LED Treiber wie CAT4016 die sogar die Widerstände 
einsparen helfen. Damit hat man 16 Spalten, also reichen 7 Zeilen, man 
muss nur geschickt verdrahten.

Bleiben 7 Spalten die 1.6 A schalten müssen, dazu gäbe es IRF7301 an 
74hc595.

von Norbert (Gast)


Lesenswert?

Du möchtest LEDs mit höheren Strömen ansteuern.
Du möchtest multiplexen.
Du möchtest ein nicht realtime OS nutzen.

Pick any two!

von Norbert (Gast)


Lesenswert?

Spende deine Transistoren für einen guten Zweck.
Kaufe dir weitere 11 Stück 595er.
Alle kaskadieren, ergibt 112 Ausgänge.
An jeden 595 hängst du über passende Vorwiderstände
(für 10-15mA pro LED)
jeweils 4 LED gegen Vcc und 4 LED gegen Masse.

1) Sclr runter und rauf
2) Daten (112Bit) 'reinschieben über Sin und Sck
3) Übernehmen mit Rck

Fertich!

von Hero n. (heronation)


Lesenswert?

Hallo, danke für die schnellen und umfangreichen Antworten. Ich habe mir 
dazu mal ein paar Gedanken gemacht.

MaWin schrieb:
> Wenn man etwas klüger ist erkennt man dass nicht alle 10 Zeilen zugleich
> leuchten sondern maximal 4. Dann reichen 80mA und 880mA.

Ich würde zunächst gerne eine komplette LED Matrix aufbauen, ohne darauf 
zu achten, wie das am Ende genutzt wird. Also sollte es möglich sein, 
auch alle LEDs leuchten zu lassen.

MaWin schrieb:
> Für 80mA muss man keine 595 mit nachgeschalteten Transistoren nehmen,
> sondern es gibt LED Treiber wie CAT4016 die sogar die Widerstände
> einsparen helfen. Damit hat man 16 Spalten, also reichen 7 Zeilen, man
> muss nur geschickt verdrahten.

Da ich sehr neu bin in diesem Thema, würde ich lieber etwas 
offensichtlicher arbeiten und weniger "um die Ecke denken".
Daher hatte ich daran gedacht, die Matrix in 4 Felder aufzuteilen:
Jeweils 5 Zeilen mit 6 Spalten (bei den zwei rechten Feldern ist dann 
die letzte Spalte nicht vorhanden, müsste aber wahrscheinlich für 
gleiche Helligkeit irgendwie ausgeglichen werden)
Das würde die Ströme wohl verringern.

Norbert schrieb:
> Du möchtest LEDs mit höheren Strömen ansteuern.
> Du möchtest multiplexen.
> Du möchtest ein nicht realtime OS nutzen.
>
> Pick any two!

Also meinst du, dass das mit dem Raspberry Pi nicht geht und ich zB 
einen ATmega nutzen sollte, damit das zuverlässiger läuft? Dazu lasse 
ich mich gerne überreden. Wollte nur gerne den RasPi nutzen, da ich 
einen da habe und nebenbei etwas Python lernen wollte.

Norbert schrieb:
> Kaufe dir weitere 11 Stück 595er.
> Alle kaskadieren, ergibt 112 Ausgänge.
> An jeden 595 hängst du über passende Vorwiderstände
> (für 10-15mA pro LED)
> jeweils 4 LED gegen Vcc und 4 LED gegen Masse.

Diese Dampfhammermethode gefiel mir anfangs gut, allerdings ist das mit 
einem recht hohen Verdrahtungsaufwand verbunden, daher schließe ich 
diesen Weg erstmal aus.

Ein Bekannter empfiehlt pro LED einen eigenen Widerstand zu nutzen. Was 
hätte das für Vorteile?

Bezüglich des Aufbaus hatte ich mich an folgende Schaltung gehalten.
http://www.mikrocontroller.net/wikifiles/6/64/LED_Matrix_8x5.png
Ich hatte naiv einfach gedacht: Ein paar mehr LEDs, Transistoren, 
Widerstände. Die Werte anpassen und los gehts...

Gruß

von Norbert (Gast)


Lesenswert?

Hero nation schrieb:

> Also meinst du, dass das mit dem Raspberry Pi nicht geht und ich zB
> einen ATmega nutzen sollte, damit das zuverlässiger läuft? Dazu lasse
> ich mich gerne überreden. Wollte nur gerne den RasPi nutzen, da ich
> einen da habe und nebenbei etwas Python lernen wollte.

Wenn du multiplexen willst, brauchst du höhere Ströme um halbwegs 
Helligkeit aus den LEDs zu kitzeln.
Was passiert nun, wenn das OS plötzlich mal eine andere Aufgabe als 
wichtig ansieht und dein Prozess erst 100ms später einen timeslice 
bekommt?
Da wird den zur Zeit aktiven LEDs ganz warm ums Herz.

> Norbert schrieb:
>> Kaufe dir weitere 11 Stück 595er.
>> Alle kaskadieren, ergibt 112 Ausgänge.
>> An jeden 595 hängst du über passende Vorwiderstände
>> (für 10-15mA pro LED)
>> jeweils 4 LED gegen Vcc und 4 LED gegen Masse.
>
> Diese Dampfhammermethode gefiel mir anfangs gut, allerdings ist das mit
> einem recht hohen Verdrahtungsaufwand verbunden, daher schließe ich
> diesen Weg erstmal aus.

Dafür hättest du keinerlei Timing Probleme und nahezu Null CPU 
Belastung.
Außerdem hätte die LEDs eine akzeptable Helligkeit.

> Ein Bekannter empfiehlt pro LED einen eigenen Widerstand zu nutzen. Was
> hätte das für Vorteile?

> Bezüglich des Aufbaus hatte ich mich an folgende Schaltung gehalten.
> http://www.mikrocontroller.net/wikifiles/6/64/LED_Matrix_8x5.png

Szenario 1) In der Zeile ist eine LED aktiv.
Iled1 = (Vcc-Q1ce-Uf) / R1
(5V - 0,7V - 1,7V) / 68 = 38mA

Szenario 2) In der Zeile sind alle 5 LEDs aktiv.
Iledx = (Vcc-Q1ce-Uf)  R1  5
(5V - 0,7V - 1,7V)  68  5 = 7,6mA
und das auch nur wenn alle Uf absolut gleich wären!


> Ich hatte naiv einfach gedacht: Ein paar mehr LEDs, Transistoren,
> Widerstände. Die Werte anpassen und los gehts...

Tja

von Daniel (Gast)


Lesenswert?

Norbert schrieb:
>> Norbert schrieb:
>>> Kaufe dir weitere 11 Stück 595er.
>>> Alle kaskadieren, ergibt 112 Ausgänge.
>>> An jeden 595 hängst du über passende Vorwiderstände
>>> (für 10-15mA pro LED)
>>> jeweils 4 LED gegen Vcc und 4 LED gegen Masse.
>>
>> Diese Dampfhammermethode gefiel mir anfangs gut, allerdings ist das mit
>> einem recht hohen Verdrahtungsaufwand verbunden, daher schließe ich
>> diesen Weg erstmal aus.
>
> Dafür hättest du keinerlei Timing Probleme und nahezu Null CPU
> Belastung.
> Außerdem hätte die LEDs eine akzeptable Helligkeit.

Man hat also eine schnelle CPU und muss dann mehr Hardwareaufwand 
betreiben, damit die schnelle CPU nahezu null Last mit der eigentlichen 
Aufgabe hat, weil man nur die schnelle CPU durch ein Betriebssystem und 
interpretierte Programmiersprachen langsam machen kann, während eine 
langsame CPU sich mit Volllast um die eigentliche Aufgabe kümmern 
könnte? ;-)

von MaWin (Gast)


Lesenswert?

> Szenario 1) In der Zeile ist eine LED aktiv.
> Iled1 = (Vcc-Q1ce-Uf) / R1
> (5V - 0,7V - 1,7V) / 68 = 38mA
> Szenario 2) In der Zeile sind alle 5 LEDs aktiv.
> Iledx = (Vcc-Q1ce-Uf)  R1  5
> (5V - 0,7V - 1,7V)  68  5 = 7,6mA
> und das auch nur wenn alle Uf absolut gleich wären!

Du hast offensichtlich nicht mal ansatzweise verstanden,
was in einer LED-Matrix Zeile und Spalte ist,
willst aber einem Fragenden was raten. Au weia.

von Norbert (Gast)


Lesenswert?

Daniel schrieb:

> Man hat also eine schnelle CPU und muss dann mehr Hardwareaufwand
> betreiben, damit die schnelle CPU nahezu null Last mit der eigentlichen
> Aufgabe hat, weil man nur die schnelle CPU durch ein Betriebssystem und
> interpretierte Programmiersprachen langsam machen kann, während eine
> langsame CPU sich mit Volllast um die eigentliche Aufgabe kümmern
> könnte? ;-)

Ich kann nirgends eine 'schnelle' und eine 'langsame' CPU erkennen.
Darum geht's noch nicht mal ansatzweise.
Es geht darum, eine verlässliche 'Abtastrate' zu erzeugen, die einen 
zeitlichen Maximalwert nicht überschreiten darf wenn man LEDs mit 
höherem Pulsstrom betreibt.
Wenn du das mit einem normalen Linux System sicherstellen kannst, 
cool!

von Norbert (Gast)


Lesenswert?

MaWin schrieb:
> Du hast offensichtlich nicht mal ansatzweise verstanden,
> was in einer LED-Matrix Zeile und Spalte ist,
> willst aber einem Fragenden was raten. Au weia.

Wenn man die von ihm verlinkte Schaltung so ansteuert wie gezeichnet,
dann werden die LEDs ausnahmslos mit Überstrom betrieben und brauchen 
immer ein sauberes Timing.
Wenn man die Ansteuerung der Spalten und Zeilen wechselt, werden die 
LEDs nicht mehr mit Überstrom betrieben, sobald mehr als Eine pro Zeile 
leuchtet.
Hatte eigentlich gedacht das so etwas Triviales sich selbst erklärt.
Gerade WEIL es ja um Timing und Übesrtrom ging.
Aber man lernt ja nie aus.

von MaWin (Gast)


Lesenswert?

> Wenn man die von ihm verlinkte Schaltung so ansteuert wie gezeichnet,
> dann werden die LEDs ausnahmslos mit Überstrom betrieben und brauchen
> immer ein sauberes Timing.

Ja, so ist das bei LED_Matrizen.

> Wenn man die Ansteuerung der Spalten und Zeilen wechselt, werden die
> LEDs nicht mehr mit Überstrom betrieben, sobald mehr als Eine pro Zeile
> leuchtet.

Und ansonsten ist alles gut, oder hast du da nicht ein keines etwas 
vergessen ?

von Daniel (Gast)


Lesenswert?

Norbert schrieb:
> Wenn du das mit einem normalen Linux System sicherstellen kannst,
> cool!

Nee, ich kann das sowieso nicht.
Ich bin nur (off-topic) verunsichert über den Trend, Kanonen einzusetzen 
(800 MHz Linuxrechner) und den Spatzen (LED-Matrix ansteuern) dennoch 
nur mit beträchtlichem Zusatzaufwand erschossen zu bekommen.

Ich würde (etwas mehr on-topic) dann vielleicht wirklich einen kleinen 
Controller für die LEDs nehmen und den Raspberry (oder sonstwas 
größeres) seriell damit verbinden, wenn Ethernet oder eine aufwändige 
Benutzerschnittstelle gefordert sind.

von Peter D. (peda)


Lesenswert?

Hero nation schrieb:
> Ich möchte eine LED Matrix mit 10 Zeilen und 11 Spalten aufbauen und mit
> dem Raspberry Pi

Das stelle ich mir sehr kompliziert vor, abgesehen von dem hohen 
Stromverbrauch des RP (700mA).
Ein ATmega88 wäre viel besser geeignet und deutlich einfacher zu 
programmieren.

Hero nation schrieb:
> 3* 74HC 595 Schieberegister
> ausreichend 3mm LED rot 300mcd diffus 2.1V (von leds.de)
> 21 BC 337-40 Transistoren

Sieht o.k. aus. Ich würde allerdings 11 npn und 10 pnp nehmen, dann 
spart man die Basiswiderstände und hat kein Ghosting.
LED-Vorwiderstände brauchst Du 11. Die Berechnung erfolgt nach der 
Stromverträglichkeit der LEDs lt. Datenblatt.
Ob Du überhaupt den Maximalstrom brauchst, solltest Du vorher 
ausprobieren.

von Hero n. (heronation)


Lesenswert?

Ich habe mich jetzt fuer eine Schaltung mit 4 Schieberegistern 
entschieden. Ein passendes und sehr umfangreiches Tutorial habe ich bei 
http://christians-bastel-leben.blogspot.de/ gefunden.

Mal sehen, was dabei rauskommt.

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.