PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LPT mit C ansteuern - Win 98



Pitt1986
30.07.2005, 16:57
hallo,

seit paar tagen schon versuche ich den 2. pin vom lpt port anzusteuern.
ich habe auf den 2. pin den pluspol einer led und auf den 24. pin den minuspol hingelötet.

jetzt versuch ich schon die ganze zeit die led zum leuchten zu bringen. aber es klappt nicht.

ich glaube mein größtes problem liegt daran dass ich gelesen habe dass es outp oder outp nicht mehr gibt und der compiler bringt mir auch den fehler auch wenn ich conio.h einbinde.

so sieht mein quellcode aus:

int main(void) {
0x378,0x02;
return 0;
}

betriebssytem: win 98
sprache: c

wäre sehr dankbar für hilfreiche antworten

FJK
30.07.2005, 17:01
hallo

//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <conio.h>
#define Par_Sst 0x378
#define LPT1 0x378
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//==============================================
void outp (unsigned int portadr, unsigned char value)
{
_asm mov edx,portadr
_asm mov al, value
_asm out dx,al
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{

}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
outp(Par_Sst,1);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
outp(Par_Sst,0);
}
//

da habe ich es besser beschrieben
https://www.roboternetz.de/phpBB2/viewtopic.php?t=1841

Bastlwastl
06.08.2005, 14:59
Tag

Mein Bruder hat ein Programm zum Testen von Logikschaltungen geschrieben.

Mit dem kann man die 8 Datenpins des LPT's entweder manuell oder mittels Textdatei automatisch gesteuert setzen.

Die Signale die von der Schaltung kommen werden über den Gameport erfasst.


Du kannst es dir wenn du bei Yahoo registriert bist unter:
http://de.groups.yahoo.com/group/Sepps_Gruppe/

herunterladen.
Das Programm heißt LogikControl.

mfg Bastlwastl

danionbike
07.08.2005, 10:31
hallo!


hab eine ähnliches problem wie Pitt1986

ich arbeite hingegen aber unter winxp prof. und benutze den Bloodshed dev-c compiler version 4.9.9.2

möchte auch einen Port/Pin ansprechen, um damit ein Relais zu schalten bzw. wenn es auch ohne Relais gehen würden um einfach einen Stromkreis mit ca. 12-14V zu schließen bzw. zu öffnen.

bin leider auf dem gebiet nicht der profi.

die suche hier im forum hat mich leider auch nicht wirklich weiter geholfen!

Bastlwastl
07.08.2005, 11:35
Tag

Ich bin Sepp, Bastlwastl's Bruder.

Er hat mich gebeten statt ihm zu antworten, da ich mich besser damit auskenne.

Ich rate dir dass du deine Schaltung über Optokoppler ansteuerst.

Ich werde dir das Programm so verändern, dass du es auch unter WinXP verwenden kannst.

Wenn du etwas geduld hast, erstelle ich dir einen Schaltplan.

mfg Sepp

danionbike
07.08.2005, 11:56
hey, das wäre ja super!!!

soll ich dir das schon angefangene Programm mal zuschicken?

oder gehts auch so?

brauch ja "nur" den Aufruf für das Ansteuern.

schon mal DANKE!!!

danionbike
08.08.2005, 18:30
habs mal ein bissle probiert, leider Fehlermeldung, wie gesagt programmiert unter C (nicht C++) und WinXP.

Hab mich jetzt kundig gemacht, leider erscheint nach dem Ausführen des Programms folgende Fehlermeldung:

main.exe hat ein Problem festgestellt und muss beendet werden.


hier mal der Quellcode:


#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>

void warte();

int main(int argc, char *argv[])
{
int start;
printf("Bitte 1 fuer Messstart eingeben:");
scanf("%d",&start);
if(start == 1)
{
_outp(0x378,0xFF); //alle DATA-Ausgänge (Pins) high setzen
printf("Ausgang = 1");
warte(10);
_outp(0x378,0x00); //alle DATA-Ausgänge (Pins) low setzen
printf("\nAusgang = 0");
warte(20);
}

system("PAUSE");
return 0;
}


void warte(int sekunden)
{
clock_t start;
sekunden *= CLOCKS_PER_SEC;
start = clock();
while( clock() < (start + sekunden))
;
}


habe im Internet gelesen, dass am Parallelport bei einem "high" 5V anliegen.

Wisst ihr warum es nicht funktioniert???

danionbike
09.08.2005, 07:30
hallo, ich bins mal wieder!

das Programm müsste gar nicht auf XP laufen,
besser wäre es sogar wenn es auf NT 2000 läuft!

Könnt ihr mir dabei helfen?!

THX!

Blackbird
09.08.2005, 08:39
XP und W2000 (und ME) verhalten sich da gleich.

Siehe auch hier:
https://www.roboternetz.de/phpBB2/viewtopic.php?p=103487#103487

Blackbird

Bastlwastl
09.08.2005, 21:37
@Blackbird

Baut ME nicht auf Win98 auf?

Soviel ich weis sperren sich nur NT-Systeme gegen den direkten Registerzugriff.

@danionbike

