Forum: Mikrocontroller und Digitale Elektronik Displaybeleuchtung mit PWM dimmen


von Sebastian B. (lufti)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe vor, mit meinem AT89C51ed2 ein Display anzusteuern.
Dieses Display hat eine Beleuchtung, die ich von ganz hell, bis ganz
dunkel dimmen möchte. Das Alles soll über PWM am P1.7 geschehen.

Natürlich darf das Display nicht flimmern!

Ich habe meine Schaltung als Anhang beigefügt.
Es geht mir speziell jetzt nur um die Displaybeleuchtung an P1.7.

Die Bauteile habe ich einfach mal irgendwelche rausgesucht. Hauptsache
Diode und Hauptsache FET.

Das Display wird mit +5V und 65mA angesteuert. Vorwiderstände sind im
Display integriert.

Fragen
1. Welche Bauteile kann ich verwenden? Ich kenne mich leider überhaupt
nicht mit Dioden und FETs aus.
2. Welche Einstellungen muss ich im Controller machen? Welche
Frequenz?
3. Habe ich irgendwie einen Denkfehler beim PWM gemacht?


Ich hoffe, ihr könnt mir helfen!

liebevoll .. Sebastian

von Benedikt (Gast)


Lesenswert?

zu 1)
Ein MOSFET ist nicht unbedingt erforderlich, ein normalen
Standardtransistor wie BC547 oder BC337 sollte die 65mA problemlos
schaffen.

zu 2) Die Frequenz ist egal, solange die nicht niedriger als etwa 50Hz
ist (bei 8bit PWM sind das dann etwa 13kHz Taktfrequenz für den
Zähler).
Was du einstellen musst habe ich dir im anderen Thread schon
geschrieben ! Wieso machst du eigentlich einen neuen auf ?

von Sebastian B. (lufti)


Lesenswert?

Hab einen neuen der Übersichtlichkeit geöffnet.
Ich weiß immer was das aktuelle Problem ist und welche Frage mir noch
nicht klar ist. Damit ich hier auch Hilfe bekomme, will ich vermeiden,
dass sich jeder erst 20 Posts mit ganz anderen Problemen durchlesen
muss, bis er zum aktuellen Problem kommt.
Außerdem hat das Topic nicht mehr gestimmt.

Ich habe jetzt den Schaltplan ein wenig umgestellt:
Habe einen BC547 mit nem Vorwiderstand reingehauen.

Ich glaube nicht, dass ich das so richtig gemacht habe :P .. oder?
Wie oben beschriebe, Displaybeleuchtung: 5V, 65mA, Vorwiderstand im
Display integriert.

Ist das richtig so?

Danke im Voraus,

Sebastian

von Sebastian B. (lufti)


Angehängte Dateien:

Lesenswert?

Da hab ich doch was vergessen... :D

von stefan (Gast)


Lesenswert?

müsste so gehen

von Sebastian B. (lufti)


Angehängte Dateien:

Lesenswert?

Auch mit dem Widerstand R16?
Was für ein Strom darf beim BC547 maximal Basis->Emitter fließen und
was ist die maximale Basis-Emitter-Spannung?

Aus dem Datenblatt werde ich da einfach nicht schlau. Da sind so viele
Informationen, aber irgenwie nicht das, was ich wissen will. :/

von Markus_8051 (Gast)


Lesenswert?

Hallo Sebastian,

