Forum: Mikrocontroller und Digitale Elektronik Arduino 21x7 LED-Matrix - Ist der Aufbau so gut?


von Max G. (max2002)


Angehängte Dateien:

Lesenswert?

Hallo,

Ich habe eine 21x7 LED-Matrix mit drei 74HC595 8-Bit Shift-Registern für 
die Spalten gebaut. Momentan habe ich in meinem Prototypaufbau 1k Ohm 
Widerstände an den 7 Reihen, die von je einem Arduino-Pin (ATmega328P) 
angesteuert werden (Multiplexing).
Die LEDs sind diffuse, blaue 5mm LEDs mit, ich glaube, 20mA und ca. 3V.

Sollte ich da noch Transistoren einbauen oder die Widerstände von den 
Reihen entfernen und Widerstände an den 21 Spalten verbauen? Wenn ja, 
welche?

Dankeschön. :)

von Harlekin (Gast)


Lesenswert?

Die Schaltung hat diverse Stolpersteine:
1) Eine LED kann jeweils nur während weniger als einem siebtel der Zeit 
leuchten. Reicht dies aus?
2) Es muss geprüft werden wie viel Zeit für das Laden der 
Schieberegister benötigt wird.
3) Der 74HC595 verträgt pro IC maximal 70mA => pro Pin etwa 8mA. Für 
einen grösseren Strom Transistorarray verwenden.
4) Pro Zeile können gleichzeitig 21 LED leuchten, prüfen ob der Port 
diesen Strom verträgt.
5) Die LED sollte man nicht parallel schalten. Pro Spalte einen 
Widerstand benutzen.
6) Die Umkehrung der Spaltenreihenfolge 21...17 ist nicht zu empfehlen. 
Das bringt nur unnötiges Kopfzerbrechen beim Programmieren.

Vielleicht sind LED mit integriertem WS2812 eine Alternative.

von Max G. (max2002)


Lesenswert?

@Harlekin
1) Ja, der Prototypaufbau funktioniert ja. Die Helligkeit ist auch recht 
gut.
5) Das mit den Widerständen hab ich mir schon gedacht und die sind auch 
schon längst gekauft. Wollte für den Prototypen auf dem Breadboard nicht 
21 Widerstände verwenden. Auf der Platine werde ich das dann machen.
6) Ups, das ist nur ein Fehler auf dem Schaltplan. Ist mir bis jetzt gar 
nicht aufgefallen. In Wirklichkeit hab ich das im Aufbau natürlich nicht 
umgekehrt.

Die anderen Punkte werde ich später genau durchgehen, wenn ich wieder zu 
Hause bin. Vielen Dank für deine Antwort! :)

von Jörg R. (solar77)


Lesenswert?

Harlekin schrieb:
> Die Schaltung hat diverse Stolpersteine:
> 1) Eine LED kann jeweils nur während weniger als einem siebtel der Zeit
> leuchten. Reicht dies aus?
> 2) Es muss geprüft werden wie viel Zeit für das Laden der
> Schieberegister benötigt wird.
> 3) Der 74HC595 verträgt pro IC maximal 70mA => pro Pin etwa 8mA. Für
> einen grösseren Strom Transistorarray verwenden.
> 4) Pro Zeile können gleichzeitig 21 LED leuchten, prüfen ob der Port
> diesen Strom verträgt.
> 5) Die LED sollte man nicht parallel schalten. Pro Spalte einen
> Widerstand benutzen.
> 6) Die Umkehrung der Spaltenreihenfolge 21...17 ist nicht zu empfehlen.
> Das bringt nur unnötiges Kopfzerbrechen beim Programmieren.
>
> Vielleicht sind LED mit integriertem WS2812 eine Alternative.

Diesen Ausführungen kann man sich nur anschließen.
Ich kann mir nicht vorstellen das die Leds gleich hell leuchten, ohne 
zusätzliche Treiber.

Ist die Verwendung der Schieberegister ein Muss bzw. eine Vorgabe?
Sonst würde ich 3 Stück MAX7219 vorschlagen. Die würden eine 24*8 Matrix 
ergeben. Zusätzliche Treiber bzw. Vorwiderstände für die Leds wären 
nicht notwendig. Ein weiterer Vorteil wäre das weniger Ports am uC 
belegt werden.


Max G. schrieb:
> Sollte ich da noch Transistoren einbauen oder die Widerstände von den
> Reihen entfernen und Widerstände an den 21 Spalten verbauen? Wenn ja,
> welche?

Anstelle des 74HC595 kannst du dessen „großen“ Bruder TPIC6B595 nehmen. 
Der verträgt deutlich mehr Strom, die Ausgänge schalten allerdings gegen 
GND.

http://www.ti.com/lit/ds/symlink/tpic6b595.pdf


