Sleduji tuhle diskuzi a nestačím se divit. Adame, snažíš se programovat nebo jenom lepit cizí kódy dohromay ? Měl bys začít programovat. Co se IR ovladačů týká, tak čtení kódu sice není úplně triviální jako například snímání rotačního kodéru, nicméně není to ani žádná divočina. Napsal jsem si ovladač, který využívá 16-ti bitový čítač (Timer/Counter 1) v režimu CTC a používá přerušení pro Input Capture (je na něj připojen TSOP přijímač a používá se jako externí přerušení), Timer Comapre B (timeout pro zápis kódu z DO) a Timer Compare A (timeout pro konec vysílání z DO). Celý kód má po překladu něco málo přes 600 bytů (psáno v asm) a jde z něj 8-bitový status (příznak požadavku zpracování kódu z DO a čítání počtu opakování vysílaného kódu z ovladače) a 48-bitová hodnota vyslaného kódu (s málokterým ovladačem vystačíš jenom s 16 bity). Pokud se chceš něco naučit, popíšu Ti tady, co které přerušení dělá, ostatní je na Tobě :
Input Capture provádí :
Načtení hodnoty ICR1. Pokud je nula, znamená to, že čítač stojí = 1. impulz z ovladače.
Pokud ICR1 není nula, zkontroluje se hodnota ICR1 na délku bitu. Pokud je menší, než 1,7 ms, zapíše se 0, pokud je menší, než 2,7 ms, zapíše se 1. Pokud je delší, než 2,7 ms, nezapisuje se nic = start pulz nebo repeat pulz.
Zápis probehně tak, že 46.-0. bit se odroluje doleva (tím se 46. bit posune na 47. a 0. bit se posune na 1.) a na 0. bit se uloží načtený bit.
Hodnota kódu se načítá na dočasnou pozici.
Vynuluje a spustí se časovač.
Compare Match A provádí :
Vynulování dočasné pozice a hodnoty načteného kódu DO, zastavení čítače, vynulování počtu opakování a nastavení bitu pro zpracování ve statusu. Čítač se v CTC módu sám vynuluje.
Compare Match B provádi :
Kontrolu dočasné pozice na 00 00 00 00 00 00.
Pokud je 00 00 00 00 00 00, přišel z DO jenom repeat pulz. Kód zůstane původní, zvětší se ve statusu počet opakování.
Pokud není 00 00 00 00 00 00, může jít buď o opakování nebo o nový kód. Zkontroluje se dočasný kód s minulým načteným. Pokud souhlasí, jenom se zvětší ve statusu počet opakování. Pokud kódy nesouhlasí, jedná se o nový kód - přepíše se minulý kód novým, ve statusu se nastaví počet opakování na 1.
Nastaví se příznak pro zpracování
Vynuluje se dočasný kód.
Inicalizace :
Nastavit Timer 1 na CTC režim a ICP na reakci na sestupnou hranu - čítač nespouštět
Nastavit OCR1A na 128 ms - nejdelší čas pro repeat kódu je NEC kód = 110 ms. Něco je ponecháno jako rezerva. Pokud čítač dočítá až sem, znamená to konec vysílání ovladače.
Nastavit OCR1B na 15 ms - Timeout pro uložení kódu. Pokud do 15 ms nepřijde další impulz z DO, bere se kód jako ukončený
Zapnout přerušeni pro ICIE1, OCIE1A a OCIE1B.
V programu pak s “ovladačem” pracuješ takto : Zkontroluješ status byte. Pokud je příznak zpracování nastaven, znamená to, že je načtený nový kód a ještě nebyl obsloužený. Vynuluješ příznak, uložíš status byte zpět a podle 48-bitového kódu provedeš, co potřebuješ.
Máš tady přesné instrukce, co a jak máš naprogramovat, abys dostal kód IR ovladače do kontroleru. Co s kódem DO uděláš (zobrazit na LCD, poslat přes UART do PC) je Tvoje věc. Pokud začínáš, tak to ber jako cvičení nebo domácí úkol.
A mimochodem, pokud nemáš v NB sériový port, co třeba tohle : aukro.cz/pl2303hx-usb-rs232-ttl- … 89061.html ? Používám ho u svého NB s Win7 64bit a šlape parádně.