PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Serielle / Parallele Schnittstelle ansprechen!



Dar Maniac
07.04.2007, 20:37
Habs Geschaft Danke an alle

Profdok
07.04.2007, 23:08
Du musst eine dll verwenden. Die DLL heißt inpout32. Damit kannst du auf den LPT-Port zugreifen. Ich wollte dir ein schönes Programm von mir schiecken, das ist leider auf dem anderen Rechner., weil mein Laptop kein LPT-Port hat. Ich versuche das morgen in diesen Forum zu posten.

MFG Yusuf

fhartz
08.04.2007, 08:43
Hier findest Du eine Menge Inormationen:

http://www.ees-hartz.de/
Hier noch mehr:
http://www.franksteinberg.de/

SIGINT
08.04.2007, 11:27
@Profdok:
Wo steht, daß "Dar Maniac" nicht eventuell ein anderes Betriebssystem nutzt? Es gibt ja noch Linux, MacOS, DOS, etc....

@Dar Maniac:
Was willst du mit dem Prüfgerät eigentlich überprüfen? Die Schnittstelle, die Leitung, das Prüfgerät oder ein anderes Gerät?
Ich sehe nicht wirklich den Sinn von dem Teil... beschreib mal GENAU, was das Prüfgerät überhaupt prüfen soll.

Gruß,
SIGINT

Dar Maniac
10.04.2007, 15:06
OK, es soll am besten erstmal DOS fähig sein das Programm :)

shaun
10.04.2007, 16:12
Merkt man. Ob einzelne Leitungen es schaffen, programmgesteuert eine LED zum Leuchten zu bringen sagt nicht alles über eine Schnittstelle aus. Für solche Tests gibt es Loopback-Stecker, die in Zusammenarbeit mit entsprechenden Testprogrammen die Funktionalität der Portleitungen weitestgehend prüfen können.

Dar Maniac
10.04.2007, 21:05
THX für die Hilfe Schaun...<----
Dann bitte ich will son loopback adapter baun und nen programm schreiben kannst mir helfen?

Profdok
11.04.2007, 11:37
Das Programm, erklärt sich von selbst:

//------------------------------------------------------------------------------
//Autor : Yusuf Kuzu
//Programm: Ansprechen des Parallel Port´s
//------------------------------------------------------------------------------
#include <conio.h>
#include <iostream.h>
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "parallel.h"
#include "parallel.cpp"
//------------------------------------------------------------------------------
inpfuncPtr inp32fp;
oupfuncPtr oup32fp;

short Daten=0;

void display (short);
void display (short input)
{
Daten=Inp32(PPORT_BASE);
Out32(PPORT_BASE, input);
}
//------------------------------------------------------------------------------
int main()
{
HINSTANCE hLib;
int INF=0, i=0, Zeit=0;
//-----------------------Bibliothek wird geladen-------------------------------
hLib=LoadLibrary("inpout32.dll");
if (hLib==NULL)
{
cout<<"inpout32.dll nicht vorhanden"<<endl;
cout<<" PROGRAMM WIRD BEENDET "<<endl;
exit(0);
}
//------------------------Befehl wird geladen----------------------------------
inp32fp=(inpfuncPtr) GetProcAddress(hLib, "Inp32");
if (inp32fp==NULL)
{
exit (0);
}
//------------------------Befehl wird geladen----------------------------------
oup32fp=(oupfuncPtr) GetProcAddress(hLib, "Out32");
if (oup32fp==NULL)
{
exit (0);
}
//-----------------------------------------------------------------------------
cout<<"Wartezeit eingeben (in ms): "<<endl;
cin>>Zeit;
if(Zeit<1) {Zeit=1;} //wenn Zeit 0 ist wird es auf 1 gesetzt
display(0); //alles wird auf 0 gesetzt
//------------------------------Ausgabe----------------------------------------
for(i=0; i<256; i++)
{
display(i); //Ausgabe erfolgt binär (z.B. 0010 0011)
Sleep(Zeit); //das Programm wartet an dieser Stelle
}
//-----------------------------------------------------------------------------
display(0); //alles wird auf 0 gesetzt
FreeLibrary("inpout32.dll");
getch();
return 0;
}

Profdok
11.04.2007, 11:40
Es wird ein Wert (dezimal) in die Funktion "display" übergeben. Dann erfolgt die Ausgabe binär.Wenn zu z.B. 9 übergibst, dann liegen bei den Datenleitungen 4 und 1 eine Spannungen, weil die 9 binär ja so aussieht:
0000 1001.
Bei 255 leuten dann allee LED´s und bei 0 logischerweise keiner.

