Hur man bygger en 5 kanal Flame-mindre LED ljus Simulator (16 / 16 steg)
Steg 16: Flame-mindre LED ljus Simulator Firmware Beskrivning
Källa för firmware (liksom de binära bilderna för programmering) finns påhttp://www.wire2wire.org/LED_candle/LED_candle.html
Det finns omfattande dokumentation i källa på hur firmware fungerar i detalj så kommer bara gå över den höga Poängen här.
Detta projekt använder en pic12F508 denna särskilda micro har väldigt lite i vägen för maskinvara och kringutrustning. I själva verket det inte ens har avbrott och bara har en enda hårdvara timer / counter. Detta gjorde särskilt generera PWM signaler svårt. Främsta anledningen att jag valde denna micro var jag hade lager på hand och deras låg kostnad.
Databladet för denna del kan hittas här:
http://WW1.microchip.com/downloads/en/DeviceDoc/41236E.pdf
De centrala delarna av firmware är 5 LFSR PRBS generatorer och PWM motorn. För att generera maximal mängd slumpmässigt flimmer med de begränsade resurserna som jag hade jag beslutat att ställa in 5 identisk linjär återkoppling SKIFT register Pseudo Random Bitstream generatorer. Var och en är 16 bitar långa och börjar med en unik frö. Unika fröna är viktigt eftersom generatorerna inte verkligen är slumpmässig och de kommer att upprepa efter en viss tid. Om alla började med samma utsäde i 5 kanaler skulle vara i synk och inte producerar som snällt av ett flimmer. För att maximera slumpmässigheten mellan kanaler de låga bitarna används för att ställa in ljusstyrkan för att kanal och de övre bitarna i den föregående kanalen används Ställ dröjtiden denna ljusstyrka kommer att hållas. LFSR uppdateras bara till nästa värde när en ny intensitetsnivå behövs. Så genom att använda en annan kanaler generator för att ange dröjtiden enskilda kanalen skulle mönster skifta över tiden med hänsyn till varandra.
Den andra funktionen i koden är "vind". Detta på en nivå är en slumpmässig händelse som varar i en slumpmässig varaktighet. När en vind-händelsen utlöses koden plockar 2 nya nummer från den befintliga LFSR används som varaktigheten av händelsen och den andra är fördröjningen innan event-triggers igen efter den är klar. Under händelsen vind är den enda verkliga skillnaden i PWM koden masker för att uppehålla mig tid och ljusstyrka värde. För "normal"-läge ställs in att producera ett ljust och långsam flimmer. Under wind-läget justeras masker för att producera en dimmer och snabbare flimmer.
Som nämnts tidigare finns det inga avbrott eller kringutrustning finns på denna mikro än en enda timer. För att genomföra 5 kanal PWM generatorn jag först ställa in timer 0 vara en räknare segt nog att jag skulle kunna utföra alla instruktioner som behövs för att uppdatera LFSR innan nästa räkna men tillräckligt snabbt för att den mörkläggning var slät för ögat. I den huvudsakliga slingan finns det logik som gör en av två saker med timer. Först om timern rullar över till 0 visar det på alla utgångar. För det andra jämförs räkningen till enskild kanal ljusstyrkan. Om nivån är lägre än det nuvarande antalet inaktiverar den kanalen.
Den här metoden fungerade bra för denna ansökan men är inte utan nackdelar. Den största nackdelen är eftersom antalet timer måste vara långsammare än den tid som din uppdatering instruktioner tar det inte skulle fungera bra på stora komplexa program (eller PWM skulle vara mycket kornig).