logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Poradnik jak napisać program sterujący LPT delphi

Manio95 17 Lut 2010 22:37 4947 4
REKLAMA
  • Włączanie poszczególnych Pinów LPT

    Witam
    Od jakiegoś czasu szukałem jak podać sygnał(5v) poszczególne Piny LPT np.żeby załączać diody...Aż w końcu do tego doszedłem i postaram się podzielić z wami moją wiedzą.
    Na początek jest nam potrzebny Adres portu.Przeczytamy go w tabeli:
    Poradnik jak napisać program sterujący LPT delphi
    U mnie jest to LPT1 więc będę posługiwać się adresem 378.
    Możemy wykorzystać 8 Pinów Od 2-9 czyli od D0 do D7 zdjęcie przedstawia wyjścia:
    Poradnik jak napisać program sterujący LPT delphi
    Powiedzmy że chcemy korzystać z programu w Windowsie 98 i Xp, NT to musimy dodać bibliotekę, która zawiera funkcje czytania i zapisu do dowolnego portu.
    Jest ona dostępna tu:http://www.sourcecodeonline.com/download.php?id=39580&n=1

    Będziemy potrzebować dwie funkcje:
    -ZLIOStarted, która rozpoznaje wersję systemu operacyjnego i decyduje, w jaki sposób procedury będą się odwoływać do rejestrów, zwraca informację o poprawnym bądź niepoprawnym załadowaniu sterownika
    - portwriteb(adres,wartość), wpisuje wartość pod wskazany adres

    Użycie sterownika jest bardzo proste. Należy skopiować pliki zlportio.pas, ddkint.pas do katalogu z projektem (domyślnie jest to C:Program FilesBorlandDelphi7Projects , a plik zlportio.sys do katalogu z projektem. Ten ostatni powinien znajdować się w katalogu z Twoją aplikacją.(to znaczy że musisz go nosić z programem.)

    W programie musisz dołączyć do używanych modułów zlportio i przed pierwszym zapisem do portu wywołać procedurę ZLIOStarted.

    Domyślnie wygląda to tak:






    Cytat:
    unit Unit1;

    interface

    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;

    type
    TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    private
    { Private declarations }
    public
    { Public declarations }
    end;

    var
    Form1: TForm1;

    implementation

    {$R *.dfm}

    procedure TForm1.FormCreate(Sender: TObject);
    begin

    end;

    end.


    My musimy dopisać jeszcze zlportio czyli będzie wyglądać to tak:

    Cytat:
    unit Unit1;

    interface

    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, zlportio;

    type
    TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    private
    { Private declarations }
    public
    { Public declarations }
    end;

    var
    Form1: TForm1;

    implementation

    {$R *.dfm}

    procedure TForm1.FormCreate(Sender: TObject);
    begin

    end;

    end.


    Teraz procedura do wysyłania sygnałów(5V) na Piny.
    Procedura wpisujemy między begin a end;

    Cytat:
    if ZLIOStarted then
    Label1.Caption := 'Sterownik załadowany poprawnie.'
    else
    Label1.Caption := 'Nie można załadować sterownika.';
    portwriteb(Port,bit);

    W razie braku Pliku zlportio.sys wyświetli się Nie można załadować sterownika a gdy wszystko będzie ok wyświetli się Sterownik załadowany poprawnie do tego potrzebne jest zrobienie w programie Label1 gdzie będzie wyświetlany status.
    Teraz jaki bit to jaki Pin?
    No właśnie ja podam wszystkie informacje:

    Pin D? Bit
    2 D0 $1
    3 D1 $2
    4 D2 $4
    5 D3 $8
    6 D4 $10
    7 D5 $20
    8 D6 $40
    9 D7 $80


    A więc jeśli chcemy wysłać sygnał na Pin 2 wysyłamy $1 a jeśli chcemy wysłać sygnał na Pin 9 to wysyłamy $80 itp, ale co jeśli chcemy wysłąć sygnały na kilka Pinów?Musimy dodać bity np.chcemy załączyć Pin 3 i 7 to musimy dodać z Pinu 3 $2 i z Pinu 7 $20 czyli $2+$20=$22 i tak wpisujemy.Jeśli chcemy wysłać sygnał na co drugi Pin to dodajemy co drugi bit czyli to wyjdzie $55 i taką wartość należy wpisać.Możemy wysłać sygnał na dowolną liczbę Pinów od jednego Pinu do ośmiu włączonych pinów.
    Przykład:
    Wysyłamy sygnał na Pin 6:

    Między begin a end; wpisujemy:

    Cytat:
    if ZLIOStarted then
    Label1.Caption := 'Sterownik załadowany poprawnie.'
    else
    Label1.Caption := 'Nie można załadować sterownika.';
    portwriteb($378,$10);

    A co jeśli chcemy samemu włączać/wyłączać poszczególne Piny?

    Musimy w Delphi dodać 16 button (w zakładce na górze)i do każdego po kolei wpisywać między begin a end;
    Cytat:
    if ZLIOStarted then
    Label1.Caption := 'Sterownik załadowany poprawnie.'
    else
    Label1.Caption := 'Nie można załadować sterownika.';
    portwriteb($378,(tą wartość wpisujemy po kolei do każdego przycisku));


    A do pozostałych 8 wpisujemy procedurę wyłączenia czyli $0:
    Cytat:
    if ZLIOStarted then
    Label1.Caption := 'Sterownik załadowany poprawnie.'
    else
    Label1.Caption := 'Nie można załadować sterownika.';
    portwriteb($378,$0);

    Oczywiście do wyłączania wystarczy również tylko jeden button

    A oto przykładowy program do załączania Pinów dwójkami(2 i 6, 3 i 7, 4 i 8 )
    wraz z kodem programu (w programie punkty sygnalizujące włączenie i wyłączenie kanału.Program pisany na szybko i posiada wiele niedociągnięć!)
    http://www.megaupload.com/?d=45EREM9T
    (przepraszam że z takiego hostingu ale żeby dodać tu normalnie trzeba instalować jakiś program a ja mam małe kłopoty z PC :( )
    Kod programu który wysyła sygnał na co drugi Pin

    Cytat:
    unit Unit1;

    interface

    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, StdCtrls, Zlportio;

    type
    TForm1 = class(TForm)
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
    end;

    var
    Form1: TForm1;

    implementation

    {$R *.dfm}

    procedure TForm1.FormCreate(Sender: TObject);
    begin
    if ZLIOStarted then
    Label1.Caption := 'Sterownik załadowany poprawnie.'
    else
    Label1.Caption := 'Nie można załadować sterownika.';
    portwriteb($378,$55);
    end;

    end.


    Jeśli czegoś nie rozumiecie Proszę pisać na GG:307714, chętnie pomogę.

    Fajne? Ranking DIY
    O autorze
    Manio95
    Poziom 21  
    Offline 
    Manio95 napisał 547 postów o ocenie 127, pomógł 21 razy. Mieszka w mieście Rybnik. Jest z nami od 2008 roku.
  • REKLAMA
  • #2 9985844
    komor24
    Poziom 1  
    Nie rozumiem tego zdania z skopiowaniem Zlportio
  • REKLAMA
  • #3 9986941
    Manio95
    Poziom 21  
    Pisałem to już dawno i widzę tu troszkę niedociągnięć.
    Chodzi o coś takiego:
    Należy skopiować pliki zlportio.pas, ddkint.pas i zlportio.sys do katalogu z projektem (domyślnie jest to C:Program Files/Borland/Delphi7/Projects. Ten ostatni (zlportio.sys) powinien znajdować się w katalogu z Twoją aplikacją (to znaczy że musisz go nosić z programem).
  • REKLAMA
  • #4 10338387
    heliotop
    Poziom 9  
    Witam
    Mam pewien problem, gdyż u mnie w laptopie nie ma portu LPT, tak więc korzystam z konwertera usb>LPT.

    Mam Windows XP SP3

    Konwerter został wykryty jako Uniwersalna Drukarka USB.

    Pod jaki adres powinien się odwołać by móc dawać sygnał na poszczególne bity LPT?
  • #5 10339324
    Piotrek1970
    Poziom 18  
    Możesz mieć problemy z tym konwerterem bo jest widoczny jako drukarka, kiedyś próbowałem na podobnym uruchomić programator STK200. Sprawdź jak działa Twój program na monitorze portu LPT. Pewnie skończy się na FTDI. Dawno już nic nie pisałem na LPT więc więcej nie pomogę. Pzdr., Piotrek
REKLAMA