Elektronika pro Linux aneb admin s páječkou v ruce

4. 6. 2009
Doba čtení: 8 minut

Sdílet

V Linuxu je možné většinou poměrně jednoduše spojit skriptovacími jazyky funkcionalitu různých programů a udělat si jednoduchou aplikaci na míru. Pojďme tento koncept rozšířit i do fyzického světa v nejbližším okolí našeho počítače. Pokud se nebojíte vzít do ruky páječku, můžete si hrát s námi.

Úvod

V Linuxu jde většinou poměrně jednoduše spojit skriptovacími jazyky funkcionalitu různých programů a udělat si jednoduchou aplikaci na míru. Pojďme tento koncept rozšířit i do fyzického světa v nejbližším okolí našeho počítače.

V tomto seriálu si ukážeme, jak připojit nejrůznější TESTICEK praktické (i méně praktické) věci k počítači a jak je ovládat z Linuxu. Začnu nejjednodušší možnou elektronikou, aby si to mohl zkusit opravdu každý, ale pájet bude nutné. Nejjednodušší je použít paralelní port, který je na téměř všech starších počítačích architektur i386 a x86_64.

Autor ani redakce nenesou zodpovědnost za žádné škody vzniklé při pokusech o vlastní realizaci zde umístěných návodů.

Základy bezpečnosti pro operátora

Návody budou pracovat s malým napětím (3.3V, 5V, 12V, 24V), které je zpravidla bezpečné. Kontakty většiny relé umí spínat i běžné síťové napětí 230V a některé aplikace k tomu budou svádět. Rozmyslete si dobře, zda-li máte dostatečné znalosti a zkušenosti na realizaci zapojení se síťovým napětím.

Nakonec stačí, když (velmi jednoduchý) 230V okruh shlédne elektrikář, či někdo v tomto směru zkušenější. Život máme každý jen jeden.

Návody také počítají s tím, že zdroj tohoto malého napětí je malý akumulátor, laboratorní zdroj, adaptér od notebooku/tis­kárny/walkmana nebo zdroj počítače. Pokud byste chtěli použít třeba olověnou autobaterii, či jiný zdroj schopný dodat mnoho desítek až stovek ampér, rozmyslete si opět, zda víte, co děláte. Zkratovaná baterie může člověka zle pokousat. Třeba takový zlatý náramek o teplotě 600 stupňů Celsia nepatří k nejpříjemnějším zážitkům, má-li ho zrovna někdo na ruce. Prstýnek nebo řetízek také.

Minimálně by na takto velké baterii měla být vhodná pojistka (třeba 2A, nebo 3.15A), která při zkratu shoří a ochrání obvod, jeho přívodní kabely (aby červeně nesvítily a nezapálily nic okolo) a obsluhu. Pojistkou je vhodné jistit všechny zdroje (některé mají elektronickou pojistku již v sobě), ale u malých zdrojů člověk riskuje spíše ztrátu zdroje a svého pracně ubastleného zařízení.

Pájení je činnost poměrně jednoduchá, ale zachází se při něm s páječkou rozžhavenou na nějakých 230 – 400 stupňů Celsia a pájkou (slangově cínem – jde zpravidla o směs cínu a olova 60:40, nebo její špatné bezolovnaté náhražky) rozžhavenou na tutéž teplotu. Asi je zbytečné říkat, že na kůži je to docela nepříjemné. Pokud vám to hned na začátku nepůjde, nevěšte hlavu, člověk se v tom postupně zlepšuje. Nakonec jednoduchý kabel vám může spájet kamarád a pak můžete pokračovat na nepájivém kontaktním poli.

Přečtěte si návod, jak pájet pistolovou páječkou a jak odporovou.

Základy bezpečnosti pro počítač

Porty počítače dají zpravidla jen malý proud (jednotky miliampér) a nemusí být zkratuvzdorné. Porty USB na napájecích linkách dají až 500mA (podle specifikace), resp 2–3A (v reálu bývají často propojeny natvrdo na 5V linku napájecího zdroje). Zkrat jakýchkoliv portů může způsobit zamrznutí počítače, nebo jeho (částečné) zničení. Přivedení vnějšího napětí mimo provozní rozsah portu (třeba +12V na paralelní port, který funguje od 0V do +5V, nebo 230V na sériový port, který funguje od –12V do +12V) může zničit port i celý počítač (těch 230V dokáže rozervat pouzdra čipů, odpařit odpory a vypálit cesty na plošném spoji).

Je tedy vhodné porty nějakým způsobem oddělit od experimentálního obvodu, ve kterém se pracuje s jinými napětími (třeba levnými čipy, nebo opticky) a dávat si pozor na to, kam vede který drát.

Začít se starou 486 nebo Pentiem 100MHz také nemusí být špatný nápad. Návod na oddělení bude samozřejmě jeden z prvních.

Jak to funguje

Poté, co jsem vás trochu vystrašil, snížil mortalitu budoucích experimentátorů na nulu (doufám) a zajistil si, že mě nikdo nebude žalovat (také doufám), se můžeme pustit do další části – totiž jak tu elektroniku budeme vlastně ovládat „zevnitř“ počítače.

Procesory jsou již od počátku věků vybaveny na to, aby ovládaly nějakou elektroniku venku, jenomže ta elektronika je dnes na základní desce od výrobce a vše se snaží vypadat, jako by s tou krabici nic víc dělat nešlo. Část procesorů používá speciální IO instrukce (Input Output, neboli vstupně-výstupní) – třeba i386. Jiné mapují IO do paměťového prostoru. Dále podporují přerušení (vyvolání nějakého obslužného programu na požadavek nějakého kusu HW – anglicky interrupt) a DMA (Direct Memory Access – přímý přístup do paměti), ke kterým se v Linuxu mimo jádro jednoduše nedostaneme. Vzhledem k tomu, že je škoda odpálit při experimentech desku s CPU Alpha, SPARC, MIPS, nebo jiný pořádný kus HW, začneme s architekturou i386 (a x86_64).

Typické staré PC, které můžeme dostat (skoro) zadarmo, má poměrně dost portů a sběrnic, které můžeme využít. Většina z nich je i na nových počítačích, takže zařízení po odladění zůstává použitelné. Takže si musíme vybrat vhodný port a sehnat k němu protikus.

Elektro pro LinuxElektro pro Linux

Nejjednodušší je paralelní port. Původně byl určen pro připojení tiskárny, ale protože má 12 digitálních výstupů a 5 digitálních vstupů (v nejzákladnější verzi), které jdou nezávisle na sobě číst a zapisovat, lze k němu připojit skoro cokoliv. Jeho podstatnou nevýhodou je, že neobsahuje vyvedené napájecí napětí. Dříve se to řešilo odběrem napájení z portu klávesnice, nebo gameportu, dnes bych za nejjednodušší považoval použití napájecích linek portu USB, nebo přímo z konektorů pro napájení harddisku a mechanik (dobrá volba u starého experimentálního stroje, který USB ani nemá).

Paralelní port pracuje s úrovněmi TTL (Transistor Transistor Logic – nejběžnější logické obvody), tedy 0V a +5V (více detailů na Wikipedii nebo v článku Paralelní port a rozhraní Centronics.)

Téměř všechny počítače včetně osmibitů a velkých serverů obsahují sériový port RS232. Ten má na rozdíl od paralelního portu pevně daný protokol a připojování jednoduché elektroniky se stává složitějším. Někdy to lze obejít nestandardním využitím některých signalizačních linek, ale jeho skutečný potenciál se rozvine teprve v kombinaci s jednočipovým mikroprocesorem, který v sobě obsahuje UART (obvod pro komunikaci po sériovém portu), ke kterým se dostaneme později. Tento port naneštěstí také neobsahuje napájení.

Dále čtěte články:

Nové počítače obsahují často port USB. Jeho protokol je poměrně dost komplikovaný (i když některé mikroprocesory ho zvládají), ale lze převodníkem snadno převést na rychlý sériový port. Existují i převodníky na paralelní port, ale s těmi nemám žádné zkušenosti a očekávám, že ovládání jednotlivých vývodů portu bude velmi náročné na výpočetní výkon a neefektivní.

Dále čtěte články:

Další porty, jako gameport nebo port ps/2 pravděpodobně vynecháme, neboť se z počítačů postupně vytrácejí a oproti paralelnímu portu nepřinášejí téměř žádné výhody.

A jak

Začneme tedy paralelním portem. O ten je třeba jádro požádat (jako root) voláním ioperm().

    int err;
    err = ioperm(port_base, 3, 1);
    if (err)
            perror("ioperm");
    return err; 

Poté funkcemi inb a outb ovládáme jeho stav, skoro jako by se jednalo o normální proměnnou.

    x=inb(port_base+1);
     outb(x, port_base); 

Na paralelní port existuje také driver (kernelový modul) ppdev, ale ten nepoužijeme ze dvou důvodů:

  • Přímý přístup je jednodušší a všechny mé zkušenosti jsou s přímým přístupem.
  • Na čisté řešení problémů se vyplatí obětovat 32 Kč za mikroprocesor Atmega8, nebo podobný, a zapojit zařízení na sériový port, který je na mnohem více počítačích, než port paralelní. Navíc při použití USB redukce místo nativního portu by neměly nastat žádné problémy.

Paralelní port je 25-pin Centronics konektor na základní desce (ATX), kabelu ze základní desky, přídavné kartě portu (PCI, ISA, VL-BUS, EISA), nebo grafické kartě MDA/Hercules (8-bit ISA).

Zevnitř je to trojice registrů na IO adresách 0×378–0×37A, nebo 0×278–0×27A (případně 0×3bc-0×3be na kartě MDA/Hercules, nebo někde úplně jinde na speciálních kartách). Některé z těchto portů (všechny na základních deskách někdy od dob prvních Pentií a asi i všechny na PCI kartách) mají i rozšířené režimy a více registrů. Tyto rozšířené režimy se zpravidla musí povolit v BIOSu a je nutné je také softwarově zapnout. Zatím se jimi nebudeme zabývat, základní režim nám bohatě vystačí na mnoho zajímavých aplikací. Na základní adrese (0×378, 0×278, nebo 0×3bc) je osm výstupů. Vše, co je do nich zapsáno, se objeví na pinech D0-D7 portu (vývody 2 až 9). O jedna výše je vstupní port – čte hodnoty pěti vstupů. Bit 3 = not(Pin 15), Bit 4 = Pin 13, Bit 5 = Pin 12, Bit 6 = not(Pin 10), Bit 7 = Pin 11, ostatní bity jsou nepodstatné, myslím, že na většině počítačů mají hodnotu „1“.

Dvě adresy nad základní jsou ještě 4 výstupy. Pin 1 = not(Bit 0), Pin 14 = not(Bit 1), Pin 16 = not(Bit 2), Pin 17 = Bit 3. Ostatní bity se opět ignorují.

Elektro pro Linux

 Čtěte článek Rozšířené režimy paralelního portu podle IEEE 1284

Co k němu tedy lze připojit? Mechanicky samozřejmě správný protikus, který je k dostání za pár korun v obchodu s elektronickými součástkami. Elektricky pak logické obvody TTL (řada 7400) a obvody analogové pracující s jeho výstupními napětími 0V a 5V (tak nějak přibližně – podle výrobce třeba 0.7V a 3.4V – je dobře si to zkontrolovat – už jsem viděl i porty, které nepracovaly korektně ani s obvody TTL).

Konektor koupíte v mnoha různých obchodech.

Půjdete-li koupit ten konektor, má smysl vzít i pár LED (svítivých diod), odporů 1k, 330ohm, několik nejlevnějších NPN tranzistorů (BC547) a kus univerzálního, nebo obyčejného plošňáku (měď jde rozřezat na plošky pilníkem, nebo pilkou na železo).

Elektro pro Linux

Dále je vhodné mít páječku (klidně obyčejnou pistolovou transformátorovou), pájku (ten tenký drátek, kterému všichni říkají cín) a kalafunu (ta na prase je úplně stejná, jako ta na pájení, jen ve větším balení a bez speciálního plechového kalíšku, který snadno nahradí korunka od piva nebo víčko od zavařovačky, jak je vidět na obrázku).

Elektro pro Linux
Elektro pro Linux

S výjimkou nejjednodušších konstrukcí je pohodlnější použít desku s ploškami a dírami v rastru 2.54mm (1/10 palce – běžná rozteč nožiček integrovaných obvodů), nebo nepájivé kontakní pole, se kterým se pracuje rychleji, ale zase není úplně praktické pro konstrukce trvalejšího charakteru.

bitcoin_skoleni

Součástky (hlavně ty větší) lze k desce různými způsoby fixovat. Rozhodně nedoporučuji na ty, které budou více topit, používat gluegun. Není-li možné (dostatečně pohodlně) součástku přišroubovat, preferuji montážní silikon (skrz průhledný je vidět, co je uvnitř). Některé hřející součástky musí být upevněny na chladič (výkonové tranzistory a podobně), k čemuž je prakticky nutné použít šroubovaný spoj.

Elektro pro Linux

No a příště se pustíme do prvního zapojení.