Analyzátor IR dálkových ovladačů.

Pokud se chcete zabývat konstrukcemi s použitím IR dálkových ovládání, tedy na úrovni jejich návrhu, pak jistě potřebujete vědět jak pracují. Protože protokolů je více, způsobů také (proměnná délka signálu, mezer, fázové změny) a ještě navíc pracují dálkové ovladače na různých kmitočtech nosné a různých vlnových délkách IR světla (minimálně dvou), je často potřeba si k dálkovému ovladači, který už máte, nějak zjistit, zda bude použitelný a jak jít na jeho příjem. Proto jsem navrhl toto malé zařízení, které oscanuje vysílající IR ovladač pokud pracuje na 36kHz při IR okolo 940nm. Pokud pracuje ovladač např. s jinou frekvencí nosné, pak samozřejmě nebude jeho vysílání přijato a alespoň se dozvíme, že tento kus IR DO nelze použít s přijímači pro 36kHz jako je oblíbený SFH5110 - 36kHz a je potřeba zvolit jiný přijímač, ale vzhledem k dostupnosti součástek u nás spíše jiný IR DO (dálkový ovladač).

Prosím omluvte kvalitu fotografií, byly pořízeny nejlacinější web kamerou, tedy ne zrovna k tomu nejvhodnějším nástrojem.

Toto zařízení není určeno k ovládání PC jako přijímač IR, ale je to analyzátor pro získání průběhů signálu z IR ovladače a jeho použití je tedy jako měřícího přístroje, tedy paměťového osciloskopu pro toto použití. Důvod existence mé konstrukce je tedy v tom, že různé univerzální přijímače pro ovládání PC (UIR) poskytují informace ve tvaru jakéhosi otisku IR ve stavu informací pro rozlišení různých signálů, ale nelze z nich většinou jak znovu sestavit přesnou kopii vysílání IR DO, tak ani získat informace o tom co sledovat při konstrukci vlastního přijímače ke konkrétnímu IR DO. Pokud seženete někde větší množství IR DO a budete stavět např. dálkově ovládané spínače pro ně, jistě není od věci znát jejich přesné průběhy vysílání IR a tomu přijímač také přesně přizpůsobit. Jumper na konstrukci umožňuje přepínat mezi dvěma částmi programu, tedy pokud si dopíšete software pro UIR (ve zveřejněném kódu je jumper nevyužit), můžete podle jumperu toto zařízení používat buď jak je nyní nebo jako UIR. Implementaci UIR jsem nezahrnul do tohoto zařízení úmyslně, neboť není účelem konkurovat např. zařízení IrAmp na http://www.hw.cz, ale dát inspiraci či řešení těm, kteří se chtějí IR zabývat více, udělat vlastní konstrukci apod. Upřímně řečeno tyto informace nejsou absolutním laikům určeny a tedy tomu i obsahově odpovídají.

Jak jsem to vyřešil - princip ?