Anodentreiber z.B. UDN2981

: Bearbeitet durch User
von MaWin (Gast)


Lesenswert?

Max G. schrieb:
> Sollte ich da noch Transistoren einbauen

Bestimmt nicht.

Max G. schrieb:
> der Prototypaufbau funktioniert ja. Die Helligkeit ist auch recht gut

Ich meine, hallo, eine LED bekommt bei dir (5V-3.2V)/1000/7/21 = 0.012mA 
ab und leuchtet mit 0.06% ihrer Datenblatt Helligkeit, da kannst du doch 
super zufrieden sein.

Wer so ein Display aufbauen könnte und Grundkenntnisse der Elektronik 
verstanden hätte würde erstens nicht 1k Widerstände in die 7 Leitungen 
machen, weil damit eine LED nur 1:21 der Zeit an sein kann, sondern die 
Widerstände in die 21 Leitungen, dann reicht schon ein 1:7 Multiplex. 
Und er würde ausrechnen:

20mA 1/7 der Zeit macht 140mA Pulsstrom für die Helligkeit laut 
Datenblatt, man beachte deren zulässigen Pulsstrom, oft nur 100mA.
21 LEDs mit 140mA macht 2.94A Strom über die 7 Leitungen, was auch der 
Gesamtstromaufname vom Netzteil entspricht.
Man wählt dann selbstverständlich MOSFETs für 3A und Treiber wie ULN2003 
für die 21 Leitungen und bekäme ein Display was nicht nur im dunklen 
Zimmer sondern auch bei Tageslicht draussen ablesbar wäre.
Dabei dreht sich die Polarität der LEDs um, also P-Kanal 
LogicLevelMOSFETs und ermöglicht auch Konstantstromtreiber wie TB62715

Grundlagen gibts hier

http://www.dse-faq.elektronik-kompendium.de/dse-faq.htm#F.8.1

Man kann natürlich auch alle Grundlagen ignorieren und das Rad erneut 
als Spirale erfinden.

von Reiner_Gast (Gast)


Lesenswert?

Jörg R. schrieb:
> Max G. schrieb:
>> Sollte ich da noch Transistoren einbauen oder die Widerstände von den
>> Reihen entfernen und Widerstände an den 21 Spalten verbauen? Wenn ja,
>> welche?
>
> Anstelle des 74HC595 kannst du dessen „großen“ Bruder TPIC6B595 nehmen.
> Der verträgt deutlich mehr Strom, die Ausgänge schalten allerdings gegen
> GND.

Wenn es SMD sein darf, das wäre dieser IC vielleicht interessant:

http://www.ti.com/lit/ds/symlink/tlc59282.pdf

Da reicht ein Widerstand aus, um den Strom für 16 LED zu setzen und die 
Ansteuerung ist die gleiche, wie beim 75HC595

von Falk B. (falk)


Lesenswert?

Siehe LED-Matrix

von Äxl (geloescht) (Gast)


Lesenswert?

