Hallo miteinander,
ich bin gerade am Ideen sammeln und Umsetzbarkeit prüfen.
Ich möchte an einem µC (Mega32 oder 2313) 10 LEDs anschließen. Diese
sind RGB-LED. Es sollen immer 3 LED gleichzeitig leuchten, wobei LED 2
mit voller Lichtstärke, LED 1 und 3 mit halber Stärke betrieben werden
sollen. Vielleicht wird das aus dem Anhang heraus verständlich. Bei LED
2 sollte also der Duty-Cycle zwischen 0 und 1, bei LED 1 und 3 zwischen
0 und 0,5 liegen (je nachdem, welche Helligkeit ein Sensor feststellt).
Problematisch ist für mich auch, dass die RGB-LED nicht für jeden
Farbwert den gleichen Strom bei gleicher Helligkeit verträgt (LATB T66C
OSRAM MultiLED -> Amber 30mA, Blau und Grün 20mA).
Idealerweise würde ich aber gerne für jede LED den Farbwert und die
Helligkeit softwareseitig einstellbar haben wollen.
Wie lässt sich sowas geschickt umsetzen? Ich habe in dem Gebiet wenig
bis kaum Erfahrung.
Vielen Dank für eure Unterstützung,
Grüße M. Schwaikert
> Wie lässt sich sowas geschickt umsetzen?
Nimm deinen Mega32. Der hat (mehr als) 30 Ausgänge.
Schliesse die 10 RGB LEDs über Vorwiderstände an, die den maximalen
Strom zulassen den du brauchst.
Die Helligkeit der LEDs regelst du durch schnelles ein-/ausschalten
(PWM, nicht Multiplex).
Die LEDs links und rechts von der mittleren sind nur die halbe zeit an
wie die mittlere, die anderen sind aus. Dadurch wird auch der
Gesamtstrom des ATmega nicht überschritten.
Als Helligkeitssensor kann eine Photodiode mit einem Vorwiderstand in
Reihe an 5V und die Spannung zwichen beiden wird mit einem A/D-Eingang
gemessen.
Mehr Bauteile braucht man nicht, man braucht auch keinen Quartz weil die
Taktfrequenz nicht so wichtig ist.
Nimmt man einen 2313, könnte man zwei TLC5921 oder ähnlich anschliessen,
das sind dann zwar zwei zusätzliche ICs, aber 28 Widerstände weniger.
Das Programm wird aufwänsiger, aber schaffen tut der 2313 das.
Da nur je 3 RGB LEDs gleichzeitig an sein sollten, kann man das noch
ganz gut als LED Matrix machen. Schon von der Verdrahtung in den LEDs
führt das zu einer 10 x 3 Matrix. Also einmal die 10 gemeinsamten
anschlüsse der LEDs an der einen Seite, und die 3 Farben an der anderen.
Die Widerstände zu einstellung des Stromes kommen auf die Seite mit den
Farben - damit kann man da frei unterscheiden.
Da von den 10 LED nur je 3 an sind, wird auch das Tastverhältniss nicht
so schlecht. Halt nicht 100%, aber immerhin sind 50% für die Helle LED
und je 25% für die beiden halb hellen drin.
Wenn man wirklich 100% Helligkeit braucht, kann man auch die LED-reihe
in 2 Teilen und je die geraden und ungeraden Positionen zusammenfassen,
dann als 5 x 6 Matrix. Dann ist die helle LED für sich, und nur die
beiden halb hellen LEDs teilen sich ein Zeitfenster. Von der Software
geht das auch mit den Tiny 2313. Der Mega32 ist übertrieben, aber ein
Mega48 oder ähnlich wäre ggf. schon sinnvoll, denn der Tiny2313 hat
keinen AD Wandler.
Wenn ich das also richtig verstehe, dann sollte die Farbe fest
eingestellt leichter zu handhaben sein.
Das ergibt dann im schlimmsten Fall allerdings einen Spitzenstrom von
70mA. Hält das der ATMEGA überhaupt aus? Sinnvoller wäre doch dann, in
die 10 Transistoren zu investieren, oder?
Und wie läuft dann das PWM ab? Ich gebe nach und nach auf jeden Portpin
das PWM-Signal, dessen Puls/Pausen-Verhältnis anhand der geographischen
Anordnung eingestellt wird?
Mehr als etwa 20 mA geht nicht direkt über die Ausgänge. Entsprechend
wird man wohl extra Treiber (z.B. kleine Transistoren oder MOSFETS)
brauchen. Nur wenn man sich für alle Farben auf je 20 mA beschränkt
könnte man an der einen Seite ohne Treiber auskommen - da reichen dann 5
Transistoren. Die LEDs leuchten ja auch mit weniger als dem maximalen
Strom.
Für LEDs kann man noch mit Software PWM auskommen. Es wird ja keine so
hohe Wiederholfrequenz benötigt. Die LEDs bekommen auf der einen Seite
dsa Signal zur Auswahl der LED und auf der anderen das PWM Signal, wenn
man nicht die volle Helligkeit haben will. Bei der Umschaltung als LED
Matrix wird das PWM Signal eher eine variable Pulslänge und dann für den
Rest eine Pause.
Also ich habe mir dazu jetzt noch einige Gedanken gemacht:
Ich ordne die LEDs in einer 10x2 Matrix an. Somit kann ich auf jeden
Fall schonmal alle R/B-Werte geziehlt ansteuern. Grün brauche ich
eigentlich nicht, da weder in Blau, noch in Rot bzw. jeglichen
Zwischenstufen Grün enthalten ist.
Die gemeinsame Anode bzw. Kathode (ist ja eigenlich egal) würde ich dann
noch über einen Mosfet/Bipolar am PWM-Ausgang schalten. Somit könnte ich
für jede LED ganz gezielt das Puls/Pausen-Verhältnis einstellen.
Die LEDs selbst vertragen maximal 100mA Impulsstrom. Somit würde ich mal
80mA als Maximalstrom veranschlagen.
Ist das eine Lösung, die funktionieren könnte? Welche Transistoren im
SOT-Gehäuse würden sich dafür eignen?
Vielen Dank für Eure Hilfe,
Grüße
M. Schwaikert
Martin Schwaikert schrieb:> Die LEDs selbst vertragen maximal 100mA Impulsstrom. Somit würde ich mal>> 80mA als Maximalstrom veranschlagen.
Hi,
was sagt den dein datenblatt zur Pulsstromdauer? Ich hab mals kurz
reingeschaut... bei 100mA Pulsstrom darf bei 1/5Duty gerademal 1ms die
100mA anstehn das wären dann 1kHz ohne PWM... überprüf das nochmal da
verschätzt man sich schnell... und wenn die LEDS relativ schnell im
eimer sind ist das auch ärgerlich.
PS: Ich hab nur sehr kurz ins Datenblatt geschaut... die Werte müssen
nicht stimmen...
Hallo,
danke erstmal für die Antworten.
Ich habe jetzt mir das ganze mal aufgezeichnet, und bin auf zwei
Probleme gestoßen:
1) Die Lichteffizienz ETA (lm/W) ist bei allen Farben unterschiedlich.
Um also bei Blau die gleiche Helligkeit wie bei Rot zu erreichen,
brauche ich den fast 3-fachen Strom.
Daher habe ich mir überlegt, diese Helligkeitsregelung über einen
Mosfet, der per PWM gesteuert wird, umzusetzen.
2) Die Flusspannung ist bei Rot anders als bei Grün und Blau. Wenn ich
nun eine Matrix (10x3) mache, welche die einzelfarben als Spannung
multiplext, wie kann ich dann die Flussspannung einstellen? Ich müsste
ja alle Zeilen dann mit 3V (d.h. Rv= (5V - U_CEsat - U_BE - 2V)/30mA)
versorgen, aber die Spalte für Rot weniger ansteuern. Hier müssten dann
statt UCE = 0,7V 1,7V abfallen. Ist das eine adäquate Lösung?
Kommt mir alles reichlich kompliziert vor.
Warum nicht einfach für jede LED-Farbe einen entsprechend angepassten
Vorwiderstand und den Rest macht man in der Software durch Beeinflussung
der PWM.
Nichts gegen rechnen. Aber in der Praxis macht dir die Exemplarstreuung
sowieso einen Strich durch die Rechnung. Und ob das abgedimmt Violett
tatsächlich abgedimmt ist und anonsten der gleiche HL-Farbton (im HLS
Farbraum) ist oder einen ganz leichten Rotstich bekommen hat, merkt kein
Mensch.
Karl Heinz Buchegger schrieb:> Kommt mir alles reichlich kompliziert vor.>> Warum nicht einfach für jede LED-Farbe einen entsprechend angepassten> Vorwiderstand und den Rest macht man in der Software durch Beeinflussung> der PWM.
Weil ich dann 10 Widerstände mehr brauchen würde.
> Nichts gegen rechnen. Aber in der Praxis macht dir die Exemplarstreuung> sowieso einen Strich durch die Rechnung. Und ob das abgedimmt Violett> tatsächlich abgedimmt ist und anonsten der gleiche HL-Farbton (im HLS> Farbraum) ist oder einen ganz leichten Rotstich bekommen hat, merkt kein> Mensch.
Darum geht es mir ja auch nicht. In der Tat ist Rot mit 11mA genauso
hell wie Grün bei 4mA - zumindest für das menschliche Auge. Diese Werte
sollten also schon grob stimmen. Problematisch ist ja nur für mich, dass
R, G und B einer LED in der gleichen Reihe liegt. Die einzige Chance ist
daher, UCE der Spaltentransistoren zu vergrößern. Und daher interessiert
mich, ob das eine mögliche Lösung ist.
Ich mache mal ne Zeichnung, und lade sie hoch. Dann wird es wohl
verständlicher.
Den Strom der LEDs bestimmt man durch Widerstände. Jeder Widerstand ist
dabei nur für LEDs einer Farbe zuständig. Entsprechend man man die
unterschiedliche Spannung der LEDs bei der Berechnung der Widerstände
berücksichtigen. Die Feinheiten kommen dann per PWM (bzw. nur Pulsläge)
Steuerung für die LEDs einzeln.
Da maximal 3 LEDs leuchten sollten muss man den Strom auch gar nicht so
hoch wählen. Man kann die LEDs für relativ lange Zeit an lassen: bei der
10x2 Matirx kann die LED mit der Vollen Helligkeit bis zu 50%
Tastverhältniss bekommen - mehr als etwa 40 mA darf man der LED dann gar
nicht geben.
Bei der 5x4 Matrix (war oben als 5x6 mit RGB) kann die LED in der Mitte
sogar bis 100% bekommen und nur die halb hellen LEDs bekommen maximal
50% Tastverhältnis. Da braucht man dann nicht mehr als 30 mA, und
eventuell reichen sogar die 20 mA direkt vom Port.
> Die einzige Chance ist daher, UCE der Spaltentransistoren zu vergrößern.
Kannst du vergessen.
10x3 Multiplex ist also doof.
5x6 ist besser, 5 rote, 5 rote, 5 blaue, 5 blaue, 5 grüne und 5 grüne,
damit sind 2 Spaltenwiderstände für rot, 2 für blau und 2 für grün zu
dimensionieren, mit 5-fachem Pulsstrom 1/5 der Zeit.
Netterweise sin 11 Anschlüsse auch noch weniger als 13 Anschlüsse.
Hey Mawin,
super Idee. Das spart mir sogar noch ein haufen Zeit, weil ich dann
immer nur Reihe 1, 3, 5 oder 2, 4, 6 ansprechen muss.
Mal sehen, wie da die Umsetzung aussieht.
Ich hab mal die Transistortabelle durchgesehen, und bin auf den recht
preisgünstigen FMMT617 gestoßen.
Bei der Berechnung für den Vorwiderstand an der Basis für die Zeilen bin
ich allerdings ein wenig ins Stutzen gekommen.
Für ein Beta von 60 sagt das Datenblatt ein UBEsat von 0,7V, ein UCEsat
von 10mV. Bei 30mA Schaltstrom wären das 500µA Basisstrom an einem
7,6kOhm Vorwiderstand. Mir kommen diese Werte ein wenig spanisch vor.
Kann das stimmen? Mir fehlen einfach die Erfahrungswerte, um das richtig
einschätzen zu können.
Grüße
M. Schwaikert.
> Kann das stimmen?
Bei diesem Transistor schon, es ist ein speziell dünngeschliffener low
sat high beta Transistor, dessen Nachteil die geringe
Spannungsfestigkeit ist, der aber eigentlich füh höhere Ströme gedacht
ist.
Nimm einen BC547/BC847 und 3mA Basisstrom, also 1k2 als Vorwiderstand.
MaWin schrieb:>> Kann das stimmen?>> Bei diesem Transistor schon, es ist ein speziell dünngeschliffener low> sat high beta Transistor, dessen Nachteil die geringe> Spannungsfestigkeit ist, der aber eigentlich füh höhere Ströme gedacht> ist.
U_CEmax ist ja 15V. Da bin ich dann ja bei 5V auf jeden Fall auf der
sicheren Seite.
>> Nimm einen BC547/BC847 und 3mA Basisstrom, also 1k2 als Vorwiderstand.
Also wenn ich vergleiche:
FMMT617BC846
U_CEsat 10 mV 100 mV
U_BEsat 0,7 V 0,75 V
h_fe(25°C) 60 30
€/St. 0,30 0,06
Von den Werten her scheint der FMMT617 besser als der BC846, ist aber
dafür fünf mal so teuer. Welcher Grund spricht also neben dem Preis für
den BC? Das Teil soll am Schluss nicht unbedingt viel Strom verbrauchen.
Ein wenig sparen ist schon angesagt.
Martin Schwaikert schrieb:>> FMMT617BC846> U_CEsat 10 mV 100 mV> U_BEsat 0,7 V 0,75 V> h_fe(25°C) 60 30> €/St. 0,30 0,06>> Von den Werten her scheint der FMMT617 besser als der BC846,
Was bei dir aber völlig wurscht ist. Du bist nirgends auch nur annähernd
im Grenzbereich.
> den BC? Das Teil soll am Schluss nicht unbedingt viel Strom verbrauchen.> Ein wenig sparen ist schon angesagt.
Auch das ist herzlich egal. Dein Stromverbrauch wird durch die LED
bestimmt, nicht durch die Treibertransistoren.
Wenn dein Auto im Sommer wegen der Winterreifen 2l auf 100km mehr
verbraucht, sind die 10ml Spritersparnis durch einen Spoiler auch schon
egal.
> Welcher Grund spricht also neben dem Preis für den BC?
Der Preis.
Der FMMT617 wird schon gar nicht mehr hergestellt.
Bei eBay zu Sammlerpreisen erhältlich
http://www.ebay.de/sch/i.html?_from=R40&_trksid=p5197.m570.l1313&_nkw=fmmt617&_sacat=See-All-Categories
Eine Schaltung auf BC847 lässt sich mit quasi jedem
Transistor aufbauen, eben dem billigsten der gerade
rumliegt, z.B. SS8050.
Ein LowSat ist immer teurer. Man verwendet ihn nur,
wo man so viel Strom auch schalten muß.
Wenn bei dir natürlich eine 100er Tüte rumliegt,
mujsst du sie ja nicht bei eBay versilbern.
Ahh ok. Das dürfte als Argument reichen :) Ich hatte mich da nur an der
Liste von hier orientiert, und nicht näher gesucht. Bei Reichelt wäre er
auch verfügbar.
Wie dem auch sei: Ich komme beim BC auf 1mA Basisstrom, du schriebst
3mA. Was ist jetzt besser? Für den Sättigungsbetrieb sollte ja 1 mA
ausreichend sein.
Martin Schwaikert schrieb:> Wie dem auch sei: Ich komme beim BC auf 1mA Basisstrom, du schriebst> 3mA. Was ist jetzt besser? Für den Sättigungsbetrieb sollte ja 1 mA> ausreichend sein.
Du hast auch Einzelexemplarstreuung. Blas in die Basis mit 3mA rein und
du kannst sicher sein, dass der Transistor auf jeden Fall in der
Sättigung ist.
Selbst wenn er zu deinen Ungunsten mit seinen Parametern gestreut ist.
Wenn du 50kg unter der Decke an einem Seil aufhängen willst, kaufst du
auch nicht ein Seil, welches 50kg gerade noch hält und bei 51kg reißt.
Das Zauberwort in der Technik heißt "Überdimensionierung". Mit Mass und
Ziel natürlich, aber man lässt sich immer eine Reserve. (Ausser in der
Raumfahrt und der Formel 1)
Hach ist das herrlich. Vor dem Studium lernt man, dass die gültigen
Ziffern das wichtigste der Welt sind, im ersten Semester reicht dann nur
noch eine Nachkommastelle, und in der Praxis ist das alles egal, da darf
man mal um 60% daneben liegen.
Dann werde ich das mal mit 3mA durchrechnen.
Vielen Dank euch erstmal.
Martin Schwaikert schrieb:> Hach ist das herrlich. Vor dem Studium lernt man, dass die gültigen> Ziffern das wichtigste der Welt sind, im ersten Semester reicht dann nur> noch eine Nachkommastelle, und in der Praxis ist das alles egal, da darf> man mal um 60% daneben liegen.
Solange du auf der richtigen Seite daneben liegst :-)
Was rein rechnerisch rauskommt, sind in dem Fall sowas wie die
Mindestanforderungen. Wenn du errechnest, dass dein Widerstand mit 0.12W
belastet wird, dann nimmst du keinen 1/8W Widerstand, sondern die
nächste größere Größe. Denn die Dinge altern und verändern im Lauf der
Zeit ihre Werte. Und was sich heute noch knapp ausgeht, kann morgen dann
schon über dem Limit sein. Und genau aus dem Grund geht man mit
Dimensionierungen eben nicht bis knapp ans Limit, selbst wenn der
Baustein das heute gerade noch aushalten würde.
So auch hier: rein rechnerisch brauchst du 1mA damit der Transistor in
der Sättigung ist. Weniger als 1mA darf es daher nicht sein. Aber mehr
ist solange kein Problem, solange du ihn nicht dadurch überlastest. Also
nimmst du einen kleinen Sicherheitsfaktor damit du auch dann die
Sättigung noch halten kannst, wenn
* dein realer Transistor die Werte aus dem Datenblatt nicht ganz
erreicht
* die Bausteine rundherum gealtert sind und ihre Werte verändert haben
Ist zwar nicht schön, dafür aber selten :)
Könnte das jetzt so funktionieren? Berechnet sind die Widerstände auf
30mA Impulsstrom, sodass also auch ein Dauerbetrieb theoretisch die LEDs
nicht killt.
Streng genommen steuere ich im Verhältnis 1/30 bzw. 1/15 an (je nachdem,
ob die LEDs auf zwei Spalten, oder auf einer Spalte leuchten müssen).
Welche Taktfrequenz ist hier realistisch, wenn für jede LED das
PWM-Register geändert wird, und ich auf 8MHz interner RC-Oszillator
laufe? Die Berechnungen selbst, die der Prozessor vornehmen muss, werden
allerhöchstens alle 5 bis 10 Sekunden ausgeführt, können also
vernachlässigt werden.
Hat da jemand eine Abschätzung für mich?
Die Widerstände sollten alle an die eine Seite der Matrix, in diesem
Fall unten.
Auf den extra Transistor für das PWM Signal kann man auch verzichten -
das kann man auch direkt an den Leitungen für die LEDs in Software
machen.
Beim Gruppieren der LEDs kann man oben z.B. jeweils die LEDs 1 und 2 , 3
und 4 usw. zusammen auf einen Leitung legen. Für die 3 LEDs die zu einer
Zeit aktiv sein sollen braucht man dann nur jeweils 2 der Gruppen, und
bei der einen Gruppe ist nur eine halb helle LED dabei. Entsprechend
kann man 2/3 der Zeit die Helle LED an haben, und 1/3 für die
halb-helle.
> Könnte das jetzt so funktionieren?
Wo kommt eigentlich diese Scheiss-Schaltung her,
die sehe ich doch nicht zum ersten Mal,
die hast du doch bloss abgezeichnet,
auf solchen Humbug kommt man doch hoffentlich
nicht von alleine.
Den zusätzlichen PWM Transistor,
die Widerstände vor und nach der Matrix,
Emitterfolger wenn die Spannung eh schon knapp ist,
das ist doch alles so abstrus, da zeichnet doch bloss
ein Held vom anderen ab, je grösser der Schwachsinn
um so bevorzugter die Schaltung.
+--+--+--+--+--+-- +5V
| | | | | |E
--220R--(--(--(--(--(-|< PNP (BC857)
--220R--(--(--(--(-|< | +-------------------+
--220R--(--(--(-|< | +-27R--|rot |
--220R--(--(-|< | +----27R--|rot |
--220R--(-|< | +-------12R--|blau je 5 LEDs |
--220R-|< | +----------12R--|blau |
| +-------------27R--|grün |
+----------------27R--|grün |
100mA Zeilenstrom +-------------------+
| | | | |
--220R-------------------------|< | | | |
|E | | | |
--220R--------------------------(--|< | | |
| |E | | |
--220R--------------------------(---(--|< | |
| | |E | |
--220R--------------------------(---(---(--|< |
| | | |E |
--220R--------------------------(---(---(---(--|<
FMMT617 | | | | |E
GND --+---+---+---+---+
> Streng genommen steuere ich im Verhältnis 1/30 bzw. 1/15 an
Das wäre blöd, nur wenige LEDs vertragen Pulsströme unter 1:10,
die Schaltung wurde extra für 1:5 ausgelegt.
Die Basiswiderstände können ruhig etwas größer werden. Mehr als 2 mA an
Basisstrom wird man nicht brauchen - vor allem nicht für die PNP, die
nur je 1 LED treiben.
Wenn wirklich nur die oben beschriebenen LED muster gefordert sind, muss
man nicht mal 1:5 Multiplexen, man kann sogar auf 1:2 gehen, oder wie
oben schon gesagt gar auf 2:3. Für die Fälle wo keine LED an ist muss
man ja nicht noch extra warten. Dann sollten auch 30 mA für die LEDs
reichen, und die Widerstände zum einstellen des Stroms dürfen auch
größer werden.
Es reichen dann auch überall kleine Transistoren wie BC848, da maximal
60 mA fließen. Wenn man beim Strom noch von 30 mA auf 20 mA runter geht,
kann man auch noch auf die 6 PNP Treiber verzichten und die 20 mA direkt
vom Port aus treiben.
MaWin schrieb:>> Könnte das jetzt so funktionieren?>> Wo kommt eigentlich diese Scheiss-Schaltung her,> die sehe ich doch nicht zum ersten Mal,> die hast du doch bloss abgezeichnet,> auf solchen Humbug kommt man doch hoffentlich> nicht von alleine.
Nicht ganz. Die grobe Vorlage stammt von Mikrocontroller.net, zu finden
unter LED Matrix.
> Den zusätzlichen PWM Transistor,
Der soll eigentlich bloß die Ansteuerung vereinfachen, da ich mindestens
3 zur gleichen Zeit, pro vollständigen Durchlauf 9 LEDs mit jeweils
unterschiedlichen Puls-Pausen-Verhältnissen ansteuern muss.
> die Widerstände vor und nach der Matrix,
Sind aus der Not geboren.
> Emitterfolger wenn die Spannung eh schon knapp ist,
Sowas nennt man dann wohl mangelnde Erfahrung. Man lernt doch sowas
nicht mehr im Studium. Rein rechnerisch geht es auf, also wird es
gebaut... oder so ähnlich.
> das ist doch alles so abstrus, da zeichnet doch bloss> ein Held vom anderen ab, je grösser der Schwachsinn> um so bevorzugter die Schaltung.
Wenn die Schaltung wirklich so katastrophal ist, dann wäre es mal an der
Zeit, den Wiki-Artikel zu überarbeiten.
>> +--+--+--+--+--+-- +5V> | | | | | |E> --220R--(--(--(--(--(-|< PNP (BC857)> --220R--(--(--(--(-|< | +-------------------+> --220R--(--(--(-|< | +-27R--|rot |> --220R--(--(-|< | +----27R--|rot |> --220R--(-|< | +-------12R--|blau je 5 LEDs |> --220R-|< | +----------12R--|blau |> | +-------------27R--|grün |> +----------------27R--|grün |> 100mA Zeilenstrom +-------------------+> | | | | |> --220R-------------------------|< | | | |> |E | | | |> --220R--------------------------(--|< | | |> | |E | | |> --220R--------------------------(---(--|< | |> | | |E | |> --220R--------------------------(---(---(--|< |> | | | |E |> --220R--------------------------(---(---(---(--|<> FMMT617 | | | | |E> GND --+---+---+---+---+>>> Streng genommen steuere ich im Verhältnis 1/30 bzw. 1/15 an>> Das wäre blöd, nur wenige LEDs vertragen Pulsströme unter 1:10,> die Schaltung wurde extra für 1:5 ausgelegt.
Die LEDs vertragen 30mA Dauerstrom. Dabei sind sie aber so unerträglich
hell, dass man sich damit die Netzhaut wegbrennt. Dass man eine LED, die
30mA als Dauerstrom aushält nicht mit 30mA pulsen darf, wusste ich
nicht.
Wie gesagt: Das ist alles Neuland. Irgendwann muss man ja anfangen.
> Dass man eine LED, die 30mA als Dauerstrom aushält nicht mit> 30mA pulsen darf, wusste ich nicht.
Doch, darf man, nur ist sie dann eben 1/5 so hell (bei 1:5 Multiplex)
Nur damit eine 30mA LED auch im 1:30 Multiplex so hell erscheint wie
wenn man sie mit 30mA Dauerstrom versorgt, muss man 1/30tel der Zeit
eben 900mA durchjagen, und das verträgt sie nicht. Meist ist bei 120mA
Schluss.
Und ob deine 30mA LEDs schon bei 1mA hell genug wären mag dann doch
bezweifelt werden. Daher ist 1:30 als Multiplex wohl übertrieben, auch
2mA bei 1:15.
Wenn die LEDs zu hell sind, spricht übrigens nichts dagegen, die
Schaltung trotzdem für volle Helligkeit auszulegen, und einfach das
Programm so zu schreiben, daß die LEDs nicht die ganze 1/5tel oder
1/30tel der Zeit an sind, sondern noch weniger, z.B. 1/20tel oder
1/60tel. Dann hätte man nachträglich immer noch die Gelegenheit, die
Helligkeit durch einfache Softwareänderung zu erhöhen, wo sonst ein
ganzer Schaltungsumbau nötig wäre.
Wenn man die Schaltung so aufbaut, daß man weniger Strom durch die LEDs
schickt, dann sollte das für die Schaltung auch einen Vorteil haben,
z.B. Transistoren sparen. Da kommt man aber legal nur hin, wenn man
nicht 30mA sondern nur 20mA fliessen lässt, dann könnte man sich alle
Reihentransistoren einsparen.
Deine Ursprungsgeschichte, 30 LEDs von denen nur 3 voll mit 20mA und 6
halb mit 10mA bzw. 50% der Zeit 20mA leuchten, lässt sich ganz ohne
extra Transistoren aufbauen, nur mit den bis 20mA liefernden uC
Ausgängen und Vorwiderständen. Mit etwas Intelligenz und Mühe kann man
eine Anordnung der 10 LEDs finden, je 2 in unterschiedlicher Polung, mit
denen es auch mit weniger Ausgängen geht, 5 pro Farbe, 15 gesamt und
damit einem ATmega8.
Pro rot, grün, blau:
+-------------------------------R-------------------------------+
| |
+--|>|--+ +--|>|--+ +--|>|--+ +--|>|--+ +--|>|--+
| +--R--+ +--R--+ +--R--+ +--R--+ |
+--|<|--+ +--|<|--+ +--|<|--+ +--|<|--+ +--|<|--+
| | | | |
Pin1 Pin2 Pin3 Pin4 Pin5
Im Artikel zur LED matrix ist schon das Problem mit der Spannung
beschrieben. Die Matrix mit Emiterfolgern geht mit nur roten LEDs, aber
halt kaum noch mit blauen LEDs.
Die LEDs darf man auch mit weniger Strom betreiben. Wie hell die LEDs
werden hängt stark vom Typ ab - da gibt es sehr helle, aber halt auch
Funzeln, die man kaum hell genug bekommt. Gepulst kann man oft nicht
mehr als das 10 fache des Dauerstromes nutzen - entsprechend wird es
spätestens ab 10-fach Multiplexing dunkler.
Wenn die LEDs mit 30 mA schon zu hell sind, sollten 20 mA oder noch
etwas weniger als Strom reichen, so dass man auf der einen Seite (die
mit den LED Farben) auf die Transistoren verzichten kann.
Für LEDs darf das PWM Signal relativ langsam sein - das kann man noch in
Software erreichen. Im Idealfall wird das auch kein klassisches PWM,
sondern eine Variable Zeit für das Umschalten beim Multiplexing. Für die
3 LEDs wie anfangs Beschrieben, erhält man dann z.B. folgende Phasen:
1) LED 1 an und LED 2 an (z.B. 2 ms)
2) LED 2 an (z.B 3 ms)
3) LED 3 an (z.B. 2 ms)
4) alle LEDs aus (z.B. 8 ms)
MaWin schrieb:>> Dass man eine LED, die 30mA als Dauerstrom aushält nicht mit>> 30mA pulsen darf, wusste ich nicht.>> Doch, darf man, nur ist sie dann eben 1/5 so hell (bei 1:5 Multiplex)>> Nur damit eine 30mA LED auch im 1:30 Multiplex so hell erscheint wie> wenn man sie mit 30mA Dauerstrom versorgt, muss man 1/30tel der Zeit> eben 900mA durchjagen, und das verträgt sie nicht. Meist ist bei 120mA> Schluss.
Bei meiner leider schon bei 100mA. Dann aber nur bei sehr kurzen
Pulsdauern (1ms [lt. Datenblatt]).
> Pro rot, grün, blau:>> +-------------------------------R-------------------------------+> | |> +--|>|--+ +--|>|--+ +--|>|--+ +--|>|--+ +--|>|--+> | +--R--+ +--R--+ +--R--+ +--R--+ |> +--|<|--+ +--|<|--+ +--|<|--+ +--|<|--+ +--|<|--+> | | | | |> Pin1 Pin2 Pin3 Pin4 Pin5
PIN1-PIN5 wäre dann die Versorgung. Wo wird hier die Masse
angeschlossen? Mir schwebt zwar schon ein wenig vor, was Du dir hierbei
gedacht hast, aber so recht nachvollziehen kann ich das gerade nicht.
Ulrich (Gast) schrieb:
> Für die> 3 LEDs wie anfangs Beschrieben, erhält man dann z.B. folgende Phasen:> 1) LED 1 an und LED 2 an (z.B. 2 ms)> 2) LED 2 an (z.B 3 ms)> 3) LED 3 an (z.B. 2 ms)> 4) alle LEDs aus (z.B. 8 ms)
Das ganze habe ich aber mal 3, da ich drei Farben gleichzeit ansteuern
will. Bei 100Hz käme ich dann auf 10ms.
Rein vom Timing her:
LED1 25%, LED2 50%, LED3 25% (in Summe 100% = 10ms)
LED1(25%)_ROT: 50%, LED1(25%)_GRÜN: 35%, LED1(25%)_BLAU: 15%.
Oder als Zeit: LED1(25%)_Rot: 0.25*1/100Hz*0.5 = 1,25ms
LED1(25%)_Grün: 0.25*1/100Hz*0.35 = 875µs
LED1(25%)_Grün: 0.25*1/100Hz*0.15 = 375µs
Die Zeitwerte wären für LED3 nahezu gleich (die Prozentsätze der
Farbmischung ändern sich), für LED2 wären sie doppelt so lang. Mein
kürzest möglicher Impuls würde dann bei 8Bit / 10 = 25 Schritte =
100%/25 Schritte * 1 Schritt = 4% => 0.25*1/100Hz*0.04 = 100µs liegen.
Ist das noch machbar?
Bei dieser Rechnung ergibt sich auch:
LED2(50%)_Rot: 0.5*1/100Hz*0.5 = 2,5ms für den längsten Impuls bei dem
oben angesetzen Farbwert. Bei 100Hz wird dieser Impuls 100mal wiederholt
=> 250ms. Das ergibt einen Effektivstrom von 7,5mA. Damit könnte ich auf
jeden Fall leben.
> Wo wird hier die Masse angeschlossen?
Pin können sowohl HIGH als auch LOW ausgeben, es braucht keine Masse.
> aber so recht nachvollziehen kann ich das gerade nicht.
Die Schaltung kann entweder 0, 2 oder 4 LEDs leuchten lassen.
Da deine äusseren halbhell sein sollen, passt das gut, es wird eine 50%
der Zeit an sein, die andere die anderen 50%.
Wollte man auch 1, 3 und 5 LEDs leuchten lassen, hätte es einen Pin6
benötigt.
MaWin schrieb:>> Wo wird hier die Masse angeschlossen?>> Pin können sowohl HIGH als auch LOW ausgeben, es braucht keine Masse.>>> aber so recht nachvollziehen kann ich das gerade nicht.>> Die Schaltung kann entweder 0, 2 oder 4 LEDs leuchten lassen.>> Da deine äusseren halbhell sein sollen, passt das gut, es wird eine 50%> der Zeit an sein, die andere die anderen 50%.>> Wollte man auch 1, 3 und 5 LEDs leuchten lassen, hätte es einen Pin6> benötigt.
So wie ich die Schaltung sehe, erlaubt sie aber nicht, dass die rote LED
1 mit effektiv 3mA, LED2 mit 7,5mA und LED3 mit 1mA betrieben wird.
Durch die geforderten Mischfarben ist das aber nötig.
Von daher schein mir Deine obige Schaltung recht interessant.
> erlaubt sie aber nicht, dass die rote LED 1 mit effektiv 3mA,> LED2 mit 7,5mA und LED3 mit 1mA betrieben wird
Wenn es sich bei den LEDs um gleichfarbige handelt: Nein, geht nicht,
stand so auch nicht in der Aufgabenbeschreibung.
Wenn es um verschiedenfarbige geht: Natürlich geht das, daher ja 3
getrennte Kreise und die Möglichkeit alle einer Farbe abzuschalten.
Dann habe ich nochmal eine Frage:
D4 R1 D1 R2
|-|<-| _ |-|<-| _ |
| +---|___|---+ +-|___|-+
|->|-| |->|-| |
| D3 | D2 |
| | |
0V 5V 0V
Ich gebe am mittleren Pin 2 = 5V ein. Über D2 fallen dann 2V (bei Rot)
ab. Die gleiche Spannung liegt aber dann auch über R1 und D4 gegen Pin 1
an. Ich habe also eine Parallelschaltung aus (R1 + D4) || (D2 + R2). Da
beide werte gleich groß sind, und ich mit 40mA Strom ansteuere, ist das
also ein Stromteiler im Verhältnis 1:1. Somit leuchten D4 und D2 beide
gleich hell bei halben Strom.
Das war dann auch das, was Du geschrieben hast. Um eine LED einzeln
leuchten zu lassen, braucht es den Pin 6. Wo sollte dieser dann aber
angeschlossen werden?
MaWins Vorschlag funktioniert weil an einem Pin drei Zustände herrschen
können: 0V, 5V und Hochohmig als Eingang. Die Formel lautet PinAnzahl *
(PinAnzahl -1). Bei 3 Pins kannst du also 3*(3-1)=6 LEDs auf diese Art
steuern. Das hat MaWin aber nicht so gezeichnet.
> Das war dann auch das, was Du geschrieben hast.
Nicht ganz, bei mir teilt sich ein Strom nicht 50:50 auf,
sondern entweder leuchtet eine LED mit dem Strom den ihr
Vorwiderstand sagt, oder eben nicht weil verpolt bzw. 0V.
Es leuchten also immer 2 LEDs mit ihrem vollen Strom,
und wenn man schnell so wechselt daß es LED1 und LED2
und kurze Zeit später LED2 und LED3 sind, dann leuchet
eben LED2 mit voller Helligkeit, LED1 und LED3 mit
halber (oder zumindest in der Summe 100%).
> Wo sollte dieser dann aber angeschlossen werden?
Man muß den Ring aufbrechen, dann hat man einen Anfang und
ein Ende und braucht entsprechend 2 Pins.
> Ich hab MaWins Vorschlag soweit übernommen.
Den ersten, die Multiplexansteuerung.
> Fällt jemanden etwas auf, das nicht passt?
Du solltest nachgucken, was deine LEDs an Spitzenstrom aushalten.
> MaWins Vorschlag funktioniert> weil an einem Pin drei Zustände herrschen können:
Nein, das nutzt meine (zweite) Schaltung nicht aus.
MaWin schrieb:>> Ich hab MaWins Vorschlag soweit übernommen.>> Den ersten, die Multiplexansteuerung.
Richtig.
>> Fällt jemanden etwas auf, das nicht passt?>> Du solltest nachgucken, was deine LEDs an Spitzenstrom aushalten.
100mA. Das wäre aber bereits der maximalstrom, den der 78L05 bringen
kann. Beim SO-8-Gehäuse liegt P_tot bei 625mA. Das passt also. So hoch
möchte ich den Strom nicht treiben. 20mA Prozessor und etwa 40mA für die
Matrix habe ich mal kalkuliert.
>> MaWins Vorschlag funktioniert>> weil an einem Pin drei Zustände herrschen können:>> Nein, das nutzt meine (zweite) Schaltung nicht aus.
Das stammt nicht aus meiner Feder :)
Hallo miteinander,
ich habe die beiden Platinen (habe sie aufgeteilt) jetzt soweit
aufgebaut. Die Spaltentransistoren (FMMT) ziehen ungefähr 4mA
Basisstrom). Das dürfte soweit i.O. sein.
Die BC857 (Zeilentransen) jedoch machen gar nichts. Ich habe die B-Typen
genommen. War das ein Fehlkauf? Soweit ich das nachgesehen habe, düfte
das aber eigentlich passen.
Sind die Vorwiderstände eventuell zu groß? Ich wäre für jeden Tipp
dankbar.
Grüße
M. Schwaikert
> Die BC857 (Zeilentransen) jedoch machen gar nichts.
Vielleicht Transistor falschrum eingelötet oder nicht an +5V ?
> Ich habe die B-Typen genommen. War das ein Fehlkauf?
Passen.
> Sind die Vorwiderstände eventuell zu groß?
Wenn du die 220 Ohm genommen hast, sind sie so klein wie möglich.
Oder PortC nicht auf Ausgang geschaltet ?
MaWin schrieb:>> Die BC857 (Zeilentransen) jedoch machen gar nichts.>> Vielleicht Transistor falschrum eingelötet oder nicht an +5V ?
Also laut Datenblatt (ich hoffe, es sind überhaupt die richtigen):
1 base -> Geht auf +5V (TTL) über 220 Ohm
2 emitter -> Geht auf +5V Versorgung
3 collector -> Geht auf die LED>> Ich habe die B-Typen genommen. War das ein Fehlkauf?>> Passen.>>> Sind die Vorwiderstände eventuell zu groß?>> Wenn du die 220 Ohm genommen hast, sind sie so klein wie möglich.>> Oder PortC nicht auf Ausgang geschaltet ?
Ich habe die Schaltung (da das mit dem Pizzaofen-Reflow etwas gefährlich
ist) in zwei Hälften geteilt. Momentan hängt noch kein Prozessor dran.
Das mit dem Smash werde ich morgen mal ausprobieren.
Und dass der PNP invertiert, hätte ich vermutlich vor fünf Stunden noch
gemerkt :)
Das Teil funktioniert jetzt soweit. Aber 20mA Basisstrom sind schon
verdammt happig für die kleinen Transistoren. Sicher, dass 220 Ohm
vertretbar sind?
Hallo miteinander,
ich habe mein Programm soweit geschrieben, und in der Simulation lief es
auch so, wie es soll. In der Praxis sieht es dann aber irgendwie ein
bisschen anders aus...
Ich habe das Teil jetzt nach diesem Schaltplan
(http://www.mikrocontroller.net/attachment/135998/Schaltung.png)
aufgebaut.
Zum Testen habe ich mal folgenden Code aufgebrannt:
Definitions.h
1
#define MUX_ROW PINC
2
#define MUX_ROW_DDR DDRC
3
4
#define MUX_COL PIND
5
#define MUX_COL_DDR DDRD
6
7
#define LED_REF PINB
8
#define LED_REF_DDR DDRB
9
10
#define TEMP_SENSE PINA
11
#define TEMP_SENSE_DDR DDRA
Main.c
1
intmain(void){
2
3
_delay_ms(30);
4
5
PORTA=0x00;
6
PORTB=0x00;
7
PORTC=0xFF;
8
PORTD=0x00;
9
10
MUX_COL_DDR=0xFF;
11
MUX_ROW_DDR=0xFF;
12
LED_REF_DDR=0xFF;
13
TEMP_SENSE_DDR=0x00;
14
15
ADC_Init();
16
ADC_Value=ADC_Read(0);// read one value and dispose
17
ADC_Value=0;
18
19
// REF-Diode to see Reset
20
PORTB=0xFF;
21
_delay_ms(1000);
22
PORTB=0x00;
23
24
while(1){
25
26
// PERFORMS TESTING
27
28
PORTC=~0x01;
29
PORTD=0x01;
30
_delay_ms(100);
31
32
PORTD=0x02;
33
_delay_ms(100);
34
35
PORTD=0x04;
36
_delay_ms(100);
37
38
PORTD=0x08;
39
_delay_ms(100);
40
41
PORTD=0x10;
42
_delay_ms(100);
43
44
PORTC=~0x02;
45
PORTD=0x01;
46
_delay_ms(100);
47
48
PORTD=0x02;
49
_delay_ms(100);
50
51
PORTD=0x04;
52
_delay_ms(100);
53
54
PORTD=0x08;
55
_delay_ms(100);
56
57
PORTD=0x10;
58
_delay_ms(100);
59
60
PORTC=~0x04;
61
PORTD=0x01;
62
_delay_ms(100);
63
64
PORTD=0x02;
65
_delay_ms(100);
66
67
PORTD=0x04;
68
_delay_ms(100);
69
70
PORTD=0x08;
71
_delay_ms(100);
72
73
PORTD=0x10;
74
_delay_ms(100);
75
76
// PERFORMS TESTING
77
78
PORTC=~0x08;
79
PORTD=0x01;
80
_delay_ms(100);
81
82
PORTD=0x02;
83
_delay_ms(100);
84
85
PORTD=0x04;
86
_delay_ms(100);
87
88
PORTD=0x08;
89
_delay_ms(100);
90
91
PORTD=0x10;
92
_delay_ms(100);
93
94
PORTC=~0x10;
95
PORTD=0x01;
96
_delay_ms(100);
97
98
PORTD=0x02;
99
_delay_ms(100);
100
101
PORTD=0x04;
102
_delay_ms(100);
103
104
PORTD=0x08;
105
_delay_ms(100);
106
107
PORTD=0x10;
108
_delay_ms(100);
109
110
PORTC=~0x20;
111
PORTD=0x01;
112
_delay_ms(100);
113
114
PORTD=0x02;
115
_delay_ms(100);
116
117
PORTD=0x04;
118
_delay_ms(100);
119
120
PORTD=0x08;
121
_delay_ms(100);
122
123
PORTD=0x10;
124
_delay_ms(100);
125
}
126
127
return0;
128
}
Die Spaltentransistoren (PortD) schalten alle hervorragend durch. Bei
den Zeilen sieht es schlecht aus. Hier bekomme ich am Ausgang der Ports
nur bei PORDC = 0x04 und 0x02 überhaupt etwas heraus.
Woran kann das liegen? Zwischen den Beinchen am Prozessor ist kein
Kurzschluss.
Grüße
M. Schwaikert
Hallo,
ich möchte das Thema nochmal aufgreifen. Ich wollte MaWin zwar nicht
glauben, aber er hatte halt wieder recht. Und damit meine ich, dass mir
lieber gewesen wäre, wenn es auch mit "Soft-PWM" geht.
Das ergebnis ist bei weitem nicht zufriedenstellend. Die Farbwiedergabe
und Helligkeit passen hinten und vorne nicht. Daher meine Frage: Wie
geht es besser?
Schönen Abend noch.
Grüße M. Schwaikert
Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
Groß- und Kleinschreibung verwenden
Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang