PCI LPT-port gondok, Delphi 7 alatt /Windows 7/

PCI LPT-port gondok, Delphi 7 alatt /Windows 7/
2011-08-10T17:40:22+02:00
2012-07-14T14:02:40+02:00
2022-11-26T07:50:36+01:00
mzozo95
PCI LPT-port gondok, Delphi 7 alatt /Windows 7(32bit)/


Sziasztok!

Nemrég kezdtem el komolyabban foglalkozni Delphi-vel, szeretnék továbbfejlődni a számítógéppel, LPT porton keresztül vezérelt elektronikák terén. Sajnos azonnal gondokba ütköztem: a portom nem alaplapi, hanmem PCI-s(msc9865), ezért a címekkel is nagy gondban vagyok...

Már napok óta keresgélek az interneten a programozás után, de nem jött be semmi program vagy forráskód, a led állandóan világít (amit egy ellenállással rákötöttem a portra)
Eddig azt tudom biztosan, hogy csak az inpout32.dll-t használhatom a kártya miatt.

Szóval egy nagyon 'egyszerű' Delphi-s forráskódra lenne szükségem, ami annyit csinál,hogy ha rákattintok egy gombra, akkor egy bizonyos led felgyullad.
Emellett az is érdekelne, hogy pontosan hogy tudom megadni, hogy melyik bitre(adatvezetékre) adja ki a jelet és melyiken szüntesse meg a program.

________

A portom:url

(ha átváltom ezt a hex kódot decre, akkor E800 -> 59392, elvileg ezt a számot használhatnám a port címének, de ha tévedek akkor ez is lehet a hiba forrása...)

Előre is köszönök minden hasznos segítséget!


Üdv.: Zoltán
Mutasd a teljes hozzászólást!
Én a helyedben úgy kezdeném, hogy letöltenék egy LPT programot és azzal próbálnám ki a LED-et, ha működik akkor írnám meg a progit.
Talán a bios beállítás nem jó vagy más is lehet...

