Schritt 16: Flamme-weniger LED Kerze Simulator Firmware Beschreibung
Die Quelle für die Firmware (wie auch die binäre Bilder für die Programmierung) finden Sie unterhttp://www.wire2wire.org/LED_candle/LED_candle.HTML
Es gibt umfangreiche Dokumentation in der Quelle über die Funktionsweise der Firmware im Detail also nur über die wichtigsten Punkte hier zu gehen.
Dieses Projekt verwendet ein pic12F508 dieser bestimmten Micro hat sehr wenig Hardware-Peripherie. In der Tat es hat auch keinen Interrupts und hat nur einen einzigen Hardware-Timer / Zähler. Dies erschwert vor allem die Generierung von PWM-Signalen. Der Hauptgrund, warum ich entschied mich für dieses Mikro war hatte ich bestand auf Hand und ihre niedrigen Kosten.
Das Datenblatt für dieses Teil finden Sie hier:
http://WW1.Microchip.com/Downloads/en/DeviceDoc/41236E.PDF
Die Kernkomponenten der Firmware sind die 5 LFSR PRBS-Generatoren und der PWM-Motor. Zum Generieren der Höchstbetrag von zufälligen flackern mit den begrenzten Mitteln ich ich hatte beschlossen, 5 identisch lineare Feedback Shift Register Pseudo Bitstream-Zufallsgeneratoren einrichten. Jedes Zimmer ist 16 Bit lang und fängt mit einem einzigartigen Samen. Die einzigartige Samen sind wichtig, da die Generatoren nicht sind wirklich zufällig und sie werden nach einer gewissen Zeit wiederholen. Wenn sie alle mit dem gleichen Saatgut gestartet, die 5 Kanäle synchron und nicht so schön, dass ein Flimmern produzieren würde. Um die Zufälligkeit zwischen den Kanälen zu maximieren, die die niedrigwertigen Bits verwendet werden, um der Helligkeit einstellen, dass Kanal und die oberen Bits des vorherigen Kanal verwendet werden, um der Verweildauer dieser Helligkeitsstufe eingestellt werden stattfinden. Das LFSR wird nur auf den nächsten Wert aktualisiert, wenn eine neue Helligkeit benötigt wird. So sollten mithilfe einer anderen Kanäle Generator der Verweilzeit der einzelnen Kanal einstellen Muster im Laufe der Zeit in Bezug zueinander verschieben.
Die andere Funktion im Code ist ein "Wind"-Modus. Dies auf Code-Ebene ist ein zufälliges Ereignis, das für eine zufällige Zeit dauern. Wenn ein Wind-Ereignis ausgelöst wird der Code nimmt 2 neue Nummern aus den vorhandenen LFSR als die Dauer der Veranstaltung genutzt wird und die andere ist die Verzögerung, bevor der Ereignisauslöser wieder nach Kursende. Während der Wind-Veranstaltung ist die einzige wirkliche Unterschied in der PWM-Code die Masken angewendet, um die Zeit und den Helligkeitswert wohnen. Für den "normalen" Modus werden sie eingerichtet, hell und langsam Flimmern zu produzieren. Während der Wind-Modus werden die Masken angepasst, um ein trüber und schneller Flimmern zu produzieren.
Wie erwähnt gibt es keine Interrupts oder Peripheriegeräte auf diesem Mikro als einen einzigen Timer zur Verfügung. Zur Umsetzung des 5-Kanal-PWM-Generators, die ich zuerst Timer 0 einrichten, können einen Zähler läuft langsam genug, dass ich die Anweisung, die erforderliche Aktualisierung ausführen könnte das LFSR vor dem nächsten zählen aber schnell genug, dass das Dimmen glatt für das Auge war. In der Hauptschleife ist Logik, die eines von zwei Dingen mit dem Timer funktioniert. Wenn der Timer auf 0 überrollt stellt sich zuerst an den Ausgängen. Zweitens vergleicht es die Anzahl die Helligkeitsstufen der einzelnen Kanal. Wenn das Niveau niedriger als die aktuelle Anzahl ist schaltet sie den Kanal aus.
Diese Methode funktionierte gut für diese Anwendung jedoch nicht ohne Nachteile. Der größte Nachteil ist, da die Anzahl der Timer langsamer sein muss als die Zeit nehmen Ihre Update-Anweisungen, die es nicht auf große komplexe Programme funktionieren würde (oder die PWM sehr körnig wäre).