Er lädt die Daten für eine koplette Zeile und gibt diese dann über den 
PIN "LED1" frei und lässt die n bissl an.
Dann macht er die oberste Zeile wieder aus und lädt die 24Bits für die 
Zeile draunter. Die 595er halten ja den letzten Zustand.
Jetzt wird die obere Zeile abgeschaltet, die Daten in die Latches der 
595er übernommen und die Zeile "LED2" eingeschaltet.
Wenn ich dieses Spiel mach so bis zur untersten Zeile durchspiel, komme 
ich auf einen Multiplextakt von 1/7tel, nicht auf 1/24tel. Das ginge 
doch noch.
Problematischer sieht es tatsächlich aus, wenn mal alle LEDs in einer 
Zeile leuchten sollen. Dann fliesst (begrenzt durch den gemeinsamen 1K) 
natürlich immernoch nur ein Strom von ca 2mA. Dieser aber mehr oder 
weniger gleichmässig durch alle LEDs. Erstens sicher total duster, 
zweitens "hängen" alle 24 LEDs an einem Vorwiderstnd parallel.
Aber gut - wurde schon gesagt.
Was noch nicht gesagt wurde:
bitte an den 595er auch die Pinbeschriftung (wenigstens ansatzweise) 
drannschreiben UND die obligatorischen 100nF Abblockkondensatoren nicht 
vergessen.
Vorwiderstände 33-47R in die Ausgänge der 595er und an die Anschlüsse 
links (LED1-LED7) einen npn Bipolar-Transistor (Kollektor an den 
Anschluss, Emitter an Masse, basis über 2K2 an den Portpin, welcher 
jetzt den LED1-7 treibt. der 595er überlebt das sicher, auch wenn mal 
alle 8LEDs gleichzeitig an sein sollten.
Aber: Abblockkondesnator nicht vergessen
Wichtig scheint mir auch, auf die Phasenlage von Takt und Datensignal 
hinzuweisen. Oft funktionieren diese Schieberegisterkonstruktionen auf 
dem falschen Phasentakt nur, weil die Datenhaltezeit ausnahmsweise 
passt, hier mal ruhig den SPI-Mode prüfen, sonst wundert man sich, wenn 
das bei längeren Leitungen geht, bei kurzen nicht und vice versa.

von Äxl (geloescht) (Gast)


Lesenswert?

... die oberste Zeile kann natürlich an bleiben, bis die Daten für die 
Zeile darunter komplett eingeschoben sind. Nur für den Zeitpunkt der 
Datenübernahme sollten man mal kurz alles aus machen, sonst gibt es 
lustige Geisterbildeffekte.
Und ja: man kann auch mit der untersten Zeile anfangen.
Obe einem die Kombinatorik so zusagt, hängt vom Handling der Software ab
(Schattenspeicher usw) 7x24 oder 27x7 muss jeder selbst wissen, wie er 
die Daten (Schriftfont zB) im Flash ablegt und diese zur Anzeige bringen 
will.

von Max G. (max2002)


Lesenswert?

MaWin schrieb:
> Ich meine, hallo, eine LED bekommt bei dir (5V-3.2V)/1000/7/21 = 0.012mA
> ab und leuchtet mit 0.06% ihrer Datenblatt Helligkeit, da kannst du doch
> super zufrieden sein.
>
> Wer so ein Display aufbauen könnte und Grundkenntnisse der Elektronik
> verstanden hätte würde erstens nicht 1k Widerstände in die 7 Leitungen
> machen, weil damit eine LED nur 1:21 der Zeit an sein kann, sondern die
> Widerstände in die 21 Leitungen, dann reicht schon ein 1:7 Multiplex.

Also wenn du nicht höflicher antworten kannst, dann vielleicht lieber 
gar nicht?
1. Die LEDs leuchten hell genug.
2. Was haben die Widerstände mit dem Multiplexing zu tun? Ich wollte im 
fertigen Aufbau ja kleinere Widerstände an den Spalten verbauen, aber 
ich wollte im PROTOTYP-AUFBAU nicht 21 Widerstände auf mein Breadboard 
machen und kleinere als 1kO, von denen ich mindestens 7 Stück habe, 
hatte ich nicht.

Sonst ein Dankeschön an alle. Werde alles nochmal durchgehen, wenn ich 
wieder zu Hause bin und den Aufbau dann vielleicht verändern.

Funktionieren tut meine Matrix aber schon. Ich wollte ja nur wissen, ob 
der Aufbau vllt irgendwie schädlich für den ATmega328P oder sonst 
irgendwie ineffizienz sein könnte.

von Falk B. (falk)


Lesenswert?

@ Max G. (max2002)

>1. Die LEDs leuchten hell genug.

Weil es superhelle LEDs sind, Glück gehabt.

>2. Was haben die Widerstände mit dem Multiplexing zu tun?

Sie begrenzen den Strom für die LEDs. Wenn man die in die falsche Seite 
einbaut, vermindert sich der LED-Strom deutlich.

>fertigen Aufbau ja kleinere Widerstände an den Spalten verbauen, aber
>ich wollte im PROTOTYP-AUFBAU nicht 21 Widerstände auf mein Breadboard
>machen

Das kann aber auch mal schief gehen, wenn man seinen Prototypenaufbau 
aus Faulheit nicht so aufbaut, wie man es später machen will.

>Funktionieren tut meine Matrix aber schon. Ich wollte ja nur wissen, ob
>der Aufbau vllt irgendwie schädlich für den ATmega328P oder sonst
>irgendwie ineffizienz sein könnte.

Ist er, weil sich 21 LEDs einen Vorwiderstand teilen. Und weil dein AVR 
nicht viel mehr als 40mA Pro Ausgang liefern kann. Ist aber bei 1k 
Vorwiderstand auch egal, da fließen so oder so nur wenig mehr als 3 mA 
Pulsstrom.

von Maxim B. (max182)


Lesenswert?

Harlekin schrieb:
> 6) Die Umkehrung der Spaltenreihenfolge 21...17 ist nicht zu empfehlen.
> Das bringt nur unnötiges Kopfzerbrechen beim Programmieren.

Hallo,
Ich habe ganz andere Meinung:
wenn dadurch PCB einfacher wird, lohnt es sich, die Ports anders 
anzuordnen, als von Port vorgegeben ist. Ein paar Zeilen auf C bedeutet 
viel weniger Aufwand, als zwischen zwei 2,54 mm Raster mehrere Leitungen 
zu führen.

