Hi. Ein Mini-Projekt für AVR ATtiny25: Eine flackerne LED für ein Lager- oder Kaminfeuer (nur Software in C). Port B0 flackert, das war's :-) Viel Spaß
Andreas L. wrote:
> Passt in meine Krippe.
Dafür hab ich's auch gemacht ;-)
Allerdings viel zu kompliziert gedacht; die main-Schleife kann einfach
so aussehen:
1 | while (1) |
2 | {
|
3 | wdt_reset(); |
4 | |
5 | // Zähler abgelaufen:
|
6 | if (!count_ms) |
7 | {
|
8 | // Zähler neu aufziehen auf 100ms
|
9 | count_ms = 100; |
10 | // Neuer, zufälliger PWM-Wert
|
11 | OCR0A = prandom(); |
12 | }
|
13 | }
|
Hallo Johann, falls sich dein Lagerfeuer mal unplanmäßig ausbreiten sollte ... anbei eine Illumination für die anrückende Feuerwehr: Ein "Rotationsblinker" für tiny25, nutzt bis zu 5 freie Pins für LED's, die sich mit geringfügig unterschiedlicher Geschwindigkeit "drehen". Michael S.
Hallo Johann, gestern habe ich in einer Elektroabteilung LED-Kerzen in Teelichtform gesehen: Ein verblüffender Effekt - der mich ein wenig an dein Lagerfeuer erinnerte. Daraufhin habe ich das 'Lagerfeuer' noch mal hervorgeholt und dann an PB.0 sowohl einen BS170 mit Led nach + als auch einen BS250 mit Led nach - (also invertiertes Signal) angeflanscht. Der Effekt ist nicht schlecht - wider erstes Erwarten ist die Summe kein gleichmäßiges Licht. Vermutlich wegen der logarithmischen Wahrnehmung der Lichtstärke. Aber wie ein ruhig flackerndes Kerzenlicht siehts dennoch nicht aus. Hast du eine Ahnung, wie man dein Lagerfeuer zur Kerze zähmen kann ? Michael S.
Zu den LED-Kerzen fällt mir eine Sendung vom ComputerClub2 ein (www.cczwei.de müßte Folge 6 gewesen sein), das Flackern des Teelichts wird mit einer Melodie gemacht. ;)
En schön ruhiges und dennoch unregelmäßiges Flackern erzielt man mit einem Pseudozufallsgenerator - ein rückgekoppeltes Schieberegister fester Breite.
Hier mal mein Ansatz für einen Tiny13 @ 4,8Mhz interner R/C, PortB1 wackelt.
Ha, ups - sehe gerade, daß das Originalprojekt auch einen Pseudzufallsgenerator verwendet - naja, nun ist es einmal C und einmal ASM :-)
Natürlich hab ich nen (Pseudo)Zufallsgenerator. Allerdings hab ich ein Galois-Feld implementiert, weil ich da besser verstehe was mathematisch abgeht. Mit LFSRs erreicht man im Endeffekt wohl das gleiche, nur daß es bei Galois-Feldern leichter zu sehen ist, ob man maximale Periodenlänge bekommt (wenn das Polynom irreduzibel ist und man ein erzeugendes Element der Einheitengruppe iteriert). Um etwas sanfter zu flackern hatte ich die Version anbei getestet, die per Taster an B4 einen von vier Modi auswählbar macht: -- Flackern (hart) -- immer an -- Flackern (weich) -- immer aus Bei "hart" wird einfach immer ein neuer PWM-Wert gesetzt, bei "weich" wird der PWM-Wert nachgeführt. Für das Lagerfeuer sah aber die harte Variante am realistischsten aus; mit Watte über der SuperFlux-LED.
Harte Mathematiker hier! Ich versteh nur Bahnhof von Galois etc. Aber sorry mal ne blöde Frage: gibts nich für solche Fälle die rand() Funktion? Also ich hab mein Lagerfeuer damit realisiert.
gast wrote: > gibts nich für solche Fälle die rand() Funktion? > Also ich hab mein Lagerfeuer damit realisiert. Jo klaro, das geht natürlich auch. Ich wollte eben genau wissen was abgeht und hab was genommen, wo ich sicher war, das es kleinen Code gibt und ne ausreichende "Zufälligkeit" hat. Nebenbei: Mathe hinter rand wird auch nicht in der Grundschule abgehandelt ;-) Und auf nem µC ohne Multiplikation fängt man sich flott nen Batzen an Code ein, wenn in der lib multipliziert wird oder gar dividiert.
Hallo Johann, die Mutation deines Lagerfeuers zur LED-Kerze habe ich mal versucht. Dazu musste der Zufallsgenerator natürlich in den Hintergrund treten. Die Beobachtung der 'käuflichen' Kerzen zeigte ein chakteristisches Flackern, das jeweils nach gleichmäßigeren Phasen erschien. Das habe ich nachgeahmt. Und ich denke, der Effekt ist erkennbar. Allerdings darf man nicht direkt in die LED's schauen, sondern muss immer mit dem indirekten Licht arbeiten. Vermutlich ist es sinnvoll, die LED's in einen opaken Zylinder (aus Glas oder Folie) leuchten zu lassen (quasi die Kerze) und nur nach oben direktes Licht austreten zu lassen. Sinnvoll erscheint mir auch, mit zwei gegenphasigen LED's zu arbeiten: dadurch kommt neben dem Flackern auch so etwas wie die Anmutung einer Bewegung der Flamme mit in Spiel. Es gibt eine Reihe von Parametern im Programm, an denen man schrauben kann, um das Verhalten der Kerze ändern. Viel Spaß beim (Er-) Leuchten. mfg Michael S.
irgendwie eine komische Benutzerführung beim Anhängen von Dateien ... noch mal ein Versuch. Michael S.
Hallo Johann, gestern (bei Dunkelheit) habe ich noch einige Tests mit zwei 'Golden Dragons' gemacht,die ohne Optik einen Abstrahlwinkel von ca. 180 Grad haben. Erkenntnis: Meine Idee, zwei invertierte LED's zu verwenden, war unsinnig. Der Kerzenkorpus ist immer gleich hell, lediglich das indirekte Licht flackert etwas. Daher habe ich den zweiten PWM-Kanal auf dem tn25 für die zweite LED aktiviert. Beide Kanäle haben ihre eigenen Counter und Zufallszahlen. Das sah dann schon besser aus - die Helligkeit des Kerzenkorpus verändert sich und es kommt eine scheinbare Bewegung der Lichtquelle ins Spiel. Da die Helligkeit 'normaler' Kerzen zwar schwankt, aber nie bis auf 0 herabgeht, habe ich den Bereich der Zufallszahl auf 0..128 beschränkt. Und addiere immer einen festen Wert von z.B. 128 zu Compare-Wert. Damit bewegt sich die Helligkeit immer im Bereich von 128 .. 255. Mit diesen Änderungen sieht das Kerzenlicht schon ganz gut aus. Zeitweise hatte ich unerklärlich Probleme mit sporadischen Helligkeitssprüngen (die Schaltung ist auf einem Steckbrett aufgebaut). Ein kräftiger Stützkondensator direkt am Controller hat für Abhilfe gesorgt. mfg Michael S.
Hallo zusammen, ich geb mal einfach meinen Senf dazu, etwas mathematischer Art. Die Idee mit dem Kondensator find ich gut. Wenn man erreichen will, dass das Licht weniger flackert, sollte man hochfrequente Signale des "Rauschens" herausfiltern. Müsste mit nem Kondensator gehen. Wenn man zum Rauschen (dem "Rauscharray") jetzt noch ein Offset addiert, dann müsste man ein schönes weiches flackern bekommen. (Hast du ja schon gemacht, Michael.) Je krasser der Tiefpass, desto weicher das flackern. Und je höher der Offset, desto heller die "Kerze". Lediglich auf den Wertebereich muss man aufpassen, denke ich. Werte größe 255 sind an der Stelle ja nicht möglich. Hm, wär doch ne Idee zwei Potis dranzubasteln um genau diese Werte variabel zu machen... Ach ist das toll! Bin totaler Neuling was die mCs angeht, aber das macht ja 'n Höllenspaß muss ich sagen!
Wenn man einen Controller verwendet, kann man sich einen externen Kondensator sparen. Den Tiefpass kann man auch programmieren.
Nö. Per n mal Aufaddieren und durch n dividieren. Eine Mittelung der Werte, die das Flackern weicher und langsamer macht. Oder aber man baut ein Intervall ein, in dem der PWM-Wert der aktuellen Ausgabe dem Wert des Zufallsgenerators angenähert wird - ein Fading also. Das PWM läuft dem Vorgabewert ständig träge hinterher und auf diese Weise wird hektisches Flackern vermieden.
schaut interessant aus hat das auch wer für den mega8, wenn nicht muss ich ma mal die arbeit machen und umschreiben. mfg
Eigentlich ist nur die Timer-Initialisierung anzupassen, das andere Zeug wie Pseudozufall ist ja unabhängig von der Hardware. Johann
Heey, danke das du etwas über eine flackernde Led hier reingestellt hast. Ist sehr nützlich. Hätte aber 2 Fragen zu diesem Projekt: Hast du noch das Programm mit den dazugehörigen header-dateien, wenn ja wäre es möglich es mir zu schicken? Ich wäre dir wirklich sehr dankbar. Lg Christian
Christian schrieb: > Hätte aber 2 Fragen zu diesem Projekt: > > Hast du noch das Programm mit den dazugehörigen header-dateien, wenn ja > wäre es möglich es mir zu schicken? Ich wäre dir wirklich sehr dankbar. > > Lg Christian Da sollte alles dabei sein Beitrag "Re: Miniprojekt: Lagerfeuer-LED (ATtiny25)" Oder fehlen da Dateien? Das Projekt ist für avr-gcc. Üblicherweise verwende ich avr-gcc 3.4.6, aber bevor ich was hier einstelle teste ich auch immer mit einer der letzten Releases von avr-gcc. Hier also avr-gcc 4.3.3 oder 4.4.0. Sollte also gehen. Johann
Hi, passt vielleicht nicht ganz hierher. Ich wollte sowas in ein Kamin einer Puppenstube einbauen. Hat schon jemand mal das "Umfeld" der LED gebastelt. Oder bin ich der einzigste mit solchen "Sorgen". Wigbert
Wigbert Picht-dl1atw schrieb: > Hi, > passt vielleicht nicht ganz hierher. > > Ich wollte sowas in ein Kamin einer Puppenstube einbauen. > Hat schon jemand mal das "Umfeld" der LED gebastelt. Oder bin ich > der einzigste mit solchen "Sorgen". > > Wigbert EInfach rumexperimentieren. ZB etwas Watte über ner roten LED und dann n paar kleine Holzscheite oder schware Steinchen drauf. Johann
Johann L. (gjlayde)
>ZB etwas Watte und dann n paar kleine Holzscheite
keine schlechte Idee,Plexiglas mache ich sicherheitshalber noch vor,
damit nichts in den Mund genommen werden kann.
Dank Dir.
Wigbert
Danke für den Code (Beitrag "Re: Miniprojekt: Lagerfeuer-LED (ATtiny25)"). Die von http://avr.auctionant.de/aCANDLE/index.html verwendete LED (LSY T67B) mit 20 mA macht bei absoluter Dunkelheit etwa 1/5 eines brauchbaren Teelichts und ist zu rot. Das ist eher was für ein Modell-"Feuer". Vielleicht kann man ja die invertierten PWM-Ausgänge für zwei weitere LEDs und damit mehr Helligkeit benutzen.. Evtl. 2 gelbe, 1 weiße, 1 rote.. Die Flackerphase gefällt mir nicht so, da hat man ja Angst, die Flamme reißt ab :-)
Hallo, schon ziemlich alt, trotzdem der Hinweis auf mein Kaminfeuer: Beitrag "Random" Die AVI hab ich leider irgendwie verbummelt, vielleicht mache ich nochmal eine neue... Gruß aus Berlin Michael
Könnte bitte jemand erklären, was die beiden _attribute_ bewirken?
Hinweis: Wenn man Rauschen integriert (vllt auch zweifach) ensteht ein sog. "random walk". Der ist wesentlich "ruhiger" und hat immernoch den Erwartungswert 0. Mit offset von 127 und multiplikation mit 128 wird daraus ein schöner weicher Zufall-OCR-Wert.
Nur ein Tip: Ich habe ein elektronisches Teelicht mit 2 gelben LEDs. Nur eine LED flackert per zufall, die andere LED leuchtet immer. Das ergibt auch eine gute Kerzenflammen immitation und es sieht auch so aus als ob sich die 'Flamme' etwas bewegt. Die LEDs sind leicht versetzt übereinander angeordnet. Die gabs mal für 50 cent auf dem Weihnachtsmarkt.
hallo,... ich habe mir letzten winter auch ein LED Lagerfeuer und Schweißlicht für meine modellbahn gebaut... angesteuert werden 8 LEDs mit unterschiedlichem zufälligem flackern. seht selbst unter folgendem Link: http://bluematrixi.bl.funpic.de/html/meinwebzeugs/index.php/elektronik-avr/lcd-display-nokia3310 grüße martin
sorry war die falsche adresse http://bluematrixi.bl.funpic.de/index.php/elektronik-avr/avr-led-kerzen
Hey, wollte mich nochmal für die Zufallsfunktion bedanken... ohne da jetzt durch die prandom mathematisch durchsteigen zu wollen, hab ich auch mal etwas gespielt... Der Kontroller hat nur die Funktion LED Kerze...daher alles kompakt in der main... je nach LED und Ansteuerung sieht es wohl bei jedem anders aus... habe auch den Ansatz mit der Dynamikbegrenzung gewählt... dabei gibt es zwei getrennte Begrenzungen die zufällig aufgerufen werden... die LED wird auch nicht hart gesetzt, sondert fadet in ihre neue Zufallszahl...
1 | //-------------Hauptschleife-------------------
|
2 | |
3 | uint8_t i=0; |
4 | uint8_t x=0; |
5 | uint8_t zufallszahl=0; |
6 | uint8_t zufallszahl_alt=0; |
7 | int16_t diff=0; |
8 | |
9 | while(1) { |
10 | |
11 | if(i>0) i--; |
12 | else { |
13 | x=i=prandom(); |
14 | }
|
15 | |
16 | |
17 | DelayMS(5); |
18 | if(x>127) { |
19 | //kleine Dynamikbegrenzung
|
20 | zufallszahl = prandom() | (1<<7); |
21 | diff = zufallszahl - zufallszahl_alt; |
22 | while(diff) { |
23 | DelayMS(2); |
24 | if(diff<0) diff++; |
25 | else diff--; |
26 | OCR0A = zufallszahl - diff; |
27 | }
|
28 | } else { |
29 | //größere Dynamikbegrenzung
|
30 | zufallszahl = prandom() | (1<<7) | (1<<6); |
31 | diff = zufallszahl - zufallszahl_alt; |
32 | while(diff) { |
33 | DelayMS(4); |
34 | if(diff<0) diff++; |
35 | else diff--; |
36 | OCR0A = zufallszahl - diff; |
37 | }
|
38 | }
|
39 | |
40 | zufallszahl_alt=zufallszahl; |
41 | |
42 | }
|
...größere OCR0A lassen bei mir die LED heller werden... MfG Basti
Habe für dieses Jahr unsere Krippe von kleinen uralten KFZ-Glühlämpchen auf LEDs umgerüstet und dabei auch gleich die Lagerfeuer zum Flackern gebracht. Das Ergebnis wollte ich euch nicht vorenthalten, vll ist es für den einen oder anderen nützlich, vll hat jemand noch ein paar Tipps für mich was man verbessern könnte... Programmiert wurde das Ganze auf einem Attiny12 in Assembler weil der halt noch daheim rumlag. An den Pins PB0 bis PB4 können LEDs angeschlossen werden, die dann unterschiedlich flackern (Bei mir in der Krippe werden nur 3 Kanäle benutzt). Realisiert wird das über Soft-PWM, nach jeweils 5 Zyklen werden zufällig neue PWM-Werte bestimmt (Kein Fading, wird hart gesetzt, sieht aber dennoch IMO ganz gut aus). Den Code für das LFSR hab ich hier irgendwo ausm Forum gemoppst, danke nochmal an den Ersteller =) Hab auch mal ein (zugegebenermaßen ziemlich schlechtes) Video auf youtube hochgeladen: http://www.youtube.com/watch?v=DZv2WeWRe2U
Chris H. schrieb: > Habe für dieses Jahr unsere Krippe von kleinen uralten KFZ-Glühlämpchen > auf LEDs umgerüstet und dabei auch gleich die Lagerfeuer zum Flackern > gebracht. > Das Ergebnis wollte ich euch nicht vorenthalten, vll ist es für den > einen oder anderen nützlich, vll hat jemand noch ein paar Tipps für mich > was man verbessern könnte... > > Programmiert wurde das Ganze auf einem Attiny12 in Assembler weil der > halt noch daheim rumlag. An den Pins PB0 bis PB4 können LEDs > angeschlossen werden, die dann unterschiedlich flackern (Bei mir in der > Krippe werden nur 3 Kanäle benutzt). > Realisiert wird das über Soft-PWM, nach jeweils 5 Zyklen werden zufällig > neue PWM-Werte bestimmt (Kein Fading, wird hart gesetzt, sieht aber > dennoch IMO ganz gut aus). Den Code für das LFSR hab ich hier irgendwo > ausm Forum gemoppst, danke nochmal an den Ersteller =) > > Hab auch mal ein (zugegebenermaßen ziemlich schlechtes) Video auf > youtube hochgeladen: > http://www.youtube.com/watch?v=DZv2WeWRe2U Hallo, ist zwar scho etwas älter aber ich wollte wissen ob es so ein Projekt auch für die Arduino IDE gibt?
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.