mikrocontroller.net

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


Autor: Johann L. (gjlayde) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
1 lesenswert
nicht 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ß

Autor: Andreas L. (andreasl)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Passt in meine Krippe.

Danke
Andreas

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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:
   while (1)
   {
       wdt_reset();

       // Zähler abgelaufen:
       if (!count_ms)
       {
           // Zähler neu aufziehen auf 100ms
           count_ms = 100;
           // Neuer, zufälliger PWM-Wert
           OCR0A = prandom();
       }
   }

Autor: Michael S. (Gast)
Datum:
Angehängte Dateien:

Bewertung
1 lesenswert
nicht 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.

Autor: Michael S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Johannes M. (johannesm)
Datum:

Bewertung
0 lesenswert
nicht 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. ;)

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

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

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:
Angehängte Dateien:

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

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

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

Autor: Johann L. (gjlayde) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Michael S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Michael S. (Gast)
Datum:
Angehängte Dateien:

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

Michael S.

Autor: Michael S. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Thomas Korthoff (thomas47058)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

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

Autor: Thomas Korthoff (thomas47058)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
du meinst per FIR filter?

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Lowtzow .... (lowtzow)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
schaut interessant aus

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


mfg

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

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

Johann

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Wigbert Picht (wigbert) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Wigbert Picht (wigbert) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 :-)

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Könnte bitte jemand erklären, was die beiden _attribute_ bewirken?

Autor: Di Pi (drpepper) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: byteman (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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/...

grüße martin

Autor: martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Basti M. (counterfeiter)
Datum:

Bewertung
0 lesenswert
nicht 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...
  //-------------Hauptschleife-------------------

  uint8_t i=0;
  uint8_t x=0;
  uint8_t zufallszahl=0;
  uint8_t zufallszahl_alt=0;
  int16_t diff=0;

  while(1) {
    
    if(i>0) i--; 
    else {
      x=i=prandom();
    }
    

    DelayMS(5);
    if(x>127) {
      //kleine Dynamikbegrenzung
      zufallszahl = prandom() | (1<<7);
      diff = zufallszahl - zufallszahl_alt;
      while(diff) {
        DelayMS(2);
        if(diff<0) diff++;
        else diff--;
        OCR0A = zufallszahl - diff;
      }
    } else {
      //größere Dynamikbegrenzung
      zufallszahl = prandom() | (1<<7) | (1<<6);
      diff = zufallszahl - zufallszahl_alt;
      while(diff) {
        DelayMS(4);
        if(diff<0) diff++;
        else diff--;
        OCR0A = zufallszahl - diff;
      }
    }

    zufallszahl_alt=zufallszahl;
    
  }

...größere OCR0A lassen bei mir die LED heller werden...

MfG

Basti

Autor: Chris Herch (hergi)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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:
Youtube-Video "Weihnachtskrippe mit flackernden Lagerfeuern"

Autor: Steffen P. (steffen_p)
Datum:

Bewertung
-3 lesenswert
nicht 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:
> Youtube-Video "Weihnachtskrippe mit flackernden Lagerfeuern"

Hallo,
ist zwar scho etwas älter aber ich wollte wissen ob es so ein Projekt 
auch für die Arduino IDE gibt?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.