Vezérlés az
LPT-porton Alfától Omegáig. III. |
||||||||||||||||||
Előző cikkünkben röviden
összefoglaltuk, hogy néhány programozási nyelvben, -valamint közvetlen DOS
alatt- miként lehet a portokat,
használni. Megismerkedtünk továbbá a világ legegyszerűbb
perifériájának elkészítésével, mely jövőbeli kísérleteink egyik hasznos
segítője lehet. Most valamivel összetettebb perifériákat nézünk meg.
Elektronikában kezdő olvasóink megnyugtatására eláruljuk: még mindig nem
kell tartanunk attól, hogy komolyabb szakmai ismeretekkel kellene felvértezni
magunkat mindehhez. |
||||||||||||||||||
Csillogunk – Villogunk |
||||||||||||||||||
Aki az elektronikával ismerkedni kezd, az
általában különféle villogókat, futófényeket, egyszerűbb kijelzőket
kíván először összerakni. Egyrészt azért, mert látványos, másfelől
pedig viszonylag gyors sikert lehet elérni velük. Természetesen a portprogramozásnál
is ezzel fogjuk kezdeni. Ugyanis egyszerű hardver mellé - nagyon
egyszerűtől az igen bonyolultig - mindenféle szoftvert írhatunk. Miért érdemes ezt alaposan megjegyezni?
Hamarosan eljutunk arra a felismerésre, hogy hardvereink jelentősen
egyszerűsíthetők, ha a szoftver készítésénél kicsit trükkösebbek
vagyunk. A mikrovezérlők, vagyis az egychipes mikroszámítógépek nem
véletlenül terjednek egyre jobban mindenfelé. Ma már szinte alig van
elektronikus eszközünk, amiben ne lenne legalább egy kisteljesítményű
változata. Pedig a legtöbb olcsó mikrovezérlőnek kb. ugyanannyi portja
van, mint a printerportunknak!
Azonban ennek töredékével is megoldható lenne szinte minden… (A későbbi
cikkekben erre példákat is látni fogunk.) A bolti mérlegek, a karórák, infra és rádiós
távirányítók, riasztóberendezések, autók, kerékpárok fedélzeti
számítógépeitől a többprocesszoros videomagnókig, monitorokig, a
TV-készülékeken át, mosógépeink, mikrohullámú sütőink, stb. láthatatlan
lakója lett. S mindez cseppet sem véletlen! Egy programot egyszer kell csak
jól megírni, ellenben az alkatrészt minden egyes berendezésbe bele kell
szerelni, ami lassítja, drágítja a gyártást. Ma már nem az a művészet,
hogy milyen berendezésben mennyi alkatrész van, hanem az, hogy minél több
funkció megtartása mellett mit lehet még kispórolni belőle. J Az előző részben bemutatott
egyszerű perifériánk jól működik, azonban egyetlen bit figyelése
elég unalmas dolog lenne a vérbeli programozónak. Készítsünk hát nyolcat
belőle, hogy a kiírt adatbájtot egyszerre láthassuk:
Megjegyzés az elektronikában már otthon
lévő olvasókhoz: A kezdetben bemutatott megoldások szándékosan
nyomtatott panel nélkül, CSAT
(„Csináld, Ahogy Tudod”), illetve AHS (AHogy Sikerül.) algoritmussal készülnek.
Nem azért, mert így a szakszerű, hanem azért, mert a kezdők is
szeretnének lépést tartani. Ráadásul képzett szakemberek a prototípusokat
gyakran próbálják ki valamilyen deszkamodellen. A szerző se szokott
összetettebb áramköröket soha csuklóból panelre tervezni, s azután n+1-szer
átépíteni, mire tökéletes lesz. Később, amikor odaérünk, természetesen
bemutatjuk a panelek újszerű házi gyártását percek alatt, illetve a
profik által is alkalmazott prototípusfejlesztő paneleket. A rajzon látható, hogy minden LED előtt
önálló ellenállás van, vagyis egyszerűen megsokszoroztuk a múltkori
kapcsolást. Mi a jobboldali elvi rajz szerint dolgozzunk, a másikra
később visszatérünk… A gyakorlati kivitelnél igyekeztem ismét az
olcsóbbik végéről megfogni a dolgot. Egy számítógépes bontó, esetleg
szerviz környékén (néha teljesen ingyen: örülnek, ha elvisszük a kacatot )
sok hasznos dolgot lehet beszerezni. Igaz a munkám miatt nálam az ilyesmi
eleve kéznél van mindig, de az olvasó - kis fantáziával - szintén nem szalad
az alkatrész-kereskedőhöz egyszerűbb szerkezetek, prototípusok
tartozékai miatt. Azért, hogy a LED-ek ne keveredjenek össze,
illetve okozzanak zárlatot, egy - két oldalon – rézsávokkal csíkozott
nyomtatott panelt alkalmaztam "deszkamodell" gyanánt. Régi 360KB-os,
hibás FDD meghajtó nyomtatott paneljéről vágtam le karos lemezollóval a
szalagkábel csatlakozósávját. Ennek híján tönkrement ISA-s kártyák
érintkező sorának egy darabkája is tökéletesen megfelel. Érdekességképpen megemlítem, hogy ezt a
"trükköt" az amatőrök, illetve a készülékgyárak régen
alkalmazták sokkal összetettebb áramkörök kialakítására is! Csak akkoriban
"forrlécnek" nevezték, s bakelitből készült csíkokból állt,
amibe csőszegecseket préseltek. Aki nem hiszi, nézze meg egy régi
elektroncsöves rádió, esetleg igen korai sorozatú TV alsó részét! A 2…4
párhuzamosan felszerelt forrlécen alkatrészek százai is elfértek. J Természetesen ízlés szerint más megoldást is
találhatunk ki magunknak a rögzítésre. A LED-sort szerelés után azonban
mindenképpen valamiféle szigeteléssel érdemes ellátni, mivel frissen birtokba
vett portunk áramkörét nem lenne kellemes dolog javítani. A LED-ek ismét a
hulladékos sufni rossz kacatjaiból kerültek ki, akárcsak az ellenállások.
Vagyis megint csak nem a zsebpénzünk rovására megy a játék. (Megszokhattuk az
eddigiek alapján… J) Aki esetleg ragaszkodik a
precíziós kivitelhez, az vásárolhat a boltban új alkatrészeket. Ha már
egyszer veszi, akkor 5mm-es piros, magas fényű LED-et vásároljon, mivel
az sokkal szebben mutat, mint a régi típusok. Vehetünk azonban szögletes,
illetve lapos kivitelben, sárga, zöld, esetleg kék, vagy fehér színben is.
(Az utóbbi kettő ma még kicsit luxus lenne ide kb. 10-szeres árával…) Fontos észrevétel, hogy minden LED saját ellenállással
rendelkezik. Jogos kérdés lenne, ugyan miért nem alkalmazunk a 8db helyett
egyetlen ellenállást a GND felőli oldalon? A válasz: Ha minden esetben legfeljebb egy
LED-et kapcsolunk be, akkor elegendő ez is. Amennyiben azonban
egyidőben több világít, akkor az áramok eloszlanak a diódák között,
vagyis minél több üzemel, annál halványabb lenne fényük. Ezt kis kitérőt
érdemes megjegyezni, ha saját áramkört akarunk tervezni! A másik kissé rejtélyes dolog; ugyan miért
rajzoltam le a kapcsolási ábra bal oldalára egy másik fajta bekötést? Hiszen
azonnal két gondunk is lenne, ha ezt építenénk meg… Először kellene egy 5V-os tápfeszültség,
ami azonban nincs kivezetve a printerportunkra. Másodszor a LED-ek fordított
bekötése miatt akkor fognak világítani, ha a portbit nulla értékű, s
akkor alszanak ki, ha egyre átvált. Tehát minden bitet negálni kell a
programunkban a helyes működés érdekében. Nos, a magyarázat kézenfekvő: mert munkánk
során sok olyan áramkörrel lesz dolgunk, ami így üzemel! Ezek pedig pl. a LED-es,
7-szegmenses kijelzők. (Ennek a területnek kis
kitérőt is szánunk, de remélem izgalmas utazás lesz.)
Fontos tudni a kijelzőkkel kapcsolatban
néhány alapvető dolgot, mielőtt használni kezdenénk azokat. -A számokat világító pálcikákból rakják össze. A
pálcikákat szegmenseknek nevezzük, s 7db van belőlük. (Innen ered az
elnevezése is) A pálcikák mellett van egy tizedespont (DP=decimal point) is. -A LED-es hétszegmenses kijelzőkben
ugyanolyan LED-ek vannak, mint amiket eddig megismertünk, azonban kétféle
módon lehetnek összekötve a tokon belől
a közös elektródáik. Ha az első ábracsoport kapcsolási vázlatát
nézzünk, akkor bal oldali variációt a
"KÖZÖS ANÓDÚ", míg a jobboldalit a "KÖZÖS KATÓDÚ"
jelzővel illeti a szakirodalom. Magától értetődik, hogy mi a közös katódút
fogjuk jobban kedvelni, hiszen az gyakorlatilag azonos áramkört, illetve
kezelést igényel, mint a LED-sorunk. Ha kapunk a boltban, ilyet érdemes
beszerezni. Ha nem akarunk boltba menni, természetesen akkor sincs gond. J A családban,
ismeretségi körben bizonyára akad régi, kidobásra szánt piros kijelzővel
világító ezeréves zsebkalkulátor. No,
ebben éppen egy 6…9 számjegyű szaknyelven "DIGITES", közös
katódú kijelző rejtezik! Ha az esetleg nincs, gondoljunk a régi PC-házak
frekvencia kijelzőire… (Az alsó ábra, legnagyobb darabja éppen onnan
való.) J A többjegyű kijelzőknél nem vezetik ki
minden számjegy minden szegmensét, mivel ez egy 6-jegyű kijelzőnél
is 6*8=48 lábat foglalna el. Helyette un. IDŐMULTIPLEX vezérlést
alkalmaznak. A második képcsoport kapcsolási rajzán ez a megoldás is
megfigyelhető. Így a korábbi példánál maradva a 48 láb helyett 8+6=14
kell mindössze ugyanahhoz a művelethez. Természetesen ekkor a közös
katódokkal/anódokkal kell kiválasztani, hogy melyik számjegyet akarjuk aktiválni,
majd a szegmensekre kiadjuk a megfelelő kombinációt, s megjelenik a
kívánt számjegy. Ha egymás után folyamatosan valamennyi helyi értéken
megjelenítjük a megfelelő számot, voltaképpen célnál vagyunk. Mindezt
azonban olyan gyorsan kell elvégezni, hogy szemünk folytonosnak érzékelje a
kapott számsort. Szinte minden eszközünkben ezt a megoldást alkalmazzuk,
mivel a vezérlő elektronikától is kevesebb portot, vagyis olcsóbb
kivitelt kíván meg. A processzorokban majd az egyszer megírt szoftver megcsinálja a többit.
Egyelőre természetesen multiplex vezérlést nem tervezünk, ahhoz pár
egyéb, egyelőre ismeretlen dolog is szükséges lenne. Azonban az ilyen
kijelzők egyetlen számjegyre bekötve remekül megfelelnek céljainknak,
ezért mutattam be őket. Mielőtt kijelzőnket használni
kezdenénk, valamilyen egységes jelöléssel azonosítani kell a pálcikákat. Erre
nemzetközi szabvány van. Az óramutató járásával egyező irányban,
spirálisan körbejárjuk a pálcikákat, s minden szegmenset az angol abc
kisbetűjével feliratozunk, ahogy a második ábracsoport baloldali
felső ábráján látható. Vagyis: a, b, c, d, e, f, g, továbbá a tizedes
pont, a „dp”. A bekötés a lehető legritkább esetben
hullik az ölünkbe, hála a töménytelen sok típusnak. Vagyis egy multiméterrel,
dióda vizsgáló módban kell kikeresni a bekötést, illetve azt, hogy vajon
közös anódú, vagy katódú típussal van éppen dolgunk. Ha már vesszük, akkor ne
legyünk szívbajosak: kérjünk egy műszert, s a helyszínen
ellenőrizzük le a kereskedő, vagy az esetleges katalógus állításait.
(Másképp könnyen meglepetés érhet otthon bennünket…- saját tapasztalat -) Van még egy apróság kijelző ügyben, amire
nem árt odafigyelni: A tizedespont mérete elhanyagolható a pálcikákhoz képest
ezért általában nem egyforma teljesítményű LED van beépítve számára.
Tapasztalataim szerint - típustól függően - kb. fele akkora a
tizedespont áramszükséglete, mint a többi szegmensé. Ez azt jelenti, hogy
amíg a kijelző pálcikái stabilan, jó fényerővel világítanak, addig
(ugyanolyan soros ellenállást alkalmazva) a tizedespont vakuként felvillan,
majd örökre kialszik. (A LED nem szereti a túlterhelést.) Ezt
elkerülendő kétszer akkora ellenállást alkalmazzunk a kijelzőkhöz.
Tipikusan 5V-tos tápfesz. esetén zsebszámológépek kijelzőinél 470 ohm a
szegmenseknek, 680 ohma DP-nek. Normál, kis kijelzőknél 270 ohm a
szegmensnek, 420 ohm a tizedespontnak, míg a nagyobb méretű daraboknál
120 ohm is lehet a korlátozó ellenállások értéke. A kijelző méretével
összefügg a szükséges áramerősség, de nincs egyenes arány. Eleve a pontszerű
diódákból kirakott, illetve a prizmás fényvezetőjű, kevesebb
LED-ből készített típusok se azonos paraméterekkel bírnak. A katalógusok adatai tehát az egyedül mérvadók,
s ildomos a szakember tanácsát kikérni ha bizonytalanok vagyunk. Miután kijelzőnket bekötöttük, a LED-sorhoz
hasonlóan használhatjuk tesztelésre, illetve tanulásra. A konkrét
programozásáról azonban következő számunkban lesz szó. -Azonban, hogy ne unatkozzunk: Addig is házi
feladatként tervezzük meg pálcikákból a kilenc számjegyet, illetve az ABC
kijelezhető betűit, meg pár érdekesnek tartott karaktert. Ha ez megvan, akkor az ’a’ - szegmenset a D0
bitre kötve, (majd sorban a többit, D6-ig.) írjuk le bináris kódban a
világító/nem világító pálcikák kombinációit, s váltsuk át decimális számokká
őket! -Aki ezt bonyolultnak tartja, az gondolkodjon el
azon, hogy miképpen lehetne Knight Rider futófény programot írni a cikk
elején ismertetett 8 LED-es vonalkijelzőre? -S egy két autós sávot, illetve egy gyalogjárdát
kiszolgáló rendőrlámpát? J Ha valakinek nem
menne a dolog, az ne keseredjen el! A következő számban meg fogjuk
csinálni együtt mindhármat! |
||||||||||||||||||
Kis
Norbert |