Miniprojekt: Lagerfeuer-LED (ATtiny25)

OP Persönliche Seite #1084697
Lesenswert?

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
   }
Gast #1085356
Lesenswert?

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.
Angehängte Dateien:
Gast #1097255
Lesenswert?

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.
OP Persönliche Seite #1097567
Lesenswert?

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.
Angehängte Dateien:
OP Persönliche Seite #1097878
Lesenswert?

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.
Gast #1098226
Lesenswert?

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.
Gast #1099109
Lesenswert?

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.
Angehängte Dateien:
#1103016
Lesenswert?

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!
(Firma: TravelRec.) Persönliche Seite #1104382
Lesenswert?

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.
Gast #1300308
Lesenswert?

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
OP Persönliche Seite #1301114
Lesenswert?

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
OP Persönliche Seite #1323098
Lesenswert?

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
Gast #1501354
Lesenswert?

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 :-)
Gast #1620405
Lesenswert?

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.
#2447835
Lesenswert?

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
#2474664
Lesenswert?

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
Angehängte Dateien:
#4824806
Lesenswert?

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?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren