Popis
Jak už jsme nastínili v úvodu, hw přípravek budeme připojovat k počítači přes paralelní port. Možná si někteří kladete otázku proč zrovna přes paralelní port? Mohli bychom použít rozhraní USB, ale to vyžaduje řadič a složitý ovladač. Nebo sériový port, který ovšem nemá dostatečný počet vodičů a vyžaduje převodník singálů RS232/TTL. V porovnání s těmito rozhraními vyhrává paralelní port počtem vodičů a snadnou implementací ovladačů připojených zařízení. Signály paralelního portu jsou navíc v úrovni TTL (5V), takže převodník úrovní není potřeba.
Paralelní port
Paralelní port může pracovat v několika režimech. Určitě jsou vám povědomé zkratky jako EPP, ECP či SPP. Jsou to označení nejběžnějších pracovních módů paralelního portu: EPP = Enhancement parallel port, ECP = Extended capabilities mode a SPP = standard parallel port. Nás bude zajímat mód SPP (někdy také označovaný jako Normal), v němž na rozdíl od módů EPP a ECP nezasahuje do přenášení dat další interní logika řadiče paralelního portu (DMA řadič, FIFO bufery apod.) Proto se ujistíme, že v BIOSu základní desky počítače použivaného pro pokusy je režim paralelního portu nastaven na SPP (příp. Normal) a obousměrný režim (bi-directional).
Pin (DSUB25) | Signál | I/O směr | Registr | HW invertován |
1 | /Strobe | vstup/výstup | řídící | ano |
2 | D0 | výstup | datový | |
3 | D1 | výstup | datový | |
4 | D2 | výstup | datový | |
5 | D3 | výstup | datový | |
6 | D4 | výstup | datový | |
7 | D5 | výstup | datový | |
8 | D6 | výstup | datový | |
9 | D7 | výstup | datový | |
10 | /Ack | vstup | stavový | |
11 | Busy | vstup | stavový | ano |
12 | Paper-Out | vstup | stavový | |
13 | Select | vstup | stavový | |
14 | /Auto-Linefeed | vstup/výstup | řídící | ano |
15 | /Error | vstup | stavový | |
16 | /Initialize | vstup/výstup | řídící | |
17 | /Select-printer | vstup/výstup | řídící | ano |
18 - 25 | GND | — | — |
Signály paralelního portu lze rozdělit do tří skupin: datové, řídící a stavové. Mimo to je samozřejmě vyveden i vodič signálové země. Seznam signálů je v tabulce 1.1. Signály uvozené lomítkem jsou signály s inverzní logikou. To znamená, že takový signál je aktivní v log. 0 místo v log. 1. Signály označené jako HW invertované jsou signály, jejichž logická úroveň je invertována logikou paralelního portu. Tedy, že když do řídícího registru zapíšeme např. na pozici signálu /Strobe log. 1, tak na výstupu paralelního portu bude mít tento signál úroveň log. 0. Stav odpovídajícího bitu a stav signálu na sběrnici jsou vůči sobě invertovány.
Výstupní úrovně paralelního portu odpovídají úrovním TTL logiky. Většina řadičů paralelního portu dokáže dodávat i odebírat proud až 12mA. Přesto je doporučeno používat budiče sběrnice (bus driver).
Řídící, stavové a datové signály jsou v adresovém prostoru počítače architektury x86 namapovány jako tři I/O registry, resp. I/O porty. Bázová adresa (adresa prvního registru) je pro paralelní port LPT1 adresa 0x378 (hexadecimálně), pro paralelní port LPT2 pak 0x278.
Popis datového registru je v tabulce 1.2. Do datového registru se zapisují data, která mají být vystavena na datové sběrnici paralelního portu. Čtení z datového registru vrátí poslední zapsanou hodnotu.
Jestliže ovšem paralelní port v BIOSu počítače nastavíme jako obousměrný a v řídícím registru nastavíme 5. bit Enable Bi-Directional Port na log. 1, můžeme přes datový registr vyčítat data přítomná na datové sběrnici. Zmíněný bit v řídícím registru zajistí odpojení výstupního budiče datové sběrnice a přepnutí na vstupní režim.
Poznámka: Některé řadiče paralelních portů se chovají jinak. Pro aktivaci obousměrného režimu vyžadují zápis log. 1 do 6.bitu řídícího registru apod.
Datový registr | ||
Adresa | Bit | Signál |
0x378 | 7 | D7 |
6 | D6 | |
5 | D5 | |
4 | D4 | |
3 | D3 | |
2 | D2 | |
1 | D1 | |
0 | D0 |
Stavový registr | ||
Adresa | Bit | Signál |
0x379 | 7 | Busy |
6 | /Ack | |
5 | Paper Out | |
4 | Select | |
3 | Error | |
2 | — | |
1 | — | |
0 | — |
Řídící registr | ||
Adresa | Bit | Signál |
0x37A | 7 | — |
6 | — | |
5 | Enable Bi-Directional Port | |
4 | Enable IRQ via /Ack | |
3 | /Select-printer | |
2 | /Initialize | |
1 | /Auto-Linefeed | |
0 | /Strobe |
V tabulce 1.2 jsou uvedeny významy bitů stavového registru paralelního port. Ze stavového registru lze pouze číst.
Posledním registrem je řídící registr, jehož popis je uveden v tabulce 1.2. Běžně je používán pouze k zápisu řídící sekvence, nicméně za určitých okolností z něj lze i číst (podrobnostmi se nebudeme zabývat, protože řídící signály budeme vždy používat jako výstupní).
Schéma
Ze schématu je patrné, že budeme využívat celou datovou sběrnici a řídící signály /Initialize (zkráceno na Init), /Strobe, /Auto-linefeed (zkráceno na /Autofeed) a /Select paralelního portu. Stavové signály paralelního portu využívat nebudeme.
Abychom postihly skutečnost, že signály /Strobe, /Auto-linefeed a /Select jsou vůči odpovídajícím bitům v řídícím registru hardwarově invertovány, zatímco signál /Initialize nikoliv, budeme ve schématech používat tato označení signálů: Init (signál Initialize), /Strobe (signál /Strobe), /Autofeed (signál /Auto-linefeed) a /Select (signál /Select).
Protože potřebujeme zajistit definované výchozí úrovně na datové sběrnici, jsou všechny její vodiče připojeny pomocí pull-up odporů na napájecí napětí +5V. Pull-up odpory realizujeme pomocí odporové sítěSoučástka, v které je integrováno více odporů s jedním společným vývodem. RN1 se společným vývodem připojeným na napájecí napětí.
Přípravek je připojen k paralelnímu portu pomocí konektoru P1 typu D-SUB25 male (zásuvka), resp. CAN25 male.