Forum: Mikrocontroller und Digitale Elektronik LED Matrix mit STP16CP05


von Neu (Gast)


Lesenswert?

Hi, ich hab hier ein paar LED Treiber vom Typ STP16CP05 liegen.

Ich will damit eine kleine Matrix aufbauen, jetzt weiß ich allerdings 
nicht, wie ich das mit möglichst wenigen mache.

Ich wollte zwei davon als Spaltentreiber mit PNP Transistoren verwenden 
und jeweils 2, die die Reihen ansteuern.

Dies würde aber bedeuten, dass ich trotzdem die Befehle im Falle der 
untersten Zeile durch alle STP16CP05 führen müsste, was ich allerdings 
eigentlich vermeiden möchte.

Wie könnte ich das mit den LED Treibern anstellen, dass der Code nicht 
durch alle Bausteine durchgezogen werden muss?

lg Thomas

von Neu (Gast)


Angehängte Dateien:

Lesenswert?

Hab mal ein Plan gezeichnet, könnte das so funktionieren:

Die Basis jedes PNP Transistors liegt an einer Senke des STP16CP05, der 
Emitter liegt an der Versorgungsspannung, der Kollektor liegt an der 
Anode der jeweils ersten LED.

Die Kathoden der LEDs hängen an dem 2. STP16CP05


Sind 16 LEDs zuviel?, ich wollte zwar ziemliche helle LEDs nehmen und 
die dann mit jeweils maximal 3mA betreiben, aber es heißt ja eigentlich 
10:1 und nicht 16:1


lg Thomas

von Christian T. (shuzz)


Lesenswert?

Ich bin mir nicht sicher, ob man mit den Dingern wirklich ordentlich 
PNPs ansteuern kann, zumindest sind sie eigentlich nicht dafür 
gedacht...

Ich würd's so machen:

Nimm zwei von den Teilen und organisiere Deine Matrix statt als 16x16 
lieber als 8x32.
Für die Ansteuerung der Spalten nimmst dann ein stinknormales 74HC595 
mit dem Du Deine PNPs ansteuerst.

Damit kommst Du dann auch auf ein 1:8 Multiplexing.

>Wie könnte ich das mit den LED Treibern anstellen, dass der Code nicht
>durch alle Bausteine durchgezogen werden muss?

Du kannst sie jeweils über eigene Pins ansteuern (die STP16PC05 haben 
scheinbar keine ChipSelect Leitung), musst dann aber die SPI 
Kommunikation komplett in Software handhaben. Das ist nervig und vor 
allem wesentlich langsamer als über den Hardware-SPI im µC.

Häng die Teile einfach in Reihe und klopf die Bytes da durch, mit 
Hardware-SPI geht das allemal schnell genug.
(Brauchst bei 8x32 dann 5 Byte pro Spalte, mal 8 Spalten macht das 40 
Byte für einen kompletten Bildaufbau. Da kriegste Bildwiederholraten 
jenseits von Gut und Böse hin.)


Grüße,

Christian


Edit (weil eben erst realisiert):
>Ich will damit eine kleine Matrix aufbauen, jetzt weiß ich allerdings
>nicht, wie ich das mit möglichst wenigen mache.
>Ich wollte zwei davon als Spaltentreiber mit PNP Transistoren verwenden
>und jeweils 2, die die Reihen ansteuern.
Heiliger Bimbam, was verstehst Du denn unter einer "kleinen Matrix"?!?
Du redest da grad von 32x32 (=1024) LEDs!!!!
Mein Vorschlag mit 8x32 bezog sich auf Deinen Schaltplan, der zeigt 
"nur" eine 16x16 Matrix...

von Neu (Gast)


Lesenswert?

wow, vielen Dank für deine Antwort.

Was denkt ihr?, ginge das nich mit den STP16CP05 als Ansteuerung für die 
PNPs?

Das sind ja stromquellen, daher sollte sich doch die richtige Spannung 
da einstellen?

von Tim (Gast)


Lesenswert?

"wow, vielen Dank für deine Antwort.

Was denkt ihr?, ginge das nich mit den STP16CP05 als Ansteuerung für die
PNPs?

Das sind ja stromquellen, daher sollte sich doch die richtige Spannung
da einstellen?"

Momentmal, was hat das mit Spannug zu tun ?
Du solltest nen 1K vor die Basis hängen, damit du eine Strombegrezung 
hast. Spannung, hängt dann vom Transistor und vom Widerstand ab. Und 
somit dem daraus resultirendem Strom.
Allerdings auch von der Betriebspannung.

Normalerweise sollte das schon gehen, aber lass diese komischen Treiber 
weg, und machs wie mein Vorredner schon super erklärt hat ;)

LG Tim

von Neu (Gast)


Angehängte Dateien:

Lesenswert?

Also, jetzt hab ich 2 74HCT595 und einen STP16CP05 genommen.


Die Basis der PNPs liegt an den 74HCT595, der Emitter an VCC und der 
Kollektor geht zu der Anode der ersten LED in der Reihe.

Der STP16CP05 ist ja eine Senke, daher hab ich ihn an die Kathoden der 
LEDs geschalten.


Sind die PNPs richtig herum?

geht das so?

von Neu (Gast)


Lesenswert?

kleine Frage noch zusätzlich:

Ist es überhaupt klug das so mit den PNPs zu verschalten?

Die Ausgänge des 74HCT595 sind ja standardmäßig auf Low, trotz Tri-State 
Ausgangs. Das würde ja bedeuten, dass ich Gefahr laufe, dass am Anfang 
durch alle LEDs der Pulsstrom fließt?


Den LE Pin des STP16CP05 hab ich parallel zum RCK des 74 595 gelegt. Die 
CLK hängt parallel an SCK, passt das so?

von Christian T. (shuzz)


Lesenswert?

Bei Deinem Schaltplan brauchst Du nur einen 595.

Mit z.B. nem BC336 (das war doch der PNP oder?) kannst Du 500mA 
schalten, das sollte für 16 LEDs ausreichen. Zur Not halt nen etwas 
dickeren PNP nehmen oder die LEDs in zwei Gruppen teilen (wie in Deinem 
Plan), aber die Transistoren mit nur einem SR ansteuern.

Mit dem 595 hast Du Recht, die Ausgänge liegen u.U. erstmal auf Masse 
nach dem Einschalten, WENN Du den Output Enable ebenfalls auf Masse 
liegen hast.
Daher einfach nen Pullup gg. Vcc an /OE dran und den dann mit dem 
Controller auf Masse ziehen wenn die Software initialisiert ist - 
fertig.
(OE vom 595 solltest Du ohnehin per Controller ansteuern, sonst gibt's 
"Geisterbilder" auf der Matrix...)

Ebenso würde ich SCL erstmal auf Masse legen: Solange das auf Masse 
liegt sind die Ausg#nge vom 595 hochohmig und die Latches werden 
gelöscht. Dann ebenfalls mit dem Controller gg. Vcc ziehen.

Damit kommst Du beim Einschalten erstmal auf nen definierten 
Betriebszustand.

Ansonsten sieht der Plan gut aus, die PNPs sind auch richtig rum drin.

von Neu (Gast)


Lesenswert?

Wieso brauch ich nur einen 595?

Ich hab ja schließlich 1:8 Multiplexing

von Christian T. (shuzz)


Lesenswert?

Neu schrieb:
> Wieso brauch ich nur einen 595?
>
> Ich hab ja schließlich 1:8 Multiplexing

Eben drum!
Ein 595 steuert dann 8 Spalten (oder Zeilen, je nachdem wie rum man's 
sieht) an.

D.h. Du schiebst die Infos für eine Zeile in den STP16CP05, die Info 
welche Zeile aktiv ist dann invers (low-active) in den 595. Ergebnis ist 
ein 1:8 Multiplexing.

In Deinem Schaltplan von oben nimmst Du einfach den unteren 595 raus und 
hängst die LEDs die davon angesteuert werden sollten rechts neben den 
oberen Block.

Grüße,

Christian

von Neu (Gast)


Lesenswert?

Mir fällt grad auf, dass ich ja eigentlich nur 3,3V zur Verfügung hab.

Die Senke wäre ja eine Konstantstromquelle, aber geht das dann 
überhaupt?


Also, nehmen wir mal an, Spalten gehen von oben nach unten, sie werden 
von dem STP16CP05 angesteuert, Reihen gehen von links nach rechts und 
werden von den 74 595 gesteuerten PNPs angesteuert.



D.h. Du schiebst die Infos für eine Zeile in den STP16CP05, die Info
welche Zeile aktiv ist dann invers (low-active) in den 595. Ergebnis ist
ein 1:8 Multiplexing.

