Stap 16: Vlam-minder LED kaars Simulator Firmware beschrijving
De bron voor de firmware (evenals de binaire afbeeldingen voor programmering) zijn beschikbaar ophttp://www.wire2wire.org/LED_candle/LED_candle.html
Er is uitgebreide documentatie in de bron over de werking van de firmware in detail, dus alleen over de hoge punten hier gaat.
Dit project maakt gebruik van een pic12F508 deze bijzondere micro heeft zeer weinig in de weg van randapparatuur. Het heeft zelfs geen interrupts en het heeft slechts een enkele hardware-timer / teller. Dit bemoeilijkt bijzonder genereren PWM-signalen. De belangrijkste reden dat ik koos deze micro was dat ik had voorraad aan kant en hun lage kosten.
Het gegevensblad voor dit deel kan hier worden gevonden:
http://WW1.microchip.com/downloads/en/DeviceDoc/41236E.PDF
De belangrijkste onderdelen van de firmware zijn de 5 LFSR PRBS generatoren en de PWM-motor. Voor het genereren van de maximale hoeveelheid willekeurige flikkeren met de beperkte middelen ik had heb ik besloten om het instellen van 5 identieke Linear Feedback Shift registreert Pseudorandom Bitstream-generatoren. Elk 16 bits lang is en begint met een unieke zaad. De unieke zaden zijn belangrijk, omdat de generatoren niet zijn echt willekeurig en zij zal herhalen na een bepaalde hoeveelheid tijd. Als ze al met het dezelfde zaad begonnen zou de 5 kanalen in sync zijn en niet zo mooi van een flikkering zijn produceren. Om te maximaliseren van de willekeur tussen kanalen die de laaggeplaatste bits worden gebruikt voor het instellen van de helderheid van dat kanaal en de bits van de bovenste orde van het vorige kanaal worden gebruikt om in te stellen van de nadruktijd deze helderheidsniveau zal plaatsvinden. De LFSR is alleen naar de volgende waarde bijgewerkt wanneer een nieuwe helderheid nodig is. Dus met behulp van een andere kanalen generator om in te stellen van de nadruktijd de afzonderlijk kanaal moeten patronen verplaatsen na verloop van tijd ten opzichte van elkaar.
De andere functie in de code is een "wind"-modus. Dit op een codeniveau is een willekeurige gebeurtenis die laatste voor een willekeurige duur. Wanneer een wind-gebeurtenis wordt geactiveerd de code pakt 2 nieuwe nummers uit de bestaande LFSR wordt gebruikt als de duur van het evenement en de andere is de vertraging voordat de gebeurtenistriggers weer nadat het is voltooid. Tijdens het evenement van de wind is het enige echte verschil in de PWM-code de maskers toegepast om te wonen van de tijd en de helderheidswaarde. Voor de "normale" modus zijn ze ingesteld om een helder en langzame flikkeren. Tijdens de wind modus zijn de maskers aangepast om een flikkering dimmer en sneller produceren.
Zoals eerder er zijn geen interrupts of randapparatuur beschikbaar op deze micro dan een interne timer. Ter uitvoering van de 5 kanaals PWM generator ik eerst timer 0 instellen als een teller traag genoeg dat ik alle instructies die nodig zijn om te werken kan uitvoeren de LFSR voordat de volgende tellen maar snel genoeg dat het dimmen was glad aan het oog. In de hoofdlus zit er logica die twee dingen met de timer doet. Eerst als de timer over op 0 rolt blijkt op alle uitgangen. Ten tweede vergelijkt de graaf tot de helderheidsniveaus afzonderlijk kanaal. Als het niveau lager dan de huidige telling is blijkt het kanaal uit.
Deze methode werkt goed voor deze toepassing maar is niet zonder nadelen. Het belangrijkste nadeel is aangezien de telling van de timer langzamer moet dan de tijd die uw instructies voor een update die het niet goed op grote complexe programma's werken zou (of de PWM zou zeer korrelig).