Egon - malý USB přijímač pro dálkové ovládání PC
Záložky: Úvod - Vlastnosti - Trocha teorie -
Hardware -Přípravek SMD - Software - EventGhost - Download
Hotový přijímač:

Pohled na spodní stranu:

Chtěl jsem trochu hlouběji proniknout do techniky infračerveného dálkového ovládání.
Ve stejné době jsem na webu objevil pozoruhodný software EventGhost, určený především pro
dálkové ovládání PC. Protože jeho možnosti jsou ale mnohem širší, rozhodl jsem se pro jeho používání.
Znám samozřejmě geniální přijímač IgorPlug-USB od Igora Češka, ale ten se mi pro zamýšlený účel nezdál
vhodný. Veškerá inteligence pro rozpoznání IR povelů je v případě IgorPlug-USB přesunuta do osobního
počítače a protože sám programovat pro Windows neumím, je to pro mne vlastně "černá krabička".
Jednak do její funkce příliš nevidím, jednak si ji neumím přizpůsobit pro svoje potřeby.
Chtěl jsem také, aby výsledkem byla konstrukce, která uživatele nenutí platit žádné licence anebo
neustále neobtěžuje nesmyslným upozorňováním na skutečnost, že je to free verze...
Proto jsem zvolil konstrukci s USB převodníkem FT232RL, jehož VCP ovladač (virtuální sériový port)
je bezplatný. Výsledkem mého snažení je zde popsaný přijímač Egon.
Abych mohl srozumitelně popsat funkci Egona, musím se nejprve alespoň několika slovy zmínit o principu infračerveného
dálkového ovládání. Nebudu zabíhat do žádných podrobností. Na webu je informací o této technice dostatek a zájemce
si je jistě najde.
Při stisknutí tlačítka dálkového ovladače je prostřednictvím infračervené fotodiody vyslán světelný (okem neviditelný)
signál. V tomto signálu je určitým způsobem zakódováno několik informací. Způsob, jakým jsou informace zakódovány,
záleží na použitém protokolu. Těchto protokolů je asi několik desítek. Pravděpodobně nejrozšířenější je protokol
RC5 od firmy Philips. Informace jsou v signálu zakódovány dvě. Jednak je to takzvaná adresa, jednak povel.
Jeden konkrétní povel si můžeme představit jako číslo jednoho konkrétního tlačítka. Adresa je vlastně číslo, kterým
se od sebe odlišují jednotlivé dálkové ovladače se stejným protokolem.
Protože v infračervené oblasti je poměrně velké množství zdrojů rušivého záření, bylo třeba nalézt nějaký způsob, jak
přijímači usnadnit detekci správného signálu. Řešením je "rozsekání" užitečného signálu nosným kmitočtem. Používají
se kmitočty od 30kHz do asi 56kHz. Pro přijímání se používají speciální integrované obvody, které na jednom čipu
obsahují fotodiodu, předzesilovač, pásmovou propust (filtr) a tvarovač.
Jednomu signálu (vzniklému při krátkém stisknutí tlačítka dálkového ovladače) říkejme telegram. Protože v klidovém stavu
pochopitelně dioda nevysílá, každý telegram začíná a končí impulsem. Tento impuls je ve skutečnosti takzvaný burst,
protože (jak už bylo vysvětleno) aktivním signálem je modulován nosný kmitočet. Záleží na použitém protokolu, kolik
burstů a kolik mezer telegram obsahuje. V některých protokolech je tento počet konstantní, v jiných proměnný.
Za základ konstrukce jsem zvolil svůj oblíbený mikropočítač ATmega8. Bylo to zejména z důvodů možnosti
implementace bootloaderu a velikosti paměti RAM.
USB rozhraní je tvořeno integrovaným obvodem FT232RL. Ten obsahuje interní oscilátor (není třeba krystal)
a také EEPROM pro uložení konfigurace. Jeden z konfigurovatelných pinů (CBUS4) je použit jako zdroj externích hodin
6 MHz pro mikropočítač ATmega8. Přijímač infračervených signálů je tvořen obvodem SFH5110 (případně TSOP4838),
jehož výstup je připojen na vstup INT0 procesoru.
Zapojení je tak jednoduché, že vše je zřejmé z dokumentace a nevyžaduje podrobnější popis.
Před připájením procesoru na destičku je třeba procesor naprogramovat (bootloader a vlastní FW Egona) a nastavit Fuses
a LockBity. Potřebné soubory jsou na této stránce dole v sekci Download.