Použitý princip je takový, že zařízení čeká na příchod začátku vysílání 36kHz a poté začíná již demodulovaný signál z přijímače SFH5110-36kHz scanovat každé 2 periody tohoto signálu. Tím vznikají bity, které se vždy po osmi bitech sériově vyšlou a protože použitý PIC12C508A neoplývá HW sériovým portem, je třeba i ten vyrábět softwarem. Problém je jen v tom, že perioda snímání signálu z IR cidla a žádná standardní rychlost sériového portu není přímo stejná s rychlostí scanování IR. Tedy zvolil jsem 38400bps (8N1), při které se při zvolené samplovací rychlosti IR, stihne vyslat sériově bajt během příjmu 8 vzorků z IR, jen je program trochu složitější, protože obojí musí program řešit zároveň a musí tedy být napočítán přesně na trvání instrukcí. Aby rychlost samplování při taktování 4MHz co nejlépe seděla do 36kHz, je vždy jeden bit sejmut po 55 instrukčních cyklech a druhý vždy po 56, tedy vždy 111 instrukčních cyklů odpovídá čtyřem periodám 36kHz velice přesně a my sbíráme vzorky vždy po dvou periodách 36kHz. Abych si nevysílal sériový tok stále, když je to zbytečné v době, kdy není žádný IR signál, začne zařízení číst tento signál po jeho prvním příchodu a pak jej scanuje a vysílá s přesahem jedné sekundy po posledním přijatém signálu. Poté se vysílání zastaví a čeká se na další. Celé zařízení je napájeno z RS232C, což sice není v mnoha případech ideální, ale tady s ním vystačit lze. Jen se mi nelíbilo řešení výstupu rovnou z logiky do RXD RS232C jak je to mnohdy vidět a tak jsem zapojení přizpůsobil tomu, aby se dalo lehce produkovat rozumný signál pro úrovně RS232C, což považuji přinejmenším za rozumné, když už toto řešení je proti přímému napojení logiky do RXD dražší opravdu jen minimálně a může se tak vyhnout problémům s RS232C porty, které berou rozhodovací úroveň v 0V i když musím uznat, že většina umí vzít i TTL úrovně, tedy absolutně nutné to jistě nebylo.

Jak teď získám z tohoto zařízení průběhy ?

Zde si můžete stáhnout ir_scan.zip pro použití ve Win32, tedy zazipovaný program, ve kterém si nastavíte kam se mají výsledky uložit do TXT souboru a do bitmapy a stisknete tlačítko START.

Poté stačí vzít scanovaný ovladač, namířit jej na SFH5110 a stisknout na DO tlačítko buď krátce, nebo dlouze, podle toho, kolik signálu chcete nascanovat. Je jasné, že pro získání přehledu je dobré tlačítko držet celou dobu scanování a tím získat i přehled o opakování sekvencí či co se vysílá dále po úvodní sekvenci, protože ne všechny ovladače sekvenci opakují, ale vyšlou první dlouhou a pak následují jen krátké sekvence. Ze zkušenosti mohu prohlásit, že ovladače, které neopakují prostě sekvenci, ale vysílají dále jen krátkou mají nižší úspěšnost ovládání zařízení. Ty které ji opakují se totiž při nepovedeném přenosu třeba jinam namířeným ovladačem mohou chytnout při dalším vysílání během jednoho stisku tlačítka, ty druhé nikoli a je třeba u nich pak tlačítko stisknout znovu. Program jakmile zjistí první bajty sériového toku snímá data až do přijetí konkrétního počtu bajtů pro zobrazení, tedy necelé 4kB. Pokud se nic nepřijme, nebo chcete scanování ukončit, můžete jej zastavit tlačítkem STOP. Po každém ukončení scanování ať již automatickém, nebo manuálním se zobrazí průběh získaného signálu a také uloží soubory s výsledky. V textovém souboru jsou výsledky zapsány jako sloupec H a L vždy s udáním hodnoty, která odpovídá počtu period 36kHz signálu. H značí přítomnost signálu, L jako bez signálu a doby udané za L jsou také jako odpovídající počet period při 36kHz. Závěrem k popisu programu raději připomenu, že je potřebna si nezapomenout připojit zařízení plnokrevným kabelem k sériovému portu a také si port, ke kterému jste zařízení připojili, v programu zvolit jako com1 až com4. Program stačí rozbalit a spustit z adresáře kam jej uložíte, tedy neinstaluje se. Nastavení portu a souborů k ukládání se po ukončení programu vždy zapíše, tedy při příštím spuštění jsou tyto věci nastaveny jak byly při posledním ukončení. Program by jistě mohl mít hromady funkcí a zobrazení různých značek a popisů času ke znázornění signálu. Bohužel nebylo možné se programem zabývat déle než bylo nezbytně pro funkčnost nutné a tedy v případě vyšších potřeb si budete muset odpovídající software napsat dle svých přání vlastními silami. Vzhledem k tomu, že jde prakticky jen o příjem ze sériového portu a grafické znázornění to jistě lehce zvládne každý zkušenější programátor, tedy pokud se s tímto mým programem pro PC nespokojí, nebo jej potřebuje pro jiný OS.

Přesnost.

Naskenované sekvence se nemusí při každém měření naprosto shodovat, tedy myšleno na úrovni rozdílu jednotek period s čímž je ovšem nutno počítat i při vývoji vlastního přijímače pro IR DO. Jestli už je to způsobeno rozdílnou silou signálu při různém namíření DO a tedy dobou k detekci signálu, úrovní vnějšího osvětlení či rušením umělým osvětlením, které může mít také vliv, nebo i samplováním, které rozdíl jednoho sejmutí může také produkovat je nepodstatné. Prostě v naměřeném signálu s malými odchylkami počítejte, pro velice přesné měření by bylo nutné měrit jinak, ale pro běžné potřeby bude vyhovovat i toto řešení, které vše vynahradí jednoduchostí. Dále také přijímače ve stylu SFH5110 nejsou schopny rozeznat výpadek např. jedné periody signálu a tak pokud by signál byl přerušován vždy na jednu periodu, nebude to zpozorováno. Nutno ovšem podotknout, že toto se u IR ovladačů dít nebude, protože i ty musí počítat s takovým způsobem vyhodnocení při příjmu, tedy používají pro přenos větší počty period a vhodné velikosti mezer mezi nimi. Pokud chcete výsledky co nejlepší, je dobré zabránit vstupu okolního světla do SFH5110 tak, aby do něj vstupovalo jen IR z DO. Zkoušel jsem snímat signál z 5m (co místnost dovolila) a získané průběhy byly také dobré. Odrazem o takto vzdálenou bílou stěnu už signál vykazoval zkrácení doby se signálem v zobrazeném průběhu, jak se prodloužila potřebná doba k detekci (počet period) IR přijímačem.

Mohu vidět výstupy než to začnu stavět, ať vím k čemu mi to bude ?

Alespoň taková nejaká otázka mi skoro zní v uších. Tedy zde si můžete prohlédnout 3 různé bitmapy a textové výstupy sejmuté ze 3 různých IR DO. Jsou zazipovány a po rozbalení je dostanete ve formátu, jak je vyprodukoval zde uveřejněný program. V bitmapě pak jeden pixel odpovídá dvěma periodám signálu 36kHz, v textu jsou časy psány jako H pro 36kHz a L pro bez signálu, čísla u nich pak udávají počet period 36kHz.

kendo_tv.zip

philips_hifi.zip

sony_tv.zip

Zkoušel jsem 4ks IR DO, ale čtvrtý kus běhal jinde (od videa Mitsubishi), takže jsem jej pochopitelně také nenaskenoval. Ale i 3 ze 4 svědčí o rozumné použitelnosti jak k účelům výukovým, tak k vývoji vlastního přijímače pro řízení nějakého zařízení ke konkrétnímu IR ovladači. Ono znát přesný průběh má tu výhodu, že se přijímač pak dá postavit naprosto přesně na míru onomu IR DO a i při vývoji programovatelných IR přijímačů je znalost výstupu ovladače dobrým výchozím bodem pro vlastní práci s ním.

Schéma.

