Potřeboval bych pomocí ASM ovládnout porty, abych moch přes LPT nebo COM spojovat kontakty na externím obvodu.... potřebuju prostě vysílat signály 1/0 a spojovat je na určenou dobu bez přerušení
díky
Printable View
Potřeboval bych pomocí ASM ovládnout porty, abych moch přes LPT nebo COM spojovat kontakty na externím obvodu.... potřebuju prostě vysílat signály 1/0 a spojovat je na určenou dobu bez přerušení
díky
Paralelny port je easy. Vacsinou je LPT1 na adrese BASE=378h.
8 datovych bitov sa ovlada vystupom na port BASE:
Na porte BASE+1 je stav VSTUPNYCH pinov.Kód:mov dx,378h
mov al,55h ; <- hodnota
out dx,al
Portom BASE+2 sa ovladaju vystupne riadiace signaly:
Citace:
Bitfields for parallel interface control port:
Bit(s) Description (Table P0659)
7-6 reserved
7 (see PORT 037Bh bit 7)
5 (PS/2) enable bidirectional port
(also requires enabling via PORT 0102h)
4 enable IRQ (via -ACK)
3 select printer (SLCT IN line)
2 =0 initialize printer (-RESET line)
1 automatic line feed
0 strobe (must be set for minimum of 5 microseconds)
výborně, to sem tak ňák věděl, ale jak to dopadne v reálu? Co se stane když do LPT prostě zapíchnu diodu(třeba i přes tranzistor)? Rozsvítí se? Nebo bude blikat?Citace:
Původně odeslal Rainbow
Ked zapojis LEDku na D0 a potom tam vysles jednotku, tak bude svietit.
a kolik jich můžu teoreticky připojit na LPT?Citace:
Původně odeslal Rainbow
Jen bych upozornil, ze cteni datovych linek podporuje az specifikace EPP/ECP, coz neska umi kazda deska, ale je to taky treba povolit v BIOSu!
Tehda sem se hodne divil proc mi to necte....
Pokud potrebujes zapojit vic vystupu, lze to resit pres nejaky expander/registr. Pokud napr. vyuzijes 4 ridici linky LPT pres dekoder 4bit/1z16ti k ovladani zapisu bufferu 74244 (nebo 74245?), tak muzes teoreticky ovladat az 128 vystupu, to by ti mohlo stacit ne?
:idea:
no já potřebuju používat PC jako spínač.. Konkrérně bych na něj připojil dálkové ovládání od robotků (vysvětlování by bylo na dlouho) a pak by je řídil program, který by předával instrukce ovladači v ASM (neumí to i Perl?) a ten prostě spojí potřebné kontakty. Problém je v tom, že těch spínaču je potřeba ovládat něco přes 20....Citace:
Původně odeslal RayeR
kde se dá splašit ten dekodér (nebo jak ho urobit) a může to fungovat jako přepínač (občas by bylo sepnuto víc spínačů, takže to vlastně přepínač neni...)?
Pockej, ti to nakreslim,
edit: sem to trochu prekreslil
http://www.volny.cz/xfer/foto/portexp.gif
edit:
Tak do 32 linek ani nemusis mit dekoder na 1zN, staci jen registry.
Je to sada 8-mi klopnych obvodu D, ktera se ovlada spolecnou nozickou.
Melo by to mit hranovy spousteni. Prodava se jako integrovny obvod TTL, existuje vic variant 74374 a 74574. Varianta 574 je vyhodnejsi v tom, ze na jedne strane pouzdra jsou jen vstupy a na druhe jen vystupy, takze se dela snadnejs tistak.
Funguje to tak, ze nejprve na port (datovy vystup) poslels nejaky 8bit slovo, a pak pomoci aktivace urcity ridici linky zapises informaci z portu do danyho registru. Registr si pak informaci pamatuje nezavisle na vystupu portu.
Dyz chces treba rosvitit LED na vystupnim portu P8 (ostatni zustanou zhasly), tak na vystup LPT poses cislo 01h a aktivujes ridici linou druhy registr.
Ale pozor, tato konstrukce umoznuje jen zapis, ne cteni! Takze si budes muset nekde v pameti uchovavat stav vsech registru, abys moh s nima provadet AND/OR operace. Tzn. kdyz neco zapises na port, tak si to taky zapises i do pameti.
jestli sem to dobře pochopil tak přepíná mezi (třeba) LEDkama.. Takže můžu nebo nemůžu spustit třeba 4 najednou? Nebo všech 20?
A pak už jen posílám normálně data (i z Perlu) přímo na LPT?
ja vůbec nepotřebuju nic získávat z venčí..já potřebuju jen rosvicet LEDky, který zrovna potřebuju.
Kde se dá ten převodník sehnat? Upozorňuju, že sem z Jeblonce...
Muzes nastavovat kazdej vystup zvlast i vsechny naraz, ale je treba pochopit ze x86 nema instrukce setbit/clearbit jako naky mikropocitace, takze abys zmenil 1 bit _nezavisle_ na ostatnitnich tak musis provist toto:
nastaveni bitu na 0:
1) nacist port
2) provist logicy soucin puvodnich dat a masky, napr. AND 11111101b vynuluje 1.bit
3) takto modifikovana data zapsat zpet na port
nastaveni bitu na 0:
1) nacist port
2) provist log. soucet puv. dat s maskou, napr OR 00000010b nastavit 1.bit
3) zapis na port
kdyz tedy nemuzes pres jednosmerne buffery cist, musis si zapsanou hodnotu uchovavat v pameti.
Tusim ze GM electronic ma pobocku v Liberci... kdyz tak mrkni na www.gme.cz
Je to brouk 2x10 nozicek, Napaji se 5V
no výborně to je přeně co sem potřeboval!... tohle není zrovna moje parketa=> moch bys mi prosím trochu osvětlit ten nákres? Konkrétně co kam připojit.Všechny datový piny můžu připojit na stejnej kabel nebo je to jen zjednodušený a musim dat. pin 1 na nožičku 2 převodíku (nebo co to je)? A jsou prosím ty LPT-CTRL piny? Teda spíš kde...
A jako zemění (0V) můžu použít jakýkoliv datový zemění?
A na tom GME můžu prostě říct to číslíčko a oni budou vědět?
Ta tlusta cara je symbol sbernice, to znamena ze propojis spolu vsup 1D IC1
s 1D IC2 a 1D IC3 a to pak na LPT pin D0. dal zas propojis vsechny 2D na LPT D1 az po 8D na LPT D7.
Piny CLK tech obvodu muzes libovolne zapojit na ridici vyvody LPT: /STROBE, /AUTOFD, /INIT, /SELIN (nejaky tri si vyber)
Nakonec propojis zem tech obvodu se zemi LPT, jedno kterou, viz vyse link na zapojeni LPT. Bohuzel LPT nema napajeni, takze budes muset pouzit bud externi zdroj 5V nebo vytahnout si 5V z PC zdroje ci konektoru klavesnice.
Napajeni tech obvodu je pin 10=zem, pin 20=+5V (v sema se obvykle nekresli). A cisluje se to tak, ze si obvod postavis pred sebe nozickama na atul tak, aby zarez-klic v kratsi hrane smeroval od tebe. Pak cislujes z leva ze shora 1-10 a pak na prave strane zdola nahoru 11-20. Snad je to pochopitelny :)
V prodejne staci rict "3x integrovany obvod 74574".
výborně, teď už to chápu. Moooc děkuju za pomoc!
Ještě jedna technická drobnost: jak ten čip zhruba velkej? Potřebuju vědět, jestli si musim nechat udělat další plošňák nebo si to můžu spájet "doma na koleně" :-)
Mno jaxem rikal, 2x10 nozicek. Ty maji standardni roztec 2,54mm, takze cely pouzdro bude mittak 2,5x1cm. Stacilo by to udelat na nakou univerzalni desticku.
nevim jestli sem ještě něco přehlídnul, ale když na toho broučka připojim třeba diodu, tak na jednu nožičku připojim jeden kontakt diody a druhej kontakt připojim na nějaký zemění? Otázka je na který... nebo je to jedno?
A čistě teoreticky, pokud má LPT víc řídících linek, tak můžu připojit ještě jednoho brouka, nebo už je to mimo rozsah kódování?
No vsechny napeti sou samozrejme vztazeny vuci zemi. Tech je na PC LPT asi 9 a vseci sou propojeny takze si staci vybrat. katodu LED pripojis tedy na nakou tu zem a anodu pres odpor na vystupni nozicku.
Jo bez dalsich soucastek muzes klidne jeste jeden 8bit regist pridat a jeho CLK napojit na zbylou vystupni ridici linku LPt a pak buds mit 32 vystupu.
takže napájet to budu asi přes COM (tam je 5V pokud vim) a místo diod tam napojim tranzistory (asi s odporem, abych to neodpálil do věčných lovišť) a bude z toho hi-tech přepínač....
Nevíš jestli by s tim uměl zacházet perl? Ten ASM mi tam začíná bejt nesympatickej.....
Tak bacha, na COM zadnejch 5V neni. To si to vytahni treba z klavesnice.
Jak vypada perl netusim, btw by me vubec zajimalo jak se v linuxu dela primy pristup na porty a do pameti a pod. legrace...
aha, tak to sem se asi překouknul...
já si vyvedu ze zdroje..
jinak moc děkuju a vzpomenu si na tebe v závěti :o)
No ze zdroje to bude asi nejlepsi, pac dybys slusnul to napajeni klavesnice, tak ti prehori pojistka na MB nebo rovnou kus tistaku...