Paralelni port

Rasprava o el. shemama, pitanja i diskusije. Ako ti treba neka shema, ovdje pitaj.

Moderators: pedja089, stojke369, [eDo], trax

skyline
Napredujem
Napredujem
Posts: 113
Joined: 08-03-2007, 17:10

Post by skyline »

Upravo to, treba zapravo inpout32.dll i on sadrzi 2 exportane fje In32 i Out32 preko kojih se upisuje, probao sam u delphiu i u C++ i radi savrseno :)

Eto, napokon nesto da mi uspije!!

Puno hvala tebi i traxu!!

Pozdrav


edit:
zaboravio sam na otpornik, znaci sad je bez otpornika i radi sve ok, e sad ajde pls mi jos pojasni sta se moze desit ako ga niti ne stavim i zasto je on potreban i kolki otpor mora pruzat (od-do), i koja je uloga njega tu... nov sam u elektronici pa ne razumijem puno stvari al strasno me zanima i puno ucim tako da cu brzo napredovat ;)
User avatar
MladaNada
Stariji član
Stariji član
Posts: 2529
Joined: 20-05-2006, 14:57
Location: Banja Luka RS , Novi Sad RS , Herceg Novi CG

Post by MladaNada »

Moze i bez otpornika , ali nije dobro ni za led ni za maticnu! Otpornik mozes uzeti od 680R (R znaci oma , K kilooma) do 1,5K otprilike! Uloga mu je da smanji struju (napon-omov zakon) u strujnom kolu!

Zanima me taj .dll , koju komandu u Delphiu koristis za slanje i citanje bita sa porta? Mozes li podici source kod svog programa u delphiu , ili citav projekat u formatu .dpr?
Moram si nabaviti kablove za paralelni i serijski port!

Za neiskustvo se ne sekiraj, ja sam znao jako malo (nista :D ) prije nego sto sam dosao na forum, a od tad se satra učeći, puno su mi pomogli ljudi sa foruma, najvise Stojke (sad ga vodim za 3 posta , nek se zna) :D :D :D :D :D Ozbiljno: Trax, Firkragg, buco, Tox master, Groovy...Izvinjavam se ako nekog nisam naveo!
I jos da napomenem da Firkragg SVE ZNA :D :D :D :D :D
skyline
Napredujem
Napredujem
Posts: 113
Joined: 08-03-2007, 17:10

Post by skyline »

hehe, imam nekog posla sad, okacit cu source kod za jedno pola sata, i to delphiev i iz C++-a zajedno sa tim .dll-om i sa objasnjenjem :))

pozdrav
User avatar
MladaNada
Stariji član
Stariji član
Posts: 2529
Joined: 20-05-2006, 14:57
Location: Banja Luka RS , Novi Sad RS , Herceg Novi CG

Post by MladaNada »

Thx!
skyline
Napredujem
Napredujem
Posts: 113
Joined: 08-03-2007, 17:10

Post by skyline »

Evo ga (ti podaci su mi na drugom kompu pa nisam mogo do njega sve do sad):

Ukratko,do windowsa NT mogao si lijepo iz assemblera pozvat par prekida i tako komunicirat sa paralelnim portom, odnosmo LPT-om i to je radilo sve do Win9x i pod DOS-om tako da si mogao iz pascala, delphia, C-a, basica, PHP-a, asp-a i svega ostalog pristupat portu, mogao si jednostavno (pascal primjer):
Program lpt1_output;

Uses Dos;

Var
addr:word;
data:byte;
e:integer;

Begin
addr:=MemW[$0040:$0008];
Val(ParamStr(1),data,e);
Port[addr]:=data;
End.


I to bi bilo dovoljno, iz assembera si tada to mogao sa par linija koda:
MOV DX,0378H
MOV AL,n
OUT DX,AL

iz basica sa:
OUT &H378, N
N je broj koji zelis upisat

kod C-a si mogao iz dos.h headera koristit:
outp(0x378,n);
ili pak
outportb(0x378,n);


No sa Windosima NT, odnosno XP to mozes zaboravit jer se rad sigurnosti programi dijele na ring0 (kernel mode-drajveri) i ring3(user mode-nasi programi, obicni .exe-i)! Znaci od windowsa nt portu i opcenito hardwareu si mogao pristupat preko direktnih poziva i to SAMO iz kernel moda. Da bi se to rjesilo potrebno je napisat drajver koji ce radit u kernel modu i koji ce komunicirat sa nasim programom koji radi u user modu, i to je napravljeno u obliku DLL-a (dynamic link library-a) ili pak u obliku Active X komponente => .ocx ekstenzija!!

inpout32_source_and_bins.zip taj fajl ti sadrzi taj .dll i .ocx i source kod, imas i par primjera kako se koristi taj DLL u C-u

delphi-projekt.zip => to je moj delphi projekat, imas i .exe u slucaju da ti nije delphi pri ruci koji pali/gasi LED lampicu, PIN-ove sam postavi na PIN2 i PIN19 (naravno. prvi put sam fulao polove jer sam zaboravio da je dioda u pitanju :))

