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