Designa en Multi nod LED PWM lampa (4 / 6 steg)
Steg 4: programvara
Källkoden i 12F609 är verkligen komplicerat. Jag använder någonsin senaste minnesplats! Alla 64 byte har konsumerats av min kod. Jag har en jättestor 32 byte flash vänster över som reservdelar. Så, jag använder 100% av RAM-minne och 97% av flash. Men får det häpnadsväckande hur mycket funktionalitet du för alla att komplexitet.
Meddelande till varje lampa arkiveras av skicka åtta byte datapaket. Varje datapaket avslutas med en kontrollsumma - så egentligen, det finns sju byte av data plus en sista kontrollsumma. På 9600 baud tar ett datapaket drygt 8 millisekunder att anlända.
Tricket är att göra flera saker samtidigt som paketet byte anländer. Om någon av lysdioderna är aktiv med en PWM-signal, utdata PWM måste vara dig uppdaterad även om du tar emot nya packet byte. Det är tricket. Det tog mig veckor och veckor att reda ut detta. Jag tillbringade en stor mängd tid arbetar med min Logiport LSA försöker följa varje bit. Detta är några av de mest komplicerade koden jag någonsin har skrivit. Det är därför mikro begränsas bara så. Micros som är mer kraftfullt är det lätt att skriva lös/lätt kod och har den snabba mikro rip igenom det utan att klaga. Med 12F609, någon lös kod med kostar massor. Alla micro källkoden är skrivet i C med undantag för avbrottstjänstens rutin.
Varför har sådana stora datapaket kan du fråga. Jo, eftersom vi vill ha lysdioder rampen upp och ner på sig själva. När en ramp profil laddas, kan lampan gå ut och börja ramp även om du tar emot nya kommandon för en annan LED. Varje lampa har att ta emot och avkoda all data packet trafik även om paketet inte är avsedd för det.
En LED profil består av en start, start dwell time, ramp rate, övre nivå, top dröjtiden, ramp ner takt, nedre nivå. Se diagram bifogas. Wow, det är mycket för en LED. Nu, multiplicera det gånger antalet lysdioder. Det blir för mycket - jag kan bara hålla reda på tre lysdioder med full ramp profiler. Fjärde (vita LED ombord dev) har bara rampen från/till kapacitet. Det är en kompromiss. Ta en titt på bifogade bilden av en ramp profil.
PWM signalen genereras av en timer som körs på 64uS per fästing. Åtta bitars timern rullar över varje 16.38mS. Detta innebär PWM signalen är igång på 61.04 Hz. Detta är inte bra för video knacka! Så jag använde en programvara trick och hoppade ett par extra räknas in timern att sträcka ut till 60Hz. Detta gör video knacka ser mycket mycket bättre.
Jag uppdatera ramp profiler på varje vältning av PWM timer (16.67mS). Därför är varje ramp/dwell tick 1/60 av en sekund, eller 60Hz. Segmentet längsta profil (med en sammanräkning av 255) kommer sista 4.25 sekunder och den kortaste (med räkna till 1) varar 17ms. Detta ger ett trevligt utbud att arbeta inom. Ta en titt på den bifogade bilden från logik analysatorn. För att verkligen se detaljer i bilden, öppna bilden i högupplöst läge. Detta tar ett par extra klick på instructable webbplats. Det finns också en ritning av en profil visas nedan.
Dokumentera protokollet kommando är på min todo-lista. Jag planerar att skriva en datablad typ av dokument att beskriva för att protokoll helt. Jag har börjat ett datablad för chip - en preliminär version på min hemsida nu.