Kazalo po Svet elektronike forumu Svet elektronike
Revija za prave elektronike
 
AlbumAlbum   Pomoč pogostih vprašanjPomoč pogostih vprašanj   IščiIšči   Seznam članovSeznam članov   Skupine uporabnikovSkupine uporabnikov   Registriraj seRegistriraj se 
 Tvoj profilTvoj profil   Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil   PrijavaPrijava 

LPT I/O komunikacija

 
Objavi novo temo   Odgovori na to temo    Kazalo po Svet elektronike forumu -> Digitalna elektronika
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
Hrvoje
Mojster


Pridružen/-a: Ned Apr 2005 13:50
Prispevkov: 48

PrispevekObjavljeno: Sre Maj 11, 2005 4:17 pm    Naslov sporočila: LPT I/O komunikacija Odgovori s citatom

Zna li tko kako pomoću delphi7 kontrolorati LPT I/O?
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
slawc
Profesionalec


Pridružen/-a: Tor Jan 2004 11:41
Prispevkov: 102

PrispevekObjavljeno: Sre Maj 11, 2005 9:25 pm    Naslov sporočila: Odgovori s citatom

Kateri operacijski sistem? Win98, win2k ali XP?

Sam imam C++ Builder in Win2k, obvezno je potrebno uporabiti dodatni driver (DLL).

_________________
LP,
Slawc
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
MarE
Profesionalec


Pridružen/-a: Pet Nov 2004 23:38
Prispevkov: 177

PrispevekObjavljeno: Čet Maj 12, 2005 10:09 am    Naslov sporočila: Odgovori s citatom

Jaz imam na LPT obešen šift register 4094 in ga iz (win2k ali XP) krmilim preko enega inpout32.dll.

Lahko pripopam tudi nekaj kode:

0. Nekaj makrov za začetek:

Koda:
/*************************************************/
/*LPT Plate*/

/* prototype (function typedef) for DLL function Inp32: */

     typedef short _stdcall (*inpfuncPtr)(short portaddr);
     typedef void _stdcall (*oupfuncPtr)(short portaddr, short datum);

     HINSTANCE hLib;
     inpfuncPtr inp32;
     oupfuncPtr outp32;


/*
 * LPT port settings
*/
#define BASE 0x378 //lpt base register address


1. Nalaganje DDLja
Koda:
int _stdcall tLPTIO::IO_lib_init(void) {

     /* Load the library */
     hLib = LoadLibrary("inpout32.dll");

     if (hLib == NULL) {
          Application->MessageBox("LoadLibrary failed.", "Error!", MB_OK);
          return -1;
     }

     /* get the address of the function */

     inp32 = (inpfuncPtr) GetProcAddress(hLib, "Inp32");

     if (inp32 == NULL) {
          Application->MessageBox("GetProcAddress for Inp32 Failed.", "Error!", MB_OK);
          return -1;
     }


     outp32 = (oupfuncPtr) GetProcAddress(hLib, "Out32");

     if (outp32 == NULL) {
          Application->MessageBox("GetProcAddress for Oup32 Failed.", "Error!", MB_OK);
          return -1;
     }
    return 0;   // OK
}



Takole pa "nafilam" verižico štirih 4049:

Koda:
void _stdcall tHYBIO::io1 ( unsigned long int komb)
{
  unsigned char i,x;
  x=inp32(BASE);
  outp32 ( BASE,x);
  for (i=31; i!=0; i--) {
    x&=0xfb;                   // clr Data
    x|=((komb>>i)&1)<<2;      // Data
    outp32 ( BASE,x);
    x|=0x02;                  // clk = 1
    outp32 ( BASE,x);
    x&=0xfd;                  // clk = 0;
    outp32 ( BASE,x);
  }
}



Namesto funkcij pa lahko uporabljaš kar makroje:
Koda:
#define DATA_IN()   (_inp(BASE))
#define DATA_OUT(b)   (_outp(BASE,(b)))

#define CTRL_IN()   (_inp(BASE+2))
#define CTRL_OUT(b)   (_outp(BASE+2,(b)))

/*
SHIFT register manipulation macros
*/
#define MAX_DEVICES 4
#define SET_TO_1(b)   (outp32(BASE,(BYTE )(inp32(BASE)|(1<<b))))
#define SET_TO_0(b)   (outp32(BASE,(BYTE )(inp32(BASE)&~(1<<b))))
#define TOGGLE(b)   (outp32(BASE,(BYTE )(inp32(BASE)^(1<<b))))



Tole premetat iz C++ v delphi (pascal) nebi smelo biti problema.

LP,
Mare
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
iskra
Profesionalec


Pridružen/-a: Tor Jan 2004 16:29
Prispevkov: 254
Kraj: Sežana

PrispevekObjavljeno: Čet Maj 12, 2005 11:26 am    Naslov sporočila: Odgovori s citatom

http://www.infoelektronika.co.yu/redirect.php?file=interfejsi/body_interfejsi.html
Precej je napisanega in razloženega v tej knjigi.
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
Hrvoje
Mojster


Pridružen/-a: Ned Apr 2005 13:50
Prispevkov: 48

PrispevekObjavljeno: Čet Maj 12, 2005 1:36 pm    Naslov sporočila: Odgovori s citatom

inace koristim xp windose ali trebao bih za delphi6 ili 7 source kod za pisanje na portove!
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
tonni
Profesionalec


Pridružen/-a: Tor Jan 2004 9:27
Prispevkov: 108

PrispevekObjavljeno: Čet Maj 26, 2005 4:58 am    Naslov sporočila: Odgovori s citatom