Na schématu si můžete všimnout trochu jiného zapojení než bývá obvyklé. Je to uděláno tak, že kladný pól napájející zařízení je živen přímo z kladného napětí vzniklého z aktivního DTR a záporný pól je vyroben z GND pomocí stabilizátoru záporného napětí 79L05. Toto zapojení umožňuje, aby výstup z PIC12C508A dosahoval napětím v H až úrovně kladného napětí tak, aby bylo možné si PNP tranzistorem generovat z kladného a záporného napětí získaného z TXD RS232C odpovídající úrovně pro RXD na RS232C. Samozřejmě šlo realizovat zapojení i přesně opačně, tedy na zápornou větev mezi GND a TXD a použít běžnější stabilizátor pro kladné napětí, ale tak jak je navrženo umožňuje napájení nahodit a shodit linkou DTR a navíc je zapojení aktivní v aktivní úrovni DTR, což je jistě rozumné. Další výhodou mnou použitého řešení je i stav napětí na RXD sériového portu v záporné úrovni v neaktivním stavu a negenerování různých zmatečných stavů při nahození zařízení. Když se nad tím důkladně zamyslíte, myslím že dojdete minimálně k podobnému výsledku. Napájení uživila linka DTR naprosto bez problému a tak jsem nepoužil pro napájení linky dvě jak bývá obvyklé a zjednodušil tím plošný spoj i pro domácí výrobu. Pokud chcete zařízení živit zároveň i z linky RTS, pak tomu nic nebrání i program pro PC s tím počítá a tak přidáním diody od RTS ke kladnému pólu elektrolytu kam vede i dioda z DTR jistě nic nezkazíte, jen při použití mnou navrženého plošného spoje ji budete muset přidat ze strany spojů. Věřím ale, že to nebude ve většině případů potřeba. Koneckonců nic Vám nebrání si zapojení udělat dle svých požadavků a toto použít jen jako inspiraci. Napájení zařízení z RS232C nemám příliš rád, ale v tomto případě může být připojení jen kabelem k RS232C příjemné a proto jsem jej tentokráte spáchal i když vím, že problémy s nedostatečným napětím na RS232C mohou nastat, tedy počítejte s tím a změřte si úrovně na sériovém portu (pokud je neznáte) ještě před stavbou zařízení, aby bylo možné v případě potřeby vyřešit napájení jinak, dříve než dojde k případnému zklamání z disfunkce, právě z tohoto důvodu. Diody jsou všechny BAT42, ale nijak na tom nezáleží 1N4148 by vyhověly také, BAT42 jsem použil protože jsem je měl po ruce a také úbytek na nich (protože jsou schottky) je nižší, tedy i úrovně na RS232C použitého portu stačí o zhruba půl voltu nižší pro správnou funkci, což ovšem z hlediska běžných úrovní kolem 10V také není většinou podstatné. Port by měl mít pro správnou funkci kladnou úrovneň alespoň 8V na DTR při připojeném zařízení, kde ovšem už bude na 79L05 vstupní napětí pro stabilizaci tak tak pro jeho dobrou funkci - tam by pak BAT42 už význam měly. Jinak diody zařazené paralelně k elektrolytickým kondenzátorům zabraňují v některých situacích, které mohou na RS232C nastat, přepólování kondenzátorů a vzhledem k ceně diod není potřeba jimi šetřit, když jde o životnost zařízení i když vím, že v tomto zapojení jde o ránu na jistotu. Jumper JP nebyl ve zveřejněné verzi využit, jak již jsem se zmínil výše a je zde také pro případ, že si napíšete program pro PIC svůj, v němž by bylo výhodné přepínat režimy atp. Jeho osazením se jistě nic nezkazí a nasazení jumperu či bez něj nemá v této verzi žádný vliv na funkci zařízení. Pokud si PIC umístíte do patice, ulehčíte si situaci, kdyby Vás někdy napadlo vyměnit PIC, třeba z důvodu, že si chcete vyzkoušet jiné řešení, přepsat program pro PIC jako IR přijímač k ovládání PC atp.

PCB - plošné spoje.

Pokud si vytisknete předlohu jako pixel na pixel při 300dpi, získáte obraz plošného spoje 1:1. Zobrazení jednostranné desky spojů je zde ze strany spojů.

Osazení

Zobrazeno ze strany součástek.

Program pro PIC12C508A.

