PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LED's mit Impulsen Ansteuern... erster Versuch



PhoenixTS82
10.07.2008, 10:24
Hiho

so ich habe den Mega32 (grundschaltung) wie im "AVR-Einstieg leicht gemacht" zusammengebaut und funktioniert auch.

(ich benutze normale grüne LED's (2,1V, 20mA)

zum einfachen Beleuchten einer LED habe ich jetzt einen 100 Ohm widerstand vorgesetzt => läuft

jetzt habe ich aber nebenbei eine kleine LED-Matrix (6x5) die ich gerne mit einem kleinen lichterspiel ansteuern will...
(siehe Skizze)
läuft das so ?

wie berechne ich denn den richtigen vorwiderstand für die transistoren ?


Ich habe das bisher nur gelesen, aber ich wollte die led's anpulsen, so dass immer nur eine leuchtet, aber so schnell, dass halt auch mal mehrere (oder sogar alle) für das auge leuchte.. geht das ?
also kommt der controller und die led's damit zurecht ?
wie könnte ich das programmieren ?`


so ich weiss viele fragen auf einmal,
danke schon mal in vorraus
Timo

Bluesmash
10.07.2008, 10:51
die Skizze sieht gut aus, würde ich auch so machen. der Vorwiderstand für die LED's ist ja derselbe wie wenn nur eine LED angesteuert würde.
Für die Transistoren ist meistens 1KOhm ein guter Wert. du musst einfach darauf achten dass immer nur ein Transitor gleichzeitig "leitend" ist.

übrigens nennt sich das Multiplexing und nicht "anpulsen" :)

gruss Bluesmash

PhoenixTS82
10.07.2008, 11:18
von mir aus auch das :-)

wenn ich jetzt aber der LED nur nen kurzen Impuls verpasse, bei gleichem vorwiderstand wie im Dauerbetrieb, wird sie da genauso hell ?
Wie sieht das aus mit der Stromaufnahme ?

wie lange muss den eine led durchgesteuert werden, damit sie vernünftig leuchtet und wie lange darf ich sie maximal gesperrt lassen, damit es nicht flackert ?

fhs
10.07.2008, 11:40
Hallo,


...wenn ich jetzt aber der LED nur nen kurzen Impuls verpasse, bei gleichem vorwiderstand wie im Dauerbetrieb, wird sie da genauso hell ?...
üblicherweise würdest Du für Impulsbetrieb den Vorwiderstand entsprechend verkleinern, um den Strom zu erhöhen. Was Deine spezifischen LEDs an Pulsleistung vertragen, findest Du im Datenblatt. Da es sich in erster Linie um ein thermisches Problem handelt, hängt die mögliche Pulsleistung von der absoluten Pulsdauer und dem Tastverhältnis ab. Wenn Du den Strom sehr stark erhöhst, kommst Du irgendwann in den Bereich, wo Du Spalten- und Zeilentreiber benötigst, da der max. Ausgangsstrom der Controller-Pins überschritten wird.


wie lange muss den eine led durchgesteuert werden, damit sie vernünftig leuchtet und wie lange darf ich sie maximal gesperrt lassen, damit es nicht flackert ?
Üblich sind Blinkfrequenzen von >100Hz (dann spielt auch das Tastverhältnis für das Auge keine so große Rolle mehr!). Wenn Du den Kopf schnell bewegst, wirst Du aber auch dann evtl. noch Flackern wahrnehmen können.

Hier noch ein paar Tipps (http://www.mikrocontroller.net/articles/LED-Matrix).

Gruß

Fred

askazo
10.07.2008, 11:44
Der Vorwiderstand bleibt der selbe, egal ob die LED dauernd leuchtet oder nur Impulse bekommt.

Dein Vorwiderstand ist übrigens zu klein:
I = (U-U(led))/R(v) = (5V - 2,1V)/100Ohm = 29mA
Das tut weder dem Prozessor noch der LED auf Dauer gut.
Du solltes mindestens 150Ohm nehmen, damit wärst Du dann mit knapp über 19mA innerhalb der Spec.

Wenn Du eine LED mit Pulsen ansteuerst, lässt die Helligkeit nach. Da kommts halt dann drauf an, wie lang der Puls ist (Daher kann man LEDs ja auch per PWM dimmen).
Deine Schaltung würde ich noch so ändern, dass Du für jede LED einen eigenen Vorwiderstand hast, sonst kannst Du immer nur einen Transistor durchschalten. Zur Erklärung: Der Strom über den Vorwiderstand ist immer gleich, egal wieviele LEDs leuchten. Sind mehrere LEDs angesteuert, teilt sich der Strom über die einzelnen LEDs auf -> die LEDs leuchten schwächer.

](*,)
Blödsinn, beim Multiplexen wird ja eh immer nur eine LED angesteuert. Dann kannst Du's natürlich so machen.....


Wie lang der Puls sein muss, kommt auf die LED an - musst Du ausprobieren. Um kein flackern zu bekommen, musst Du eigentlich nur schneller 100Hz sein, das dürfte eigentlich schon reichen. In der Praxis wählt man aber eher Frequenzen im kHz-Bereich.

Gruß,
askazo

Bluesmash
10.07.2008, 13:07
vom "pulsbetrieb" mit einem höheren strom würde ich abraten, da je nach avr der maximale strom 20mA pro Pin beträgt (eingige smd typen können auch bis 40mA) das müsstest du im Datenblatt nachschlagen...

gruss Bluesmash

PhoenixTS82
10.07.2008, 14:05
Vielen Danke shcon mal für die schnelle hilfe...

1.
So, also solte das von der schaltung her so funktionieren ? oder muss da noch nen treiber zwischen ?

2.
wie sieht denn die programmierung im bascom aus ?

arbeite ich denn da mit
port an, port aus und waitms ?
in dem link zum microcontroller.net ist von timer und interupt die rede ?!?

mfg
Timo

fhs
10.07.2008, 14:51
Hallo,


...So, also solte das von der schaltung her so funktionieren ?
Nein, denn alle LEDs müssen umgepolt werden!


.. muss da noch nen treiber zwischen ?
Nein, denn Du hast ja Zeilentreiber und steuerst mit jedem Port-Pin immer nur eine LED an (jedenfalls würde ich das so machen!).


..sieht denn die programmierung im bascom aus ?
Ich spreche nur Assembler & C, da können Dir andere bessser helfen.


in dem link zum microcontroller.net ist von timer und interupt die rede ?!?
Das wäre eine gute Möglichkeit, Dich mit den Timer-Funktionen vertraut zu machen, wenn Du die noch nicht benutzt hast! Prinzipiell gehen auch Verzögerungsschleifen, Timer haben demgegenüber aber viele Vorteile.

Viel Erfolg!

Fred

PhoenixTS82
10.07.2008, 15:10
hmm ja die LED's sind natürlich andersrum drin, sorry

PhoenixTS82
11.07.2008, 13:26
So,
vielen dank schon mal.

bis hierhin läuft jetzt alles ...

jetzt gehts darum die einzelnen Bilder zu programmieren,

fhs
11.07.2008, 16:36
Hi,

...bis hierhin läuft jetzt alles ...
schön!


jetzt gehts darum die einzelnen Bilder zu programmieren
Viel Erfolg und Spaß dabei. Zeig mal ein Video, wenn's fertig ist!

Gruß

Fred

PhoenixTS82
11.07.2008, 16:54
ja, wie gesagt, jetzt gehts darum die bilder zu proggen

https://www.roboternetz.de/phpBB2/viewtopic.php?t=41695

PhoenixTS82
12.07.2008, 09:57
hmm ich komm nicht dahinter wie ich mit dem timer ein ganzes bild machen soll, also z.b. die ganze matrix oder eine ebene.

fhs
12.07.2008, 11:46
Hallo,


hmm ich komm nicht dahinter wie ich mit dem timer ein ganzes bild machen soll, also z.b. die ganze matrix oder eine ebene.

Du steuerst die Zeilen ja einzeln an und dort dann die jeweiligen LED(s). Als Pseudocode (ohne Initialisierung der Ports etc.!) würde das etwa so aussehen, wobei ich davon ausgehe, dass das "Bild" als Bits in einem Vektor gespeichert ist, wobei die LED-AN/AUS-Werte für die jeweilige Zeile in "LEDs[Zeile]" stehen, das ganze Bild also in diesem Vektor definiert ist:


#define Zeilen 5
uint8_t LEDs[Zeilen];

// hier Funktion zum Füllen von "LEDs[]" (= "das Bild") einfügen!

// Ausgabefunktion:
for (uint8_t Zeile=0;Zeile<Zeilen;Zeile++) {
ZEILENAUSGABEPORT=1<<Zeile;
SPALTENAUSGABEPORT=LEDs[Zeile];
wait(); // muss konkretisiert werden!
}

Da sich das Ganze ja wiederholen soll, musst um die "for"-Schleife noch eine Endlos-Schleife.

(Ich aus C- und Assembler-Land; nix sprechen Bascom!)

Viele Grüße

Fred