Fórum témák

» Több friss téma
Fórum » LPT vezérlés... Másképpen
Lapozás: OK   1 / 3
(#) CoderKevin hozzászólása Ápr 23, 2007 /
 
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!
(#) wlaci válasza CoderKevin hozzászólására (») Ápr 23, 2007 /
 
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ó.
(#) CoderKevin válasza wlaci hozzászólására (») Ápr 24, 2007 /
 
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?
(#) E-Maniac válasza CoderKevin hozzászólására (») Ápr 24, 2007 /
 
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?
(#) CoderKevin válasza E-Maniac hozzászólására (») Ápr 24, 2007 /
 
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.
(#) E-Maniac válasza CoderKevin hozzászólására (») Ápr 24, 2007 /
 
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



(#) Balázs válasza E-Maniac hozzászólására (») Ápr 24, 2007 /
 
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).

lpt_1.gif
    
(#) CoderKevin hozzászólása Ápr 24, 2007 /
 
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?
(#) wlaci válasza CoderKevin hozzászólására (») Ápr 24, 2007 /
 
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é.

ca3162.pdf
    
(#) CoderKevin hozzászólása Ápr 24, 2007 /
 
Mostmár végképp nem értem.
(#) szabi_o válasza CoderKevin hozzászólására (») Ápr 24, 2007 /
 
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.
(#) CoderKevin hozzászólása Ápr 24, 2007 /
 
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?
(#) wlaci válasza CoderKevin hozzászólására (») Ápr 24, 2007 /
 
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.
(#) wlaci válasza CoderKevin hozzászólására (») Ápr 24, 2007 /
 
Akkor mostmár tudod hogyan lehet megforditani az adatirányt!
(#) ferci hozzászólása Ápr 24, 2007 /
 
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...
(#) CoderKevin hozzászólása Ápr 24, 2007 /
 
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...
(#) ferci hozzászólása Ápr 24, 2007 /
 
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.
(#) ferci hozzászólása Ápr 24, 2007 /
 
Persze ne felejtsd el az adatirányt átállítani.
37Ah, 5. bít.
(#) wlaci válasza wlaci hozzászólására (») Ápr 24, 2007 /
 
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)
(#) Programmer hozzászólása Ápr 24, 2007 /
 
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.
(#) CoderKevin hozzászólása Ápr 25, 2007 /
 
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 ?
(#) E-Maniac válasza CoderKevin hozzászólására (») Ápr 25, 2007 /
 
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.
(#) Kera_Will válasza CoderKevin hozzászólására (») Ápr 25, 2007 /
 
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 ?
(#) E-Maniac válasza Kera_Will hozzászólására (») Ápr 25, 2007 /
 
Tudtommal kezeli. Legalabb is a honlapjukon levo leiras szerint, meg sosem probaltam.

(Es van hozza par VB-es pelda progi is)

Udv.
(#) CoderKevin hozzászólása Ápr 25, 2007 /
 
VB-ben én is az io.ddl-t használom. És hol található az a VB6-os példaprogi ?
(#) E-Maniac válasza CoderKevin hozzászólására (») Ápr 25, 2007 /
 
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.
(#) CoderKevin hozzászólása Ápr 25, 2007 /
 
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?
(#) CoderKevin hozzászólása Ápr 25, 2007 /
 
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?
(#) E-Maniac válasza CoderKevin hozzászólására (») Ápr 25, 2007 /
 

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.
(#) CoderKevin válasza E-Maniac hozzászólására (») Ápr 25, 2007 /
 
Í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 ?
Következő: »»   1 / 3
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem