Zlportio odczyt

0

Witam mam pytanie co do procedury odczytu danych przez port Lpt za pomoca komponentu Zlportio.
Zapis i kontrola nad 8 diodami przez port lpt to były proste <ort>RZeczy</ort>. A odczyt??
Aby odczytac dane z portu lpt należy na nie go podac jakis sygnał znam sposób łatwy a zarazmem bezpieczny i prosty. Tylko program jak napisałem pokazuje ze nic nie ma na tym porcie. Sciagnolem z Net-u jakis prorogram to juz bylo lepiej bo pokazywal ze cos jest podawane na port.

I własnie tu moja <ort>proźba </ort>czy ktos próbował odczytac dane przez port lpt za pomoca tego komponentu Zlportio. Jesli tak to czy byłby tak uprzejmy zaprezentowac te kilka linijek procedury odczytu.
Z góry dzieki.

0

napisz cos wiecej... bo nawet nie wiem, piszesz np ze "podac jakis sygnał ".. jakis... wiesz jaki, czy nie?

na port wysylasz byte:255 (albo 0, wlasnie cholera nie jestem pewien) a potem odczytujesz bajt z portu.
dzielisz go na bity i masz stany dla pojedynczych pinow portu...

0

255 trzeba rzucić, jak dasz 0, to wszystkie wysłane na port jedynki zejdą do masy i nic nie odczytasz :).

0

Znaczy tak chce podac +5V na jeden z 8 bitów albo na wszyskie i zeby w programie wyswietliła mi sie wartośc od 0 do 255. A podawałem tak zwirejąc 13 pin online gdzie zawsze jest 5V (podobno) do jednego z bitów przez rezystor. (Ale zastosuje bufor pradowy ucy74244 bedzie bezpieczniej i z zewnetrzym zasilanie) Zmieniałem adresy bazowe portów ale duzo to nie dało bo po uruchomieniu programu wyswietlał jakas wartosc po zwarciu inna ale na kazdym z bitów taka sama.

po prostu jak ustawic port na odczyt program bym był sobie w stanie napisac. A jak <ort>kozystałem </ort>z gotowych programow nic nie działało chć używałem UserPort bo mam XP

0

Już skumałem o co chodzi. Przetestuje jak bedzie działać to rzuce tu kod programu. :-)

0

Do któregos z Pinów bitów podłączm +5V a do pinu 25 GND
To kod programu. Ale niestety nadal widze 0. Mozę mi ktos powiedzić gdzie popełniam błąd?? A może problem tkwi w tym które piny poza GND i Bit trzba podłaczyć. Będe wdzięczny za każda uwage.

var
B:Byte;

procedure TForm1.Button1Click(Sender: TObject);
begin
B:=portreadb($378);
Label1.Caption:=IntToStr(B);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Zlportio.ZlIOStarted:=True;
if Zlportio.zliostarted then
Zlportio.zlioportwrite($378+2,B,16)
else
Showmessage('bład');
end;
end.
0

Proponuję najpierw zapoznać się ze specyfikacją portu LPT, a później wyciągnąć z niej wnioski. Pierwsza lepsza str. to http://www.rafal.waw.pl/wynalazki/porty/
Podpowiedz:
00h -> rejestr danych (Data), służy do zapisu i odczytu, odczytywać może jedynie dane wpisane tam przez siebie.
Czyli:
Jeśli chcemy sterować diodkami, zapisujemy dane do rejestru bazowego (np. 0x378), jeśli chcemy dane odbierać, odczytujemy je z rejestru bazowy+1 (np 0x379) ktorego piny to: 10, 11, 12, 13, 32.

Jako ciekawostkę powiem, że tylko raz spotkałem się z kontrolerem umożliwiającym odczyt stanu z pinow (D0-D7) (na kosciach goldstara). Ponoć taki tryb "dual" można także włączyć w biosie, w niektorych plytach glownych, lecz jest to "poza standardem".
Pozdrawiam.

0

Tak ciekawe informacje na tej stronie.
10 ,11,12,13,32. Bazowy +1. Odczytuje dane. Czyli Na port LPT podaje sobie do pinu np10 +5V i podłaczam GND i powinen odczytywać czy tak??

A i jeszce jedno. Pobrałem program <ort>z tąd</ort> http://www.specosoft.com/en/zlportio.html
i teraz jak zupełnie nic nie ma podłaczonego do portu a dam Read
to dla:
378 mam 0 tu moge zapisac Ten zapis odczyt(To co sam ustawi)
379 mam 127 tu nie moge zpiasc (Odczyt)
37A mam 255 tu moge zapisc(Zapis i Odczyt)

0
jorgus1987 napisał(a)

379 mam 127 tu nie moge zpiasc (Odczyt)

Ponieważ bit 7 (busy) jest zanegowany. Podajesz +5V, odczytujesz 0.

0

O napisze tak Program mam nawet kilka autorzy pisali ze działa pod XP i mam napisany przez siebie.
Teraz prosze kogos zeby mi napisał w jaki sposób mam podłaczyc napiecie zewnetrzna +5 V do portu nie na które piny bo to wiem Ze ustawiam w rejestrze $378+2 watrosc bitu 5 na 1 przestawiam w ten sposób na odczyt a dane odczytuje z rejestru $378+1 z pinow 10,11,12,13,15 na nie mam opdawać to napięcie a no i jeszcze GND. Tylko chodzi mi o cos w rodzaju schematu jak to podłaczyć przez jaki rezystory czy moze do tego jeszce jakis tranzystor albo moze bufor prądowy po prostu układ który podaje mi +5V na port z zewnetrznym zasilaniem. Chciałbym wiedziec jak to ma wyglądć z góry dzieki

0
jorgus1987 napisał(a)

O napisze tak Program mam nawet kilka autorzy pisali ze działa pod XP i mam napisany przez siebie.
Teraz prosze kogos zeby mi napisał w jaki sposób mam podłaczyc napiecie zewnetrzna +5 V do portu nie na które piny bo to wiem Ze ustawiam w rejestrze $378+2 watrosc bitu 5 na 1 przestawiam w ten sposób na odczyt a dane odczytuje z rejestru $378+1 z pinow 10,11,12,13,15 na nie mam opdawać to napięcie a no i jeszcze GND. Tylko chodzi mi o cos w rodzaju schematu jak to podłaczyć przez jaki rezystory czy moze do tego jeszce jakis tranzystor albo moze bufor prądowy po prostu układ który podaje mi +5V na port z zewnetrznym zasilaniem. Chciałbym wiedziec jak to ma wyglądć z góry dzieki

wejsciami steruje sie napieciowo, one nie pobieraja pradu, wiec zadnych buforow pradowych czy rezystorow nie trzeba. Wystarczy, ze podasz +5V lub 0V na odpowiednie wejscie.

0

Jest udało sie :-) . Uporzadkuje program i napisze wszystko dokładnie :-) .

0

Program i sosób podłaczenia pozawala na odczyt z 5 bitów piny 10,11,12,13,15. z rejestru $378+1.
A podłaczam po prostu zwierajac kolejne piny do masy

unit Unit1;

interface

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

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

var
  Form1: TForm1;
   B:Byte;
implementation
{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
Zlportio.ZlIOStarted:=true;
if Zlportio.zliostarted then begin
Zlportio.zlioportwrite($378+$402,B,37);
Zlportio.zlioportwrite($378+$2,B,244);
Timer1.Enabled:=True;
end else begin
Showmessage('bład');
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
B:=portreadb($378+1);
Label1.Caption:=IntToStr(B);
end;
end.

Jak by ktos miał jakies ciekawe informacje to prosze pisac.
Pózniej spróbuje sie zajac odczytem przez 8 bitów. Pozdrawiam na razie.

0

A tak odcztywtywac z 8 bitów takze zwierajac do masy Ale z rejestru $378

unit Unit1;

interface

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

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

var
  Form1: TForm1;
   B:Byte;
implementation
{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
Zlportio.ZlIOStarted:=true;
if Zlportio.zliostarted then begin
Zlportio.zlioportwrite($378+$402,B,37);
Zlportio.zlioportwrite($378+$2,B,244);
Timer1.Enabled:=True;
end else begin
Showmessage('bład');
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
B:=portreadb($378);
Label1.Caption:=IntToStr(B);
end;

end.

1 użytkowników online, w tym zalogowanych: 0, gości: 1