Musik spelas väckarklocka (11 / 24 steg)
Steg 11: Fånga IR Remote Control Data
Gå först, öppna AT90USB1686 databladet och Läs allt om timers. I synnerhet förstå timer 1 och dess input capture enhet. Jag har en bilaga på timers, Läs vänligen som.
Vi kommer att köra timern kontinuerligt. Input capture enheten kommer att ge oss en tidsstämpel när IR-mottagaren ändrar sin produktion. Detta sätt kan vi mäta längden på varje "på" och "off" puls.
Bara så vi är inte förvirrad, kom ihåg att våra mottagare är aktiva låg, vilket innebär en "ON puls" är när produktionen är låg, och en "OFF puls" är när produktionen är hög. ON och OFF avser huruvida IR ljus skickas.
Vi vet från vågformen jag har fångat och visat dig i föregående steg att ett kommando upprepas om och om igen medan knappen hålls på fjärrkontrollen. Vi vet när detta kommando upprepas eftersom varje kommando startar med den längsta "på puls".
Att veta dessa fakta, kan vi fånga och matcha en rad pulser mot ett känt mönster med hjälp av programvara. Vi kan helt enkelt spela in pulserna i en array, och när vi upptäcker en riktigt lång "på puls", vet vi för att börja spela in i början av matrisen.
Alla kommandon innehålla samma antal pulser, så vi hålla räkningen på hur många pulser att veta när ett kommando har avslutats. När kommandot avslutas, försöker vi para ihop våra inspelade array till en känd matris att se vilket kommando skickades, med hjälp av uteslutningsmetoden.
Obs: Denna metod är inte fullt bevis, men jag har provat andra metoder såsom gör en jämförelse i omvänd ordning efter varje ON puls (i motsats till efter ett visst antal om pulser). Mängden data som måste vi jämföra långsam mikrokontroller orsakade jämförelse processen för att ta för lång tid och mikrokontroller "missat" några pulser.
För att få listan över kända kommandon, du helt enkelt tråd upp mikrokontroller till IR-mottagaren, och sedan har den seriella porten berätta hur länge varje pulser. Jag har setup ett verktyg som heter "IR-kod Visualizer" skrivet i Javascript som låter dig Visa serieporten ut som en vågform, som ett analysverktyg för logik.
Så tråd upp IR-mottagaren utdata till nåla fast PORT-D-4, som är ingång input capture enhet 1, och sedan ansluta den kraft och slipat av IR-mottagaren. Du inte behöver ett diagram för detta, hoppas åtminstone jag... Men jag har tagit en ändå.
Ta de filer jag har förutsatt, kompilera, ladda upp och kör på det Teensy ++. Sedan öppnar serial-uttaget och trycka på en knapp på fjärrkontrollen. Du ser pulserna visas på skärmen. Spara resultaten för varje knapp, klistra in dem i "IR-kod bildeffekter" att se vågformen.
Jag ska visa dig hur du använder resultaten i nästa steg.
Pop quiz, vad är den enhet som används för att fånga och store IR pulse bredd värden vi använder?
Teensy ++ har en 16 MHz kristall, men vi kör det på 3,3 v istället för 5V, så använder vi "clock_prescale_set(clock_div_2);" så det faktiskt kör på 8 MHz. Källkoden visar timer 1 kan konfigureras för att använda en "division med 8" prescaler, så timern är aktiverad på 1 MHz. 1/1000000 sekunder är alltså 1 nanosekund och att är vad värdena fångas och lagras i.
--Kopieras från blindtarmen på timers