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
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 ?
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
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. :/
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
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
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
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
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
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
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
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
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
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
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.