In Deinem Schaltplan von oben nimmst Du einfach den unteren 595 raus und
hängst die LEDs die davon angesteuert werden sollten rechts neben den
oberen Block.

Meine erste Matrix, sorry, ich verstehs einfach nicht, wieso ich nachdem 
ich das Ergebnis invers in den 595 schreibe, ein 1:8 Multiplexing hätte

Gruß

Thomas

von Christian T. (shuzz)


Lesenswert?

Neu schrieb:
> Mir fällt grad auf, dass ich ja eigentlich nur 3,3V zur Verfügung hab.
>
> Die Senke wäre ja eine Konstantstromquelle, aber geht das dann
> überhaupt?

Streng genommen ist es ne Konstantstromsenke, keine -quelle. ;)

Ob die 3,3V ausreichen hängt von der benötigten Spannung Deiner LEDs ab. 
Bei roten LEDs wird es kein Problem sein, die benötigen so um die 2V.
Bei weissen LEDs wird's ziemlich eng, die brauchen typisch etwas über 
3V.
Von den 3.3V gehen aber erstmal ca. 0.6V für den PNP-Transistor ab und 
ich glaube der STP16CP05 braucht selbst auch nochmal sowas in dem Dreh 
für die Regelung, glaube 0.65V. Macht in Summe dann 1.25V, d.h. es 
bleiben von Deinen 3.3V noch 2.05V für die LEDs übrig. Das reicht wie 
gesagt grad so für rote LEDs.

Wieso bist Du überhaupt auf 3.3V festgelegt? STP16CP05 kann auf jeden 
Fall auch mit 5V arbeiten, dann reicht der Saft auch gut für beliebige 
LED-Farben aus...

> Also, nehmen wir mal an, Spalten gehen von oben nach unten, sie werden
> von dem STP16CP05 angesteuert, Reihen gehen von links nach rechts und
> werden von den 74 595 gesteuerten PNPs angesteuert.

Genau so soll es sein.
Du hast dann also 16 Spalten (gesteuert über STP16CP05) und 8 Zeilen 
(gesteuert über 74HC595), macht insgesamt erstmal 128 LEDs.

Zu einem Zeitpunkt sind jeweils nur die LEDs einer Zeile an (maximal 16 
Stück auf einmal), daher 1:8 Multiplex weil Du 8 Zeilen hast von denen 
eine angezeigt wird.

Noch ein Hinweis zur Auslegung der Bauteile:
Da maximal 16 LEDs gleichzeitig leuchten können muss der 
Treibertransistor also maximal 16x den (Puls-)Strom für eine LED 
schaffen. Empfehlenswert wäre es, zunächst mal die LEDs nur mit 20mA zu 
fahren, dann ist die Matrix zwar nicht ganz so hell wie sie sein könnte, 
aber dafür raucht nix ab wenn Deine Ansteuerung nen Bug hat und evtl. 
einfach mal stehenbleibt.

>> D.h. Du schiebst die Infos für eine Zeile in den STP16CP05, die Info
>> welche Zeile aktiv ist dann invers (low-active) in den 595. Ergebnis ist
>> ein 1:8 Multiplexing.
>>
>> In Deinem Schaltplan von oben nimmst Du einfach den unteren 595 raus und
>> hängst die LEDs die davon angesteuert werden sollten rechts neben den
>> oberen Block.
>
> Meine erste Matrix, sorry, ich verstehs einfach nicht, wieso ich nachdem
> ich das Ergebnis invers in den 595 schreibe, ein 1:8 Multiplexing hätte

Sorry, da hab ich mich vermutlich doof ausgedrückt. Die inverse 
Ansteuerung hat nix mit dem 1:8 zu tun...
Ich meinte damit, dass für die gerade aktive Zeile eine "0" in den 595 
getaktet werden muss, für alle anderen Zeilen eine "1". Deshalb invers.

von Neu (Gast)


Angehängte Dateien:

Lesenswert?