Ich mache das immer so: zuerst Platte, dann Programm. Alternative 
Funktionen von Pins sollten natürlich beachtet werden, ansonsten so wie 
das für die Platte besser ist.

Viele Grüße,

von Michael B. (laberkopp)


Lesenswert?

Max G. schrieb:
> Also wenn du nicht höflicher antworten kannst, dann vielleicht lieber
> gar nicht?

Also, wenn man nur die Waldorf-Antwort "Max-Kevin, das hast du aber 
schön gemacht, du bist der Beste" hören will, warum fragst du dann 
überhaupt ?

Max G. schrieb:
> Was haben die Widerstände mit dem Multiplexing zu tun?

Wenn man wie du trotz mehrmaligem Daraufhinweisen mehrerer Leute einfach 
nicht begreifen will, wie Widerstandsanordnung und Multiplexing 
zusammenhängt, und keinesfalls versucht irgendwelche vorgemachten 
Berechnungen die nicht über Grundschulmathematik gehen nachzuvollziehen, 
dann sollte man sich vielleicht ein anderes Hobby suchen, wie wäre es 
mit Tanzkursen wenn dir an vorgeblicher Höflichkeit so viel mehr liegt, 
als an Inhalten ?

: Bearbeitet durch User
von Maxim B. (max182)


Lesenswert?

Jörg R. schrieb:
> Anstelle des 74HC595 kannst du dessen „großen“ Bruder TPIC6B595 nehmen.
> Der verträgt deutlich mehr Strom, die Ausgänge schalten allerdings gegen
> GND.
>
> http://www.ti.com/lit/ds/symlink/tpic6b595.pdf
>
> Anodentreiber z.B. UDN2981

Als Anodentreiber könnte man die Reihe MCP14 nehmen.
Die sind zwar als Treiber für MOSFET gedacht, können aber auch als 
Treiber für LED dienen.
Vorteil bleibt unter anderem: die können als Pegelwandler arbeiten und 
bis 18 Volt kommutieren - das kann nützlich sein, wenn für jeden Punkt 
viele LEDs seriell geschaltet werden, besonders blau oder UV.

Ansonsten hätte ich auch lieber MAX7219 nehmen: die entlasten 
Kontroller. Einmal 8 Worte aufschreiben - und vergessen.

Viele Grüße,

: Bearbeitet durch User
von Max G. (max2002)


Lesenswert?

Michael B. schrieb:
> Max G. schrieb:
>> Was haben die Widerstände mit dem Multiplexing zu tun?
>
> Wenn man wie du trotz mehrmaligem Daraufhinweisen mehrerer Leute einfach
> nicht begreifen will, wie Widerstandsanordnung und Multiplexing
> zusammenhängt, und keinesfalls versucht irgendwelche vorgemachten
> Berechnungen die nicht über Grundschulmathematik gehen nachzuvollziehen,
> dann sollte man sich vielleicht ein anderes Hobby suchen, wie wäre es
> mit Tanzkursen wenn dir an vorgeblicher Höflichkeit so viel mehr liegt,
> als an Inhalten ?

Willst du mir sagen, dass ich total verblödet bin? Widerstände begrenzen 
den Strom.
Beim Multiplexing schalte ich durch die 7 Zeilen durch. Die Widerstände 
beeinflussen mein Multiplexing doch nicht. Sie begrenzen nur den Strom, 
aber sonst nichts. Gut, ist vllt nicht gut, dass ich auf dem Breadboard 
die Widerstände in die Reihen mache, aber wenn du meine Antworten 
gelesen hättest, wüsstest du, dass ich im fertigen Aufbau kleinere 
Widerstände in die Spalten machen werde.
Den zweiten Teil der Antwort hättest du dir aber echt sparen können. Ich 
lerne noch, also nehme doch bisschen Rücksicht darauf, dass ich nun auch 
nicht alles weiß, sonst hätte ich ja nicht gefragt...

von Harlekin (Gast)


Lesenswert?

Maxim B. schrieb:
> Ich habe ganz andere Meinung:
> wenn dadurch PCB einfacher wird, lohnt es sich, die Ports anders
> anzuordnen, als von Port vorgegeben ist. Ein paar Zeilen auf C bedeutet
> viel weniger Aufwand, als zwischen zwei 2,54 mm Raster mehrere Leitungen
> zu führen.

Im Hobbybereich ist das vollkommen in Ordnung.

Hingegen im industriellen Umfeld würde ich mir solche Tricks zweimal 
überlegen. Wenn man bei jeder PCB-Version die Bitreihenfolge ändert, 
dann freuen sich die Programmierer weniger. Die Softwarepflege wird 
erschwert. Ein Firmwareupdate funktioniert nur bei einer bestimmten 
Hardware. Softwaretests werden aufwendiger.

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.