103_104.PDF

(154 KB) Pobierz
PC-clock
P R O J E K T Y C Z Y T E L N I K Ó W
Dział „Projekty Czytelników” zawiera opisy projektów nadesłanych do redakcji EP przez Czytelników. Redakcja nie bierze
odpowiedzialności za prawidłowe działanie opisywanych układów, gdyż nie testujemy ich laboratoryjnie, chociaż
sprawdzamy poprawność konstrukcji.
Prosimy o nadsyłanie własnych projektów z modelami (do zwrotu). Do artykułu należy dołączyć podpisane oświadczenie,
że artykuł jest własnym opracowaniem autora i nie był dotychczas nigdzie publikowany . Honorarium za publikację
w tym dziale wynosi 250,− zł (brutto) za 1 stronę w EP. Przysyłanych tekstów nie zwracamy. Redakcja zastrzega sobie
prawo do dokonywania skrótów.
PC−clock
W†artykule
przedstawiamy niezwykle
pomys³owy projekt zegara
wspÛ³pracuj¹cego
z†komputerem PC, ktÛry
wyúwietla w†czasie
dzia³ania komputera
bieø¹cy czas systemowy
ustawiony w†jego zegarze
pok³adowym.
Projekt
105
Schemat elektryczny ze-
gara pokazano na rys. 1 .
Przed omÛwieniem jego bu-
dowy, krÛtko przedstawimy
interfejs LPT. Interfejs LPT,
czyli rÛwnoleg³y port drukar-
kowy, w†starszych modelach
komputerÛw†PC by³ monto-
wany jako dodatkowa karta
i†konfigurowany zworkami.
We wspÛ³czesnych kompute-
rach jest zintegrowany z†p³y-
t¹ i†konfigurowany z†poziomu
BIOS-a. BIOS ma standardowo
okreúlone trzy porty rÛwnoleg-
³e: LPT1, LPT2 i LPT3. W†cza-
sie startu systemu (POST - Po-
wer On Self Test ) program
umieszczony BIOS-ie testuje je
w†kolejnoúci adresÛw: 3BCh,
378h, 278h. Adresy poszcze-
gÛlnych portÛw znajduj¹ siÍ
w†czterech kolejnych dwubaj-
towych zmiennych pocz¹wszy
od adresu 0:0408H.
Standardowo komputer PC
posiada jeden port LPT o†ad-
resie 378h i†przerwaniu IRQ7.
Dodaj¹c kolejny standardowy
port LPT2 powinien byÊ usta-
wiony adres 278h i†przerwa-
nie IRQ5, kolejny port LPT3
powinien mieÊ adres 3BCh
i†dowolny wolny numer prze-
rwania IRQ. Aby zainstalo-
waÊ port LPT4 i†mÛc np. ko-
rzystaÊ z†przerwaÒ obs³ugi-
wanych przez BIOS, trzeba
najpierw za pomoc¹ odpo-
wiedniego programu umieú-
ciÊ jego adres w†zmiennej
o†adresie 0:0410H.
Sygna³y LPT s¹ wyprowa-
dzone na 25-stykowe z³¹cze
szufladowe. Zakres napiÍʆod
0V do†ok. 3,5 V, czyli zgodny
ze standardowymi poziomami
TTL. Maksymalna obci¹øalnoúÊ
pr¹dowa wyjúÊ mieúci siÍ w
przedziale 10...30 mA, a†dziÍki
Rys. 1
List. 1. Program SWG_V1.CPP
#include<dos.h>
#include<stdio.h>
extern unsigned _heaplen=600;//1024;
extern unsigned _stklen=300;//512;
void interrupt _1c(...);void interrupt (*old_1c)(...);
char t[]={63,6,91,79,102,109,125,39,127,111};//ksztalt cyfer
char q,w,s,z,j=1,i=31;
#define LPT 0x378 //Adres portu LPT
void main()
{
old_1c=getvect(0x1c);setvect(0x1c,_1c);
keep(0,(_SS+((_SP)/16)-_psp)-30);
}
void interrupt _1c(...) //funkcja zegara
{
if(j==1) {outport(LPT+2,4);outport(LPT,t[s]);
outport(LPT+2,1+4);
if(i>30)
{asm {mov ah,2;int 1ah;mov q,ch;mov w,cl} s=q>>4;z=w>>4;
i=0;q=q-(s<<4);w=w-(z<<4);}} //odczyt godziny
if(j==2) {outport(LPT+2,4);outport(LPT,t[q]);
outport(LPT+2,2+4);}
if(j==3) {outport(LPT+2,4);outport(LPT,t[z]);i++;
outport(LPT+2,0);}
if(j==4) {outport(LPT+2,4);outport(LPT,t[w]); j=0;
outport(LPT+2,8+4);}
j++;
old_1c();
}
Elektronika Praktyczna 12/2002
103
32284661.003.png 32284661.004.png 32284661.005.png 32284661.006.png 32284661.001.png
P R O J E K T Y C Z Y T E L N I K Ó W
Tab. 1. Przypisanie numerów
styków gniazda DB25
poszczególnym bitom
rejestrów LPT1
Bit Rejestr
378h 379h 37Ah
0 2 − (1)
1 3 − (14)
2 4 − 16
3 5 15 (17)
4 6 13 IRQ
5 7 12 −
6 8 10 IRQ −
7 9 (11) −
wbudowanym zabezpiecze-
niom przypadkowe zwarcie nie
powinno ich uszkodziÊ.
Bezpoúrednie sterowanie
portu LPT odbywa siÍ za po-
moc¹ instrukcji Out (zapisz -
ustaw stany logiczne na sty-
kach) i† In (odczytaj - sprawdü
stany logiczne na stykach).
Standardowy pory LPT1
(378h) ìwidzianyî jest od
strony programowej jako trzy
rejestry umieszczone pod ko-
lejnymi adresami: 378h - da-
ne do drukarki (zapis), 379h
- rejestr statusu drukarki (od-
czyt), 37Ah - sterowanie dru-
karki (odczyt/zapis)- tab. 1 .
Styki 18...25 z³¹cza DB25 s¹
do³¹czone do masy, a†sygna³y
ujÍte w†nawiasy s¹ zanegowa-
ne. Wyjaúnienia wymaga bit
4†rejestru 37Ah - ustawienie
List. 2. Program SWG_V2.CPP
#include<dos.h>
#include<stdio.h>
extern unsigned _heaplen=600;//1024;
extern unsigned _stklen=300;//512;
void interrupt _7(...);
char
t[]={63+128,6+128,91+128,79+128,102+128,109+128,125+128,39+128,127+128,111+128};
// ksztalt cyfer
char q,w,s,z,j=1,i;
#define LPT 0x378 //adres portu LPT
#define IRQ 7 //numer przerwania IRQ
void main()
{
outport(LPT,128);//napiecie zasilania dla NE555
outport(LPT+2,16);//LPT moze przyjmowac przerwania
_dos_setvect(8+IRQ,_7);
outportb(0x21,inportb(0x21) & (255-(1<<IRQ)) );
keep(0,(_SS+((_SP)/16)-_psp)-30);
}
void interrupt _7(...)
{
if(j==1) {outport(LPT+2,4+16);outport(LPT,t[s]);
outport(LPT+2,1+4+16);
if(!i)
{asm {mov ah,2;int 1ah;mov q,ch;mov w,cl} s=q>>4;z=w>>4;
q=q-(s<<4);w=w-(z<<4);}}//odczytaj zegar
if(j==2) {outport(LPT+2,4+16);outport(LPT,t[q]);
outport(LPT+2,2+4+16);}
if(j==3) {outport(LPT+2,4+16);outport(LPT,t[z]);i++;
outport(LPT+2,0+16);}
if(j==4) {outport(LPT+2,4+16);outport(LPT,t[w]); j=0;
outport(LPT+2,8+4+16);}
j++;
outportb(0x20,0x20);
}
tego bitu na ì1î uaktywnia
przyjmowanie przerwaÒ przez
port LPT.
Program steruj¹cy prac¹
zegara zosta³ napisany w†jÍ-
zyku C++. Jego zadaniem jest
takie sterowanie portem LPT,
aby na do³¹czonym do niego
czteropozycyjnym wyúwietla-
czu LED by³ w†sposÛb ci¹g³y
wyúwietlany bieø¹cy czas od-
czytany z†RTC ( Real Time
Clock ) komputera. Poza tym
program powinien tylko
w†minimalnym stopniu utrud-
niaÊ korzystanie z†komputera.
Zapewnia to prosty program
rezydentny (zajmuje w†pamiÍ-
ci ok. 5†kB).
Program przygotowano
w†dwÛch wersjach. Cykliczne
wywo³ywanie programu
w†pierwszej wersji realizowa-
ne jest przez przerwanie ze-
gara 1Ch (program
SWG_V1.CPP - list. 1 ). Prze-
rwanie to wywo³ywane jest 18
razy na sekundÍ. Takie roz-
wi¹zanie dzia³a poprawnie,
ale powoduje wyraüne migo-
tanie cyfr na wyúwietlaczu,
ze wzglÍdu na jego multiplek-
sowe sterowanie. ZwiÍkszenie
czÍstotliwoúci wystÍpowania
tych przerwaÒ moøe zaburzyÊ
pracÍ RTC komputera. Lep-
szym rozwi¹zaniem jest do³¹-
czenie do wejúcia IRQ styku
Centronics generatora przebie-
gu prostok¹tnego, ktÛry cyk-
licznie bÍdzie wywo³ywa³
przerwanie IRQ7 (IRQ7 jest
standardowo zwi¹zane
z†LPT1) z†czÍstotliwoúci¹ oko-
³o 100 Hz. Kaøde przerwanie
powoduje uruchomienie pro-
gramu obs³uguj¹cego wyúwiet-
lacz. Taki sposÛb dzia³ania re-
alizuje program SWG_V2.CPP,
ktÛry pokazano na list. 2 .
Do zasilania generatora
wykorzystano liniÍ danych D7
(styk 9). WersjÍ ürÛd³ow¹
i†w†postaci skompilowanej
(w†modelu Tiny) obydwu pro-
gramÛw (dla DOS!) publikuje-
my na CD-EP12/2002B.
Prezentowane programy
stanowi¹ tylko przyk³ad ko-
rzystania z†LPT do celÛw in-
nych niø drukowanie i†nie za-
implementowano w†nich ta-
kich funkcji jak automatyczne
wykrywanie portu LPT, auto-
matyczne odinstalowanie itp.
Na testowanych komputerach
porty by³y ustawione w†tryb
pracy standard i†nie ma ko-
niecznoúci stosowania bar-
dziej zaawansowanych trybÛw
wymiany informacji, jak np.
EPP/ECP.
S³awomir Zimoñczyk
WYKAZ ELEMENTÓW
Rezystory
7x200
Kondensatory
2x100nF
220
F/10V
Półprzewodniki
4xmały czterocyfrowy
wyświetlacz multipleksowany
LED ze wspólną katodą lub
cztery pojedyncze
wyświetlacze
NE555 (ULY7855N)
Różne
Wtyk DB25
104
Elektronika Praktyczna 12/2002
2x47k
Elektronika Praktyczna 2/98
32284661.002.png
Zgłoś jeśli naruszono regulamin