Fórum témák
» Több friss téma |
Fórum » LPT portos vezérlés
Szerintem gondolkozz inkább valami mikrovezérlős alkalmazásban. ENC26J80 + valami 18F szériás PIC. C nyelvű gyári TCP stack van, LCD kijelzőkhöz is lehet találni mindenféle rutint. No és persze kell egy minimális PC oldali programozás is.
Szia!
Sajnos nem találtam a fent nevezett "LCD kijelző a PC-re" témát. Viszont ha arról volna szó, hogy egyik gépen lévő LPT portot szeretnéd vezérelni Hálón keresztül akkor szerintem kellene írni egy szerver/kliens programot. Valamikor tavaj nyáron csináltam egy kísérletet, hogy tudom-e vezérelni neten keresztül az LPT-re kötött reléimet. Studio 2005-ben írtam is egy progit és végülis sikerült, de abba is maradt ez a kísérlet egyenlőre (nem volt kedvem tűzfalat állítgatni, iis szervert konfigni stb.....) meghát idő is kéne.l
Sziasztok!
Szeretnék 8x8 ledet rákötni a nyomtatóportra. Végülis ezt szeretném megépíteni, de csak a 8x8 bit kimenetet, a bemenetekre nincs szükségem. A kérdésem az lenne, hogy pontosan milyen alkatrészekre lenne még szükségem(ellenállás, tranzisztor,...) (Sajnos nem sok fizika tudásom van, de majd bepótolom és nekem igazából a programozás lenne érdekes) Eddig megvan: - 64db led (5mm-es) - a ledekhez 64db 200 ohm-os ellenállás - egy 8 x 10k-s ellenállás (a link ábráján R1) - 8db tároló (74HCT573) - van három dekoder/demultiplexer amiből ugye csak 1 kell de nem tudom, hogy melyik lenne jó mert ugye egyszerre csak egy tárolóba menjen a High. (CD4099, 74HC138, 74HC238) Tehát ezeken kívül szükségem van-e még alkatrészekre (pl demultiplexer ki- és/vagy bemeneteinél stb)? Légyszíves segítsetek! Előre is köszönöm: Dávid
Sziasztok.
Lenne egy olyan feladatom amiben 3db kapcsoloval kene 3 kulombozo videofajlt elinditani a gepen. Arra gondoltam LPTre kene rakotni a 3kapcsolot. Van valakinek valami remek otlete , hogy lehetne ezt megoldani? A programot Delphiben irnam hozza, io.dll-el tudom is irni/olvasni az alaplapi LPT-t viszon ha a PCI-osra hivatkozom akkor egyszeruen reboot. Elore is koszi.
Ha megnézed a port leírását, akkor láthatsz rajta néhány bemenetként működő lábat. (10-13;15) Ha ezeket testre kötöd, akkor a hozzátartozó bitnél állapotváltás történik a Status regiszterben. Ezt érzékelheti a programod.
Szerintem hasznalj 3 gombos egeret. Vagy Joystickot.
Vagy egy plusz billentyuzet 3 gombjat vezesd ki. Ha MINDENKEPPEN lpt-rol akarod megoldani, akkor (mondjuk oprendszert nem irtal, de gondolom XP-t hasznalsz) inditsd el elotte az allowio-t /a kapcsoloval. Vagy hasznalhatod pl. a userport.exe-t is, az alapbol indul a geppel egyutt. Elsokent a biosbol allitsd a potot bi-directionalra. Aztan szoftverbol allitsd bemenetre. Az 378H-as portcimrol olvasd az erteket, also harom bitet vizsgald. Az LPT porton pedig huzd le mondjuk 22K ellenallasokkal a d0,d1,d2 labakat. Ha ide 5V-ot kapcsolsz, akkor a bited bebillen. Egyebkent nezd meg az LPT port leirasat, szerintem van 3 eleve bemenetkent hasznalt lab, de ezeket mas cimrol kell olvasni.
Szia!
Ha csak a kimenetek kellenek, akkor a 74573-ak és a CD4099 kell csak. Az rajz alsó részén lévő IC-k mind elhagyhatók. Az R2-vel jelölt ellenállások közül az A0, A1, A2 lábakon lévőket és a csillaggal jelölt felhúzó ellenállást érdemes beépíteni.
Szia!
Nézz el erre az oldalra, bitszinten kitárgyalja, hogy melyik lábnak mi a funkciója, invertált vagy sem stb. Kétféleképp tudsz bemenetet csinálni LPT-re: a bonyolultabb mód az, amikor a D0 ... D8 vonalak közül a szükségesekre 1-et írsz, majd külső eszközzel lehúzod 0-ra; az egyszerűbbik a Status regiszter (PORT_BASE + 1 címen) bitjeinek olvasása. Minden esetben nagyon oda kell figyelni, hogy ellentétben a neten látható kismillió kapcsolással, az LPT nem szeret 5-10 mA fölötti áramokat elviselni egyik lábán sem, újabb gépeken meg pláne nem. Mivel nem tudod, hogy milyen IC van a portnál, próbálj úgy tervezni, hogy a lehető legkisebb terhelést add a vonalaknak. Régebbi gépeken még látható, azonosítható volt a meghajtó chip, ott az ember azért sejthette, meddig mehet el büntetlenül. Ha PCI-os kártyád is van, akkor az kicsit más történet. Nem ugyanabban a címtartományban kezeli az oprendszer az alaplapival, ezért sokszor gondot is okoz az elérése. Úgy általában is veszélyes lehet a hardverek memóriaterületeinek közvetlen írogatása, a PCI-alrendszerre ez különösen kerülendő. Még annyit, hogy ha az io.dll-t használod, az égvilágon semmi más programra (allowio stb.) nincs szükséged. Az io.dll induláskor ellenőrzi a saját driver-ének meglétét, ha nincs installálva, telepíti, ha nem fut, elindítja, de nem igényel semmiféle egyéb támogatást (saját tapasztalat, hogy jobb is, ha nincs más ilyen progi a gépen).
Akkor itt mar csak ay lenne a kerdesem, hogy a statuszregisztert hogy tudom leolvasni?
Mindenkinek koszonom a segitseget, kiprobalom a leirtakat amint hozzakerulok, aztan visszajelzek, hogy hogy sikerult. Meg abban segithetnetek , hogy windows APIn keresztul, hogy tudom kezelni a portot?
Win '98-ig a CreateFile, ReadFile, WriteFile működik, illetve szabadon elérhetőek az _inp és _outp rutinok, ha C-ben írsz. NT és afölötti rendszereknél nincs lehetőséged API-val elérni az LPT-t, ott marad az io.dll, ezért is találták ki
Státuszregisztert egyébként úgy kell olvasni, hogy ha pl. 0x378 az LPT báziscíme (ezt találod meg Eszközkezelőben is), akkor 0x379 lesz a Status, innentől csak ezzel a címmel kell meghívni az io.dll megfelelő függvényét. Amit belinkeltem doksit, annak az elején megtalálod az egyes regiszterek címzésének logikáját is.
Hat akkor meg1x koszonom. Megprobalom ezt a statuszregiszteres dolgot hatha igy sikerul.
elvileg APIn kersesztul valahogy igy kene, csak nem igazan ertem. var Data: byte; Moved: DWORD; hPort: THANDLE; begin hport:=createfile('LPT1', (GENERIC_READ or GENERIC_WRITE), 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); if hport <> INVALID_HANDLE_VALUE then begin writefile(hport,data,sizeof(data),moved,nil); closehandle(hport); end; end; Ez elvileg megnyitja az LPT1 portot irasra/olvasasra. Kizarolagos hasznalattal. Csak mint ahogy mar emlitettem, nem igazan ertem, hogy megy az iras/olvasas.
Remélem, nem szólnak meg a modik, mert ez már egy másik fórum témája lenne...
Szóval, ha így nyitod meg a portot, akkor non-overlapped I/O-t fogsz használni. Ez azt jelenti, hogy addig nem tér vissza a ReadFile / WriteFile, míg be nem fejezte a teljes műveletet, ez néha fagyást okoz, de mindenképp lassítja a végrehajtást a te oldaladon. Ha a CreateFile hívása tartalmazza a FILE_FLAG_OVERLAPPED bitet és egy OVERLAPPED típusú struktúrát, akkor igazodsz a WIN32 képességeihez és jellemzőihez legjobban, minden I/O művelet hívása után azonnal visszakapod a végrehajtás jogát, és a GetOverlappedResult függvény hívásával tudod ellenőrizni, hogy rendben befejeződött-e a funkció, vagy sem. És hogy valami hasznosat is mondjak: töröld ki ezt az egészet úgy, ahogy van. Töltsd le erről az oldalról az io.dll-t, Delphi prototípusok is vannak a dokumentációban, aztán másold be a System32-be (persze kicsomagolva). Aztán a prototípusokat deklarálva már regiszterenként eléred a portjaidat, 0x378 számon az LPT adatregiszterét (D0...D7), 0x379 (azaz báziscím + 1) számon pedig a státuszt, és kész. Kategóriákkal egyszerűbb, mert pl. státuszregisztert aligha fogsz ReadFile hívással olvasni.
Szia!
Windows NT alatti rendszereken ez a legkönnyebb módja az LPT elérésének: program akarmi; uses crt; var adat:word; begin repeat readln(adat); asm mov ax,adat mov dx,$378 out dx,ax end; until adat=1000; end. Pascalban irtam, be kell írni egy számot és azt kiküldi LPT-re addig, amíg 1000-ret nem írsz be. Dez ez csak egy példa, ezt árírhatod Delphire is.
Io.dll, vagy hasonló segítség nélkül ez sem fog menni, ne felejtsd el a védett módot... Ha meg már van dll, minek az asm-et belekavarni.
jó, tudom, de mondtam hogy NT alatti rendszereken!
Ja, bocs Én nem úgy értelmeztem, hogy amelyik az NT előtt volt, hanem amelyik alatt az dolgozik...
Ez igy io.dll nelkul tenyleg nem fog mukodni. Nekem meg van oldva io.dll-el csak az a gaz, hogy a PCI-os LPT nem tudom kezelni vele.
Mondtam, a PCI egy másik történet.
Nagyon leegyszerűsítve: amikor ilyen eszközzel akarsz valamit csinálni, nem magának az eszköznek adsz parancsot, hanem a PCI-kontrollernek, ami a kártyán van. Ennélfogva az ő címére bármit írni tiszta hazárdjáték; nagy esélyed van rá, hogy érvénytelen vagy értelmezhetetlen utasítás lesz, és ha emiatt mondjuk blokkolja a PCI-alrendszert, akkor off lesz a gépnek. Valószínűleg emiatt jön nálad a reboot. Ilyen eszközzel csak úgy tudsz kommunikálni, ha ismered azokat a parancsokat, amiket egy-egy port eléréséhez meg kell neki adni, és azt küldöd; csakhogy, ezek úgymond sehol nincsenek dokumentálva. Olyan ez, mint amikor mikrovezérlős egységnek soros porton mondod meg, mit tegyen ki LCD-re; neked fogalmad sincs magáról az LCD meghajtásáról, ehelyett pl. karakterkódokat, pozíciókat, és írási parancsot küldesz. A végrehajtási rész teljesen rejtve marad.
Érdemes lenne a 74HTC573-as kimeneteit megtámogatni az ULN2003-as tranzisztorhíddal. S azzal kapcsolni a LED-eket. Ez az IC mindent tartalmaz ami egy hagyományos tranyós kapcsoló (illesztő) fokozatba kell! Kár, h. csak 7 kaput tartalmaz egy tok ... S ezért 10Db kell belőle. S a többi alkatrészed már medvan. Szerintem ez a leg helytakarékosabb megoldás!
ULN2003 A - L, adatlap.
Köszönöm szépen a segítségeket!
Még 1 kérdésem lenne, hogy a CD4099 demultiplexer EN bemente előtt van egy karika. Ha jól tudom az invertálást jelent, tehát akkor most be kell kötnöm még egy invertert is? ha igen milyet? Az nem jó, ha az EN-be ugye High kell, akkor csak simán azt kötöm be oda ami a D bementere is megy? Mert egy másik oldal(Link) közepén megtaláltam szinte ugyan ezt a kapcsolást és ott nem szerepel, lehet csak ki maradt. Mégegyszer köszönet a segítségért!
Az invertáló bemenet azt jelenti, hogy az oda kapcsolt logikai jel ellentétes azzal a funkcióval, amit okoz. Vagyis ha pl. EN, azaz Enable (engedélyező) bemenetnél tüntetik fel így, akkor nem a logikai 1, hanem a logikai 0 fogja az enedélyezést kiváltani (az 1 a tiltást eredményezi majd).
Azaz nem kell bele inverter, ha GND-re kötöd, folyamatosan engedélyezve lesz. A linkelt rajzon is oda van kötve, csak az invertáló jelleget nem jelölték.
Üdv!
Készítenék egy cnc vezérlőt az alábbi rajz alapján, a kapcsolás szimulátorban működik. Próbapanelon a digitális rész nem működik, meg tudná valaki nézni, hogy mi lehet a baj? Az IC-k amit használok 74157PC és 74HCT74N. A rajzon a 74157-es 15-ös lába nincs bekötve ezt próbáltam testre tenni akkor sem működik, ha +5 re teszem akkor sem. Köszi.
Ha irányt nem vált akkor a 15 lábat bizony testre kötném,meg nem értem hogy a printer portra menő két ellenállás miért nem egyforma. Ha teszteled az irányváltó optocsatoló kinyit rendesen? (tranzisztor kollektora kisebb mint 1 V?) (tápokat bekötötted )
A 7474-ek SET/RESET bemenetei a rajzon ugyan össze vannak kötve, de nem mennek sehová (legalábbis én nem látom). Azt a pontot, ha jól sejtem, H-ra kellene kötni, hogy a tárolók működhessenek.
A 7474 set reset lábait sem ártott volna tápra kötni (zavarok elkerülése)
Az ellenállás azért nem egyforma mert véletlenül más fajta lett betéve a rajzba.
Mint írtam a 15-ös láb le lett kötve testre, úgy sem ment. Csak a 2 db ic lett összeépítve egyenlőre, de nem akar működni. Csak melegszik.
Fordított táp, esetleg nem 5V hanem több,az első tranzisztorsor emittere nem 5V on van esetleg. áramfelvétel a két ic-nél max 30-40 mA ha több valamelyik ic kimenetét elkötötted .)Ha az ick melegszenek valószínű nem a kapcsolás hibás.
Sziasztok. Meg mindig az LPT-vel kuzdok. Az lenne a kerdesem, hogy hogyan tudnam manualisan(nem a PCrol) megvaltoztatni, az adatregisztrer erteket, vagy csak valamelyik labat 1-esrol 0-ra allitani?
Vagyis van egy láb az LPT porton, ami egy bemenet, s annak a szintjét változtatni?
Ha egy bemenet sehova sincs kötve, az H szintre "húzódik fel" ezt az egyest le is olvashatod a regiszterből, ha nincs épp belül invertálva. Az adatbemenet nincs invertálva, de a Status és a Control regiszter egyes bitjei ilyenek. Ha ezt a bemenetet testre kötöd, akkor kerül L szintre a láb. Ily egyszerű. A test kivezetések ott is vannak a porton, (az utolsó 8 lábon) sajnos a +5V nincsen odavezetve, igy a H szint beállítása csak a belső felhúzó ellenállásokkal lehetséges. (vagy kihúzzuk az alaplapról a tápot, de ezt most hagyjuk)... |
Bejelentkezés
Hirdetés |