Vezérlés az LPT-porton alfától Omegáig. I.

Mostohán kezelt terület az informatikával foglalkozó kiadványokban a géphez kapcsolt egyszerű, mindenki által megépíthető hardverek készítése, tervezése, programozása. Pedig ez nem túlzottan nagy ördöngösség. Számítógépünk csak akkor kezd el igazi életet élni, ha tudunk vele saját építésű perifériákat vezérelni. Ebben a sorozatban a kezdetek kezdetétől vesszük végig ennek lépéseit.

Ki ne szeretne futófényt készíteni, melyre programot írhat. Vagy szuper kis iskolai csengető órát fabrikálni? Esetleg több dugaszoló aljzatot vezérlő kapcsolóórát összehozni, a lakását kicsit automatizálni? Milyen lenne pl. egy reggel magától be, illetve kikapcsolódó teafőző, kenyérsütő, rádiókészülék? Esetleg egy automatikusan nyíló ajtó? A lakásban sasszézó mini robot? Vagy egy maximum 100KHz mintavételi frekvenciával dolgozó, 5-csatornás logikai állapot-analizátor, netalán egy logikai jelkombinációkat, sorozatokat előállító "sequencer"? Mindez nem álom többé, aki cikksorozatunkat végigolvassa, a csodát személyesen is átélheti!

Először vegyük sorba, hogy milyen módon illeszthetünk perifériákat, melyeken keresztül a számítógépünk a külvilágot látja:

- Soros port. Eléggé mostohán kezelt, de igen hasznos port. Általában a régebbi egereket, egyelőre még a modemeket, mobiltelefonokat kötjük rá, esetleg gépek összekötésére, mi több hálózatba kacsolására is alkalmazható. Számos egyéb területen hasznos, mint pl. a párszáz forintból házilag megépíthető mikrovezérlő és EEPROM- programozók illesztése. Egy gépben egyszerre alapesetben 4db lehet, de láttam már némi csalással 8-at is üzemelni. Számunkra egyetlen hátránya, hogy +/-12V-os,  jelszintekkel dolgozik, amit csak több alkatrésszel tudunk illeszteni. Másik hátránya, hogy közvetlen vezérlésnél (logikai áramkörök, mikrovezérlők alkalmazása nélkül) csupán a modemvezérlő bitek állnak rendelkezésre, ami kevés felületet, játékteret ad. Azonban később ismertetendő "sokszorozási" trükkjeinkkel ez is elég lehet. (Akkor visszatérünk a dologra.)

§         USB port. Ez egy nagysebességű soros port. Előnye, hogy kint van a csatlakozón a tápfeszültség, vagyis tápáram nyerésére is alkalmas lehet. Sajnos egyszerű vezérlésnek speciális áramkörök nélkül (pl. USB-s mikrovezérlő, vagy USB-I2C adapter) nehéz vele mit kezdeni.

§         IRDA port. Infravörös átviteli csatoló illesztésére tervezték. Sajnos a kellő dokumentációhiány miatt eddig nem tudtam jobban megismerkedni vele. Pedig mindenféle vezetékes kapcsolat nélkül lehetne a géppel kommunikálni a perifériáknak. Hátránya ugyanaz, mint az USB-nek. Nem kezdő kísérletezőnek találták ki.

§         GAME port. Nagyon érdekes port, erről egy másik cikkben írok részletesebben később. Kettő, esetleg négy analóg eszköz jeleit tudjuk feldolgozni vele, bár nem túlzottan jó pontossággal. Ezenkívül a tűzgombok bemenetei remek végállás-kapcsoló figyelők lehetnek. Külön előny, hogy a tápfeszültség itt is ki van vezetve. Ha egy csatlakozón csak az 5 voltot hozzuk ki rajta, akkor már hatalmas segítséget jelentett. Ez nálam bevált megoldás több helyen.

