Paralelni port
Moderators: pedja089, stojke369, [eDo], trax
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
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
- MladaNada
- Stariji član
- Posts: 2529
- Joined: 20-05-2006, 14:57
- Location: Banja Luka RS , Novi Sad RS , Herceg Novi CG
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 ) 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) Ozbiljno: Trax, Firkragg, buco, Tox master, Groovy...Izvinjavam se ako nekog nisam naveo!
I jos da napomenem da Firkragg SVE ZNA
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 ) 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) Ozbiljno: Trax, Firkragg, buco, Tox master, Groovy...Izvinjavam se ako nekog nisam naveo!
I jos da napomenem da Firkragg SVE ZNA
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
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
Evo i tu je .zip sa delphi projektom (.exe i kod)
http://www.elektronika.ba/forum/uploadz ... rojekt.zip
http://www.elektronika.ba/forum/uploadz ... rojekt.zip
- MladaNada
- Stariji član
- Posts: 2529
- Joined: 20-05-2006, 14:57
- Location: Banja Luka RS , Novi Sad RS , Herceg Novi CG
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:
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
Edit: Ne shvatam sta je varijabla M, tj. sta je njena vrijednost i odakle je dobija!
Code: Select all
procedure stdcall: 'io.dll' ; pa onda neka komanda iz baze
Edit: Ne shvatam sta je varijabla M, tj. sta je njena vrijednost i odakle je dobija!
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
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