MFG Yusuf

Dar Maniac
11.04.2007, 15:13
Danke, aber ist das Programm Dos fähig? Es ist ja C++ oder liege ich da falsch? aber wenn nicht muss das halt auch gehen :)
Und sonst ein Tipp wie ich das Ding bauen muss diesen loopbackstecker?
Oder sonst welche Tipps?

Profdok
11.04.2007, 16:25
Das Programm läuft vollstängig unter Dos ab. Da machst du auch eine Eingabe, wie lange das Programm stehen bleiben soll (in Millisekunden).
Ja, es ist in C++ geschrieben.
Ich kann dir leider bei deinem loopbackstecker nicht weiter helfen, ich würde dir aber noch raten Optokoppler zu verwenden. Damit du deine Schnittstelle nicht beschädigst. Du kannst aber auch bei ebay eine Schnittstellenkarte kaufen, z.B. für den parallelen Port. Kostet so um die 10 euro mit Versandkosten, nur 100% kannst du auch deinen PC nicht davor schützen. Im schlimmsten Fall wäre die Karte und dein PC im Arsch.

MFG Yusuf

Dar Maniac
11.04.2007, 23:47
Verdammte Axt...muss das ding noch die Woche baun... und hast du irgendein Programm zur ansprache der seriellen Schnittstelle einfahc ein paar bits durchschicken und anzeigen ob alle weider angekommen sind also das gleiche wie bei Parallel halt nur ausgabe auf dem Monitor?

AlKI
12.04.2007, 22:20
Hi Profdoc, muss das loadlib in die funktion main(), und ich habs falsch gemacht?

siehe da:

https://www.roboternetz.de/phpBB2/viewtopic.php?t=27385&postdays=0&postorder=asc&start=0

kannste die Fehler verbessern (einfach die falschen programmteile nommal einzeln verbessert posten)? wär echt nett *ganzargliebguck*

Vogon
12.04.2007, 22:37
googeln hilft auch hier:

gefunden bei: http://www.ta7.de/txt/anleitun/004-kabel-faq.htm

Paralleler Loopback-Stecker:
01 mit 13, 02 mit 15, 12 mit 14, 11 mit 17 und 10 mit 16
kurzschließen. das geht 100%ig mit Checkit für DOS.

Profdok
13.04.2007, 00:21
Ich habe das Programm nochmal völlig überarbeitet und es läuft. Die Pinbelegung habe ich von dir übernommen, dass kann man aber jenachdem für andere Steuerungen ändern.

//------------------------------------------------------------------------------
//Autor : Yusuf Kuzu (Haupteil von AIKI)
//Programm: Ansprechen des Parallel Port´s
//------------------------------------------------------------------------------
#include <conio.h>
#include <iostream.h>
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//================================================== ============================
typedef short (_stdcall *inpfuncPtr)(short);
typedef void (_stdcall *oupfuncPtr)(short, short);


extern inpfuncPtr inp32fp;
extern oupfuncPtr oup32fp;

#define PPORT_BASE 0x378

short Inp32 (short);
void Out32 (short, short);

//------------------------------------------------------------------------------
short Inp32 (short Port)
{
return (inp32fp)(Port);
}

void Out32 (short Port, short Data)
{
(oup32fp)(Port, Data);
}
//================================================== ============================
inpfuncPtr inp32fp;
oupfuncPtr oup32fp;

short Daten=0;