§         Billentyűzet port. Eredeti rendeltetése mellett pl. vonalkód olvasót illeszthet. Az 5V itt is ki van vezetve, pl. sok zseb-HDD, innen veszi az áramot egy T-dugós csatlakozóval. Számunkra csupán ezért érdekes most.

§         PRINTER port. Mint meglátjuk, ez álmaink netovábbja, a paradicsomok paradicsoma. Lassan két évtizede óta itt van, de sokan nem is tudják, mekkora kincs lehet ez avatott kézben. Sorozatunk ezzel foglalkozik részletesen.

A nyomtatóportból egy számítógépen alapesetben 4db lehet, azonban a gyakorlatban ebből hárommal találkozhatunk.

A régi időkben volt LPT1, LPT2. Emellett a régi IBM monochrome, illetve később a HERCULES, vagy CGA adaptereken egy LPTMDA nevezetű port is. Ezek a portok teljesen egyformák, csupán a portcímük tér el. A régebbi MULTI-I/O kártyáknál gyakran egy jumperrel lehetett állítani, hogy LPT1, vagy LPT2 legyen a port.  Az új, alaplapra integrált nyomtatóportoknál ezt az alaplapi BIOS-SETUP menüjében tehetjük meg. Ha az alaplapra integrált port mellett további portokra van szükség, minden további nélkül betehetünk egy ISA, vagy PCI buszos adapterkártyát. Az ISA esetén a címet a kártya jumperével, vagy az alaplapi setuppal végezhetjük, PCI esetén rábízhatjuk a dolgot a PNP-BIOS automatikájára.

Fontos tudni, hogy alapesetben hagyományos üzemmódra kell állítani a BIOS-ban a kártyát. Az ECP, EPP, illetve bidirekcionális üzemmódokat az egyszerűség kedvéért nem fogjuk kihasználni. Mint a későbbiekben kiderül, erre nincs is szükségünk az általunk használt univerzális, illetve egyszerű vezérléseknél. Ezzel a kis beállítással portunk üzemkész. Érdemes megjegyezni, hogy olvasóink kívánságára szívesen részletezzük a port pontos működését, illetve üzemmódjait, azonban cikksorozatunkban inkább a hardverek illesztésére összpontosítottam, így itt csupán az ehhez nélkülözhetetlen ismeretekről teszek említést. Véleményem szerint ez a megértést nagyban segíti.

A port felépítése

A port kimenő, illetve bemenő vezetékekből áll, mely vezetékek a programunk számára 3db, 8-bites regiszter ki, vagy bemeneteit, tehát írását, vagy olvasását jelentik.

A nyomtató kezelése miatt néhány bit negálva van, ezeket '-' (mínusz) jellel jelöltem. Zárójelben feltüntettem a csatlakozó tüske számát is. A kapható 25-pólusú D-csatlakozó dugókon a számok eleve fel vannak tüntetve, vagyis nem kell forgatva azonosítgatni a kivezetéseket.

Egyébként, ha a forrasztási oldal felől nézünk a portra, s a szélesebb sor van felül, akkor a felső sorban a jobboldali tüske az egyes láb, a bal felső a 13-as, a jobb alsó a 14-es, illetve a bal alsó a 25-ös. A lábak szépen sorban vannak, nem „alternálnak” lent, illetve fent.

A mínusszal megjelölt csatlakozópontok kiíráskor a regiszter bitjének megfelelő értékhez képest invertálva jelennek meg a kimeneten, vagy olvasódnak be a regiszterbe. Látszólag ez megnehezíti a kezelést, mert kiírás előtt, vagy beolvasás után ezeket a biteket korrigálnunk kell a további feldolgozás előtt. Azonban a példákon látni fogjuk, hogy ez csekély feladatot jelent, s egyáltalán nem lesz zavaró. Érdekes, hogy a két, irodalomjegyzékben szereplő könyvben eltért egymástól a mínuszjelek. Vagyis pl. a STROBE az egyikben negált, a másikban nem negált módon szerepel.

Mivel régebben dolgoztam a porttal, fejből nekem sem rémlett, melyik a helyes. A következő négy jel közül egyetlen dologban értettek egyet a forrásmunkák: Az INIT negált voltában.

Nem bírtam tovább hát, rádugtam kis 286-os laptopomra egy üres csatlakozót, előkaptam egy voltmérőt, s kimértem magam a jeleket. Egyszerű volt a dolgom: A portra 0-t írva, ahol alacsony szint jelenik meg, az nem negált, ahol magas, ott negált jelek vannak. Ezután ellenőrzésképpen 255-öt is kiküldtem, hogy pont átforduljanak a bitek. Az eredménynek is meg kell fordulnia természetesen. Íme az eredmény, amire jutottam: (A bemeneteket most elhittem, azt nem mértem ki.)

Kimenő vezetékek:
–STROBE (1)
–AUTOFEED (14)
INIT (16)
–SELECT IN (17)

Látható, hogy minden bit negált volt, kivéve az INIT kivezetést! Ekkor jöttem rá, hogy vsz. a nyomtató jeleire vonatkozhattak az irodalomban közölt adatok, és nem pedig a fizikai portunkra. Azért aki ezt nem tudja, annak bizony okozhat némi fejtörést, mire rájönJ Örök tanulság:

Ne bízzunk elfogulatlanul a szakirodalomban, minden esetben próbáljuk ki magunk a kérdéses hardverek működését.

Ezeken a vonalakon kívül a kimenetekhez tartozik a D0....D7 (ezek a 2…9 tüskék)  nyolc darab adatvezetéke. Egyik sem negált, vagyis a kezdeti játszadozáshoz tökéletes lesz. Ezeket lehet a legkönnyebben munkába fogni. Egy csoportot képeznek, nincsenek negálva, s egy regiszterben lehet őket elérni. Gyakorlatilag amilyen 8 bites számot ebbe a regiszterbe (továbbiakban: ADATREGISZTER) beírunk, annak megfelelő bináris kombinációba állnak be ezek a kivezetések. Ha a kiírt számot binárissá alakítjuk, akkor azt tapasztaljuk, hogy az igaz, (TRUE) vagyis '1' értékű bitek közel +5V feszültségként jelentkeznek a csatlakozótüskéken, szemben a közel nulla voltos hamis, (FALSE) vagyis '0' értékkel. A port típusától kismértékben függenek a feszültségek. A régi, bipoláris portokon 4.7V/0.8V-ot fogunk mérni, míg az újabb, CMOS portokon  közel az ideális értékeket.

Itt szeretném megemlíteni, hogy célszerű a kísérletezéshez - főleg eleinte - bipoláris portos, régi kártyákat felhasználni, mert egyfelől több szekatúrát élnek túl, másfelől a javítás is egyszerűbb lehet. Tudomásul kell vennünk, hogy aki a géphez külső eszközöket csatol, annak kockázatai, illetve szigorú illemszabályai vannak, melyeket a kellő helyen ismertetni fogunk. Aki ezeket megszegi, az magára vessen. Ismerek embereket, akik drága, új alaplapjaikat csereberélték ki azért, mert megszegték a szabályokat. Természetesen kellő körültekintéssel a hiba mindig elkerülhető lett volna. Ezért fontos a leírtak komolyan vétele. Ettől függetlenül garanciát nem tudunk vállalni a klón alkatrészek, illetve a házi-barkács működésére. Annyit tehetünk, hogy mindenkinek javasoljuk: Ne az egyetlen, drága, féltve őrzött PC-jén gyakoroljon!!! Vegyen inkább pár ezer forintért egy kidobásra szánt, olcsó PC-t. Egy 40MB-os merevlemezes, 286-os kis gép is meglepően hatalmas tud eleinte lenni.... (Saját tapasztalat.)

Egy igen fontos adat a kimeneteknél az elektromos terhelhetőség:

A fentiekből ered, hogy a port terhelhetőségét nem célszerű túllépni. Bipoláris portok esetén (a kimenetet egy TTL IC hajtja meg, legtöbbször a csatlakozó körül található pl. egy 74LS373 integrált áramkör, könnyű innen megismerni) maximum 16mA.

CMOS portok esetén (nincs külön meghajtó IC, hanem egy körtokos "széttaposott bogár" lábai mennek a csatlakozókra) ez jóval kevesebb, s erősen eltérő lehet. (2....10mA)

Fontos még tudni, hogy esetenként szokás gyárilag a panelen a csatlakozótüskékre menő vezetékekbe egy soros ellenállást építeni, továbbá egy kerámia szűrőkondenzátort is betenni. Ez akkor lesz érdekes, amikor gyorsan változó jelsorozatokat akarunk adni/venni, s a csatlakozókábel hossza meghaladja a 10 cm-t. Ilyenkor a jelek erősen torzulhatnak, sérülhetnek. Ilyen esetekben majd "erősítenünk", formálnunk, illesztenünk kell a jeleket. Ezekre természetesen kitérünk, amikor szükséges.

Bemenő vezetékek:
BUSY (11)
PE (12)
SELECT (13)
–ERROR (15)
–ACK (10)

A bemeneteknél fontos tudni, hogy a tápfeszültséget nem léphetik túl a bejövő jelek, vagyis GND-nél nem lehet negatívabb, illetve +5V-nál nem lehet pozitívabb, mert a port adott bitje azonnal tönkremegy. Ez látszólag természetes, ha a számítógép belső 5V-jával, illetve GND-jével dolgozunk csupán. Azonban később látjuk, hogy sokszor nem ilyen rózsás a helyzet. Természetesen kellő időben a megfelelő technológiákat is megismerjük, amivel a meghibásodásokat teljes mértékben el lehet kerülni.

A csatlakozó egyéb kivezetései GND-re vannak kötve. Fontos, hogy nem minden portnál van sajnos valamennyi láb bekötve, (teljesen szabálytalanul!) ezért javasolt a 18…25 lábakat összekötni a csatlakozón belől, s ezt a közösített részt tekinteni GND-nek.

Ezek után lássuk, hogy a már említett három regiszterben miként helyezkednek el a vezérlő bitek:

ADATPORT: (Báziscím+0)

Regiszter bitjei:

B7

B6

B5

B4

B3

B2

B1

B0

Csatlakozószám:

9

8

7

6

5

4

3

2

A hagyományos portoknál csak kimenetként funkcionál. Apró kis trükkel a legtöbb port itt is átvariálható kétirányúra („bidirekcionálisportra), azonban nekünk erre nem lesz szükségünk. Számunkra egyszerű kimenet lesz csupán.

NYOMTATÓSTÁTUSZ: (Báziscím+1)

Regiszter bitjei:

B7

B6

B5

B4

B3

B2

B1

B0

Csatlakozószám:

11

10

12

13

15

L

L

L

Az alsó 3 bit nulla állapotot ad fixen, ha kiolvassuk, a maradék öt bit bemenetként szolgál.

NYOMTATÓSTÁTUSZ/VEZÉRLÉS: (Báziscím+2)

Regiszter bitjei:

B7

B6

B5

B4

B3

B2

B1

B0

Csatlakozószám:

L

L

L

IRQ-eng

17

16

14

1

B0…B3 kimenetek, B4 egy vezérlőjel, mely a porton nem jelenik meg. Ha ezt igaz állapotba írnánk, csak annyi történne, hogy a 10-es csatlakozó (-ACK) felfutó éle (vagyis, amikor a vonal állapota 0-ból 1-be megy) egy megszakításkérést okoz a processzornál. LPT1-es porton az IRQ7, illetve LPT2-es porton az IRQ5 vonalon. Az LPTMDA esetén ez szintén IRQ5. Számunkra egyelőre érdektelen a bit, így nulla szinten hagyjuk, hogy ne zavarjon. A maradék bitek olvasáskor hamis (L, vagyis nulla) állapotot mutatnak. Ez jól jön, ha a port jelenlétét nem a BIOS táblájából olvassuk ki, hanem magunk szeretnénk letesztelni. (Habár erre az adatport is tökéletes)

A báziscímek értékét a következő táblázat foglalja össze:

Port neve:

ADATREGISZTER címe:

Státusz címe:

Státusz/vezérlés címe

LPT1

378h=888d

379h=889d

37Ah=890d

LPTMDA

3BCh=956d

3BDh=957d

3BEh=958d

LPT2

278h=632d

279h=633

27Ah=634d

A táblázatban hexadecimális és decimális számrendszerben egyaránt feltüntettem a címeket, hogy a programozáskor ne kelljen számolgatni.

Azonnal jön a gondolat, hogy amennyiben kevés a port rendelkezésre álló be, illetve kimenetszáma, akkor használhatunk–e a gépben több nyomtatóportot? Természetesen igen, hiszen a táblázatból kitűnik, nincs átfedés a portok címei között, vagyis minden bitet egyedileg tudunk lekezelni. Azonban erre nem lesz szükségünk. Olyan alternatív megoldásokat fogunk a sorozatban megismerni, melyekkel ez teljességgel felesleges. Mi több, még a meglévő biteknek is csupán töredékére lesz szükségünk ahhoz, hogy elméletileg akár végtelen számú ki, illetve bemenő jelet tudjunk a gépünkhöz illeszteni. Ezt csak a működési sebesség, illetve a józanész korlátozza a gyakorlatban.

Hogyan kezdjük a munkát, mit vásároljunk első kísérleteinkhez???

A csatlakozónk 25 pólusú D apa csatlakozó, melyet vásárolnunk kell. Célszerű többet is beszerezni egyszerre. Nem drága, tehát nincs értelme spórolni vele, vagy kész, gyári csatlakozókból kitermelni. A műanyag házat külön árulják hozzá, ez is 100Ft alatti árban adják az elektromos kereskedésekben. Kell ezen kívül pár méter szalagkábel, a szükséges érszámmal. 12ki+5bemenő+GND, vagyis minimum 18 eresnek lennie kell. Pár tartalék szál sohasem árt, ha megmarad! Pozitív tápfeszültségre egyelőre nem lesz szükségünk, mert igyekeztem így összeállítani az első tesztkapcsolásokat. Kell még 12db LED, vagyis fénykibocsátó dióda. Ezekből kapható 5, illetve 3mm-es is egyaránt. Kell továbbá ugyanennyi ellenállás is. Ezek értéke nem túl kritikus, 150….220 ohm között legyenek, csak lehetőleg mindegyik típus azonos legyen. Mégiscsak furcsán jönne ki, hogy egyik LED fényesebben világít a másiknál. J Kell egy forrasztópáka, vagy pisztolypáka, kevés forrasztóón, illetve kis darabka fenyőgyanta, ami segít, hogy az ón jobban megfusson az alkatrészeken. Ezen kívül elmaradhatatlan kellékünk lesz mindig egy tekercs szigetelőszalag, mellyel a forrasztott lábakat szigetelni, illetve egymástól mechanikusan távol lehet tartani.

A következő részben megismerjük, hogy BASIC, PASCAL, C, illetve ASSEMBLY nyelven miként kell a portokat kezelni. Programozni természetesen nem itt fogunk megtanulni, vagyis a példák feltételezik magának a nyelvnek az ismeretét. Ennél többre azonban nem lesz szükségünk.

Miután megismertük az alapvető kezelést, zömmel BASIC nyelvű programpéldákkal, pár alapvető, s egyszerű szerkezetet ismerhetünk meg. Aki ezek működését megérti, valamint majd a későbbiekben tárgyalt leválasztó, illetve kapcsolóeszközökkel is megismerkedik, az saját maga is képes lesz az alapelemekből tetszőleges perifériát tervezni PC-jéhez. A végcélunk mindenképpen ez.

Kis Norbert