ojla Very Happy
jaz v delphiju uporabljam to:

Koda:

Procedure OutPortb(NaslovVrat:Smallint;Vrednost:Smallint);
Var ByteVrednost:word;
Begin
ByteVrednost:=Vrednost;
asm
push dx
mov dx,NaslovVrat
mov ax,ByteVrednost
out dx,ax
pop dx
end;
end;

function InPortb(NaslovVrat:Smallint):smallint;
Var ByteVrednost:word;
begin
asm
push dx
mov dx,NaslovVrat
in ax,dx
mov ByteVrednost,ax
pop dx
end;
InPortb:=smallint(ByteVrednost) and $00FF;{zanima nas samo spodnjih osem bitov}
end;
// Branje
vhod:= inportb(naslov_vrat);
// Vpis
outportB(naslov_vrat,vrednost);

Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
Hrvoje
Mojster


Pridružen/-a: Ned Apr 2005 13:50
Prispevkov: 48

PrispevekObjavljeno: Čet Maj 26, 2005 9:55 am    Naslov sporočila: Odgovori s citatom

hvala ti na pomoci, mozes li mi jos molim te reci kako odabrati na koji port pises, ja moram pisati na LPT port Rolling Eyes
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
tonni
Profesionalec


Pridružen/-a: Tor Jan 2004 9:27
Prispevkov: 108

PrispevekObjavljeno: Čet Maj 26, 2005 7:12 pm    Naslov sporočila: Odgovori s citatom

Lpt port ima osnovni naslov $387.
primer:
Koda:

var vhod:byte;
vhod:=inportb($387); iz porta preberes vrednost in jo nalozis v "vhod"

outportb($387,5); na LPT port vpises vrednost 5


lahko vpisujes v katerikoli port (razne in/out kartice)vedeti
moras samo naslov.
lp
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
tonni
Profesionalec


Pridružen/-a: Tor Jan 2004 9:27
Prispevkov: 108

PrispevekObjavljeno: Čet Maj 26, 2005 7:15 pm    Naslov sporočila: Odgovori s citatom

za serijsko komunikacijo pa uporabljam od Dejana Cernile
komponento,ki je brezplacna in se dobi na netu.

lp
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
MarE
Profesionalec


Pridružen/-a: Pet Nov 2004 23:38
Prispevkov: 177

PrispevekObjavljeno: Pet Maj 27, 2005 12:00 pm    Naslov sporočila: Odgovori s citatom

tonni je napisal/a:
ojla Very Happy
jaz v delphiju uporabljam to:

Koda:

Procedure OutPortb(NaslovVrat:Smallint;Vrednost:Smallint);
Var ByteVrednost:word;
Begin
ByteVrednost:=Vrednost;
asm
push dx
mov dx,NaslovVrat
mov ax,ByteVrednost
out dx,ax
pop dx
end;
end;

function InPortb(NaslovVrat:Smallint):smallint;
Var ByteVrednost:word;
begin
asm
push dx
mov dx,NaslovVrat
in ax,dx
mov ByteVrednost,ax
pop dx
end;
InPortb:=smallint(ByteVrednost) and $00FF;{zanima nas samo spodnjih osem bitov}
end;
// Branje
vhod:= inportb(naslov_vrat);
// Vpis
outportB(naslov_vrat,vrednost);



To deluje na WIN98. Na XP/2000 ne bo delalo.
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
Hrvoje
Mojster


Pridružen/-a: Ned Apr 2005 13:50
Prispevkov: 48

PrispevekObjavljeno: Pet Maj 27, 2005 2:07 pm    Naslov sporočila: Odgovori s citatom

ja prenesem kod u delphi ali uvijek mi se pojavi error pri izvođenju funkcije: "Project Project1.exe raised exception class EPrivilege with message. 'Privileged instruction' ..." i nikako da to premostim, ali mozda je to zato sto koristim xp windowse?

Jos nesto, mozete li mi objasniti ovu naredbu :
InPortb:=smallint(ByteVrednost) and $00FF;
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
slawc
Profesionalec


Pridružen/-a: Tor Jan 2004 11:41
Prispevkov: 102

PrispevekObjavljeno: Sob Maj 28, 2005 12:11 am    Naslov sporočila: Odgovori s citatom

To je zaradi Windows XP. Isto je z Windows2000.

Uporabi inpout32.dll (http://www.logix4u.net/parallelport1.htm)

Obstaja se en program, ki "odklene" dostop do pomnilniskih lokacij. Zal sem pozabil ime in link. Vcasih sem ga tudi sam uporabljal, dela OK (vendar mi je pristop z inpout32.dll bolj vsec).

_________________
LP,
Slawc
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
MarE
Profesionalec


Pridružen/-a: Pet Nov 2004 23:38
Prispevkov: 177

PrispevekObjavljeno: Ned Maj 29, 2005 10:29 pm    Naslov sporočila: Odgovori s citatom

slawc je napisal/a:
Obstaja se en program, ki "odklene" dostop do pomnilniskih lokacij. Zal sem pozabil ime in link. Vcasih sem ga tudi sam uporabljal, dela OK (vendar mi je pristop z inpout32.dll bolj vsec).


Ja, to je directIO
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo    Kazalo po Svet elektronike forumu -> Digitalna elektronika Časovni pas GMT + 1 ura, srednjeevropski - zimski čas
Stran 1 od 1

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
You cannot attach files in this forum
You cannot download files in this forum


Powered by phpBB © 2001, 2005 phpBB Group