LPT1 ile röle den elektrik akımı göndermek...

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
alvin
Üye
Mesajlar: 18
Kayıt: 03 Oca 2009 04:49

LPT1 ile röle den elektrik akımı göndermek...

Mesaj gönderen alvin »

arkadaşlar elimde bir (lambayı yaktığımız gibi anahtar) buton var ve bu butonun içine siyah ve kırmızı renkte iki tane kablo giriyor.ben butona bastığımda bu iki kablonun ucu birbirine temas ediyor ve kısa devre yaparak, bu iki kablonun bağlı bulundukları diğer uçtaki bir kapıyı otomatik olarak açıyor.ben bunu elimle, duvarda olan bir butona basmak yerine bilgisayarda yazdığım bir programdaki bir butona basarak kapıyı otomatik olarak açmak istiyorum.
Bunun içinde duvara gelen bu iki kabloyu çıkarıp temin ettiğim LPT portundan pc ye bağladığım bir röleye, uçları bağladım.Fakat ben bu iki uca nasıl olurda elektrik akımı gönderirim de , duvarda bağlı oldukları gibi kısa devre yaptırıp kapıyı otomatik olarak açtırırım acaba?????
en azından bu devre üzerindeki ledleri nasıl yakıp söndürebilirim???

not:devreyi aldığım yerden verilen dll lerle ve netten araştırdığım kadarı ile şu kodları yaptım fakat hiçbirşey olmadı..hatta butona tıkladığımda "privileged instruction" şeklinde hata veriyor...;


procedure Out32(PortAddress:smallint;Value:smallint);stdcall ;export;
var
ByteValue:Byte;
begin
ByteValue:=Byte(Value);
asm
push dx
mov dx,PortAddress
mov al, ByteValue
out dx,al
pop dx
end;
end;

function Inp32(PortAddress:smallint):smallint;stdcall;expor t;
var
ByteValue:byte;
begin
asm
push dx
mov dx, PortAddress
in al,dx
mov ByteValue,al
pop dx
end;
Inp32:=smallint(ByteValue) and $00FF;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
try
Out32($378,$53); // Out32

except
end;
end;
Dosya ekleri
role.jpg
role.jpg (20.59 KiB) 3763 kere görüntülendi
ibrahimcoban
Üye
Mesajlar: 163
Kayıt: 11 Eki 2005 10:44
İletişim:

Re: LPT1 ile röle den elektrik akımı göndermek...

Mesaj gönderen ibrahimcoban »

Benim bildiğim xp ve sonrasında assembler ile port lara değer gönderemezsiniz.
Bunun için windows apilerini kullanmanız lazım. Ayrıca LPT kabloların 2m uzunluk sınırı var diye biliyorum.
Comport kullanman daha sağlıklı olabilir.
http://ibrahimcoban.com/
Lazarus, Kol-Ce,Delphi ve C#
LifeTime
Üye
Mesajlar: 19
Kayıt: 09 Oca 2009 06:59

Re: LPT1 ile röle den elektrik akımı göndermek...

Mesaj gönderen LifeTime »

Eğer profesyönel bir uygulama yapacaksan, bunua benzer işler için özel I/O Card'lar var yada PLC kullanman gerekir. PLC ile istediğim bir röleyi bir komutla çektirebilir yada bıraktırabilirsin.
akdatilla
Üye
Mesajlar: 292
Kayıt: 02 Nis 2006 06:04
Konum: Antalya

Re: LPT1 ile röle den elektrik akımı göndermek...

Mesaj gönderen akdatilla »

"privileged instruction" hatasını verme sebebi dll dosyanın sisteme kayıt edilmemesinden veya kaydetme yetkiniz olmamasından kaynaklanıyordur bence.
komut satırından dll dosyasının bulunduğu dizine girip "regsrv32 io.dll" komutunu vermeyi deneyin.
deltas
Üye
Mesajlar: 358
Kayıt: 06 Mar 2004 01:08
Konum: Malatya...
İletişim:

Re: LPT1 ile röle den elektrik akımı göndermek...

Mesaj gönderen deltas »

dll'leri kaydettikten sonra uyumluluk ayarlaması da yapmanız gerekebilir.
Nice İnsanlar gördüm üstünde elbise yok;
Nice elbiseler gördüm içinde insan yok.
Kullanıcı avatarı
d4erth
Üye
Mesajlar: 39
Kayıt: 01 Oca 2008 04:44

Re: LPT1 ile röle den elektrik akımı göndermek...

Mesaj gönderen d4erth »

bende bi ara LPT (DB 25) kullanark portan elektrik alıp vermeye çalışıordum araştırdım ama xp de bi kaç ayarla oluormuş xp önceki işletim sistemlerinde çalışıor sana sölediklerimi yaparsan rahatca portdan elektrik alıp röleye veya nereye istersen kullanabilirsin öncelikler;

1) Delphi ile yeni bir proje oluşturun.

2)

Kod: Tümünü seç

http://geekhideout.com/downloads/io.dll
.Dll sini çekin ve
proje klasörüne bu dll i yerleştirin.

3) Kodunuzu şu şekilde düzenleyin:

Kod: Tümünü seç

 implementation {$R *.dfm} procedure PortOut(Port : Word; Data : Byte); stdcall; external 'io.dll'; function PortIn(Port:Word):Byte; stdcall; external 'io.dll';
4) Formunuza bir Standart sekmeden bir buton ekleyin ve onclick eventine şu kodu geçin:

Kod: Tümünü seç

PortOut(888,2); // Burda 2 değeriyle portun hangi pinlerine elektrik vereceğinizi seçebilirsiniz.
label1.Caption:=inttostr(PortIn(888)); 
end;
*Buradaki önemli noktalar; paralel port adresinin 888 olması ve io.dll in PROJENİN EXE DOSYASI İLE AYNI KLASÖRDE OLMASI GEREKTİĞİ. Herkese kolay gelsin, iyi çalışmalar.

Pinlere elektrik verme yolarıda belki bilmeyen kardeşlerim vardır;

Kod: Tümünü seç

PortOut(888,2); 
burdaki 2 değerini;

0 -> tüm pinler söner.
1 -> sadece 1.Pin
2 -> sadece 2.Pin
4 -> sadece 3.Pin
8 -> sadece 4.Pin
16 -> sadece 5.Pin
32 -> sadece 6.Pin
64 -> sadece 7.Pin

eğer 1 den fazla pine elektrik vermek istiyorsan ;

örn : 5. ve 3. pinler olsun bunların port numaralaralarını toplamalısın şöyle : 5. Pin = 16 , 3.Pin = 4 ---> 5. ve 3.Pin 16+4 = 20


PARALEL PORT PİN ŞEMASIDA ŞÖYLE ARKADAŞLAR ;

1-14-16-17 :Kontrol uçlari.
2-3-4-5-6-7-8-9 :Veri uçlari.
10-11-12-13-15 :Giris uçlari.

Resim

sağlıcakla...d4erth
Cevapla