Později je samozřejmě možné (díky bootloaderu) firmware Egona upgradovat.
Po připojení hotového Egona je třeba nakonfigurovat obvod FT232RL. Ze stránek FTDI je třeba stáhnout ovladač VCP
a konfigurační SW Mprog. Po nainstalování ovladače spusťte Mprog a proveďte nastavení podle tohoto obrázku:

Nyní by již měl být Egon funkční (možná bude třeba provést jeho reset). Můžete ho vyzkoušet podle popisu v kapitole
Popis software.
Přípravek s upnutým procesorem ATmega8

Pohled na spodní stranu bez procesoru

Pohled na horní stranu

Váhal jsem, zda si mám na programování SMD procesorů ATmega8 udělat redukci anebo samostatný modul.
Nakonec jsem zvolil druhou variantu. K programování tedy stačí libovolný ISP programátor, zdroj 5V a uvedený modul.
Přípravek obsahuje zdroj externích hodin. Zjistil jsem, že pro většinu nastavení pojistek-Fuses (včetně nastavení
s krystalem) je toto řešení funkční. Pro naprogramování nového procesoru by ostatně nebyl třeba žádný externí
zdroj hodin, protože v defaultním stavu je procesor taktován interním RC oscilátorem. Po nastavení Fuses by se však
procesor stal nedostupným. To by bylo velmi nepříjemné, pokud by se omylem udělalo nastavení Fuses ještě
před naprogramováním bootloaderu.
V sekci Download je k dispozici dokumentace (pdf) i soubory pro Eagle 4.16.
POZOR, časovač 555 musí být v provedení CMOS !
Aby Egon mohl vyhodnotit přijatý IR telegram, musí si "změřit" délky všech burstů a mezer. K měření
je použit Timer 0 s předděličkou nastavenou na 256. Vzhledem k tomu, že procesor je taktován kmitočtem 6MHz,
vychází délka jednoho kroku čítače (rozlišení) na asi 42,7µs a k přetečení čítače dojde po více než 10ms.
V aktuální verzi je Egon schopen vyhodnotit 17 různých protokolů. Každému protokolu jsem přiřadil číslo.
Například RC5 má číslo 0, JVC je 2, NEC má 3 atd. Je-li přijatý telegram rozpoznán, odešle Egon do PC jednoznačný
identifikátor tohoto telegramu. Identifikátor má 3 byty, které jsou odeslány v tomto pořadí:
1) Číslo protokolu
2) Číslo povelu (tlačítka)
3) Adresa ovladače
Pokud je zvolen ASCII režim (podrobněji níže), je každý byt popsán dvojicí hexadecimálních číslic.
Zároveň je v tomto režimu každý identifikátor ukončen dvojicí CR, LF (odřádkování).
Egon má dva základní režimy činnosti a několik možností nastavení. Po prvním zapnutí se nachází v normálním
režimu a je nastaven pro optimální spolupráci s programem EventGhost. Má pevně nastavené tyto
komunikační parametry: 57600 Bd, 8 bitů, 1 stopbit, parita žádná, řízení toku žádné.
I když má Egon rozhraní USB, díky ovladači se s ním pracuje stejně, jako by byl připojen na sériový port.
Ke komunikaci s Egonem a k jeho nastavení lze tedy použít libovolný terminálový program, jehož parametry
je možné nastavit na výše uvedené hodnoty. Všechny příkazy musí začínat hvězdičkou a jsou psány velkými písmeny.
Veškerá ostatní data jsou ignorována. Na následujícím obrázku je reakce Egona na příkaz *HELP:

Zavedl jsem dva druhy příkazů. Dočasné (Temporary commands) a konfigurační (Configuration commands).
Jak vyplývá už z jejich názvů, účinek těch prvních je jen dočasný. Ty druhé mají účinek trvalý (pokud není
dán opačný příkaz) a to dokonce i po vypnutí napájení (konfigurace je zapsána do EEPROM).
Postupně vysvětlím význam všech příkazů, které jsou na HELP stránce uvedeny:
*HELP
Příkaz slouží pouze pro zobrazení výše uvedené HELP stránky.
*BUFFER

