Choď na obsah Choď na menu
 

IR kody

http://nepokon.wz.cz/n_ir.php

 

Jak funguje dálkové ovládání (DO)

Namíříte, zmáčknete tlačítko a televize se zapne. Toť vše. Tedy až na to že se přenos děje pomocí přerušovaného modulovaného infračerveného paprsku o vlnové délce přibližně 940 nanometrů, modulační frekvencí obyčejně 36 - 40 kHz (podle použitého standardu) vysílaného IR LED a snímaného infračerveným fototranzistorem.

Modulace se provádí proto abychom odstínili možné vnější vlivy - slunce, osvětlení, topení. Vstupní obvod je naladěn na stejnou modulační frekvenci jakou se vysílá. Mimoto se tím také šetří baterie DO protože vysílací dioda nesvítí souvisle.

Zmáčknutím tlačítka se rozeběhne program mikrokontroléru v DO který podle kódu tlačítka vyšle na výstupní port signál odpovídající kód v daném standardu.

Kódový rámec se obvykle sestává z povelu a čísla výrobce (nebo typu zařízení). To umožňuje mít vedle sebe dva přístroje a např zapnout ten první aniž by se nechtěně zároveň zapnul ten druhý. Jiná situace nastává máme-li např. dvě videa od stejného výrobce - obě většinou používají stejný typ kódování i stejné číslo výrobce. Potom je musíme fyzicky odstínit abychom neovládali obě zároveň.

Standardy kódování

Nejrozšířenější (asi hlavně v Evropě) je standard RC5 vyvinutý firmou Philips. Kódy vyvinuté japonskými firmami jsou např. kód NEC, kód Mitsubishi nebo kód SIRCS (IR podoba kódu Control-S) vyvinutý firmou Sony.

RC5, NEC:

Informace naleznete např. zde nebo zde (RC5).

Sony SIRCS:

Informace o tomto kódu naleznete např zde.

Mitsubishi:

Tento kód vzdáleně připomíná kód NEC - má stejně dlouhý burst (9 ms) a pauzu (4.5ms) na začátku, kódování binárních číslic je také stejné (PWM). Narozdíl od NEC vysílá jen dva bajty oddělené od sebe pauzou (stejně dlouhou jako ta na začátku). Nemá proto žádné zabezpečení. Při držení tlačítka opakuje pořád stejný kód oddělený mezerou přibližně 22 ms.

Poslech infračerveného přenosu

Jak zjistit kterým standardem naše DO vysílá? Nejjednodušší test je poslechový. Ano! Je to tak. Jak je to možné? Inu: Vezmeme rádio (FM či AM je to vpodstatě jedno). Nejlépe uděláme, když ho přeladíme aby nepřijímalo žádnou stanici. Přiblížíme ho k dálkovému ovládání. Jakmile zmáčkneme nějaké tlačítko na DO, mělo by se nám něco ozvat z rádia. Pokud již známe standardy kódování od poslechu, není problém poznat o jaký standard se jedná.

Standard tedy známe. Dobře. A jak zjistit který povel je přiřazen třeba tomu červenému tlačítku vlevo nahoře? Tady už potřebujeme počítač se zvukovkou nebo paměťový osciloskop. Ale není to složité. Stačí udělat si adaptér pro převod světla na napětí - přijímací IR diodu na kabelu s konektorem BNC nebo jack podle toho jak budeme přijímat. Já zvolil nahrávání do počítače přes zvukovou kartu.

Připojíme zhotovený adaptér na mikrofonní vstup zvukové karty, stáhneme hlasitost reproduktorů (aby nám nebouchly) a povolíme mikrofonní vsup v mixeru. Namíříme DO na diodu, zacpeme si uši a odpálíme to :-). Ne, tak drastické to nebude ale alespoň ta hlaitost by měla být stažená. Pokdu nic není slyšet, zvýšíme hlasitost. Měli bychom slyšet něco podobného jako v tom rádiu.

Zde jsou zvukové ukázky které jsem nahrál přes diodu (nikoliv mikrofon!) do počítače:

(WAV, 8bit, 48kHz, soubory mají 16-26 KB) NEC , Mitsubishi , RC5 .

Abychom mohli určit jaký je to kód musímme signál nahrát pomocí zvukového editoru. V MS Windows je to například program Cool edit či Goldwave nebo Audacity, v Linuxu např Rezound nebo rovněž Audacity. Zvukový editor nastavíme na co nejvyšší možnou samplovací rychlost (stačí však i 44.1kHz) a signál nahrajeme. Stačí 8 bitů mono. Výsledný záznam (alespoň v mém případě) je obálka signálu vysílaného DO protože vsupní filtr zvukové karty odfiltruje modulační frekvenci 36 KHz.

Obálka signálu RC5:

Obálka signálu NEC:

Obálka signálu Mitsubishi:

Pokud nám editor umožní ukázat číslo samplu pod kurzorem (např Cool edit po přepnutí na informace o čísle samplu) nebo dostatečně přesný časový interval (např Audacity) můžeme přesně určit intervaly, střídu, atd... A pokud známe standard, pak se můžeme pokusit i rozkódovat číslo povelu i číslo výrobce. Já jsem si pro svojí potřebu vyrobil dekodér který nabere data z PCM souboru (který jsem předtím nahrál v Cool Editu) a dekóduje všechny povely v něm obsažené.

Realizace kodéru programem mikrokontroléru

Pro kódování je potřeba (v mém případě) generovat nejen obálku ale i modulační kmitočet - procesor je dostatečně rychlý.

RC5:

Kodér RC5 jsem nepotřeboval. Ale postup bude obdobný jako v ostatních příkladech. Mozději možná doplním.

NEC:

Rychlý čítač slouží zároveň jako generátor nosné. Používáme dvě funkce - jedna vysílá kostru a druhá sestaví a vysílá 8 bitů. Vyslílací rutina bajtu roluje vstupní bajt a jednotlivé bity vysílá. V zdrojovém kódu Superdálkáče je to funkce send_byte_v.

Mitsubishi:

Je dobré že tento standard používá stejný princip kódování bitů - můžeme proto použít vysílací proceduru z kódu NEC (čehož jsem v Superdálkáči bohužel nevyužil, v IRdálku už ano). V zdrojovém kódu je to funkce send_byte_s.

Realizace dekodéru programem mikrokontroléru

RC5:

Po počátečných neúspěšných pokusech s vlastním algoritmem jsem naštěstí našel příklad pro dekodér RC5 přímo v příkladech od firmy Atmel. Pak stačilo algoritmus v assembleru předělat do C a optimalizovat výsledný kód - hlavně kvůli rychlosti.

Jelikož standardy NEC ani Mitsubishi nepotřebuji, nezabýval jsem se jejich dekódovacímy algoritmy. Jsou ale velmi jednoduché. Napsal jsem ale programy pro dekódování kódu NEC, RC5 i Mitsubishi metodou "offline" na PC ze souboru nahraného zvukovou kartou. V budoucnu, bude-li zájem, je možná zveřejním.

Závěr

Co dodat. Pokud chcete dělat nějaké zařízení, nenechte se odradit zdánlivou složitostí příjmu a vysílání infračerveného kódu. Není to tak složité jak se to zdá. Věřím, že vám tento text pomohl nahlédnout do tajů infračerveného přenosu dálkových ovládání.