Dein Datenblatt ist etwas unvollständig. Ich habe eins von Vishay, da
steht ein maximal zuläßiger kurzzeitiger Basisstrom von 200mA drin. Die
Basis-Emitter-Spannung ist im Prinzip nichts, worauf du Einfluß nehmen
kannst und solltest. In der Basis-Emitter-Strecke des bipolaren
Transistors liegt halt eine Diode, über der - je nach Strom und Typ -
550-900 mV abfallen. Zum Rechnen nimmst Du hier einen Wert von 700mV.
Das was bei der Dimensionierung von Bipolaren Transistoren wirklich
interessiert, ist die Stromverstärkung (im Datenblatt als hfe
angegeben). Die liegt bei einem BC547 zwischen 110 und 800. Genauer:
BC547A: 110-250
BC547B: 250-400
BC547C: 400-800
- na so ungefähr aus dem Kopf jetzt mal hingeschrieben. Außerdem ist
sie auch noch Temperaturabhängig - womit ich gerade arg zu kämpfen habe
:-(
Wenn wir jetzt mal von dem schlechtesten Fall ausgehen, nehmen wir 100,
damit kann man schön rechnen. Du möchtest 65mA schalten. Damit dein
Transistor also voll durchschaltet, mußt Du ihn mit mindesten 65/100mA
= 650µA ansteuern.
Über R=U/I und U=5V-700mV (Basis-Emitter-Spannung) bekommst Du 6,6kOhm.
Wenn man nun bedenkt, daß der µC noch einen internen Pullup von ca.
15kOhm hat, bekommen wir in Deiner Schaltung insgesamt etwa 20kOhm
zwischen Vcc und Basis. Die reichen bei einem BC547A sicher nicht aus,
um das Displaylicht zu steuern. Wenn Du den BC547C verwendest, klappt
es.
Schau sicherheitshalber noch mal im Datenblatt von deinem µC nach. Dort
sind die Pullupwiderstände angegeben. Diese Werte schwanken nämlich von
µC zu µC. Manche Ports haben auch gar keine internen Pullups, hier
müßtest Du dann extern nachhelfen.
Was für eine Technologie ist deine Display-Beleuchtung? LED oder
EL-Folie. Bei letzterer wäre ich mir nicht so sicher, ob sie mit
PWM-Ansteuerung funktioniert.

So, hoffe das hilft,
Markus_8051

von Sebastian B. (lufti)


Angehängte Dateien:

Lesenswert?

Es ist eine LED-Hintergrundbeleuchtung.

Ich habe leider nicht herausbekommen, wie groß der interne PU-R an P1
ist.

Ich habe hier noch einige BC547C rumliegen, also mit 420-800 B (nach
Datenblatt).

Also muss ich den Transistor mit min. [ 70mA / 420 = 167µA ]ansteuern.

Folglich:
R_Bmin = (U_Pin - U_BE) / I_Bmin = (5V - 0.7V) / 167µA = 25.8kOhm

Wie du den internen mit berechnest verstehe ich nicht.
Der Pin P1.7 ist doch in diesem Fall ein Ausgang, also ~5V oder ~0V.
Verstehe ich da was falsch?`

Schau dir mal das Datasheet Seite 11 und 14 an. Dateianhang

confused

von Markus_8051 (Gast)


Lesenswert?

Hallo Sebastian,

der µC, den Du verwendest, gehört zur 8051-Familie. In dieser
Prozessorfamilie ist es üblich, daß die Portpins - wenn sie low
ausgeben - den Pin über einen Transistor nach Masse ziehen. Wenn sie
high ausgeben, sperrt der Transistor und der Pin liegt lediglich über
einen schwachen Pullup-Widerstand an Vcc. In diesem Zustand kannst Du
den Portpin auch als Eingang verwenden. Der µC kann jetzt erkennen,
wenn der Pin extern nach Masse gezogen wird. Deshalb solltest Du
irgendwelche Schalter und Taster auch immer gegen Masse an den µC
anschließen. Auf diese Weise kommt der Port ohne Datenrichtungsregister
aus. Nachteil ist eben, daß Du den High-Pegel nicht wirklich stark
belasten kannst. Bei den meisten 8051-Typen kann man hier mit 15-20kOhm
rechnen.
Dein µC hat nun die Besonderheit, daß er zur Verbesserung des
Schaltverhaltens der Portpins drei verschiedene Pullups zur Auswahl
hat. Diese sind von strong bis weak bezeichnet. Aber laß dich von den
Namen nicht irreführen: Auch der "strong" ist nicht wirklich stark:
Er erlaubt maximale Ströme von 650µA (Datenblatt Seite 117), ist aber
nur für 2 Taktzyklen nach dem Wechsel von low nach High aktiv. Konkrete
Werte für die drei Widerstände konnte ich im Datenblatt nicht finden.
Auf Seite 117 ist jedoch der I(IL) angegeben (Strom, Input,low): 50µA
Das ist für deine Zwecke wirklich nicht viel. Nun, entweder hilfst Du
hier mit einem externen Pullup nach (ca. 15kOhm gegen Vcc), oder Du
nimmst doch einen Mosfet. (z.B.: BSS100)

Gruß,
Markus_8051

von Sebastian B. (lufti)


Lesenswert?

Ok, .. ich habe jetzt ungefär fast garnix kapiert :)

ich würde von 20kOhm als Vorwiderstand ausgehen.
Ob eine zusätzliche Beschaltung oder eine Änderung des Widerstandwertes
nötig ist, habe ich jetzt nicht verstanden.

Nach einiger Suche nach Beispielschaltungen bin ich leider nicht fündig
geworden.

Ich hoffe jemand kann mir etwas konkretes sagen, da ich die ganze Sache
mit den interne Pull-UPs, trotz der wahnsinns Mühe von Markus, dies zu
erklären, nicht verstehe.

Danke .. Sebastian

von Markus_8051 (Gast)


Lesenswert?

Na, wie ich halt sagte/schrieb: Nimm einfach zusätzlich zu Deiner bisher
geplanten Schaltung einen Pullup-Widerstand von 15-20kOhm direkt am
Portpin 1.7 nach Vcc.
Damit bist Du dann auf der sicheren Seite.

Die Verwendung eines MOSFET-Transsistors würde Dir halt nur zwei
Widerstände sparen. - Sorry, Berufskrankheit, wenn man halt etwas mehr
als 1 oder 100 Stück von einer Schaltung baut, dann diskutiert man über
jedes Bauteil....

Viel Erfolg,
Markus_8051

von Sebastian B. (lufti)


Angehängte Dateien:

Lesenswert?

So? :D
Oder meintest du einen anderen Wert für R16?

von Markus_8051 (Gast)


Lesenswert?

R16 ist O.K., so sollte es klappen - zumindest die PWM für das Display.

Mir ist gerade noch etwas anderes aufgefallen: Gleiches Problem, andere
Baustelle: Du steuerst mit P0.0 bis P0.3 Optokoppler an. Auch hier ist
das Problem, das der µC nicht genügend Strom auf den Portpins ausgibt,
um die Optokoppler zu schalten. Wenn Du den Optokoppler anders
anschließt, dann klappt es: Anode (Pin 1 vom OK) an Vcc, dann an die
Kathode den Widerstand, vom Widerstand zum µC. Natürlich mußt Du dann
bei der Programmierung beachten, daß Du den Portpin auf null setzen
mußt, um den Optokoppler zu schalten. Aber daran mußt Du Dich bei der
8051-Familie gewöhnen.

Einfach immer merken: beim 8051 ist der Ausgangsstrom der Portpins für
low etwa -10mA (laß Dich vom Minus nicht verwirren, schließlich fließt
der Strom ja jetzt in den µC rein), für high nur wenige µA. Denk auch
daran, daß Du nie alle Portpins gleichzeitig mit -10mA belasten darfst.
Es gibt eine Obergrenze für die Summe der Ströme (steht auch im
Datenblatt) Die ist aber bei Deiner Schaltung - so wie ich das sehe -
noch nicht erreicht.

Was ist das für ein Keypad? Einzelne Taster gegen Masse oder Matrix?
Was kommt an die Stecker MAXOUT1..3?
Was für ein Display verwendest Du? So ein normales Text oder Graphik?
Stimmen die Bezeichnungen D0-D7 am Displaystecker? Dann hast Du es
verdreht angeschlossen. Ist mir auch schon mal passiert. Da aber schon
100 Platinen davon gebaut waren, habe ich den Fehler dann in der
Software durch ein Unterprogramm zum drehen der Bits behoben.

Gruß,
Markus_8051

von Sebastian B. (lufti)


Angehängte Dateien:

Lesenswert?

Der Optokoppler brauch min. 20mA bei 1.4V um durchzuschalten.
(Datenblatt als Anhang).
Wenn also eine LED geht, dann geht auch der Optokoppler. Oder?
Muss ich da den Operationsverstärker trotzdem umdrehen?


An das Keypad kommt eine 3x4 Matrix Tastatur.

An MAXOUT1-3 kommen LEDs, verschiedenfarbig. Der 7219 ist ja ein
Multiplexer, also immer nur eine LED gleichzeitig. 3mal den Stecker,
damit ich überall hinführen kann.

Dsa Display ist ein Hyundai HP12542R-DYO. Gibt es bei Pollin.de unter
der Nummer: 94-120292
Ist eine Mischung aus beidem .. Text und Grafik. Benutze es für
Graphen. 128x64 Pixel.

Verdreht macht nix. Der Gegenstecker am Display existiert nicht. Ich
will den so oder so selber basteln (Fädeldraht und viel Kleber :D).
Ansonsten gibt es den Softwareweg!



Ich Danke dir für die ganze Hilfe!
Bis Montag habe ich Zeit Fehler zu finden. Denn da will ich das Routen
anfangen.
Also falls dir noch etwas auffällt!? Bitte, her damit!

liebevoll .. Sebastian

von Markus_8051 (Gast)


Lesenswert?

Hi Sebastian,

im Prinzip hast Du Recht, wenn eine LED geht, geht auch der
Optokoppler. Aber auch eine LED wirst Du mit ihrer Anode an Plus und
dann über einen Widerstand vom µC gegen Masse treiben lassen, damit sie
leuchtet. Moderne LED kommen mit 2mA aus. Der OK ist da etwas gieriger.
Die 20mA aus dem Datenblatt scheinen mir dennoch etwas hoch. Aber da
stand ja auch, daß bei If=5mA schon ein Ic von 2,5..30mA fließt. Schau
mal, ob Dir das genügt. Wenn es genügt, wähle die Vorwiderstände für
die OK etwas höher als die 300Ohm, sagen wir 390R.
Welchen Operationsverstärker willst Du umdrehen - denke das war ein
Schreibfehler, oder?

Das mit der Tastatur habe ich auch schon mal so gemacht.

Der LED-Treiber IC ist nett. Habe mir gerade mal das Datenblatt
angesehen. Nur Dein Kommentar dazu "immer eine LED gleichzeitig" ist
falsch: immer eine LED-Zeile gleichzeitig, also 8 LEDs und das ganze
mal 8, also 64 LEDs. Was wird das ganze - wenn ich fragen darf?

So ein Display habe ich bisher noch nicht angesteuert. Ich hatte bisher
nur Textdisplays im Einsatz. Neulich hatte ich mal so ein
Nokia-Handy-Display versucht anzuschließen. Da habe ich aber noch ein
Problem in der Umsetzung von 5V auf 3.3V Logik.

Worin programmierst Du? C oder Assembler?

Viel Erfolg,
Markus_8051

von Sebastian B. (lufti)


Lesenswert?

Hi,

das war ein Schreibfehler. Ich wollte Optokoppler anstatt
Operationsverstärker schreiben. Habe im Moment viel mit
Operationsverstärker zu tun. :)


Die Schaltung kommt im meinen PC. Mein Hobby ist Casemodding. In diesem
Fall habe ich einen Alukoffer zu einem PC-Gehäuse umfunktioniert. Sieht
echt schick aus, ist aber noch nicht fertig. Werde es hier mal posten,
wenn ich es geschafft hab.
Die vielen LEDs werden zu unterschiedlichsten zwecken benutzt. Ich
wollte einfach flexibel sein, da ich auch plane, die Schaltung auch in
anderen PCs einzusetzen.
Im Aktuellen Koffer gibt es ein Christallglasfenster, in das in kleinem
Abstand regelmäßig querlinien gezogen sind. Die Linien sind mit einem
Sandstrahlgerät ca. 0.3mm tief eingestrahl worden.
Um die Scheibe (genauergesagt sind es 3 Scheiben/Windows) sind LEDs
angebracht, die seitlich in das Glas leuchten. An den Linien wird das
Licht dann nach außen gebrochen und ist erst dann für den Betrachter
sichtbar. Dadurch, dass ich viele Linien und LEDs (Ich werde
warscheinlich trotzdem keine 10 LEDs für ein Window benutzen) habe,
kann ich einen Effekt hervorrufen, der so wie Wolken aussieht.
Abwechselnd hell und dunkel; flimmernd. Das habe ich schon getestet.
Das ganze soll wie ein Kraftfeld (siehe SciFi-Filme) aussehen.

Ich freue mich schon tierisch auf das Display :)

Ich programmiere in Assembler. Wird warscheinlich komplizierter als C.
Jedoch will ich mehr von der Materie der Bits und Bytes haben. Ich
möchte besser so einen Controller verstehen können.

Am Montag muss ich wieder arbeiten, da kann ich dann parallel (hab grad
nicht viel zu tun :D) an der Schaltung weiterbasteln. Ich werde dann den
Schaltplan updaten und hier nochmal reinstellen.
Ich hoffe jetzt schon, dass dann alles richtig ist, denn ich will
Montag anfangen, das Layout zu routen.


Vielen Dank ... Sebastian

von Richard Rudolf (Gast)


Lesenswert?

Hi,

ich hab noch einen kleinen Einwurf zur LCD-Display-Beleuchtung:

Warum soll das Dimmen so kompliziert über PWM geschehen?
Man kann doch einfach einen Kondensator über einen Widerstand
laden/entladen und damit einen Transistor ansteuren.
Die Kennlinie des Dimmens ist dann natürlich nicht linear, aber ich
denke, das sollte ein deutlich einfacherer Weg sein als eine reine
Softwarelösung.

Falls meine Idee totaler Bockmist sein sollte, entschuldige ich mich
dafür. ;-)


Gruß,
Richard

von Erkan (Gast)


Lesenswert?

Schlimmer als Bockmist!
Der Kondensator lädt/entlädt sich dann von alleine, oder was?
Die Helligkeit soll ja variabel und vom µC/User veränderbar sein.
Da bleibt dann nix anderes übrig als PWM, ob Hard- oder Soft-PWM ist
egal, hauptsache PWM.
Desweiteren geht es hier wohl nicht um ein LC-Display, sondern um ein
aus vielen LEDs gebautes Display was das ganze ein wenig komplexer
macht da es mit dem Multiplexen verbunden werden muss, wenn ich mich
nicht irre.

von Sebastian B. (lufti)


Lesenswert?

Ihr habt da beide etwas falsch verstanden :)

Ich habe ein Display mit Hintergrundbeleuchtung UND einige LEDs, die
ich indivuell ansteuern will.
Ich will auch nicht nur ein weiches ausfaden, sondern auch einen
einstellbaren Helligkeitswert per Software.

Danke aber für eure Hilfe!

Am Montag/Dienstag werde ich am Schaltplan weiterarbeiten können, dann
gehts weiter. :D

von Sebastian B. (lufti)


Angehängte Dateien:

Lesenswert?

Hi,

so, Wochende vorbei und erster Schultag auch. :P

Ich habe die Ansteuerung des Optokopplers gewechselt. Jetzt sollte er
bei einer logischen 0 am Mikrocontroller-Pin durchschalten.

Oder habe ich schon wieder einen Fehler (erm, .. ich meine natürlich
Feature :D) reingebastelt?


Ich bitte euch, noch einmal einen letzten Blick auf mein Schaltung zu
werfen, und nach etwaigen Fehlern zu suchen.

Würde sehr gerne, und sehr schnell mit dem Routen beginnen.


Danke im Voraus,..

Sebastian

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.