Ich hab mich jetzt für 24x5 entschieden.
Blaue LEDs haben ja über 3V, da geht des echt nicht mehr :-(

Die PNPs hab ich jetzt durch ROHM - RTQ025P02TR (P-Kanal MOSFETs) 
ersetzt.

Die Source liegt an VCC, das Gate am 595, das Drain an der Anode der 
jeweils ersten LED der Reihe.

von Christian T. (shuzz)


Lesenswert?

Wow, also so langsam glaube ich Du raffst es wirklich nicht.

Warum willst Du das Ganze unbedingt komplizierter aufbauen und ansteuern 
als notwendig?
Was ist so schwierig daran, einfach acht Zeilen und 16 Spalten zu 
verschalten?
Und (das kapiere ich nun nicht): Was hat die Anordnung Deiner Matrix mit 
der Flussspannung der LEDs zu tun?!? o0

Eine Bitte: Lies Dir den Artikel über LED-Matrizen hier im Forum durch 
und dann denke nochmal in aller Ruhe über Deine Idee nach. Ich denke, Du 
wirst dann feststellen, dass Du ein wenig auf dem Holzweg bist...

btw, die FETs sind prinzipiell schonmal nicht schlecht, aber bei den 
hohen Schaltfrequenzen in einer LED-Matrix wirst Du vermutlich nicht um 
einen Treiber herumkommen. Zumindest glaube ich nicht, dass ein 595 die 
Dinger so einfach umladen kann...


Grüße,

C

von MaWin (Gast)


Lesenswert?

> Was ist so schwierig daran, einfach acht Zeilen und 16 Spalten zu
> verschalten?

Na ja, man sollte vorher wenigstes mal im Datenblatt der LEDs
nachgucken, ob die überhaupt den 8-fachen Nennstrom vertragen
und dabei ca. 8 mal heller sind.

Da uns Mister Neu aber nichts über seine LEDs sagt, sind alle
Beiträge hier wie deiner: Nutzloses Geschwätz.

Da muß Mister Neu einfach mal nachlesen wie es geht:
http://www.dse-faq.elektronik-kompendium.de/dse-faq.htm#F.8.1
Seine Schaltung ist vielleicht tauglich.

von Teemann (Gast)


Lesenswert?

blaue LEDs haben über 3V, der STP16 will allerdings nur 20V, also isses 
sinnvoll das auf 5 LEDs zu begrenzen^^

von Harald (Gast)


Lesenswert?

man darf doch an den STP16CP05 maximal nur eine LED pro Output verbauen?

Reihenschaltung aus 5 LEDs sollte eigentlich nicht funktionieren

von Christian T. (shuzz)


Lesenswert?

Nein, der STP16CP05 kann mehrere LEDs pro Ausgang treiben, bis max. 20V.

von Neu (Gast)


Angehängte Dateien:

Lesenswert?

jup, kann er.

Ich hab mich jetzt mal am Tutorial orientiert.

Jetzt isses ja möglich, jede LED einzeln anzusteuern, wie regelt man das 
jetzt aber mit der Helligkeit ohne vor jedem Anschalten der LED den 
Widerstand des STP16CP05 für die Stromeinstellung zu ändern?

Über die Zeit?

von Christian T. (shuzz)


Lesenswert?

Ja, die Helligkeit regelst Du per PWM, wobei PWM hier bedeutet, dass Du 
das komplette Bild mehrfach ausgeben musst und dann halt die einzelnen 
LEDs nicht jedes Mal einschaltest.

Bild z.B. 10x ausgeben, dabei eine LED nur 5x einschalten und den Rest 
aus lassen ergibt eine "dunklere" LED.

Für's erste würde ich das an Deiner Stelle weg lassen, wenn die Matrix 
mal läuft kannst Du immer noch versuchen mit den Graustufen zu spielen, 
sowas lässt sich nachträglich gut einbauen.

Die (implizite) Frage von MaWin würde ich aber gern nochmal aufgreifen: 
Wieviel Pulsstrom halten Deine LEDs denn eigentlich aus?
Hast Du evtl. sogar nen Link zu einem Datenblatt?

von Neu (Gast)


Lesenswert?

Ich wollte eigentlich diese hier verwenden:

MULTICOMP - OVL-3323 - LED 3MM MEGA BRIGHT BLAU

http://www.farnell.com/datasheets/385361.pdf


Ich bin halt davon ausgegangen, dass ich wegen den 1,7cd eigentlich nur 
5mA für die Teile brauchen würde.

Die Teile könnten für 0,1ms 100mA ab,


Das heißt, dass der PWM fürs erste nach der Anzahl der LEDs geregelt 
werden müsste, wenn mehrere LEDs an einem Strang an sind? und wenn das 
alles läuft, in Abhängigkeit der LEDs Anzahl und der gewünschten 
Helligkeit?


kleines Update noch:

Ich hab jetzt die Reihen nochmal aufgeteilt, damit der Pulsstrom nicht 
so hoch sein muss. Pro Reihe sinds 8 Spalten.

von Gerhard K. (Gast)


Angehängte Dateien:

Lesenswert?

kleines Update:

von Christian T. (shuzz)


Lesenswert?

Dadurch gewinnst Du aber leider nichts was die Helligkeit der LEDs 
angeht...

Begrenzender Faktor ist bei Dir der Pulsstrom pro LED. (Es sei denn, 
Deine Stromversorgung wäre so schlaff, dass sie den Strom nicht liefern 
könnte...)
Die können maximal 100mA, bei 8 Zeilen ergibt das im Schnitt 12,5mA für 
eine LED bei 1:8 Multiplexing.

Ob ein Transistor nun den Strom für fünf oder zehn LEDs auf einmal 
liefern muss ist ziemlich egal.

Ausserdem: Wofür das zweite Schieberegister rechts? Die Transistoren 
kann das Register links genauso gut mit ansteuern, einfach parallel 
anhängen.

Vorschlag: Beschreibe mal den Gesamtaufbau ein wenig genauer:
- Welcher µC?
- Wie sieht die Stromversorgung aus?


Zur PWM: Mit dem PWM-Pin am STP16CP05 kannst Du nur die Helligkeit für 
alle LEDs regeln, ist also nicht geeignet um einzelne LEDs heller oder 
dunkler zu machen. Für Deine Anwendung ist der also eher uninteressant, 
es sei denn, Du willst die Helligkeit der Matrix global regeln.

von Neu (Gast)


Lesenswert?

Das stimmt, dass ichs eigentlich nicht brauchen würde. Beim Bestücken 
werd ichs so machen, wie dus gesagt hast, einfach parallel hängen und 
das eine Schieberegister einfach nicht bestücken.

Die LEDs haben ja 1,7cd, man kann ja sagen, dass 1 Candela etwa eine 
Kerze auf einem Meter Entfernung entspricht, wenn ich das noch richtig 
im Kopf habe.

Bei insgesamt 512 LEDs, die nebereinander sind, kann man glaub ich nicht 
mehr bei voller Helligkeit richtig reinschauen.

Ich bin davon ausgegangen, dass ich jede blaue LED nur mit 5mA oder 
sowas im Durchschnitt betreibe. Daher sollten doch die 12,5mA Puls 
eigentlich vollkommen reichen?

Das Teil soll am Ende eine Wanduhr werden. Da muss das Dimmen auf alle 
Fälle funktionieren.

Die Spannungsversorgung wird über ein Schaltnetzteil mit Stecker oder 
über 2 LiPo Zellen gemacht. Die Spannungswandlung übernimmt dann ein 
LMZ22005 oder sowas in der Richtung, von dem ich mir erhoffe, dass er 
EMV mäßig besser ist, als ein normaler Schaltregler mit Spule. Wenn ich 
das mit dem Akku noch mache, muss halt noch eine Laderegler IC mit 
drauf.

Als Mikrocontroller verwende ich warscheinlich meinen ATmega 644p, der 
hier noch rumliegt, falls die Leistung überhaupt reicht, die 512 LEDs 
der Matrix zu steuern.

Stimmt, im Prinzip ist ja jede LED in Reihe geschalten, daher isses 
egal.

lg Thomas

von Quer (Gast)


Lesenswert?

Der Output Enable ist nicht zum Regeln der Helligkeit gedacht, das 
Tastverhältnis der einzelnen LEDs bestimmst du mit dem Schieberegister!

von Christian T. (shuzz)


Lesenswert?

Stimmt, aber die globale Helligkeit kann er sehr einfach mit dem OE 
steuern.

von Thomas K. (thomaskroger)


Lesenswert?

Vergiss bei den P-Kanal MOSFETs den Pullup-Widerstand am Gate nicht, 
sonst hast du eine verwischte Anzeige.
Der 16CP06 hat einen OpenCollector, wird also hochohmig wenn das Digit 
nicht angesteuert wird und das nutzt der MOSFET gerne für illegale 
Aktionen.
Thomas

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.