Možná jste někdy přemýšleli nad tím, jak přes počítač něco ovládat. Jedním z řešení je využít paralelní LPT port (port tiskárny). V dnešním článku si ukážeme, kolik signálů máme k dispozici a jak s nimi pracovat...
Předem bych chtěl říct, že musíme dávat pozor na maximální zatížení jednotlivých linek a nedej bože zkrat. Při hraní s tímto rozhraním bych doporučoval použít nějaký optický oddělovač, nebo alespoň budič sběrnice. Na paralelním portu máme celkem 12 vstupně/výstupních pinů. Jsou to piny ve skupině 2-9, dále 1, 14, 16 a 17. Signál na pinech 1, 14 a 17 je invertovaný. Na následujícím obrázku je fyzické umístění pinů na konektoru:
Abychom mohli něco ovládat, musíme se k tomu nejprve dostat. K tomu nám poslouží chytrá tabulka:
Jak si můžete všimnout, paralelní port je adresně rozdělen na tři části. My teď využijeme pouze adresy 378 a 37A, protože na adrese 379 jsou jen vstupy (IN) a nás zajímá v tuto chvíli výstup.
Na vyzkoušení pro mě bylo nejrychlejší pustit TurboPascal, takže uvedu příkazy pro toto prostředí. Pro C++ nebo Delphi by to mělo být podobné...
Pro přístup na port se používá příkaz port[$ adresa portu ]:= hodnota. Vidíte sami, že v tom není žádná věda.
Dejme tomu, že si na každý z těch našich 12 pinů připojíme LED diodu. Teď budeme chtít, aby nám svítily ob jednu, viz. obrázek:
Na port 378h (D0 - D7 -> Data0 - Data 7) tedy zapíšeme hodnotu 01010101, to znamená po přepočtu 1 + 4 + 16 + 64 = 85.
Na portu 37Ah (D9 - D11 -> C0 - C3) potřebujeme mít na výstupu hodnotu 0101. Jenže podle obrázku v úvodu vidíme, že výstupy C0, C1 a C3 jsou invertované, takže na port musíme zapisovat hodnotu ne 0101, ale 1110. To po přepočtu znamená 8 + 4 + 2 = 14.
Výsledný zápis tedy vypadá:
port[ $378h ] := 85;
port[ $37Ah ]:= 14;
Chtěl bych podotknout, že aplikace v novějších operačních systémech nemají přímý přístup k hardwaru, jako to bývalo dříve. Já jsem tento pokus dělal na win95, na winXp budete mít nejspíš smůlu (také záleží na tom, jak mocný programovací jazyk používáte:)). Toto omezení se dá prý hezky obejít pomocí knihovny DirectI/O, ale nezkoušel jsem to, takže nebudu šířit polopravdy. Závěrem bych chtěl tedy říct, že co se týče náchylnosti paralelního portu k poškození a obtížnosti vyladit aplikaci tak, aby běžela na všech systémech univerzálně, je dle mého názoru brutál vůbec pomyslet na nějaké normálnější využití tohoto rozhraní.