Gute Nacht allerseits!
Bin seit kurzer Zeit dabei mit AVRs rumzuprobieren. Habe hier einen 8515
und mir ist vor einiger Zeit die nette Eigenschaft aufgefallen, daß
durch die hohen Frequenzen LEDs, die abwechselnd an und abgeschaltet
werden halt dunkler erscheinen!
Nun beabsichtige ich im Ramen eines kleinen Projektes eine Ansteuerung,
bei der der eine bestimmte LED-Kombination, die z.B. in rxx gespeichert
ist und an PortX ausgegeben werden soll, langsam ausfaded (also langsam
dunkler wird). Eigentlich wollte ich dies erst mit Hilfe von
Kondensatoren machen, aber irgendwie erscheint mir die programmier
(assembler) Methode sinniger. Hab auch schon die ganze Zeit diverse
Schleifen probiert, hab aber immer wieder Probleme.
Nun habe ich dazu einige Fragen:
1. Hat jemand zufällig schon so eine Routine?
2. Ich 'Schleife' mich hier langsam aber sicher tod, gibt es eine
Funktion die einfach ein simples warten für x Taktzyklen ermöglicht,
oder liege ich richtig in der Annahme, daß ich sowas am besten mit
verschachtelten Schleifen erreiche?
Out of this Topic:
3.Nichts hiermit zu tun, aber gibt es sinnvolle Möglichkeiten eine 8bit
Zufallszahl zu bekommen?
4. Gibt es bei den Mikrocontroller eine Taktgrenze nach unten?
5. Was passiert wenn man ein zu schnelles Quartz dranhängt?
MFG
Danielk
Hi!
Das Prinzip ist folgendermaßen:
Ein Register kennzeichnet die Helligkeit der LEDs (0-255).
Die LED wird eingeschaltet, ein Register zählt hoch und bei Erreichen
des Wertes des "Helligkeits-Registers" wird die LED ausgeschaltet und
weitergezählt bis 255 und das ganze wieder von vorn. Ein weiterer Zähler
zählt diese Zyklen und bei einer bestimmten Anzahl (je nach gewünschter
Geschwindigkeit des Ausfadens) wird das "Helligkeits-Register"
dekrementiert. Wird es Null, ist das Programm zu Ende.
Gruß
Jürgen Lang
So isses. Man nennt das "Pulsbreitenmodulation". Der Trick ist, dass die
steuernde Frequenz konstant gelassen und nur das Verhältnis zwischen An-
und Ausschaltdauer variiert wird. Die Summe von beiden bleibt immer
konstant. So etwas lässt sich sehr elegant mit der PWM (=puls width
modulation, s.o.)-Funktion von Counter/Timer 1 realiseren.
Grüße: Holger
2. Für schleifen (auch in anderem zusammenhang) gibz tools. auf
diemer.it-pc.de ist mein linux programm und ein link zu einem anderen
windows programm.
3. In der Codesammlung steht ein pseudozufallszahlengenerator
4. Theoretisch nicht. (oder irre ich mich da?)
5. Wenn du die vom hersteller angegebene frequenz (zu weit)
überschreitet, ist das verhalten des mikrocontrollers undefiniert. evtl
wir er heiß und brennt durch, verrechnet sich, springt im programm usw.
gruß
Jonas
4. Nein, du irrst dich nicht. Du kannst den Takt auch mit einem
(entprellten!) Taster erzeugen.
5. Als erstes fällt das EEPROM aus habe ich gehört, aber wenn du das
nicht verwendest kannst du schon 1 MHz oder so drüber gehen denke ich.
Natürlich nicht bei Serienproduktion, da wäre das viel zu riskant.
MfG
Andreas
Hallo,
ich hab ein asm-file hier das ich mal für ne Ladedruckregelung gemacht
habe. Erzeugt 30 Hz und lässt sich über 5 Taster in verschiedene
Pulsweiten umschalten. Also ca 20,40,60,80 und 100 schalten. Wenns dus
brauchst kann ich es dir mailen. Basiert aber auf Schleifen und nicht
auf Timer/Counter/PWM. Springt halt je nach gedrucktem Taster in die
entsprechende Schleife. Kannste auch mit einen Drehschalter kombinieren
damit du nicht immer die Taste gedrückt halten musst.
Aber eingentlich ganz einfach selber zu schreiben.
1. Led an
2. Schleife1 für Verweildauer
3. Led aus
4. Schleife2 für Verweildauer
5. Schleife1 reduzieren
6. Gehe zu 1
> Funktioniert das wohl auch mit 3 LED`s (rot, grün, blau) um Farben zu mischen?
Nein, dann bräuchtest Du 3 Counter. Aber Du kannst Dir die PWM ja auch
selber schreiben, bei einer LED-Ansteuerung kommt es ja auch nicht so
sehr auf die Genauigkeit an.
"3 Counter" ist schon klar.
Ich habe es jetzt, nach einigem Probieren, auch ans laufen bekommen.
Trotzdem habe ich noch ein Problem.
Wenn ich die 3 LED`s "schalte", funktionierts wunderbar.
Also die erste ein, dann die zweite dazu, u.s.w.
Nur bei PWM habe ich mein Problem.
Wenn die erste "hochfährt" und ich eine zweite dazu "einblenden" möchte,
zack, schaltet sich die erste ab.
Wenn ich die LED`s einzeln, der Reihe nach "fade" funktionierts, nur
wenn die eine gerade runter gefadet wird und die andere gerade hoch
fadet, habe ich mein Problem.
Als ob die LED, die dazu kommt, der anderen den "Saft" nehmen würde.
Woran kann das liegen?
Reicht die mir zur verfügung stehende Ausgangsleistung der I/O Pins des
Microcontrollers nicht aus?
Oder gibt es vielleicht einen Trick?
Oder mache ich, ganz einfach, etwas verkehrt?
Ich habe es auch schon mit nachgeschalteten BC546 versucht (externe
Spannungsversorgung der LED`s).
Das gleiche Problem.
Mit freundlichem Gruss aus Paderborn, Kai