Forum: Projekte & Code Miniprojekt: Lagerfeuer-LED (ATtiny25)


von Johann L. (gjlayde) Benutzerseite


Angehängte Dateien:

Lesenswert?

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ß

von Andreas L. (andreasl)


Lesenswert?

Passt in meine Krippe.

Danke
Andreas

von Johann L. (gjlayde) Benutzerseite


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
   }

von Michael S. (Gast)


Angehängte Dateien:

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.

von Michael S. (Gast)


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.

von Johannes M. (johannesm)


Lesenswert?

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. ;)

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

En schön ruhiges und dennoch unregelmäßiges Flackern erzielt man mit 
einem Pseudozufallsgenerator - ein rückgekoppeltes Schieberegister 
fester Breite.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hier mal mein Ansatz für einen Tiny13 @ 4,8Mhz interner R/C, PortB1 
wackelt.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Ha, ups - sehe gerade, daß das Originalprojekt auch einen 
Pseudzufallsgenerator verwendet - naja, nun ist es einmal C und einmal 
ASM :-)

von Johann L. (gjlayde) Benutzerseite


Angehängte Dateien:

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.

von gast (Gast)


Lesenswert?

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.

von Johann L. (gjlayde) Benutzerseite


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.

von Michael S. (Gast)


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.

von Michael S. (Gast)


Angehängte Dateien:

Lesenswert?

irgendwie eine komische Benutzerführung beim Anhängen von Dateien ...
noch mal ein Versuch.

Michael S.

von Michael S. (Gast)


Angehängte Dateien:

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.

von Thomas K. (thomas47058)


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!

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Wenn man einen Controller verwendet, kann man sich einen externen 
Kondensator sparen. Den Tiefpass kann man auch programmieren.

von Thomas K. (thomas47058)


Lesenswert?

du meinst per FIR filter?

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


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.

von Lowtzow .. (lowtzow)


Lesenswert?

schaut interessant aus

hat das auch wer für den mega8, wenn nicht muss ich ma mal die arbeit 
machen und umschreiben.


mfg

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Eigentlich ist nur die Timer-Initialisierung anzupassen, das andere Zeug 
wie Pseudozufall ist ja unabhängig von der Hardware.

Johann

von Christian (Gast)


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

von Johann L. (gjlayde) Benutzerseite


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

von Wigbert P. (wigbert) Benutzerseite


Lesenswert?

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

von Johann L. (gjlayde) Benutzerseite


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

von Wigbert P. (wigbert) Benutzerseite


Lesenswert?

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

von Gast (Gast)


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 :-)

von Michael U. (amiga)


Lesenswert?

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

von Gast (Gast)


Lesenswert?

Könnte bitte jemand erklären, was die beiden _attribute_ bewirken?

von Di P. (drpepper) Benutzerseite


Lesenswert?

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.

von byteman (Gast)


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.

von martin (Gast)


Lesenswert?

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

von martin (Gast)


Lesenswert?


von Basti M. (counterfeiter)


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

von Chris H. (hergi)


Angehängte Dateien:

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

von Steffen P. (steffen_p)


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?

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
Noch kein Account? Hier anmelden.