Zde si můžete stáhnout zdroják jako ir_scan.asm a HEX soubor k vypálení do PIC12C508A jako ir_scan.hex . Pokud neplánujete jakékoli úpravy, je i díky ceně tento OTP chip ideální. Všechno bylo po dokončení vyzkoušeno, tedy nemusíte se bát OTP chip vypálit i když pro můj klid se zodpovědnosti vzdávám v licenčních podmínkách. Použít můžete i PIC12C509A, který má jen dvojnásobek paměti programu jinak se od PIC12C508A neliší a stojí téměř stejně. Proto se vyplatí mít v zásobě PIC12C509A, protože jimi PIC12C508A nahradíte a tak pokryjete jedním typem oba. Verze bez A je dnes dražší než s A, tedy není důvod ji použít i když tomu také nic nebrání.

Program pro PIC16F627 (PIC16F628).

Protože tato aplikace může sloužit také jako inspirace, nebo ji budete potřebovat jen jednorázově, udělal i konverzi pro PIC16F627 a zdroják si můžete stáhnout jako ir_s627.asm a HEX soubor k vypálení do PIC16F627 jako ir_s627.hex . Jen je třeba u toho chipu věnovat pozornost tomu, jak jej správně zasunout do původní patice po PIC12C508A a nebo si předělat pro něj návrh plošných spojů. Vypomoci si můžete při zasouvání do původní malé patice i vložením ještě jedné patice DIL8 a teprve do ní PIC16F627 zasadit, aby vkládání nepřekážel blokovací kondenzátor na napájení PIC, nebo si onen kondenzátor přihnout k desce, aby nepřekážel delšímu PIC16F627. Jen dejte pozor, aby se přečnívající piny PIC nedotýkaly velice blízko umístěnému jumperu a tedy je lépe jumper zasadit, čímž nezůstanou piny volné a plastem jumperu piny trčící z desky jistě odizolujeme od PIC16F627. Navíc se tím ošetří pin PORTA,5, který je nakonfigurován jako vstup a tak s jumperem nebude plavat, ale bude v GND, tedy bude vhodně ošetřen, když je nepoužitý. Jak je asi patrné z fotografie v úvodu, i program pro tento chip jsem vyzkoušel. Tento program můžete také použít pro PIC16F628, který má oproti PIC16F627 jen více paměti programu, což zde není nijak důležité. V programu se používá sériový port generovaný softwarově a to z důvodu co nejjednodužšího umístění do původní malé patice i když PIC16F628 jím oplývá i v HW provedení. Pokud tedy budete experimentovat více a s tím, že ve výsledku PIC16F627 ponecháte, jistě není od věci si návrh desky předělat jinak. Pokud po skončení Vašich experimentů předpokládáte použít na stálo PIC12C508A (PIC12C509A), pak se změny dělat nevyplatí, protože ve výsledku budete u PICu bez HW sériového portu ony přenosy stejně generovat softwarově. V poslední řadě Vám ani nic nebrání si vyrobit redukci a tak pro pokusy používat piny PIC16F627 jak Vám vyhovuje nejlépe.

Náčrtek zasunutí PIC16F627 do patice DIL8 za použití ir_s627.hex :

Licenční podmínky.

Pro nekomerční využití je všechno FREE, pro zveřejnění jinde a nebo případné komerční využití autora prosím kontaktujte e-mailem. Autor neručí za jakékoli škody způsobené využitím těchto materiálů, veškerou zodpovědnost využitím materiálů přebíráte jen na vlastní riziko.

Prosba.

Materiály jsou naprosto originální a poprvé publikované (stejně jako další na těchto stránkách) a tak se snažím odpovídat na dotazy jak jen je to možné. Bohužel se však u dříve zveřejněných konstrukcí často ukazovalo, že dotazy jsou na věci, které popisuji v textu. Tedy prosím nejprve důkladně čtěte, než dotaz vznesete, ušetříme si tak všichni drahocenný čas. V případě objevení nějakých nedostatků, nejasností nebo i vlastních úspěchů s touto konstrukcí mne pak kontaktovat jistě neváhejte.

Autor: Jiří Bezstarosti