Hi. Das soll nur ne kurze Frage sein: Kann ich eine LED wie folgt mit einem Atmel Mikrocontroller (ATMega16) betreiben? Pin1 ---- Vorwiderstand --- LED --- Pin2 Ich möchte mir nämlich eine LED-Matrix bauen - die LEDs der Matrix werden schnell nacheinander, aber nie gleichzeitig angesteuert - es fliessen also immer nur 20mA. Da ich dann Zeilen und Spalten getrennt ansteuerun muss, komm ich um die zwei Pin Geschichte nicht herum und hatte es mir bisher so überlegt (dargestellt für jeweils eine LED): +5V --- HEXFET(Gate an Pin1) ---- Vowiderstand --- LED --- Pin2 Aber da die Pins der Atmel-MController-Serie alle 20mA schaffen, dürfte das doch so wie oben (ohne FET) gehen, oder? Ich habe mal gehört, dass man den Strom in den Controller reinfließen lassen soll (Controller stellt Masse zur Verfügung), allerdings weiß aber nicht mehr warum... Gruß, André
Ein Port kann zwar theoretisch 20mA, allerdings ist der max. Gesamtstrom des µC begrenzt. Wie hoch steht im Datenblatt. Bei deiner zweiten Variante musst du überlegen ob der Hexfet genügend Gatespannung hat um durchzuschalten.
Also die Absolute Maximal Ratings sprechen von 200mA. Ok, von der Grenze sollte man sich natürlich fernhalten, aber mit meinen 20mA (LED) + 15mA (Mikrocontroller) bin ich davon ja weit entfernt... Der Hexfet ist dafür ausgelegt mit 5V am Gate betrieben zu werden (daher liebe ich diese Teile g). Der macht meines Erachtens dann auch ausreichend weit auf. Allerdings nimmt jeder FET auch Platz weg und das würde ich gerne vermeiden, indem ich die LEDs direkt an die Mikrocontroller-Pins lege.
Noch eine weitere intersannte Frage in Bezug auf die Belastbarkeit des Mikrocontrollers (200mA max.) wäre die Stromaufnahme in Variante a) (ohne FET). Wenn ein Pin 5V, der andere 0V liefert und die LED mit Widerstand dazwischenhängt... dann dürfte das für den MC doch nur eine Belastung von 20mA bedeuten obwohl zwei Pins im Spiel sind, oder?
Das Problem ist, Daß Du Deine Anzeige im Zeitmultiplexbetrieb fahren willst, also leuchten die LEDs nur für ein bestimmtes Tastverhältnis (z.B. 1/16). Demzufolge mußt Du einen vielfach höheren Strom halt kurzzeitig nacheinander durch die LEDs jagen, um einen adäquaten Lichtpegel zu bekommen. Mit 20 mA kommst Du da nicht weit, 200mA sind da schon realistischer, aber das kommt auf den Wirkungsgrad Deiner LEDs an.
Ich probiers erstmal mit 20mA. Mein erstes Ziel ist einfach nur ein Punkt oder eine Schlange aus 3-4 Punkten die sich zufällig über die 10x10 Matrix bewegt (nettes Dekoobjekt g). Bei 3 LEDs dürfte das mit dem Verhältnis noch hinhauen und ich kill mir nicht die LEDs wenn ich beim Testen mal versehentlich Standbild mache :-) Notfalls ist es erstmal nur ein Punkt der wandert :-] Wenn ich dann später zu Schrift und Bildausgabe übergehen will, pack ich mir 20 HEXFETs um die Matrix. Grund warum ich das noch nicht mache: Habe nur 10 P-Channel HEXFETs bestellt und Reichelt hat die geradezu unnatürlich schnell verschickt :-( Konnte heute nix mehr dran ändern (bräuchte noch 10 N-Channel Hexfets)... Aber da ich eh ab und zu da bestelle, kann ich das bei der nächsten Bestellung mitordern. Lasse im Rahmen der Matrix schonmal Platz dafür :-)
geh ins bett, mach ich jez och! vielleicht morgen(später) mehr!! N8 auch
Denk dran, dass die Spannung stark zusammenbricht, wenn du aus einem Pin 20 mA ziehen willst. Gerade der High-Treiber ist nicht stark belastbar. Schau mal ins Datenblatt, da sind Diagramme drin. Beim ATtiny12 sind es dann unter 1 V High-Pegel bei 20 mA und 5 V. Der Low-Treiber kann dagegen problemlos 20 mA, sind dann noch unter 0.5 V. Beim ATMega16 sieht das viel besser aus, da gehen 20 mA, man muss wohl aber auch mit 1V Verlust etwa rechnen.
Ah, das war der Grund warum man den Strom quasi reinfließen lassen sollte. Ich danke Dir - jetzt weiß ich wieder ein wenig mehr! Ich denke ich baue die Schaltung doch gleich komplett mit FETs auf. Dann brauche ich mir um den Mikrocontroller keine Sorgen zu machen (g) und ich kann die Matrix gleich zeilenweise ansteuern. ____________________ http://www.dark-sun.de
Mach dann aber ´ne gute Spannungsstabilisierung vor die LEDs und nimm passende Vorwiderstände, damit Du immer schön gleichmäßige Helligkeiten bekommst, egal wie hoch die Auslastung ist. Statt der N-Kanal-Fets kannst Du auch einen ULN2803 oder mehrere nehmen, die dann nach Masse schalten, zu den Anoden verschaltest Du dann über o.g. Vorwiderstände die p-Kanal Fets (bipolare pnp-Transen reichen dafür auch). Übrigens macht es Sinn, direkt vor und nach dem Wechsel der LED-Spalten ein kurze Dunkeltastung der Zeilen durchzuführen, damit verhindert man Geistersegmente, die sonst schwach und immer herumglimmen. Also Portausgabe für Zeilen, Zeitintervall verstreichen lassen, Port aus, 2-3x NOP (oder auch kurzes Delay), Spalte weiterschalten, 2-3x NOP, nächste Portausgabe...
Danke für die guten Tips! So in etwa hatte ich mir das auch gedacht. Ein Transistor zieht alle Kathoden einer Zeile auf Masse und dann kann ich über die Spalten-FETs die einzelnen LED-Anoden ansteuern, wobei jeweils zwischen Spalten FET und den Anoden der Widerstand hängt. Bipolare Transistoren sind mir nich so geheuer - ich mag alles, was (einigermaßen) digital funktioniert g Die Vorwiderstände lege ich zunächst auf 20mA aus und erhöhe den Strom dann später, falls die Ansteuerung zu niedrig wird. Das mit den Dunkelpausen werde ich auch auf jeden Fall machen. Das klingt sinnvoll. Muss auch noch nach schauen, wie schnell die FETs überhaupt geschaltet werden dürfen. Für den Mikrocontroller hatte ich 4 MHz im Sinn, weil da noch nen Quarz übrig habe. Als Spannungsversorgung hatte ich an einen 7805 mit jeweils 220 bis 470µF Elkos (mal sehen was hier noch so rumfliegt) davor und dahinter gedacht. Das dürfte eigentlich ausreichen um schnell auf alle Laständerungen zu reagieren.
So, kann endlich Erfolg melden :-) Zum Blinken habe ich es schon vor einer Weile gebracht, aber jetzt blinkt es auch so wie ich es haben möchte - sprich die Programmierung hat auch wieder ordentlich Zeit gekostet. Und ich war zwischendurch des Öfteren recht faul... Ich habe mal den Schaltplan angehängt - vielleicht hilft er ja dem einen oder anderen bei seinen Projekten weiter. Wie zu sehen ist, habe ich für die LEDs als Vorwiderstand jeweils 100 Ohm eingesetzt, die LEDs also nicht stark übersteuert (30mA). Das war auch gut so, da beim Programmieren es ab und zu passiert ist, dass die Matrix stehengeblieben ist und die LEDs dann dauerhaft durchgesteuert wurden. Hätte ich einen hohen LED Strom genommen (100mA) wäre mir die Matrix zig mal den Bach runtergegangen ;-) Und glaubt mir, 121 LEDs einlöten hat schon keinen Spaß gemacht - da war ich nicht gerade scharf drauf auch noch LEDs austauschen zu müssen... Die LEDs sind stinknormale rote LEDs. Im Nachhinein wäre es sinnvoller gewesen ultrahelle LEDs zu nehmen, aber solange es einigermaßen dunkel im Raum ist (so gegen Dämmerung) kann man alles super erkennen. Den FET-Gate-Ladestrom habe ich durch jeweils einen 250 Ohm Widerstand begrenzt, damit der µC nicht zu hohe Ströme beim Schalten liefern muss. Ich denke aber 100 Ohm hätten es auch getan. Ach ja, ein wenig Kabel (als Antenne) an nen ADC-Pin eignet sich recht gut um ein geeignetes seed für die rand()-Funktion zu erzeugen. Einfach die ADC-Spannung umwandeln lassen und man bekommt herrlich zufälligen Quatsch raus. Zumindest erscheint es mir zufällig genug - meine Ansprüche sind da ausreichend klein, so dass ich da nicht noch die statistische Gleichverteilung untersuchen muss. Ich lese beim Einchalten der Matrix einmalig den Pin ein und übergeb den Wert dann als seed an die Random-Funktion von WinAVR. Alle Zufallszahlen während des Programmablaufs lasse ich mir dann mittels rand() erzeugen. Ich hab mir jetzt die LED-Matrix wie eine Art lebendiges Bild aufgehängt und es spielt jetzt in zufälliger Reihenfolge 24 verschiedene Visualisierungen ab (Lachendes Smiley, sich drehender Rotor, zufälliger Würfelwurf (1-6), ...). Sieht spitze aus und hat nicht jeder! Danke nochmal an alle im Forum die mir bei meiner Matrix (direkt oder indirekt) geholfen haben! ____________________ http://www.dark-sun.de
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.