void display (short);
void display (short input)
{
Daten=Inp32(PPORT_BASE);
Out32(PPORT_BASE, input);
}
//------------------------------------------------------------------------------
int main()
{
HINSTANCE hLib;
int INF=0, i=0, x=0, y=0, z=0, a=0, b=0, c=0, Zeit=2; //Wartezeit in Millisekunden
//-----------------------Bibliothek wird geladen-------------------------------
hLib=LoadLibrary("inpout32.dll");
if (hLib==NULL)
{
cout<<"inpout32.dll nicht vorhanden"<<endl;
cout<<" PROGRAMM WIRD BEENDET "<<endl;
exit(0);
}
//------------------------Befehl wird geladen----------------------------------
inp32fp=(inpfuncPtr) GetProcAddress(hLib, "Inp32");
if (inp32fp==NULL)
{
exit (0);
}
//------------------------Befehl wird geladen----------------------------------
oup32fp=(oupfuncPtr) GetProcAddress(hLib, "Out32");
if (oup32fp==NULL)
{
exit (0);
}
//-----------------------------------------------------------------------------
display(0); //alles wird auf 0 gesetzt
//-----------------------------Hauptteil----------------------------------------
cout<<"Geben Sie die Bewegung in die Tiefe ein (X-Achse): "<<endl;
cin>>x;
cout<<"Geben Sie die Bewegung fuer die horizontale Achse ein (Y-Achse): "<<endl;
cin>>y;
cout<<"Geben Sie die Bewegung fuer die Hoehe ein (Z-Achse): "<<endl;
cin>>z;
//------------------------- X-Achse -------------------------------
if(x>=0 && x<32767)
{
while (a<x)
{
display(1); // pin D0 an
Sleep(Zeit);
display(0); // alle Pins aus
Sleep(Zeit);
a++;
}
}
else if (x<0 && x>-32768)
{
while (x<a)
{
display(3); // pin D0 + Pin D1 an
Sleep(Zeit);
display(0); // alle Pins aus
Sleep(Zeit);
a--;
}
}
else
{
cout<<"Der Wert ist zu groß oder zu klein"<<endl;
}
//------------------------------------------------------------------------------
//------------------------- Y-Achse -------------------------------
if(y>=0 && y<32767)
{
while (b<y)
{
display(4); // Pin D2 an
Sleep(Zeit);
display(0); // alle Pins aus
Sleep(Zeit);
b++;
}
}
else if (y<0 && y>-32768)
{
while (y<b)
{
display(12); // Pin D3 + D4 an
Sleep(Zeit);
display(0); // alle Pins aus
Sleep(Zeit);
b--;
}
}
else
{
cout<<"Der Wert ist zu groß oder zu klein"<<endl;
}
//------------------------------------------------------------------------------
//------------------------- Z-Achse -------------------------------
if(z>=0 && z<32767)
{
while (c<z)
{
display(4); // Pin D2 an
Sleep(Zeit);
display(0); // alle Pins aus
Sleep(Zeit);
c++;
}
}
else if (z<0 && z>-32768)
{
while (z<c)
{
display(12); // Pin D3 + D4 an
Sleep(Zeit);
display(0); // alle Pins aus
Sleep(Zeit);
c--;
}
}
else
{
cout<<"Der Wert ist zu groß oder zu klein"<<endl;
}
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
display(0); //alles wird auf 0 gesetzt
FreeLibrary("inpout32.dll");
getch();
return 0;
}

Dar Maniac
13.04.2007, 16:00
Hat das programm was mit meinem loopbackstecker zutun?! weil mit cout<<"Geben Sie die Bewegung in die Tiefe ein (X-Achse): "<<endl;
cin>>x;
cout<<"Geben Sie die Bewegung fuer die horizontale Achse ein (Y-Achse): "<<endl;
cin>>y;
cout<<"Geben Sie die Bewegung fuer die Hoehe ein (Z-Achse): "<<endl;

bringt mir ja nix!!!!

danke an Vogon VIELEN DANK Mega Hilfe!!!

AlKI
13.04.2007, 17:14
sorry, ich meinte Profdoc, hätte ich dazuschreiben sollen, ich editiers glaich mal....

die verfahrwege haben was mit ner CNC-Fräse zu tun, haste richtig gesehen, KEIN loopbackstecker, aber auch Druckerport ansteuern.


n fettes THX, profdoc

Dar Maniac
13.04.2007, 17:17
und kann mir jemand ein programm, schicken, schreiben etc was kostenlos ist und ganz einfach für die Konbtrolle mit einem loopback stecker ?!
Einfach Bits raus Bits rein, sind alle da?ok!

AlKI
13.04.2007, 17:26
ok, ich versuchs mal umzuschreiben, durch profdok glaube ich, dass ich es verstanden habe.

Der loopback-Stecker müsste dann nur jeh einen ausgangspin mit einem eingangspin verbinden, dann könnte man das vom PC messen lassen.

Wie gesagt, ich versuchs mal...

Dar Maniac
13.04.2007, 17:28
hab da jezz jeweils ein Stecker für Parallel und für Seriell gebaut nach der Anleitung gefunden bei: http://www.ta7.de/txt/anleitun/004-kabel-faq.htm
jezz fehlen mir die einfachen Programme kann mir da jemand helfen, soll am besten irgendwo beschrieben sein wie ich son prog schreibe oder schickt mir eins....diese Shareware is alles mist will einfach nicht funzen

AlKI
13.04.2007, 17:49
Also, hier mal die Standartbelegung von nem Druckerport.
auf der seite da steht ne menge, aber irgendwie hab ich da wohl was überlesen, so von wegen Loopbackstecker.

ich mach dann auch gleich nen Schaltplan, wie du da alles verbinden müsstest, ich hab da ne ganz simple idee.

