Tam Sürümünü Görmek İçin : LPT ile LED yakma
kankaniff
28/02/2007, 23:31
arkadaşlar selamlar. Elimde Borland C++ V3.1 bir LPT kablosu ve bir LED var. LED i paralel portu kullanarak istediğim süre boyunca yakıp sönderip tekrar yakmak vs gibi işlemler yapmak istiyorum. Bunun için aşağıdaki programı kullanıyorum fakat LED de hiç bi tepki göremiyorum. Ayrıca avometre ile kontrol ettiğimde de istediğim pinlerden akım gelmediğini görüyorum. Forumda araştırdım inpout32.dll gibi bi dosya eksikliğinden kaynaklanabileceğini söylemişler. O dosyayı System32 klasörüne kopyalamama rağmen halen bir gelişme kaydedemedim. Acaba kullandığım C++ versiyonu Dos ortamında çalıştığından dolayı mı bu sorunla karşılaşıyorum? Yardımlarınızı, tavsiyelerinizi ve önerilerinizi bekliyorum.
#include <dos.h>
#include<conio.h>
#define port 0x378
main(){
do {
outportb(port,1); delay(100);
}while(!kbhit());
return 0;
};
acehreli
01/03/2007, 00:14
Eger program hata vermeden calisiyorsa, yani bir dll'i bulamadigini soylemiyorsa, dll ile bir sorunun yoktur. Eger o kutuphaneyi kullaniyorsa da, onunla statik olarak baglandigi icin olabilir. Yani calisma zamaninda dll'i aradigini sanmiyorum.
Programin herhalde korumali bir ortamda calistigi icin calismiyordur. Modern isletim sistemleri donanima dogrudan erisime izin vermezler.
Yanilmiyorsam, Windows'da LPT1 adli dosyaya yazilan degerler paralel porta gidiyor. Google'da su aramalarin sonuclari yardimci olabilir:
fopen LPT1
CreateFile LPT1
Ali
Ali beyin dedigi gibi, outportb fonksiyonu islemci korumalı modda iken dogal olarak istedigin gibi calismaz ki zaten bu fonksiyon inpout32.dll icinde tanimlanmamistir.Kisaca system32 ye bu dll i kopyalaman bisey ifade etmez.
inpout32.dll icinde tanimli OutP isminde bir fonksiyon var,bu fonksiyonu kullanarak porta yazma islemini gerceklestirebilirsin.
Bunu yapmak icin bu dll i LoadLibrary API siyle dinamik olarak yukleyebilirsin.Daha sonra Outp fonksiyonuna bir isaretci tanimlayip programinda kullanabilirsin.
google da bu yonde bir arastirma yaparsan nasil yapilacagini kolayca gorebilirsin.
kolay gelsin...
mesaji hemen duzeltemedim.Fonksiyon ismini outp yazmisim out32 olacak
kankaniff
01/03/2007, 16:21
Ali beyin dedigi gibi, outportb fonksiyonu islemci korumalı modda iken dogal olarak istedigin gibi calismaz ki zaten bu fonksiyon inpout32.dll icinde tanimlanmamistir.Kisaca system32 ye bu dll i kopyalaman bisey ifade etmez.
inpout32.dll icinde tanimli OutP isminde bir fonksiyon var,bu fonksiyonu kullanarak porta yazma islemini gerceklestirebilirsin.
Bunu yapmak icin bu dll i LoadLibrary API siyle dinamik olarak yukleyebilirsin.Daha sonra Outp fonksiyonuna bir isaretci tanimlayip programinda kullanabilirsin.
google da bu yonde bir arastirma yaparsan nasil yapilacagini kolayca gorebilirsin.
kolay gelsin...
arkadaşım interneti dediğin şekilde taradım fakat anlayabileceğim birşey bulamadım. Aşağıdaki kodu buldum fakat ne yapmak istediğini çözemedim. C de yeniyim biraz da onun içindir herhalde. Bi sakıncası yoksa gerekli kodu sen yazabilir misin bana ? Sadece porta istediğim bit değerini gönderecek bi C program kalıbını istiyorum hepsi bu.
#include <stdio.h>
#include <conio.h>
#include <windows.h>
typedef short (_stdcall *inpfuncPtr)(short portaddr);
typedef void (_stdcall *oupfuncPtr)(short portaddr, short datum);
int main(void)
{
HINSTANCE hLib;
inpfuncPtr inp32;
oupfuncPtr oup32;
short x;
int i;
hLib = LoadLibrary("inpout32.dll");
if (hLib == NULL) {
printf("LoadLibrary Failed.\n");
return -1;
}
inp32 = (inpfuncPtr) GetProcAddress(hLib, "Inp32");
if (inp32 == NULL) {
printf("GetProcAddress for Inp32 Failed.\n");
return -1;
}
oup32 = (oupfuncPtr) GetProcAddress(hLib, "Out32");
if (oup32 == NULL) {
printf("GetProcAddress for Oup32 Failed.\n");
return -1;
}
for (i=0x378; (i<0x380); i++) {
x = (inp32)(i);
printf("port read (%04X)= %04X\n",i,x);
}
acehreli
01/03/2007, 23:45
Derlemeyi bile denemedim ama soyle bir sey olur mu acaba?
#include <stdio.h>
int main()
{
const unsigned char hep_bir = 0xff; // butun bitler 1
FILE * port = fopen("LPT1", "w");
fwrite(&hep_bir, sizeof(hep_bir), 1, port);
fclose(port);
}
Ali
necipakif
02/03/2007, 01:25
kankaniff geçenlerde kullandığım ve çalıştırdığım programı basitçe sunuyorum. ama yukarıda belirtildiği üzre inpout32.dll dosyasını C:\Windows\System32 klasörüne kopyalaman gerekiyor. Eğer program çalışmazsa en son olarak paralel port ayarlarından hex kod değerlerini kontrol et derim. İnş. kod işini görür.
#include <iostream.h>
#include <conio.h>
#include <dos.h>
using namespace std;
void sendParallelPort(int sendNumber)
{
unsigned port = 0x378;
outportb(port, sendNumber);
}
int main()
{
int number = 0;
clrscr();
cout << "Enter a number : " << endl;
cin >> number;
sendParallelPort(number);
getch();
return 0;
}
musaulker
17/05/2007, 00:58
Bunu bir dener misin?
Benim kodum değil ama sana faydalı olabileceğini düşünüyorum..
inpout32.dll hakkında: http://www.logix4u.net/index.htm
scoutozge
20/05/2007, 12:10
bende paralel porta bilgiyi asm kodu yazarak yolladim ve parca programimda istedigim ledler yaniyor,asil yazilimimda ise [Linker Fatal Error] Fatal: Unable to open file 'CPORTLIBCB5.BPI' hatasi veriyor.bunun icin ne yapmam gerektigini bilen varsa bana yardimci olabilirmi?cok acil.
simdiden tesekkurler.
Forum Yazılımı : vBulletin v3.6.8, Copyright ©2000-2008, Jelsoft Enterprises Ltd.