Kul med PIC församling - Episode 11 (3 / 3 steg)
Steg 3: programvara
Programvaran länk nedan. Medan det är måltavlan för 12F683, är det lätt portas till andra versioner av bilden. Du kommer att behöva ändra raden som identifierar den PIC versionen (lista =) och INCLUDE-filen men de är intuitivt förändringar. Den __CONFIG linjen kan också behöva tweaking bara för att en eller två av de etiketter som används är stavat fel i några av inkluderade filer. Se bara till att PIC du använder har puls bredd modulering (PWM) förmåga.
Det finns ett par olika sätt att generera den vågform som vi behöver. En metod som är vanlig på internet använder en serie av NOPs att producera 38-kHz-signal och intermittensen. Att metoden fungerar eftersom en 38-kHz puls tar lite mer än 26us så det är ganska lätt att göra det med hjälp av PIC inre 4-MHz klocka (1us per instruktion cyklar). Den andra gemensamma metoden är att använda något som ger en 38-kHz puls ström och sedan använda bilden att utfärda utegångsförbud för pulserna för rätt mängd tid. Att kunde bli klar med något liknande en 555 timer för att generera pulserna men många bilder har puls generation förmåga byggdes. Vad jag syftar på är funktionen PWM som vi använde i avsnitt 9 att kontrollera hastigheten på en DC-motor. För vår IR ansökan, men kommer att vi låta PWM generatorn att köra vid intermittensfaktor fast istället för att ändra intermittensen som vi gjorde för varvtal styrenhet.
Igen, som vi såg i Episode 9, PIC föreskrivs en särskild pin PWM utgången. För att utfärda utegångsförbud för pulser på detta stift alla vi måste göra är att ändra definitionen av PIN-koden från en ingång till en utgång. För att stänga grinden ändra vi helt enkelt pin definitionen tillbaka till indata. Som kan göras i farten i programvaran. Samtidigt börjar en överföring vill vi säkerställa att vi är synkroniserade med pulserna så vi hålla koll på flaggan Timer2 overflow. Timer2 är dedikerade till funktionen PWM så det kommer att ställa flaggan overflow i 38 kHz takt. Allt vi behöver göra då är att räkna antalet översvämningar baserat på den tid vi behöver för att lämna porten öppen. Till exempel, är den 560us delen av NEC vågformen lika med cirka 21 pulser. Vi räknar också svämmar över grinden stängd gången. Allt detta kan göras med hjälp av en annan timer och avbryter men på ett enkelt sätt är att bara döda tid titta på flaggan overflow i programvaran. Det är ok eftersom det verkligen inte finns något annat vi behöver göra när du spelar IR vågformen.
I det här exemplet jag hårdkodad IR adress för att vara 00 FF och gav godtyckliga värden till två switch kommandon. Du kan ändra dem efter egna behov. Växeln hantering logik är mycket enkel och ser bara för ett lågt värde på det lämpliga GPIO stiftet. När en upptäcks kallas en switch hanteringsrutin. Varje switch handler försenar 50 ms och kontrollerar sedan GPIO PIN-koden igen. Som är för att redogöra för kontakt bounce på switchen. Efter kommandot IR överförs kontrollera vi GPIO PIN-koden för en release av växeln. När en release upptäcks fördröja vi igen i 50 ms att redovisa möjliga kontakt bounce.
Tja, är det det för Episode 11 "Kul med PIC församling". Håll ögonen öppna för ytterligare episoder.