Mist, ich weiß nicht, wie man an den Eingängen einliest. muss ich dann

#define PORT-INPUT 0x379

o.Ä. machen?

Achja, und später dann

void(readin[o.ä.])
usw

?

AlKI
13.04.2007, 18:31
So, zumindest die Ausgänge ( auf dem Bild die Pins D0 bis D7) kannste jetzt testen, wenn du von denen ne LED mit passendem Vorwiederstand (470 Ohm sollten fast schen zu viel sein) von denen mit der Katode zu GND anschließt.



//------------------------------------------------------------------------------
//Autor : AlKi
//Programm: Ansprechen der Ausgänge des Parallel Port´s
//im 2-Sekunden-Takt
//------------------------------------------------------------------------------
#include <conio.h>
#include <iostream.h>
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//================================================== ============================
typedef short (_stdcall *inpfuncPtr)(short);
typedef void (_stdcall *oupfuncPtr)(short, short);


extern inpfuncPtr inp32fp;
extern oupfuncPtr oup32fp;

#define PPORT_BASE 0x378

short Inp32 (short);
void Out32 (short, short);

//------------------------------------------------------------------------------
short Inp32 (short Port)
{
return (inp32fp)(Port);
}

void Out32 (short Port, short Data)
{
(oup32fp)(Port, Data);
}
//================================================== ============================
inpfuncPtr inp32fp;
oupfuncPtr oup32fp;

short Daten=0;

void display (short);
void display (short input)
{
Daten=Inp32(PPORT_BASE);
Out32(PPORT_BASE, input);
}
//------------------------------------------------------------------------------
int main()
{
HINSTANCE hLib;
int INF=0, i=0, x=0, y=0, z=0, a=0, b=0, c=0, Zeit=2000; //Wartezeit in Millisekunden
//-----------------------Bibliothek wird geladen-------------------------------
hLib=LoadLibrary("inpout32.dll");
if (hLib==NULL)
{
cout<<"inpout32.dll nicht vorhanden"<<endl;
cout<<" PROGRAMM WIRD BEENDET "<<endl;
exit(0);
}
//------------------------Befehl wird geladen----------------------------------
inp32fp=(inpfuncPtr) GetProcAddress(hLib, "Inp32");
if (inp32fp==NULL)
{
exit (0);
}
//------------------------Befehl wird geladen----------------------------------
oup32fp=(oupfuncPtr) GetProcAddress(hLib, "Out32");
if (oup32fp==NULL)
{
exit (0);
}
//-----------------------------------------------------------------------------
display(0); //alles wird auf 0 gesetzt
//-----------------------------Hauptteil----------------------------------------
cout<<" Port wird getestet "<<endl;

//------------------------- X-Achse -------------------------------

display(1); // pin D0 an

Sleep(Zeit);
display(0); // alle Pins aus
Sleep(Zeit);
display(2); // Pin D1 an

Sleep(Zeit);
display(0); // alle Pins aus
Sleep(Zeit);
display(4); // Pin D2 an

Sleep(Zeit);
display(0); // alle Pins aus
Sleep(Zeit);
display(8); // Pin D3 an

Sleep(Zeit);
display(0); // alle Pins aus
Sleep(Zeit);
display(16); // Pin D4 an

Sleep(Zeit);
display(0); // alle Pins aus
Sleep(Zeit);
display(32); // Pin D5 an

Sleep(Zeit);
display(0); // alle Pins aus
Sleep(Zeit);
display(64); // Pin D6 an

display(0); // alle Pins aus
Sleep(Zeit);
display(128); // Pin D7 an

Sleep(Zeit);
display(0); //alles wird auf 0 gesetzt


FreeLibrary("inpout32.dll");
getch();
return 0;
}


Devcpp gibts kostenlos als compiler, probiers damit.

Viel Glück

EDIT: wenn bei dir nix anspricht, also keine Software was mit dem Druckerport machen kann, liegts vlt daran, dass du Windows NT/XP hast, da wird der zugriff auf die Ports verweigert.
Lösen kannste das problem dann mit nem Programm namens "Openport" oder so ähnlich. Das Programm lässt die anderen Programme dann auf die Ports zugreifen.

Vogon
13.04.2007, 22:24
Testen kannst du auch mit Dr. Hardware .. gibt's sogar noch in einer DOSen Version.

* Dr. Hardware Sysinfo - MS DOS
http://www.chip.de/downloads/c1_downloads_12992315.html

Dar Maniac
15.04.2007, 20:03
Jemand was für seriell? und wie funktioniert dieses Doktor Hardware hab das mit den loopbackstecker + programm probiert war aber nix...