Univerzální IR dálkový ovladač řízený RS232C.

Tento článek by měl pomoci řešit situaci, jak ovládat pomocí PC různá zařízení ovládaná IR. Snažil jsem se celý problém vyřešit tak, aby bylo možné ovládat co největší možný počet zařízení. Tedy celý ovladač je schopen vysílat na 30,33,36,38,40 a 56kHz a je vybaven dvěma IR LED, pro dvě různé vlnové délky IR světla. Jistě není od věci ani to, že tento článek může začátečníkům s PIC16F627 dát odpověď na to, jak komunikovat sériově mezi PIC a PC. Neberte článek jako jediné možné řešení ani jako dokonale propracovaný systém, ale jako inspiraci, jak na to. Neznamená to ale, že by se systém jak je nedal přímo používat bez jakýchkoli změn či úprav, tedy je funkční.

Schéma


Ze schématu je jasné, že jde jen o převedení úrovní RS232C na CMOS a opačně a zpracování sériové komunikace pomocí PIC16F627, tedy laciným jednochipem. Co se týče rízení toku, není použito žádné, tedy je ošetřeno zapojení portu tak, aby i při hradwarovém řízení toku bylo toto eliminováno. Pro kontrolu, že zařízení pracuje, je k PIC připojena jedna 2mA LED, kterou jsem využil tak, že vždy při vyslání IR sekvence LED blikne, tedy dává jistou kontrolu, zda zařízení pracuje. Dále jsou k PIC připojeny přes tranzistor dvě IR LED o různých délkách IR světla, kterými PIC vysílá sekvence pro ovládání zařízení jako televize, věže, videa, IR vypínače světel a v neposlední řadě pro zkoušení vlastních konstrukcí IR přijímačů. Napájení je řešeno externě, tedy přes stabilizátor 78L05, protože trochu slušný proud IR LED už by samotný COM port nedodal. Jistě jsem mohl použít USB port a napájet zařízení z něj. Při použití FT8U232AM s konfigurační pamětí a nastavením v ní alespoň 100mA pro zařízení by to také nebyl problém a ubylo by napájení, bál jsem se ale, že začátečníci nebudou mít příliš chuť pájet SMD a tak jsem konstrukci udělal co nejjednodužší a pokročilý elektronik si jistě převodník mezi RS232C a USB lehce doplní čímž se zbaví externího napájení. Můj dojem je takový, že zběhlí elektronici nedělají prakticky nic přesně podle návodu a hledají jen inspiraci a tak se snažím o to, aby v tom byla i alespoň drobná inspirace a hlavně maximální jednoduchost pro začínající, kteří potřebují pomoci jistě nejvíce.

Deska plošných spojů.

Klikněte ZDE pro obrázek.

Deska je v rozlišení 300dpi a tedy stačí vytisknout na tiskárně pixel na pixel v rozlišení 300dpi a získáte předlohu 1:1. Deska je zobrazena ze strany spojů.

Osazení.

Klikněte ZDE pro obrázek.

Osazení je zakresleno ze strany součástek.

Program pro PIC16F627.

Jednochip, tedy PIC16F627 je potřeba naprogramovat. Zde si můžete stáhnout jak zdrojový kód, tak HEX soubor, který je nutné vypálit do PIC. Jde o kus kódu v prvotní verzi, tedy není jistě nijak optimální co se velikosti výsledného kódu týče, tak z hlediska čistoty stylu programování. Program je psán s využitím časování pomocí doby trvání provádění instrukcí a sériová komunikace je nastavena jako 9600BPS 8N1. V případě chyby mne prosím informujte. Byla zveřejněna takto ranná verze, protože ji kamarád už potřeboval využít a protože je použitý jednochip s pamětí FLASH, není žádný problém si později program upgradovat za novější, kdyby se vyskytly nedostatky. I z toho důvodu si PIC osaďte do patice.


ir_com.asm


ir_com.hex

Jak to použít.

Celé vysílání je řízeno ve stylu jako AT příkazy u modemu. Příkazy jsou:

IR30 Vyšli sekvenci 30kHz.
IR33 Vyšli sekvenci 33kHz.
IR36 Vyšli sekvenci 36kHz.
IR38 Vyšli sekvenci 38kHz.
IR40 Vyšli sekvenci 40kHz.
IR56 Vyšli sekvenci 56kHz.

Příklad pak může být např. IR36+0A0B20 a znak #13, tedy ENTER. Znak 10 se ignoruje, tedy můžete, ale nemusíte jej na konec řádku k odeslání použít. Výpis čísel za + jsou hexadecimální čísla, která fungují tak, že určují vždy počet period signálu na danné frekvenci a následující číslo dobu pausy, odpovídající počtu period na danné frekvenci. Protože jedna perioda nemá valný význam, udává jednotka 2 periody, tedy 01 vyšle 2 periody, 02 čtyři atd. Totéž platí pro pausu. Číslo 00 nemá význam a tak se pro nulu vysílá 512 period (nebo pauza). Periody a pauza jdou vždy střídavě a všechna čísla je potřeba udat dvoumístně. Dvojice cifer lze i oddělovat mezerami. Tedy IR36+0105070420 vyšle 2 peridy, pak pauza na dobu 10 period, dále 14 period vyšle, 8 period nevysílá a nakonec 64 period vyšle (20 hexadecimálně). Poté vrátí do sériového portu OK. Pokud není příkaz pochopen, nebo je lichý počet čísel, mezera v dvouciferném hexadecimálním čísle, nebo jiná chyba, chip vrátí do sériového portu ERROR. Pokud je příkaz pochopen a sekvence odeslána, je během jejího odesílání rozsvícena LED (tedy vlastně blikne). Maximální délka sekvence je 220 bajtů, tedy je možno odeslat nejdelší sekvenci ohledně zápisu do portu jako posloupnost 220 dvoumístných hexadecimálních čísel.

Sekvence lze odesílat jakýmkoli programem pro ovládání sériového portu, tedy nejste nijak vázáni na používání jednoho určitého softu, ale lze použít různé terminály, či si naplánovat odesílání do COM portu v určitých časech a ovládat tak z PC zařízení automaticky.

Licence a záruky.

Materiály jsou Vám pro nekomerční použití k dispozici volně, další publikování a komerční využití jen se souhlasem autora. Autor neručí za jakékoli škody způsobené využitím těchto materiálů.

Autor: Jiří Bezstarosti