Fórum témák
» Több friss téma |
Fórum » LPT vezérlés... Másképpen
Témaindító: CoderKevin, idő: Ápr 23, 2007
Témakörök:
Hello!
Sokat foglalkoztam LPT vezérléssel, nagyon jó dolog. Találtam pár topic-ot is ami ezzel a témával foglalkozik azzal a különbséggel, hogy ott mindenki a számítógéppel akar vezérelni egy küső hardvert. Na én pont fordítva szeretném. Van egy külső hardverem, ami előállít egy BCD kódot, plusz 3 jelet, hogy éppen melyik számjegyet küldi. (százas,tizes,egyes) Az LPT-n történe adatfeldolgozásra viszont nemsok mindent találtam a neten, nemtudom hogy lehetne feldolgozni. Ha meg csak simán rákötöm a bemenő adatportokra, és lekérdezem, hexában kapom meg az adatot, azt meg kicsit cinkes feldolgozni Egy szómint száz: CA3162 jelét kellene megjelenítenem a monitoron. Valakinek valami ötlet ? Előre is köszi!
Hát, igaz hogy nem tudok más IC-t ajálani, de lehet, hogy nem a legjobb választás.
Nem a kód átalakítás jelentene problémát (három jegyű BCD számot Pascalban gépidőt nem sajnálva 8 If ciklussal lehet átalakítani). Nagyob problémának látom, hogy az áramkörnek nincs igazi szinkron kimenete, igy folyamatossan olvasni kell a portot, történt-e rajta változás. Ez igy kicsit drága üzemű LCD. A másik megoldás, hogy építesz egy bonyolult illesztő áramkőrt, esetleg uC, így a port megszakítását felhasználva már jó kis mérésadatgyűjtő program írható.
Hát igen, folyamatosan olvasni kell a portot, de igazából azt sem tudom mikor... Mert nem tudom pontosan milyen időközönként ad jelet az IC azon a három lábán, ahol megmondja éppen melyik számjegyet küldi.
Ezért én arra gondoltam, hogy nem a programban írnám meg milyen időközönként olvassa a portot, hanem hogy ha a 3 láb közül az egyiken van jel, akkor a másik 4 láb értékét berakja egy változóba. Ha a három közül másikon van jel, akkor egy másik változóba rakja a bcd kódot. Vélemény?
Hali,
Akkor neked van egy aramkorod ami a kimeneten ki ad egy BCD kodot + 3 jelet hogy eppen melyik helyierteket jelzi a BCD. Ha ez igy van akkor szerintem megoldhato az alltalad leirt modon, marmint figyelni a helyiertek jelek valtozasat a legnagyobbtol kezdve. Valtozik a szazas akkor a BCD a szazas valtozoba kerul, valtozik a tizes akkor a BCD a tizesbe stb. Ha az utolso helyiertek (egyes) BCD kodjat is beolvasta akkor meg van a szam. Igy gondoltad?
El se hiszem. Valaki megértette mit akarok.
Komolyra fordítva: Igen így gondoltam. Szerintem ez tök jó, de lpt-t eddig csak adatok kiküldésére használtam. Tudnál ebben segíteni? Pontosan melyik portokat kell használni bemenetnek, és pontosan hogyan tudnám lekezelni célszerűen. Mert ha mondjuk a kimenő 8 bit értékét lekérdezem, hexában kapom meg, és ha a bemenet is csak igy kezelhető ez eléggé gázos lenne... Köszi előre is.
Ahoy,
Hat ez jo kerdes, en sem csinaltam meg ilyesmit LPT-vel... utana kellene nezegetni. De kezdetnek sz.tem olvasd el a CodeX LPT hasznalatrol szolo cikkeit: http://www.codexonline.hu/letoltes.php vagy nezz utana a www.prog.hu -n Miben irod a progit? Delphi, VB? Udv. EM
Sziasztok!
A csatolt képen zölddel van jelölve a bemeneti adatvonal, és ez a báziscímtől (ált. $378) eggyel nagyobb címen érhető el ($379).
Codex-en végigolvastam mindent LPT-ről. Még mikor kezdtem vele foglalkozni de ott is inkább csak a kimeneteket ecsetelik.
VB-ben szoktam irni hozzá a progikat. Balázs! Össz vissz ennyi amit eddig is tudtam a bemenetekről Valami ötleted nincs esetleg hogyan lehetne megoldani a fentebb említett problémát ? Ja, és az LPT-t lehet bitenként (bementenként/"lábakként") olvasni? Vagy csak egyben hexában?
Ha minden igaz, az IC-d adatlapját csatoltam.
E szerint 96 vagy 4 Hz-es frekvenciával adja az adatokat. A leírás 3 oldalának tetején lévő diagram szerint az MSD azaz a legkisebb helyiérték megy át legelöször. Most látom, nem TTL jelszintű, lehet hogy mégse úszod meg az áramkör készítést. Mivel az IC-n 7 kimenet van az LPT-n meg alaphelyzetben csak 5 bemenet, ezért át kell állítanod az adat irányt. Ez a vezérlő bite 5. bit-je (ha minden igaz). Újabb gépeknél a kétirányú üzemmódot a bioszban engedélyezni kell. Ha TTL szintű lenne a kimenet akkor 1-1 mondjuk 330 ohmos ellenálláson keresztűl már összeköthetők a lábak (bár nem ez a hivatalossan ajánlot megoldás). Inét már csak a portot kell olvasnod, figyelned, hogy mikor vált alacsonyra az MSD, eltárolni az első helyiértéket, ezután figyelni mikor vált az LSD stb. Ha megvan mind a három szám akkor lehet kiiratni. Ha nem akarsz vele számolni, akkor adsz mindegyikhez 48-at és konvertálod karakterré.
Mostmár végképp nem értem.
A párhuzamos porton lehet megszakítást is generálni. Egyszer csináltam egy enkóderes léptetőmotór vezérlőt, megszakítással mértem az elfordulás nagyságát. Ha jól emlékszem, át kellett irányítani (befogni) egy BIOS megszakítást (timer?) és a párhuzamos port ACK(10) lábát használta.
Nézz utána, hátha találsz valamit.
Találtam egy olyat, hogy LPT bidirectionális működés.
Elvileg így lehet a D0-D7 pid-eket kívülről változtatni... Éa akkor már lenne 8 amit váltaztathatok kívülről, egyszerű lenne a dolog. Vélemény?
Fel a fejjel! Nem olyan szörnyű!
Az output helyet az input utasítást kell használnod. A beolvasot adatok feldolgozása nem bonyolultabb, mint a vezérlésnek szánt adatok előkészítése. Az IC rákötése a gépre, mivel nem TTL szintűek a jelek, illetve mivel a szg. alaphelyzetben kimenetnek definiálja az LPT adatportot egy kicsit körülményes. Én más problémát nem látok. A VB-t nem ismerem. A Pascal Qbasic meg valószinű a leszármazotjai is 8 v. 16 bittenként azaz byte-ossan word-össen kezelik a portokat. Ha egy port egy meghatározott bitjének értékére van szükség az kb. igy néz ki: If (x and 8)=0 then begin (ha a bit nulla) end else begin (ha a bit egy) end; Ez az x byte vagy port 3. bitjének figyelése. Ha a 8 helyet 32-t írsz az az 5. bit. Ha sürűn használod érdemes rá eljárást, fügvényt definiálni. Ha nem akarod az LPT adatirányát megfordítani (ez sajnos nem is minden gépnél lehetséges) akkor áramkört kell építeni. Vagy csak az LSD-t és a négy adat bittet viszed be, egy ciklusig tárolni kell az adatokat és ha az újra olvasásnál az LSD alacsony lett akkor a tárolt adat az MSB, az újonan beolvasot az LSD, majd pedig az LSD 0-ról 1-re vált akkor megérkezett az NSD adat is. Átnézem az adatlapot és illesztésre is kitalálunk valamit.
Akkor mostmár tudod hogyan lehet megforditani az adatirányt!
Nem mindegyik LPT megy két irányban.
Én spec a D0-D7-et használom csak kimenetként( 378h), a 379h-t meg bemenetként ( 4 vonalat), ez már sok mindenre elég. Az, hogy hexa kell vagy csak a bináris, már egyéni, de alapban így bináris természetesen. Persze lehet úgy is játszani, hogy egy kimenet ad ki léptetőjelet és egy vonalon be lehet olvasni pl. egy bájtot is, csak elektronika kérdése. Én basic-ben csinálom...
Megnéztem, a bios-ban az LPT - Normal -t átállítottam LPT - Bi-directional -ra. Tehát elvileg mostmár használhatom a D0-D7 -et bementként ? Mert akkor nem lenne bonyolult a dolog...
Nézd meg pl. 1 k-s ellenállással a biztonság miatt, hogy lehúzza-e valamelyik portot (lekérdezed), akkor kiderül - utána ell. mindegyiket.
No átnéztem az adatlapot.
Felhuzó ellenálásokkal jó közelítéssel TTL kompatibilissé tehető. Én 50-100KOHM közti értékeket javaslok, mert az LPT porton általában gyárilag van felhúzó ellenállás. Ha az adatportra kötöd az IC-t ne felejsd ki a 330-650 OHM közti soros ellenállásokat (e nélkül szembe dolgozik a port meg az IC, amig nem változtatod meg az adatirányt)
Idézet: „Ha meg csak simán rákötöm a bemenő adatportokra, és lekérdezem, hexában kapom meg az adatot, azt meg kicsit cinkes feldolgozni ” És? Ha egy 16 bites számnak (Pascalban word) így adok értéket: valtozonev:=$00FF akkor hexába adtam neki értéket, de az attól 255 lesz. A biteket lehet külön kezelni méghozzá pofon egyszerűen. Megvan a beolvasott érték, fogod ezt a számot és maszkolod 2 megfelelő hatványával. Például a 10es tüske a 6ik bit akkor a számot a 01000000b maszkkal bináris AND eled. Pl: bitvanjel:=beolvasottertek AND 64 (64 ugye 2 a 6ikon) Igy a bitvanjel értéke 1 lesz ha a 10es tüskén van jel ill. 0 ha nincs jel. (Persze ez lehet pont fordítva is. mert egyes lábak negálva vannak, ki kell mérni) Ja és nem kell annak 8 IF.
Persze ne felejtsd el az adatirányt átállítani.
37Ah, 5. bít. Jaa, szoval hogy átállítottam Bi-directional-ra, akkor utánna át kell állítanom a programban az adatirányt... És ezt hogyan teszem meg VB6-ban ? wlaci: 50-100Kohm -ot is az ic-lpt közé meg a 330-650ohm-ot is ?
Hali,
Ha jol emlexem akkor a Control regiszter (baziscim+2) 5. bitje hatarozza meg az adatiranyt, ha 1-es, akkor bemenet. Ja vitsatok ki ha tevedek... Uff.
VB6 ban kérdéses, basicban az out/in utasítás működik cím/adat beírással.
Delphi alatt tudtam asm in/out kezelő rutinokat beszúrni , azzal kezeltem a port bitjeit és regisztereit, VB6 hoz kell 1 io.dll ... ami direkt kezeli a portot , lásd előző lpt-s topic.... Kérdés hogy a dll kezeli-e a 2 írányú portot ?
Tudtommal kezeli. Legalabb is a honlapjukon levo leiras szerint, meg sosem probaltam.
(Es van hozza par VB-es pelda progi is) Udv.
VB-ben én is az io.ddl-t használom. És hol található az a VB6-os példaprogi ?
Hali,
Ha jol emlekszem a honlapjukon lattam pelda forraskodokat Delphi-hez es VB-hez http://www.geekhideout.com/iodll.shtml A prog.hu-n eleg sok LPTs leiras van, en ezt talaltam a bitenkenti kezelesre. (legalabb is a control regiszter beallitasara) 'Bit címzése Port=&h378 Bit=5 SetPortBit Port,Bit ' A &h378 -as porton az 5. bitet egybe állítja ClrPortBit Port ,Bit ' A &h378 -as porton az 5. bitet nullába állítja NotPortBit Port,Bit ' A &h378 -as porton az 5. bitet negálja Udv.
Prog.hu-n rengeteget olvasgattam.
De még mindig nem értem. A biteket a portout utasítással is állíthatom 1-re vagy 0-ra, de hogyan fogom olvasni a D0-D7 biteket?
Ja, igen. Ezt a pédaprogit már láttam régebben is, de sajnos csak az van benne hogy hogyan adok ki adatokat, meg hogyan olvasom le. De azt nemtudom, hogy ha simán mondjuk 0 a bit, és adok neki jelet, akkor már olvashatom is be hogy 1?
Szerintem a kovi a dolog: Eloszor is a Control regiszter 5. bitjet at allitod 1-re. Igy a Data vonalad bemenetkent fog uzemelni. Aztan: byte myHundreds . . . call PortIn(h378,myHundreds) '-> Itt a szazas helyi erteked Ugyan ez a tobbi helyi ertekre.
Így már kicsit kapzsga... bár ezt a myHundreds parancsot még sose láttam... Kicsit tudnád részletezni?
Mégegy kérdés. Az IC kimenő lábait mekkora ellenállásokon keresztül köthetem az lpt-re ? |
Bejelentkezés
Hirdetés |