- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
RSS-Feed anzeigen

witkatz

SoftPWM LED Adventskranz mit PIC12F675 (XC8 Free vs. BoostC)

Bewerten
Wenn man von Gadgets spricht...

Hier eine kleine Bastelei für einen Adventabend. Passend zu der Jahreszeit hier die (alle Jahre wieder aktuelle) Idee, ein Adventskranz mit per Taster zuschaltbaren 1-4 LEDs zu basteln. Die LEDs flackern unabhängig voneinander per Soft-PWM und immitieren das Kerzengeflacker. Die Helligkeitsfunktion ist eine Normalverteilung 20%-100% mit Median bei 80%, als Zahlenreihe hinterlegt.

Per #define ist eine Option zuschaltbar, dass nach dem 5ten Tastendruck alle LEDs ausgehen und der Mikrocontroller in den SLEEP Modus geht. Mit erneutem Tastendruck wird die MCU wieder geweckt. Die SoftPWM läuft mit >100Hz und die Helligkeitsstufen wechseln alle ca. 100ms.

Die 4 LEDs sind so auf Kabelchen aufgelötet (und mit Schrumpfschlauch fixiert), dass sie in ein Teelicht gesteckt werden können. Die Platine mit Batterie wird natürlich unter Tannenzweigen versteckt
Klicke auf die Grafik für eine größere Ansicht

Name:	DSC_0026.jpg
Hits:	716
Größe:	65,9 KB
ID:	29490

Die Software für PIC12F675 ist in C geschrieben und mit MPLAB und XC8 im kostenlosen free mode getestet. Das ganze ist natürlich nur eine kleine LED Spielerei, aber vielleicht als C-Beispiel für Midrange-PICs für jemanden interessant.

Allen Blog-Lesern einen schönen Advent
witkatz

Nachtrag 01.12.2015:
- Schaltplan angepasst für den Betrieb mit 3x NiMh Mignon und Tiefentladeschutz durch BOD
- Überarbeitetes C Quellcode mit BOD.

Nachtrag 27.11.2016
Es gibt Basteleien, die Jahre überdauern. Mein LED Adventskranz flackert wieder auf dem Tisch. Dieses Jahr mit hellen bernsteinfarbenen LEDs. Ich wollte eine Kleinigkeit im PIC ändern und leider den PIC erstmal zerschrieben. Dachte schon der wäre hinüber, aber dann die Fehlermeldungen genauer gelesen. Ja, da war mal was. Der PIC12F braucht zum Flashen eine Mindestspannung von 4,5V. Von 3xNiMh Akkus versorgt lässt der PIC nicht flashen - schnell eine Akkuzelle rausgenommen, die Versorgung vom Brenner aus zugeschaltet und schwups ist der PIC wieder da.
Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken Klicke auf die Grafik für eine größere Ansicht

Name:	Schaltplan_2.PNG
Hits:	2415
Größe:	13,4 KB
ID:	30954  
Miniaturansichten angehängter Grafiken Angehängte Dateien

"SoftPWM LED Adventskranz mit PIC12F675 (XC8 Free vs. BoostC)" bei Twitter speichern "SoftPWM LED Adventskranz mit PIC12F675 (XC8 Free vs. BoostC)" bei Facebook speichern "SoftPWM LED Adventskranz mit PIC12F675 (XC8 Free vs. BoostC)" bei Mister Wong speichern "SoftPWM LED Adventskranz mit PIC12F675 (XC8 Free vs. BoostC)" bei YiGG.de speichern "SoftPWM LED Adventskranz mit PIC12F675 (XC8 Free vs. BoostC)" bei Google speichern "SoftPWM LED Adventskranz mit PIC12F675 (XC8 Free vs. BoostC)" bei del.icio.us speichern "SoftPWM LED Adventskranz mit PIC12F675 (XC8 Free vs. BoostC)" bei Webnews speichern "SoftPWM LED Adventskranz mit PIC12F675 (XC8 Free vs. BoostC)" bei My Yahoo speichern

Aktualisiert: 27.11.2016 um 17:42 von witkatz

Stichworte: boostc, led, pic c, softpwm, xc8 Stichworte bearbeiten
Kategorien
Fertige Projekte , PIC Basteln

Kommentare

  1. Avatar von witkatz
    Ich habe etwas mit dem BoostC Compiler von Sourceboost in der MPLAB Umgebung experimentiert und den Quellcode für dieses Projektchen mal mit BooostC Compiler abgeändert (s. Anhang).

    Interessant war für mich der Vergleich der Optimierungen von XC8 im "free mode" also geringer Optimierungsstufe und BoostC im Optimierungslevel "Normal". Für dieses kleine Beispiel optimiert BoostC etwas besser als der XC8 im Free Mode. In diesem Projektchen erstellt XC8(Free mode) 375 Worte und BoostC 350 Programmworte, wobei die Wertetabelle im ROM schon 128 Worte belegt, die nicht wegoptimiert werden können. Dh. BoostC optimiert das Programmcode etwa 10% besser (nach Abzug der Wertetabelle). Diese Optimierungen wirken sich stark auf die Frequenz der Soft PWM aus, die ich trivial mit einer Schleife gelöst habe. Mit BoostC wird die Schleife in ca. 5,5ms durchlaufen, mit XC8 in ca. 6,3ms. Ich habe eine max. SoftPWM-Frequenz von 100Hz auf 4 Ausgangspins angestrebt und das ist mit beiden Compilern locker erreicht. Insgesamt sind die Unterschiede zwischen XC8 free und BoostC bei solch kleinen Projekten nach meiner Meinung nicht wirklich relevant.
    Aktualisiert: 08.01.2015 um 17:50 von witkatz
  2. Avatar von witkatz
    Ich habe die Angaben über den Compiler-Vergleich korrigiert, nachdem ich gemrkt habe, dass in dem XC8 File als Überbleibsel von einem Test einige Variablen absolut adressiert waren. Das hat das Ergebnis für den XC8 "geschönt", weil der XC8 bei absoluter Adressierung einige Bankumschaltungen weglässt. Das ist sozusagen eine unbeabsichtigte "Optimierung", die ich nicht benutzen möchte, weil ich absolut adressierte Variablen vermeiden möchte. Jetzt sind die C-Files auf dem gleichen Stand, alle Variablen automatisch adressiert und XC8 Free fügt wie gewohnt seine überflüssigen Bankumschaltungen ein, die erst in den kostenpflichtigen STANDARD oder PRO Versionen wegoptimiert werden. Diese zusätzlichen 15 Assemblerbefehle im Compilat, bzw. 5% mehr Maschinencode sind in dem Fall kein Beinbruch
    Aktualisiert: 08.01.2015 um 20:02 von witkatz

12V Akku bauen