Čeština / English
Login

Návody / Přijímač/vysílač dálkového ovládání

Autor: Michal Růžek ()

Abstrakt: Článek popisuje komunikační protokoly používané v dálkových ovladačích spotřební elektroniky. Pomocí jednoduchého rozšiřujícího modulu lze přes FITkit ovládat jiná zařízení a dekódovat příchozí signál z ovladače.

Update: 20100513

1. Popis protokolů

Jako světelné zdroje se v dálkových ovladačích používají luminiscenční diody infra-LED, emitující paprsek záření o vlnové délce kolem 950nm. Jelikož při posílání informace způsobem log.1 = "infra-LED svítí", log.0 = "nesvítí" by bylo obtížné zajistit bezchybný přenos datového rámce z důvodu vysokého rušení (zdrojem takového infračerveného záření je i slunce či obyčejná žárovka), využívá se modulace.

Při modulaci logickou úrovní 1 se infra-LED budí obdélníkovým nosným signálem o dané střídě a frekvenci, typicky mezi 30-56kHz. Tento stav se nazývá značka (ang. mark). Po dobu logické úrovně 0 není dioda aktivní, nastala mezera (ang. space). Dobu trvání značky a mezery, stejně tak jako jejich význam specifikuje použitý protokol. V klidu, tj. když neprobíhá přenos rámce, setrvává vysílač ve stavu log.0. Přijímač signálu je nastaven na použitý nosný kmitočet. Tím, že ostatní kmitočty odfiltruje, účinně zamezuje možnému rušení okolním světlem.

1.1. Philips RC5

Mezi nejznámější protokoly patří RC5, původně vyvinutý firmou Philips. Datový rámec protokolu se skládá z celkem 14 bitů, jež jsou vyslány v tomto pořadí:

  • 2 start-bity (zahájení komunikace)

  • toggle bit (zabezpečovací mechanismus)

  • 5 bitů pro adresaci zařízení (televizní přijímač, videorekordér, satelit ...)

  • 6 bitů vyhrazených pro příkaz (změna hlasitosti, přepnutí kanálu, atp.)

Oba start-bity jsou vždy logické úrovně 1 a kromě indikace začátku datového rámce podle nich přijímač automaticky dolaďuje zisk a citlivost na příchozí infračervený signál (ang. AGC = Automatic Gain Control).

Hodnota toggle (čes. překlápěcího) bitu se při každém novém stisku klávesy mění na opačnou. Díky němu lze na přijímací straně rozlišit mezi trvale stisknutým tlačítkem a jednotlivými stisky po sobě. Pokud je například trvale držena číslice 1 na dálkovém ovladači televizního přijímače, nedojde ani po vložení a následném odstranění překážky v cestě IR paprsku k přepnutí na jedenáctý kanál.

Následují bity reprezentující adresu zařízení a kód příkazu, přičemž v obou případech se nejvýznamnější bit (MSB) vysílá jako první.

RC kódování manchester

Obrázek 1.1: Manchester kódování, převzato z [1]_

Protokol RC5 pracuje na nosné frekvenci 36kHz a pro odesílání dat se používá kódování Manchester. Toto kódování, někdy též zvané jako bifázová modulace, spojuje datový signál se synchronizačním. Bitový interval je rozdělen na dvě stejně velké části a doprostřed intervalu je vložena změna signálu. Hodnota bitu je pak dána směrem hrany signálové změny. Pro RC5 je bit o log.0 definován změnou ze značky na mezeru, opačně pak pro logickou 1, viz obrázek výše. Bitový interval má konstantní délku rovnou 64 periodám nosného kmitočtu, tedy 64 / 36kHz = 1778us. Odtud platí, že odeslání všech 14-ti bitových intervalů potrvá 14 x 1778us = 25ms. Doba značky či mezery je složena z 32 period nosné, tj. 889us.

rámec RC5 protokolu

Obrázek 1.2: Rámec protokolu RC5, převzato z [1]_

Rámec bude opakovaně vysílán, dokud bude drženo tlačítko na dálkovém ovladači. Perioda opakování, počítáme-li jí jako čas mezi začátky obou rámců, odpovídá době odeslání 64 bitů, čili 113,7ms. Pro připomenutí, hodnota toggle bitu se v průběhu opakovaného vysílaní téhož rámce nemění.

RC5X

Šestibitová hodnota příkazu v protokolu RC5 se časem ukázala jako nedostačující, což vedlo k přidání dalšího bitu a zvýšení počtu možných příkazů na 128. Přidaný sedmý bit nahrazuje druhý start-bit, navíc je jeho hodnota invertována. Inverze zaručuje zpětnou kompatibilitu s původním protokolem RC5: pro příkazy 0-63 bude negovaný sedmý bit roven logické 1 a zařízení vybavené starším standardem RC5 jej proto bude chápat jako obyčejný start-bit. Rozšířenému protokolu se dostalo názvu RC5X, z anglického Extended RC5.

1.2. NEC

Tento protokol, vytvořený společností NEC Electronics, je používán ve spotřební elektronice většiny japonských výrobců, například Pioneer, Onkyo, Hitachi, NEC, Teac, či Yamaha. Mezi jeho přednosti patří možnost kontroly dat proti chybám a také adresování až cca 65000 zařízení v rozšířeném módu.

NEC modulace

Obrázek 1.3: NEC - pulzně poziční modulace

Protokol operuje na nosné frekvenci 38kHz a pro kódování bitů se používá pulzně poziční modulace. Pulzy jsou při této modulaci vždy stejně dlouhé, a to 560us. Hodnota bitu je potom definována dobou mezi začátky těchto dvou pulzů. Pro logickou hodnotu 1 činí tato doba 2,25ms, pro logickou 0 přesně polovinu, tedy 1,125ms.

Datový rámec protokolu NEC lze rozdělit na 3 hlavní části:

  • hlavička, ang. leader code,

  • část pro adresu zařízení nebo kód výrobce, zvaná též custom code,

  • datová část obsahující ovládací příkaz.

Hlavička protokolu vždy začíná 9ms značkou následovanou mezerou. Délka mezery rozlišuje typ rámce. Novější specifikace protokolu totiž umožňuje vyslání jednoho celého rámce a poté, v případě, že je tlačítko stále stisklé, se vysílá pouze krátká informace o opakování předchozího rámce. Tato vlastnost, v anglické dokumentaci označovaná jako one-shot transmission mode, snižuje spotřebu energie až o jednu třetinu. Taktéž se s její pomocí dá rozpoznat trvalý stisk tlačítka a opakovaný stisk. Bude-li tedy doba výše zmíněné mezery rovna 2,25ms, jedná se o opakovací kód a kromě 560us značky ukončující tuto mezeru se další data nevyšlou. Doba 4,5ms naopak signalizuje, že hlavička bude následována zbývajícími 32 bity rámce. Doba k opětovnému vyslání rámce, příp. opakovacího kódu činí 108ms.

NEC opakovací sekvence

Obrázek 1.4: Jeden datový rámec NEC a opakovací sekvence, převzato z [3]_

Blok adresy se skládá z 16 bitů, kódovaných podle uvedené modulace. Jako první se odesílá nejméně platný bit (LSB). V původní verzi protokolu obsahoval nižší byte adresu cílového zařízení, ve vyšším byla uložena její invertovaná podoba využitá při kontrole při příjmu. Novější specifikace dovoluje adresu rozšířit na celých 16 bitů. Připravíme se tak sice o možnost kontroly správnosti, výrazně ale vzroste počet možných adres.

rámec protokolu NEC

Obrázek 1.5: Datový rámec protokolu NEC, převzato z [2]_

Podobně jako předchozí část, i část pro příkaz obsahuje 16 bitů a jako první se vysílá nejméně platný bit. Zde ovšem zůstala zachována redundance v podobě negované informace v horním bytu. Počet příkazů tedy dosahuje maximálně 256 možných variant. Horní negovaný byte bude využit po přijetí rámce k ověření validity dat.

1.3. Sony SIRC

Mezi poslední představitele rozšířenějších komunikačních protokolů patří SIRC (Serial Infra-Red Control) od japonské firmy Sony. Přenášená data jsou kódována pulzně šířkovou modulací a následně vysílána na nosné frekvenci 40kHz. Hodnota bitů se při této modulaci rozlišuje délkou trvání značky. Značka o délce 1,2ms představuje logickou jedničku. Logická nula trvá poloviční dobu, 600us. Značky od sebe odděluje mezera s konstantní dobou 600us.

rámec protokolu SIRC

Obrázek 1.6: 12-ti bitový rámec protokolu SIRC, převzato z [4]_

Začátek rámce tvoří úvodní 2,4ms trvající značka, po níž následuje 600us mezera a pak již vlastní data, přičemž jednotlivé části jsou vysílány od nejméně významného bitu. Postupným vývojem vznikly 3 varianty tohoto protokolu, lišící se však pouze počtem bitů:

  • 12-ti bitová verze odesílá 7-mi bitový příkaz, poté 5-ti bitovou adresu zařízení,

  • 15-ti bitová varianta pouze rozšiřuje adresu na 8 bitů,

  • 20-ti bitový protokol vychází z 12-ti bitového, za adresovou část navíc připojuje osmibitová rozšířující (ang. extended) data.

Rámec je periodicky vysílán, dokud je drženo tlačítko na ovladači. Doba, za kterou dojde k opakovanému vyslání, se rovná 45ms od začátku rámce.

2. Rozšiřující modul

HW přípravek obsahující přijímací a vysílací část je připojen ke konektoru JP10, na FITkitu se nachází úplně dole. Situaci poněkud komplikuje fakt, že prvních 6 vývodů X0-X5 je použito k interním účelům, například X0 funguje jako výstup z řadiče přerušení. Prvním pinem, který lze využít pro vlastní účely, pin X6. Kolíky číslo 11 a 12 nejsou u FITkitu verze 2.0 zapojeny, díky tomu se pin X6 posouvá až na kolík 13, na kterém je ve verzi 1.2 připojen bod X8. Při použití jiné verze FITkitu je proto důležité správně upravit názvy pinů v kódu top_level.vhd.

konektor na FITkitu

Obrázek 2.1: Konektor JP10 a popis důležitých pinů

Z obrázku je patrné, že napětí +5V včetně nulového bodu GND, potřebné pro napájení přijímače TSOP a vysílací infra-LED se nachází ve spodní řadě za sebou. Pro připojení přípravku tedy vystačíme s jednořadou dutinkovou lištou, začínající na levé straně spodní poloviny konektoru. Využijeme lištu o délce deseti dutinek, která se běžně vyrábí.

2.1. Schéma zapojení

K příjmu signálu všech tří frekvencí (36kHz, 38kHz, 40kHz) postačí integrovaný přijímač s nosným kmitočtem 40kHz, tedy TSOP1740. Pomalejší kmitočty totiž dle katalogového listu splňují pravidlo minimální délky trvání pulzu (10 period nosné) a proto budou přijímačem bezchybně dekódovány.

schéma zapojení přípravku

Obrázek 2.2: Schéma zapojení přípravku

Kondenzátor C1 a rezistor R3 společně tvoří filtr, který potlačuje rušení vzniklé v rozvodu napájecího napětí a které by jinak nepříznivě ovlivnilo spolehlivou činnost přijímače. Vysílací část tvoří tranzistor T1 v zapojení se společným emitorem, v jehož kolektorovém obvodu je připojená infračervená LED1 s vlnovou délkou 950nm. Rezistor R1 omezuje proud tekoucí infra-LED a pomocí něho lze měnit vyzářený světelný výkon diody. Pro správnou funkci přípravku je nutné u starší verze FITkitu propojit výstup z přerušení FPGA s mikrokontrolérem. Přerušení je vyvedeno na pin X0 a protože použitá dutinková lišta SV1 tento pin zakrývá, je nutné jej vyvést na desku HW přípravku (JP1) a následně tento nový kolík propojit drátem s vývodem 26 na konektoru JP9. Při použití nového FITkitu verze 2.0 slouží k tomuto spojení propojka J5, zmíněný drát není nutné připojovat.

deska plošných spojů

Obrázek 2.3: DPS - pohled ze strany spojů a osazení

hotovy prirpavek

Obrázek 2.4: Hotový přípravek připojený k FITkitu

2.2. Seznam součástek

Ozn.

Součástka

JP1

pin S1G01

SV1

dutinková lišta BLW810G

R1

22R

R2

4k7

R3

100R

C1

4,7uF/16V

LED1

LD274-3

T1

BC337-40

IR1

TSOP1740

Tabulka : Seznam součástek

3. Komunikační knihovna

Pro korektní funkci knihovny infra_comm je nutné mít správně nastavenu bázovou adresu SPI řadiče a přiřazeny offsety k použitým transceiverům. Výchozí hodnota bázové adresy INFRA_BASE_ADDR se rovná 90h. Knihovna předpokládá použití pouze jednoho SPI dekodéru pro všechny transceivery. Konkrétní transceiver se vybírá prostřednictvím nejnižších bitů adresy, která se získá součtem patřičného offsetu s bázovou adresou. Pokud například požaduji aplikaci pouze s transceiverem protokolu RC5X, nastavím konstantu IR_RC5_OFFSET na hodnotu 0, transceiver tak bude přístupný přímo přes bázovou adresu. K různým aplikacím se může hodit různá velikost přijímací či vysílací fronty, jejich implicitní pětimístnou velikost lze upravit změnou konstant IR_RX_BUF_LEN a IR_RX_BUF_LEN.

Počáteční inicializaci knihovny zajišťuje procedura infra_init(), která uvede interní proměnné do výchozího stavu. Test na prázdnost některé z front realizují funkce infra_rx_empty() a infra_tx_empty(). V některých situacích se může hodit i kontrola, zda jsou vysílací části transceiverů v klidovém stavu, k tomuto účelu slouží funkce infra_no_tx_transmit().

Následující rutiny se používají k vlastnímu přenosu dat. Procedura infra_rx_interrupt_handler(unsigned char proto_type) přečte v obsluze přerušení data z FPGA a uloží je do přijímacího bufferu. Parametr proto_type přitom určuje typ protokolu, a může nabývat těchto hodnot:

  • IR_RC5,

  • IR_NEC_NORM,

  • IR_SIRC_12B,

  • IR_SIRC_15B,

  • IR_SIRC_20B.

Pomocí typu se určuje offset, který bude připočten k bázové adrese. Ke čtení položky z bufferu slouží funkce infra_read(unsigned char *proto, unsigned char *data). Parametry jsou předávány odkazem, do prvního funkce uloží typ protokolu a do druhého se nahrají data z bufferu. Druhý parametr musí být typu pole o délce 3 byty. Data jsou v poli zarovnána způsobem, kde je spodní byte z FPGA uložen do prvku s indexem 2, zatímco horní byte do prvku s nejnižším indexem, tj. 0. Po provedení této rutiny se přečtená položka z bufferu automaticky odstraní. Návratová hodnota funkce je při úspěšném čtení rovna jedné, jinak nula. Funkce infra_send(unsigned char proto, unsigned char *data) slouží k zápisu dat do bufferu a k jejich odvysílání. Její parametry se prakticky shodují s výše uvedenými, pouze k typu protokolu přibyla možnost IR_NEC_REPEAT, při jejímž zvolení se místo klasického rámce NEC posílá rámec opakovací.

Ke správné činnosti algoritmu je zapotřebí do obsluhy přerušení přidat také volání funkce infra_tx_interrupt_handler(), které bude vykonáno po obdržení přerušení informující mikrokontrolér o navrácení vysílačů do klidového stavu. Díky této funkci následně dojde k automatickému odvysílání další položky z fronty.


Zobrazeno: 4139x Naposledy: 20.9.2017 11:52:06