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:
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:
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:
My musimy dopisać jeszcze zlportio czyli będzie wyglądać to tak:
Teraz procedura do wysyłania sygnałów(5V) na Piny.
Procedura wpisujemy między begin a end;
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:
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;
A do pozostałych 8 wpisujemy procedurę wyłączenia czyli $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
Jeśli czegoś nie rozumiecie Proszę pisać na GG:307714, chętnie pomogę.
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:
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:
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