Wenn nur Daten ausgegeben werden sollen, dann kannst du das fertige Programm morgen bzw. übermorgen haben.
(Ich verwende einen Treiber für den Zugriff auf den LPT unter Win 2000/XP

Wenn aber noch Daten wie beim Programm Logikcontrol eingelesen werden sollen, dann wird es etwas länger dauern.

danionbike
09.08.2005, 21:43
@ Bastlwastl

nein, es muss nur ein Pin geschalten werden um damit ein Relais zu steuern!
müsste halt noch wissen wieviel Volt bei einem geschalteten Pin anliegen, damit es auch mit dem Relais funktioniert!

FJK
09.08.2005, 22:57
hallo

1 pegel = 5v
0 pegel = 0v

Blackbird
10.08.2005, 08:16
Richtig, ME ist ein 16bit-OS. War ein Fehler von mir.


Blackbird

Bastlwastl
11.08.2005, 19:36
@FJK

Nicht umbedingt.
Bei manchen Steuerpins -> Basisadresse + 2 ist es andersherum

@Blackbird
Dass kann doch jedem passieren.
(Obwohl ich glaube dass es schon ein 32 Bit-OS ist. Es ist doch fast genau das Selbe wie Win98 und dass ist ein 32 Biter.)

@danionbike

Wenn du nur einen Pin ansteuern willst, dann les dir mal die Homepage von Anton Zechner durch.
Der hat auch ein tolles Beispiel für den LPT unter Windows 2000 / XP.
Seine Homepage findest du unter:
http://members.inode.at/anton.zechner/az/index.html

Nur für einen anzusteuernden Pin tue ich mir nur die Arbeit an und schreibe das gesamte Programm um, wenn es umbedingt sein muß.
(Nur für einen Pin bringt das Programm nicht viel, da es zum Durchchecken von Logik- und Mikrokontrollerschaltungen gedacht ist)

Wenn du mir aber genau sagst was du willst, dann schreibe ich dir ein kleines Programm.


Auch wenn es andere Meinungen gibt.
Ich würde die Datenpins maximal mit 1mA bis 1,5mA belasten obwohl sie mehr leisten können wie die Steuerpins.

Ich habe meine Schaltung nach dem Prinzip aufgebaut wie es die Scizze im Anhang zeigt.

Da du für die Versorgung des Relaise eine externe Versorgung benötigst, würde ich dir raten auch einen Optokoppler zu verwenden.

Ich würde ebenfalls alle Masseanschlüsse des LPT zusammenschließen um die Last gleichmäßig zu verteilen.

Wenn der 1. Transistor (T) schon ausreichend verstärkt und den Strom, den das Relaise benötigt abkann, dann hängst du das Relaise zwischen den Anschluss (1) und die Versorgung und den Anschluss (2) auf Masse.

Wenn du aber noch einen weiteren Transistor benötigst, dann hängst du den Anschluss (2) auf die Basis des weiteren Transistors.
Den Emitter des weiteren Transistors hängst du auf Masse und den Colektor des weiteren Transistors mit dem Anschluss (1) an das Relaise.
Das Relaise selber schließt du an die Versorgung an.

Wenn du Hilfe bei der Berechnung brauchst, sag einfach bescheit.

mfg Sepp (Bastlwastl's Bruder)

Bastlwastl
14.08.2005, 16:35
@danionbike

Ich hab das Programm heute mal schnell programiert.
(Hat ca. 2h gebraucht.)

Sag mir ob dir das reicht und ob du noch Wünsche hast.

Ich hab übrigens vergessen dich darauf hinzuweisen dass du bei einem Relaise umbedingt eine Freilaufdiode brauchst, da sich ansonsten die Transistoren schnell verabschieden.

Da ich nicht weis wie dein Wissensstand ist, schreib mir mal wenn du etwas nicht verstehst.

Ich hab dir zum Programm noch den gesamten Quellcode angehängt, damit du weist was ich gemacht habe.

Damit das Programm läuft mußt du die Exe, den Treiber und die Datei Einstellungen.dat in den selben Ordner kopieren.
Außerdem benötigst du Administratorrechte.
In der Datei Einstellungen.dat befinden sich die Einstellungen die beim Starten des Programms geladen werden.

danionbike
24.08.2005, 12:25
Hey,

super, es funktioniert einwandfrei!
Die Abfragen in der Konsole sind auch gut so!

BESTEN DANK!!!! O:) O:) O:) O:)


=D>

Bastlwastl
27.08.2005, 18:07
Freut mich dass es dir gefällt.

Bastlwastl
30.08.2005, 12:23
Ach ja, die letzten Beiträge waren von meinem Bruder Sepp.

mfg Bastlwastl

crowdy
23.10.2005, 19:06
Hey,
ich habe da auch so einige probleme die LPT Schnittstelle zu programmieren. Deswegen poste ich hier mal ein Codesschnipsel in C von mir mit dem ich probiere die Schnittstelle anzusteuern. Laufen tut das Programm auf Win95 und wurde mit Bloodshed kompiliert. Das Programm soll einfach nur D0 bis D7 an und ausschalten, damit ich das mit meinem Voltmeter dann messen kann.

Wäre sehr nett wenn ihr mir sagen könnt ob da ein Fehler im Programm ist, ist nämlich mein erstes Programm mit dem ich den Druckerport ansteuern will.

#include <stdio.h>
#include <conio.h>
#include <windows.h>

int main(int i)
{
for(i=1;i<=10;i++)
{
_outp( 0x378, 0x07); /*D0 bis D1 soll auf high gehn*/
printf("D0...D7=1\n");

wait(40); /* Warte funktion hab ich woanders definiert*/

_outp( 0x378 ); /*D0 bis D1 soll auf low gehn*/
printf("D0...D7=0\n");

wait(40);
}
}


Und? Wie siehts aus? So in etwa müsste das doch stimmen. Oder?

EDIT:
Hat wircklich keiner eine Idee warum ich am Druckerport nichts messen kann? Das haben hier doch einige schinmal gemacht, allerdings bin ich aus dem Thread nicht schlau geworden.