Itt egy progi, de van több is.:
LPT test
Mutasd a teljes hozzászólást!

  • Ez nem működik?


    program Project2; {$APPTYPE CONSOLE} uses SysUtils; procedure PortOut(Port : Word; Data : Byte); stdcall; external 'io.dll'; function PortIn(Port:Word):Byte; stdcall; external 'io.dll'; begin Portout($378,0); readln ; end.
    Mutasd a teljes hozzászólást!
  • Mutasd a teljes hozzászólást!
  • ptiszai! sajnos nem működik, de azért köszönöm...
    Csabigyerek! sajnos a tiéd sem működik...

    már mindkettőt kipróbáltam, most harmadszorra is, de az a led még mindig világít ...
    Mutasd a teljes hozzászólást!
  • A $378-at lecserélted $E800-ra?
    (Azért remélem, hogy nem tényleg "felgyullad", hanem csak világít )
    Mutasd a teljes hozzászólást!
  • Szia!

    természetesen lecseréltem, de semmi változás...
    (igen, csak világít, de mindig...)

    "bizonyíték"
    ...
    var Form1: TForm1; procedure Out32(wAddr:word;bOut:byte); stdcall; external 'inpout32.dll' function Inp32(wAddr:word):integer; stdcall; external 'inpout32.dll' implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin Out32($E800,$53); // Out32 end; procedure TForm1.Button2Click(Sender: TObject); begin edit1.Text:=IntToHex(Inp32($E800),2); // Edit1 end; end.
    Mutasd a teljes hozzászólást!
  • Program indítás előtt és utána világít?
    Tehát a program egyáltalán hozzáfér az LPT porthoz?
    LED-et hogy kötötted be?
    pl.:
    3V3 anód LED katód ellenállás majd az egyik port lába?
    stb.
    Mutasd a teljes hozzászólást!
  • Én a helyedben úgy kezdeném, hogy letöltenék egy LPT programot és azzal próbálnám ki a LED-et, ha működik akkor írnám meg a progit.
    Talán a bios beállítás nem jó vagy más is lehet...

    Itt egy progi, de van több is.:
    LPT test
    Mutasd a teljes hozzászólást!
  • állandóan világít, Windows betöltésétől kezdődően...
    igazából nem is tudom hogy hozzáfér-e, feltettem a drivert, az inpout.dll-t betettem a windows/system32-be és még a sima system-be is...

    programjait rendszergazdaként futtattam, de semmi, ledem bekötése: led katód-> port első kimenő bitje(második "láb") led anód-> 470 Ohm ellenállás-> a port GNS (25. 'lába')

    A teszter sajnos nem vált be, mert nem lehet megadni azt a port címet,amit használ az én kártyás lpt-m.
    Olyat nem is találtam, amihez meg lehetne adni az E800-as címet
    Mutasd a teljes hozzászólást!
  • Szia!

    Már működik, szépen tudom kapcsolgatni a ledet.

    a
    Portout($378,0) nál a 0-helyére lehetne beírni , hogy melyik bitet engedélyezze, pl így: 01000000 ? Vagy hogyan kell megadni a kódot?

    Üdv.: Zoltán
    Mutasd a teljes hozzászólást!
  • Out32($E800,$53);

    Mi a fészkes fene az a $53???
    Mutasd a teljes hozzászólást!
  • Szia!

    a $53 az a csabigyeker által ajánlott oldalon volt én sem értettem...

    ------------
    mos, mivel nem válaszoltak legutóbbi kérdésemre,megválaszolom magam:
    a portout ($378,0) nál a nulla nem bináris érték, hanem decimális(0-255 ig). Egy megfelelő kis kóddal megoldható delphiben az átszámítás, vagy akár egyszerűen fejben is.

    egyszerű bin->dec 'konverter':

    unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; procedure Edit1Change(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} //most jön a lényeg ;) procedure TForm1.Edit1Change(Sender: TObject); var tizes: integer; s: string; begin if edit1.text <> '' then begin s:=edit1.text; tizes:=0; if s[1]='1' then tizes:=tizes+128; if s[2]='1' then tizes:=tizes+64; if s[3]='1' then tizes:=tizes+32; if s[4]='1' then tizes:=tizes+16; if s[5]='1' then tizes:=tizes+8; if s[6]='1' then tizes:=tizes+4; if s[7]='1' then tizes:=tizes+2; if s[8]='1' then tizes:=tizes+1; edit2.text:=inttostr(tizes); end; end; end.
    Mutasd a teljes hozzászólást!
  • Szia!

    A $53 egy érték, amit kiírsz az adott portra. A példakódban ezt az értéket használták. Természetesen a helyére írhatsz akármit, akár 0-t is. (Persze ha az lpt data portjára akarsz írni, akkor az max 8 bites értéket lehet biztoságosan.)

    a portout ($378,0) nál a nulla nem bináris érték, hanem decimális(0-255 ig).

    Ehhez csak annyit fűznék hozzá, hogy a 0 minden természetes alapú számrendszerben 0, azaz 0=bin(0)=dec(0)=hex(0)=N(0). Sőt, ha szigorúan vesszük, akkor (ha k eleme N, k>1) az 1 is, tehát 1=bin(1)=dec(1)=hex(1)=k(1).

    Visszatérve a $53-ra:
    hex(53)=dec(83)=bin(01010011)->tehát azok a ledek fognak világítani, amiknél bináris 1-es van. Így ha te a 7. ledet akarod bekapcsolni (egy korábbi hsz-od alapján), akkor bin(01000000)=dec(64)=hex(40), tehát vagy

    Portout($E800,64)
    -et, vagy
    Portout($E800,$40)
    -et kell írnod.
    Mutasd a teljes hozzászólást!
  • köszönöm! így már minden világos...
    Mutasd a teljes hozzászólást!
  • Kedves mzozo95!

    most hozta a sors, hogy Delphi és Win7 alól LPT portot kell vezérelnem. Akkor voltaképp mit kell csinálni, hogy szépen működjön? Mert amit válaszként elfogadtál, az egy program, amivel az LPT portot lehet vezérelni, de nem egy Delphi kód.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd