Stap 5: Schrijven van de Code
Het programma bestaat uit drie hoofdonderdelen:
1) IR-Code bufferen
2) interpretatie van de IR-Code
3) PWM-controle (vast RGB kleur, kleur fading en wit-licht-modus).
IR-Code bufferen:
Met behulp van het proces beschreven in stap 4 - "Hacking the Remote" leerde ik dat de lengte van een 0, 1, Start Pulse, en herhaal pulse waren alle unieke en herhaalbare waarden. Elke keer dat de PIC voelde een dalende rand op kwam pin 17 (Interrupt-op-change) het zou opnemen van de tijd sinds de laatste vallende rand en vervolgens die waarde vergelijkt met een reeks van tijd "windows" om te bepalen welk type van puls net in. Hier ziet u een ruwe stroomdiagram van dit proces in de onderstaande afbeeldingen. De code van de vergelijking venster is niet origineel, ik vond het op de uitstekende KEUZELIJST-Website (http://www.piclist.org/techref/piclist/index.htm). Als de lengte niet in een venster valt, ik een slechte Code (BC) vlag instellen en negeren alles totdat de volgende start puls.
Interpretatie van de IR-Code:
Elke keer een 1 of 0 wordt gedetecteerd, duwt de PIC die waarde in een 8-bits FIFO-register. Hoewel de trein van de pols van de afstandsbediening meer dan 8 bits is, eindigen we altijd met de laatste 8 in het register, wat gebeurt er met een unieke waarde voor elke sleutel van belang bevatten. Ik vergelijk deze code de bekende digitale waarde voor elke sleutel (deze werden gemeten op de oscilloscoop in stap 4) om erachter te komen welke knop is ingedrukt en welke actie moet worden uitgevoerd (witte licht modus, RGB-modus, verhogen Fader snelheid, enz). Deze 8-bit waarde wordt opgeslagen in een tweede register, zodat als de herhaling pulse verschijnt, zullen we weten welke opdracht wordt herhaald.
PWM-controle:
De PIC-16F1829 heeft 4 10-bit hardware PWM registers, waardoor het ideaal is voor RGB-kleur controle. Met behulp van de hardware PWM modules is de PIC vrij om andere dingen doen terwijl de PWM op de achtergrond gaat.
De intensiteit van elke kleur wordt gecontroleerd door 10-bits. Wanneer de lamp is ingeschakeld, is elke waarde bij max om wit licht te geven. Wanneer de "CONV" knop is ingedrukt, begint een 3-delige-lus in de software.
Deel 1) rode verlagen, groen verhogen, blauw = 0
Deel 2) groene verlagen, verhogen van de blauwe, rood = 0
Deel 3) verlagen, verhogen, Green Red Blue = 0
Het programma blijft doorlopen van deze drie onderdelen totdat witte lichte modus is geselecteerd, of de "Statische" knop wordt gedrukt om te pauzeren de lamp op de huidige kleur.