8-KANALNI U/I INTERFEJS NA PARALELNOM PORTU
Šema 8-kanalnog interfejsa kojim se
može kontrolisati 8 ulazno-izlaznih kanala na paralelnom portu prikazana je na
donjoj slici.
Interfejs koristi dva kola i to: CD4094 koji je tipični serijski
registar sa paralelnim izlazima na koje su spojene led dioda preko
odgovarajućih otpornika i kolo CD4021 koji
je takođe serijski registra ali sa upotrebom paralelenih ulaza. Za slanje
podataka na led diode(izlaz) neophodno je jednu po jednu cifru binarnog broja
dovesti na D ulaz kola IC1(preko 1-bita Data porta),
generistai clock signal za svaki bit(preko 2-bita Data porta) i na kraju izdati
Strobe signal(3-bit Data porta) koji
će stanja serijskog registra proslediti na izlaz tj. na led diode. Za
očitavanje stanja prekidača koristimo IC2
kolo na čije paralelne ulaze dovodimo stanja prekidača sa DIP-a, tj. ako je prekidač uključen stanje je 0 inače je stanje 1.
Stanja se očitavaju preko Status porta tj. prvog njegovog četvrtog bita, pri
čemu se mora generistai clock signal preko 4-tog bita Data porta kao i signal Par/Ser preko 5-tog bita Data porta.
Specifikacija
neophodnih komponenti za ovaj interfejs data je u donjoj tabeli:
Rb. |
Komponenta |
Količina |
1. |
IC1 – CD4094 |
1 kom |
2. |
IC2 – CD4021 |
1 kom |
3. |
DIL-16 podnožje |
2 kom |
4. |
R1 - R8 - 330 W |
8 kom |
5. |
R9 – R16 – 10k |
8 kom |
6. |
D1-D8 led diode crvene fi 5 mm |
8 kom |
7. |
SW1 – 8-polni DIP prekidač |
1 kom |
8. |
Dvopolna redna stezaljka |
1 kom |
11. |
DB-25 konektor muški pod uglom 90° za PCB |
1 kom |
12. |
Vitroplast pločica 100 x 160 mm |
1 kom |
Program za kontrolu ovog interfejsa
napisan je u Delphi-u i njegovim
pozivom dobićemo sledeću sliku.
Pritiskom na neku od dioda od D1 – D8 menjamo njeno stanje tj. ako je
crvena data led dioda će svetliti na interfejs pločici inače neće. Pritiskom na
taster Upisi biće preneseno stanje
dioda sa ekrana na interfejs pločicu. Pritiskom na taster Ocitaj biće očitano stanje prekidača i ako je prekidač uključen
njegovo stanje biće prikazano plavom bojom.
Glavni deo koda programa za
upravljanje interfejsom je sledeći.
' '
//-----------Procedura aktiviranja
forme---------------- procedure
TForm1.Aktiviranje_Forme(Sender: TObject); begin LPTAdresa :=$378; SPTAdresa:=LPTAdresa +
1; For i:=1 To 8 Do s[i]:=0; PortOut(LPTAdresa, 0); end; //-----------Procedura zadrske programa u
msec---------- procedure TForm1.Sacekaj(msecs:integer); var FirstTickCount:Longint; begin
FirstTickCount:=GetTickCount; repeat
Application.ProcessMessages; until
((GetTickCount-FirstTickCount)>=Longint(msecs)); end; //-----------Procedura inicijaliziranja
ocitanja----------- procedure TForm1.Inicijaliziraj_ocitanja; begin vrednost:=0;
vrednost_bit:=128;
Prekidac1.Brush.Color := clWhite;
Prekidac2.Brush.Color := clWhite;
Prekidac3.Brush.Color := clWhite;
Prekidac4.Brush.Color := clWhite;
Prekidac5.Brush.Color := clWhite;
Prekidac6.Brush.Color := clWhite;
Prekidac7.Brush.Color := clWhite; Prekidac8.Brush.Color
:= clWhite;
broj:=0; {Strobe =1}
PortOut(LPTAdresa, broj); Sacekaj(10);
broj:=16; {Strobe =0}
PortOut(LPTAdresa, broj); end; //-----------Procedura citanja jednog
bita---------------- procedure TForm1.Ocitaj_bit; begin
broj:=12; {Clock =1}
PortOut(LPTAdresa, broj); Sacekaj(10);
broj:=4; {Clock =0}
PortOut(LPTAdresa, broj); end; //-----------Procedura postavljanja diode
D1---------------- procedure TForm1.Dioda1(Sender: TObject; Button:
TMouseButton; Shift: TShiftState; X, Y: Integer); begin If
D1.Brush.Color = clWhite Then Begin D1.Brush.Color := clRed; s[1]:= 1 End Else Begin
D1.Brush.Color := clWhite; s[1]:= 0 End; end; //-----------Procedura postavljanja diode
D2---------------- procedure TForm1.Dioda2(Sender: TObject; Button:
TMouseButton; Shift:
TShiftState; X, Y: Integer); begin If
D2.Brush.Color = clWhite Then Begin D2.Brush.Color := clRed; s[2] := 1 End Else Begin
D2.Brush.Color := clWhite; s[2] := 0 End; end; . . . //-----------Procedura slanja na
diode---------------- procedure TForm1.Posalji_na_diode(Sender: TObject); var i:integer; begin for i:=1 to
8 do begin If S[i]=1
then begin broj:=2;
PortOut(LPTAdresa, broj);
Sacekaj(3);
broj:=6;
PortOut(LPTAdresa, broj);
Sacekaj(3);
broj:=2;
PortOut(LPTAdresa, broj);
Sacekaj(3); end else begin broj:=0;
PortOut(LPTAdresa, broj);
Sacekaj(3);
broj:=4;
PortOut(LPTAdresa, broj);
Sacekaj(3);
broj:=0;
PortOut(LPTAdresa, broj);
Sacekaj(3); end; end; broj:=1; PortOut(LPTAdresa,
broj);
Sacekaj(100); broj:=0;
PortOut(LPTAdresa, broj); end; //-----------Procedura ocitanja stanja
prekidaca------------ procedure TForm1.Ocitaj_prekidace(Sender: TObject); begin
inicijaliziraj_ocitanja; ulaz:=0; ocitaj_bit;
ulaz:=PortIn(SPTAdresa); If (ulaz and
16)=16 then begin bit:=1;
Prekidac8.Brush.Color := clBlue; end else bit
:=0; ocitaj_bit;
ulaz:=PortIn(SPTAdresa); If (ulaz and
16)=16 then begin bit:=1;
Prekidac7.Brush.Color := clBlue; end else bit
:=0; . |
Program za podršku ovom
intefejsu možete preuzeti ovde.
http://vojo.milanovic.org
© Copyright, 2006 Milanović Vojo
All Rights Reserved