Att "dekoda" IR-signaler på en PIC
Postat: 8 juni 2010, 18:35:52
Jag fick en skrotad video kastad på mig och jag lödde loss alla komponenter som kan vara bra att ha. Då jag inte provat leka med IR tidigare beslöt jag att ta loss IR-dioden i fjärrkontrollen och mottagaren i videon.
Ingen av dioderna har någon som helst märkning på sig, men efter lite googling hamnade jag här:
http://brtleds.manufacturer.globalsourc ... Module.htm
Av utseendet att döma gissar jag att det är den fotodioden jag har.
Ytterligare googling gav http://jap.hu/electronic/infrared.html och där fann jag lite mer information om hur man går till väga för att skicka data. Utdata ska man modulera, medan indatat demoduleras automatiskt. Jag provade hans 555-koppling på labbplattan och det fungerar utmärkt.
Nu till det aktuella problemet:
Tanken med mitt labbande är att jag ska bygga en fjärrkontroll till en permobil på jobbet. Fjärrkontrollen och ett mycket enkelt protokoll är färdigt (på papper), men mottagardelen är den som ställer till lite bekymmer då jag inte riktigt kommit på hur jag ska dekoda datat.
Eller ja, själva dekodningen är inga problem, men där jag för stunden går bet är timingen på signalerna. Enligt databladet för den mottagare jag har (finns på den första länken i detta inlägg) står det att periodtiderna Th (hög signal) och Tl (låg signal) för modulen är som minst 400µs och som mest 800µs.
Om jag antar att tiden är exakt 400µs så kan jag göra en avläsning var 401:e µs, eller så, men det framgår ingenstans om periodtiden är fast eller om den kan variera mellan varje puls. Om den är fast så skulle jag kunna skicka in typ 20st ettor för att på så sätt ta reda på periodtiden, men om den är variabel vet jag inte riktigt hur jag ska greppa det och det är det jag behöver lite tips på.
Min fjärrkontroll har sex knappar, en skjutpotentiometer och en PIC16F677 som styrenhet. Knappstatus och potentiometerns värde (efter avläsning med ADC) är det som ska skickas över. PIC:en körs i 8MHz.
Mottagaren har jag designat runt en PIC12F510, som är en 8 pinnar stor kapsel. Samtliga pinnar används: +V, GND, MCLR (används för MCU:ns egen del), samt CLK, DAT, CS1, CS2, IR_IN som är till kringutrustningen - två DAC:ar som pratar SPI samt den inkommande IR-signalen.
Kanske måste jag designa om mottagardelen lite, en PIC12 är kanske för klen (eller åtminstone för feature-fattig). Igår låg jag nämligen och funderade på om jag istället skulle använda två likadana PIC-kretsar som har en USART-modul, och på så sätt skicka seriedata rakt över IR. Är det en möjlighet?
Att använda PIC:ens CCP-modulen (saknas dock i min PIC12, så jag måste isåfall byta) var en annan idé som ploppade upp. Exakt hur det skulle gå till har jag inte exploaterat ännu.
Vilka andra möjligheter finns det?
Ingen av dioderna har någon som helst märkning på sig, men efter lite googling hamnade jag här:
http://brtleds.manufacturer.globalsourc ... Module.htm
Av utseendet att döma gissar jag att det är den fotodioden jag har.
Ytterligare googling gav http://jap.hu/electronic/infrared.html och där fann jag lite mer information om hur man går till väga för att skicka data. Utdata ska man modulera, medan indatat demoduleras automatiskt. Jag provade hans 555-koppling på labbplattan och det fungerar utmärkt.
Nu till det aktuella problemet:
Tanken med mitt labbande är att jag ska bygga en fjärrkontroll till en permobil på jobbet. Fjärrkontrollen och ett mycket enkelt protokoll är färdigt (på papper), men mottagardelen är den som ställer till lite bekymmer då jag inte riktigt kommit på hur jag ska dekoda datat.
Eller ja, själva dekodningen är inga problem, men där jag för stunden går bet är timingen på signalerna. Enligt databladet för den mottagare jag har (finns på den första länken i detta inlägg) står det att periodtiderna Th (hög signal) och Tl (låg signal) för modulen är som minst 400µs och som mest 800µs.
Om jag antar att tiden är exakt 400µs så kan jag göra en avläsning var 401:e µs, eller så, men det framgår ingenstans om periodtiden är fast eller om den kan variera mellan varje puls. Om den är fast så skulle jag kunna skicka in typ 20st ettor för att på så sätt ta reda på periodtiden, men om den är variabel vet jag inte riktigt hur jag ska greppa det och det är det jag behöver lite tips på.
Min fjärrkontroll har sex knappar, en skjutpotentiometer och en PIC16F677 som styrenhet. Knappstatus och potentiometerns värde (efter avläsning med ADC) är det som ska skickas över. PIC:en körs i 8MHz.
Mottagaren har jag designat runt en PIC12F510, som är en 8 pinnar stor kapsel. Samtliga pinnar används: +V, GND, MCLR (används för MCU:ns egen del), samt CLK, DAT, CS1, CS2, IR_IN som är till kringutrustningen - två DAC:ar som pratar SPI samt den inkommande IR-signalen.
Kanske måste jag designa om mottagardelen lite, en PIC12 är kanske för klen (eller åtminstone för feature-fattig). Igår låg jag nämligen och funderade på om jag istället skulle använda två likadana PIC-kretsar som har en USART-modul, och på så sätt skicka seriedata rakt över IR. Är det en möjlighet?
Att använda PIC:ens CCP-modulen (saknas dock i min PIC12, så jag måste isåfall byta) var en annan idé som ploppade upp. Exakt hur det skulle gå till har jag inte exploaterat ännu.
Vilka andra möjligheter finns det?