Tento příkaz slouží k výpisu aktuálního obsahu paměti (bufferu), do které jsou uložena data přijatého
IR telegramu. První byt uvádí celkový počet následujících burstů a mezer. Druhý byt je délka prvního burstu,
třetí byt je délka první mezery atd. V příkladu na obrázku tedy má telegram celkem 19 (hexadecimálně 13)
burstů a mezer. První burst trval asi 853µs (20 * 42,7), zatímco první mezera trvala asi 896µs (21 * 42,7).
Nad příkazem *BUFFER je vidět, že poslední identifikátor, vyslaný Egonem, byl "001105". To znamená,
že se jednalo o protokol RC5, kód povelu byl hexadecimálně 11 a adresa byla 5.
*EEPROM

Příkaz *EEPROM lze použít pro kontrolu obsahu paměti EEPROM procesoru ATmega8. Na obrázku je vidět, že většina
paměti je nevyužitá. Nejvíce místa zabírá definice příkazů (řetězec dat, začínající byty 07, 41 a končící byty 50,00).
Dále je vidět byt, ve kterém je zakódovaná konfigurace Egona (09 - červeně zvýrazněný). Poslední zajímavou oblastí
je zeleně zvýrazněná dvojice bytů na konci paměti EEPROM. To je "Chip Erase Counter", tedy počítadlo, kam Bootloader
zapisuje počet mazání čipu. Při každém upgradu je počítadlo inkrementováno. Na obrázku je na počítadle údaj 55
(v hexadecimální soustavě 0037).
*STATUS

Jak je vidět z obrázku, pomocí tohoto příkazu je možné zkontrolovat aktuální stav konfigurace Egona.
*VERSION

Na příkaz *VERSION reaguje Egon svojí identifikací, včetně označení aktuální SW verze. Také je uvedena adresa
domovské stránky Egona.
*TIMING a *NORMAL

Při analýze neznámého IR protokolu je třeba nahrát několik IR telegramů. K tomu právě slouží příkaz *TIMING.
Jak je z obrázku zřejmé, po jeho zadání se změní výzva na "Timing first buffer ...". Po příjmu prvního IR telegramu
se výzva opět změní a to na "Timing second buffer ...". Po zaplnění i druhého bufferu je obsah obou bufferů vypsán
na obrazovku a výzva se změní na "Command ?". To znamená, že Egon v tuto chvíli ignoruje veškerá IR data a očekává
pouze příkaz. Je možné dát vcelku libovolný příkaz (například znovu *TIMING), ale jedině po příkazu *NORMAL
se Egon vrátí do normálního režimu.
Formát dat, vypisovaných po příkazu *TIMING, je téměř shodný s formátem popsaným v oddílu o příkazu
*BUFFER. Tentokrát je ovšem k měření použito Timeru 1, taktovaného kmitočtem 6MHz. Délka každého burstu
a každé mezery je pak s 256 * větší přesností vyjádřena pomocí dvou bajtů.
Ještě zbývá vysvětlit, proč byly implementovány dva buffery. Důvodem je skutečnost, že v některých protokolech
se při delším stisknutí tlačítka místo opakování stejného telegramu odesílá speciální značka. Kdyby byl k dispozici
pouze jeden buffer, bylo by velmi obtížné tuto speciální značku zachytit.
*UPDATE

Význam tohoto příkazu je zřejmý - použije se při případném upgradu firmware Egona. Na obrázku je vidět
reakce Egona. Znaky pod řetězcem "Update firmware ..." se objeví v době, kdy již běží bootloader a čeká
na AVRprog. Po zadání tohoto příkazu je samozřejmě třeba rychle ukončit komunikační program (aby se uvolnil port)
a spustit AVRprog. Pokud se AVRprog s bootloaderem nespojí do asi 10 sekund, bootloader vrátí řízení firmwaru
Egona (proběhne reset procesoru).
Podrobnější informace o bootloaderu můžete najít na mých stránkách o programátoru biprog.
*ASCII1 a *ASCII0
Dvojice příkazů *ASCII1 a *ASCII0 je první z řady čtyř (dvojic) konfiguračních příkazů. Nedemonstruji ji
na žádném obrázku. Je-li parametr ASCII vypnut (po *ASCII0), posílá Egon všechny identifikátory, obsahy
bufferů i obsah EEPROM v binární podobě. To je ovšem formát, který není vhodný pro zobrazování. Pro některé
programy (například Girder) to však může být výhodnější. Pro EventGhost je třeba mít parametr ASCII zapnutý.
Na dalších obrázcích si povšimněte, že po každém konfiguračním příkazu vypíše Egon aktuální stav konfigurace.
*SPACE1 a *SPACE0

Tento příkaz má smysl pouze v případě, že parametr ASCII je zapnutý. Dává uživateli možnost vkládat mezi
jednotlivé byty identifikátorů apod. oddělovací mezery. Někomu tento způsob vyhovuje, protože je přehlednější.
V "ostrém" provozu (například s programem EventGhost) však je vhodnější mít parametr SPACE vypnutý.
*RAW1 a *RAW0

Parametr RAW a dvojice příkazů k jeho nastavování má význam, který je zřejmý z obrázku. Pokud ho zapneme,
začne Egon odesílat do PC i nerozpoznané telegramy. Formát je shodný s formátem, popsaným výše v části o příkazu
*BUFFER. Aby se RAW formát dal snadněji odlišit od běžných indikátorů, je před údaj o počtu bytů telegramu zařazen
ještě byt "FF" (v desítkové soustavě 255).
*SUPPRESS1 a *SUPPRESS0

Posledním parametrem je SUPPRESS. Slouží k potlačení výpisu krátkých rušivých signálů. Má samozřejmě význam pouze
v případě, že je zapnutý i parametr RAW. V opačném případě na nastavení parametru SUPPRESS nezáleží. Na obrázku
je vidět, že při vypnutém parametru SUPPRESS (je vypnuto potlačování rušení) se ve výpisu objevují i velmi krátké
telegramy o délce pouhého jednoho burstu (mezera v tomto případě samozřejmě není žádná).
O programu EventGhost
Podle mého názoru je EventGhost unikátní software. Je primárně určen k dálkovému ovládání počítače, ale může sloužit
i ke zcela jiným účelům. Jeho vyjímečnost (ve své kategorii) spočívá v tom, že pomocí skriptů v jazyce Python lze
programu doplnit téměř libovolnou funkci.
Nastavení EventGhostu pro spolupráci s Egonem

Po spuštění programu je třeba nejprve do konfiguračního stromu vložit plugin Sériový port.
Po klepnutí na ikonu (nebo výběrem z nabídky Editovat - Vložit Plugin ...) se objeví následující okno:

Vložení pluginu provedeme klepnutím na položku Sériový port a potvrzením pomocí tlačítka OK. Objeví se tento dialog:

Políčka vyplníme podle předlohy. Místo znaku "*" je možné jako prefix události použít vcelku libovolné slovo.
Doporučuji ovšem nějaké krátké. Velice vhodným prefixem je třeba "Egon".
Položku "Port" je samozřejmě nutné vyplnit podle nastavení VCP ovladače převodníku FT232RL.
Jakmile jsou všechny položky správně nastaveny, je třeba celý dialog ukončit potvrzením tlačítkem OK. Od tohoto
okamžiku už by EventGhost měl přijímat povely od dálkového ovladače. Je samozřejmě nutné aplikaci EventGhost
detailně nakonfigurovat, ale to už je příliš rozsáhlé téma a sem nepatří.
Pro download souborů použijte pravé tlačítko myši a v nabídce vyberte "Uložit cíl jako ...".
Statistika návštěvnosti od 7. 3. 2007
biprog - ISP programátor procesorů Atmel
Bootloader pro ATmega8
Deska patic a zdroj pro "ISP" programování
Programátor AT-master
Programátor TSP-IC
Jakékoliv ohlasy a otázky pište prosím na adresu: lubos.ruckl@quick.cz
Aktualizováno 8. 3. 2007