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
Kennst du die Artikel Standardbauelemente: Transistoren und Transistor-Übersicht? Beim zweiten Link kannst du die Tabelle nach Package sortieren.
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: FMMT617 BC846 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: > > FMMT617 BC846 > 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.
Nun gut. Ich hab MaWins Vorschlag soweit übernommen. Fällt jemanden etwas auf, das nicht passt? Grüße M. Schwaikert
> 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.
> base -> Geht auf +5V (TTL) über 220 Ohm
Wirst du an Masse legen müssen damit es leitet.
Hier als Anhang noch das Layout. Leider sind die Namen/Werte teilweise sau dämlich. Kann man die Anordnung ändern?
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 | int main (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 | return 0; |
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.