Znaci evo i tu delphi dio koda za paljenje/gasenje lampica:
type PPisi=procedure(PA, Data:Short); stdcall;

var M:HModule;
Pisi:PPisi;




procedure TForm2.Button1Click(Sender: TObject);
begin
M:=LoadLibrary('inpout32.dll');
if M=0 then ShowMessage('M je nil!');
@Pisi:=GetProcAddress(M,'Out32');
if @Pisi=nil then ShowMessage('P je nil!');
Pisi($378,$FF);
FreeLibrary(M);
end;

procedure TForm2.Button2Click(Sender: TObject);
begin
M:=LoadLibrary('inpout32.dll');
if M=0 then ShowMessage('M je nil!');
@Pisi:=GetProcAddress(M,'Out32');
if @Pisi=nil then ShowMessage('P je nil!');
Pisi($378,$00);
FreeLibrary(M);
end;


Znaci trpamo na mem. lokaciju 888 ili 0x378 hex. FF kad zelimo upalit ili pak 00 kad ju zelimo izgasit.
Inpout32.dll sadrzi u sebi drajver koji radi u ring3 i sadrzi 2 exportane funkcije (jednu funkciju i jednu proceduru tocnije) i one se nazivaju:
Inp32->sluzi za citanje sa porta i prima jedan parametar a to je adresa sa koje zelimo procitat nesto, evo kako ide njen prototip u C-u:
typedef short _stdcall (*inpfuncPtr)(short portaddr);
A za pisanje na port koristimo Out32 i njen prototip je ovaj:
typedef void _stdcall (*oupfuncPtr)(short portaddr, short datum);


u delphiu nemoj zaboravit dodat stdcall; na kraju jer ti inace nece radit ;)

Ako ti sta nije jasno u kodu samo pitaj, a za bolje razumijevanje drajvera obavezno procitaj Windows Internals 4th Edition i Programming Microsoft WDM Driver Model!!


pozdrav

http://www.elektronika.ba/forum/uploadz ... d_bins.zip
skyline
Napredujem
Napredujem
Posts: 113
Joined: 08-03-2007, 17:10

Post by skyline »

Evo i tu je .zip sa delphi projektom (.exe i kod)

http://www.elektronika.ba/forum/uploadz ... rojekt.zip
User avatar
MladaNada
Stariji član
Stariji član
Posts: 2529
Joined: 20-05-2006, 14:57
Location: Banja Luka RS , Novi Sad RS , Herceg Novi CG

Post by MladaNada »

Ja sam nasao tutorijal kako da uopste koristim dll baze u delphiju , bio mi malo cudan source (jednostavno cudno postavljen, tipa tackazarez gdje ne treba , pa dvotacka gdje ne treba i slicno), pokusao ga sam napisati, kad nije radilo kopirao sam ga direktno i nije radilo! Mislim da je ovako islo:

Code: Select all

procedure stdcall: 'io.dll' ; pa onda neka komanda iz baze
Sve u istom redu tako , kazem bilo mi cudno , od tad se nisam ni bavio sa *dll , recimo zadnje sto sam napravio u Delphiu je bila tablica za Yamb na racunaru , namucio se dosta i jos nisam zavrsio :D

Edit: Ne shvatam sta je varijabla M, tj. sta je njena vrijednost i odakle je dobija!
skyline
Napredujem
Napredujem
Posts: 113
Joined: 08-03-2007, 17:10

Post by skyline »

ovo:
procedure stdcall: 'io.dll' ; pa onda neka komanda iz baze

ne moze ic, ide:

procedure ImeProcedure; external 'io.dll' stdcall;

stdcall omogucuje da koristis DLL-ove koji su pisani u drugim prog. jezicima i napravljeni sa drugim kompajlerima i jednostavno to moras dodat, a poslije toga moze jos ic i NAME, INDEX direktive

Postoji staticko i dinamicko ucitavanje DLL-ova, ja sam u gornjem primjeru koristio dinamicko...evo tutorial da se podsjetis delphia i DLL-ova:
http://delphi.about.com/od/windowsshell ... basics.htm
User avatar
MladaNada
Stariji član
Stariji član
Posts: 2529
Joined: 20-05-2006, 14:57
Location: Banja Luka RS , Novi Sad RS , Herceg Novi CG

Post by MladaNada »

Odlican link , tako nesto trazim vec duze vrijeme!
Koju verziju Delphia koristis? Ja imam 7-icu!
Zanima me i komanda GetProcAdress, jer je ne mogu naci u help file-u , a i nisam vidio da je neka procedura iz dll-a, tj. nije tako deklarisana?!
User avatar
trax
Administrator sajta
Administrator sajta
Posts: 3509
Joined: 08-01-2005, 18:04
Location: 75k, BA
Contact:

Post by trax »

Tema je zakljucana. Raspravu o Delphiju nastavite u zasebnoj temi.
Locked