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: 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ön… J
Ö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: 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)
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ális” portra), azonban nekünk erre nem lesz szükségünk.
Számunkra egyszerű kimenet lesz csupán. NYOMTATÓSTÁTUSZ:
(Báziscím+1)
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)
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:
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 |