Paralleler Druckerport über Pascal steuern

Im Unterforum Projekte im Selbstbau - Beschreibung: Selbstbau von Elektronik und Elektro

Elektronik Forum Nicht eingeloggt       Einloggen       Registrieren




[Registrieren]      --     [FAQ]      --     [ Einen Link auf Ihrer Homepage zum Forum]      --     [ Themen kostenlos per RSS in ihre Homepage einbauen]      --     [Einloggen]

Suchen


Serverzeit: 18 4 2024  17:47:27      TV   VCR Aufnahme   TFT   CRT-Monitor   Netzteile   LED-FAQ   Osziloskop-Schirmbilder            


Elektronik- und Elektroforum Forum Index   >>   Projekte im Selbstbau        Projekte im Selbstbau : Selbstbau von Elektronik und Elektro

Gehe zu Seite ( 1 | 2 Nächste Seite )      


Autor
Paralleler Druckerport über Pascal steuern

    







BID = 522734

Sebra

Schriftsteller



Beiträge: 663
 

  


Hi, wie der Name dieses Themas schon sagt, versuche ich, meinen Druckerport über ein Pascal-Programm zu steuern. Dazu habe ich auch schon gegoogelt, und bin auf folgendes (auch aus diesem Forum ) gefunden:


Zitat :
Also,ich werd jetzt mal versuchen euch das Ansteuern der Parallelen

Schnittstelle mit Turbo
Pascal (7) etwas näher zu bringen! Dieses Tutorial ist sehr einfach gehalten

und bietet sich
deshalb hervoragend für Anfänger an! Ich fange mal ganz vorne an!

Die Parallelschnittstelle hat 25 Buchsen.Dementsprechend hat der Stecker 25

Pins! Wenn man genau
hinguckt sieht man das die Pins bzw. die Buchsen numeriert sind!

Pin bzw. Buchse 2 - 9 sind Ausgänge
Pin bzw. Buchse 10,11,12,13,15 sind Eingänge
Pin bzw. Buchse 18-25 sind Masse (Ground)
Ich werde in diesem Tut immer von Pins reden und nicht von Buchsen da ich

mir so jedesmal 3
Zeichen spare und das läppert sich

Es ist möglich durch Ansteuern der Ausgänge ca. 5 Volt Spannung auszugeben.

So ist es z.B möglich
ein kleines Lauflicht mit 8 LED´s an die Parallele anzuschließen und diese

dann in verschiedenen
Möglichkeiten leuchten zu lassen! Mann sollte jedoch immer über Transistoren

gehen! D.h man
gibt über den jeweiligen Pin Spannung an den Transistor und dieser Schaltet

dann eine
Fremdspannung z.B eine Batterie dazu! Das ist (zumindest behaupten das

verschiedene Quellen)
besser für die Parallele! Ich persönlich habe zu Testzwecken mehrmals kleine

Alarmanlagen,
Lauflichter,Motoren etc. auch ohne Transistoren an die Parallele

angeschlossen, da es
zum testen halt einfacher ist und man nicht stundenlange Platinen lötet oder

ätzt! Bei mir ist
damals immer alles gut gegangen! Ich empfehle aber trotzdem Transistoren zu

benutzen. Sicher
ist Sicher! Wenn man jedoch etwas bastelt, z.B. ein Lauflicht dann muß man

übrignes nicht von
allen Pins zu je einer Ground Leitung gehen sondern kann alle zu einer

bringen!
Ich nehm immer Nr.25

Kommen wir nun zum eigentlichen Programm! Ich werde jetzt einen kleinen

möglichst einfachen
Code posten und ihn danach erklären! Fangen wir mit dem ansteuern der

Ausgänge an und schieben
das einlesen der Eingänge erstmal auf!

Program Ausgang;
uses crt;
const Portadresse = 888;
var i:integer;

begin
clrscr;
i:=255;
repeat
Port[Portadresse]:=i;
until keypressed;
Port[Portadresse]:=0;
end.


Einfacher gehts glaub ich nicht!Wenn ihr den Code compiliert und startet

wird solange an
den LPT - Port Spannung gegeben bis eine Taste gedrückt wird! Die

Portadresse kann bei euch
anders sein! Wenn ihr auf eurem Rechner Windows habt dann geht in den

Gerätemanager! (über die
Systemsteuerung oder über die Eigenschaften vom Arbeitsplatz). Dann klickt

ihr die auf LPT1
und dann auf Eigenschaften! Dann auf Resourcen! und dann guckt ihr euch den

E/A Bereich an
da steht dann z.B 0378 - 037F! Dabei müsst ihr beachten das dies

Hexadezimalzahlen sind!
Entweder rechnet ihr sie in Dezimalzahlen um oder nehmt halt einfach die

Hexa´s! Die ersten
Zahlen sind die Port Adresse: Hier 378!Im Programm müsstet ihr dann
Port[$378]:=i;
schreiben! Bei Hexadezimalzahlen muß immer ein Dollar-Zeichen vor der Zahl

stehen bei
Dezimalzahlen ist das nicht so! Die üblichen LPT Adressen sind
378h
278h
3BCh
2BCh
Das h steht dabei immer für HEXADEZIMAL und wir im Quelltext nicht mit

eingegeben!

Soweit so gut! Die Variable i kann beliebig verändert werden! Das

funktioniert wie folgt!
i:= 0 Keine Spannung
i:= 1 Pin 2 hat Spannung
i:= 2 Pin 3 hat Spannung
i:= 4 Pin 4 hat Spannung
i:= 8 Pin 5 hat Spannung
i:= 16 Pin 6 hat Spannung
i:= 32 Pin 7 hat Spannung
i:= 64 Pin 8 hat Spannung
i:= 128 Pin 9 hat Spannung
Man kann natürlich auch kombinieren
i:= 3 Pin 2 und 3 haben Spannung
i:= 69 Pin 2 und 4 und 8 haben Spannung
...
i:= 255 Alle Pins haben Spannung


Ich hab es schonmal geschaft, meine Portnummer rauszufinden, da stand bei den Eigenschaften von LPT1, dass dieser Anschluss was mit 0378 (Hexadezimal) zu tun hatte. Mal schnell umrechnen lassen, und es war 888 im Dezimalsystem (wie beim Verfasser des obigen Textes; dieser ist übrigens aus einer angenangenen Textdatei und über google evtl. nicht zu finden).

Wenn ich z.B. eine Leuchtdiode oder - noch einfacher - ein Multimeter "ansteuern" (also zum Anzeigen von 5V bringen möchte), wie muss ich da vorgehen?
Ich finde es irgenwie irritierend, dass der Pin mit einer Variablen versehen wurde. Die Zahl 255 steht für alle Pins. Man könnte doch einfach die Zahl 1 verwenden (ohne Variable), und man hat Spannung auf dem Pin 2 (gegen GND, also gegen Pin 25, oder?)

D.h. folgendes Programm müsste funktionieren (ich will es jetzt nicht ausprobieren, bevor es mir als funktionierend und ungefährlich bezeichnet wurde .


Program Ausgang;
uses crt;
const Portadresse = 888;

begin
clrscr;
repeat
Port[Portadresse]:=1;
until keypressed;
Port[Portadresse]:=0;
end.

Stimmt dies so? Hab ich damit dann eine Spannung von 5V zwischen Pin2 und Pin 25?

mfg und vielen Dank

Edit: die Portadresse 888 bzw. 378 trifft auf meinen Laptop zu und kann bei anderen evtl. falsch sein. Evtl. kann sie auch Schaden an einem irgenwo am PC angeschlossenen Drucker ausrichten, darum warne ich davor, einfach diese Angaben zu übernehmen. Auf alle Fälle Drucker ausstöpseln, und zwar alle seriellen und parallelen Geräte. Keine Ahnung ob Schaden verursacht werden kann, ich will nur mal auf Nummer sicher gehen.

[ Diese Nachricht wurde geändert von: Sebra am 19 Mai 2008 23:50 ]

BID = 522736

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika

 

  

Hallo,

Kann zwar die Sprache nicht, aber sieht gut aus, solange die Routinen auch so arbeiten, wie man das gerne hätte. Du kannst also ruhig mit dem Multimeter an den Pinnen 2-9 herummessen. Pass' nur auf, dass du keine Kurzschlüsse verursachst oder andere Spannungen auf die Ausgänge legst, davon gehen die im schlimmsten Fall kaputt, andere sind sogar bidirektional.

Ich würde nur nicht immer wieder eine 1 in den Port schreiben lassen, kostet nur Rechenzeit. Schreibe eine 1 hinein (Pin2 geht, wie korrekt gesagt auf 5V), gehe dann in die Endlosschleife, in der auf Tastendruck gewartet wird. Wird die Schleife beendet, kannst du den Port wieder leeren, also eine 0 reinschreiben.

Ob jetzt das Programm syntaktisch korrekt ist, kann ich wie gesagt nicht beurteilen, da ich kein Pascal kann.

Edit:
Vielleicht um die Verwirrung zu beenden:
Lass dir mal die Zahlen, die du so in den Port schreibst, im Dualsystem anzeigen. Dort sieht man dann 8 Stellen (da das LPT-Datenregister acht Bit breit ist) die entweder 1 oder 0 sein können. Eine 1 bedeutet 5V, eine 0 0V. So einfach ist das. Man schreibt sowas eigentlich in der hexadezimalen Schreibweise, da man so sehr einfach auch ohne Hilfsmittel die Bitkombinationen erkennen kann, da je eine Ziffer exakt 4 Bits repräsentiert. Natürlich kann man das auch dezimal, aber das ist nicht immer gleich ersichtlich, wenn es nicht grade eine grade Zahl ist, die einer Zweierpotenz entspricht, um zu erkennen, welches Bit gesetzt ist.

_________________


[ Diese Nachricht wurde geändert von: DonComi am 19 Mai 2008 23:43 ]

BID = 522741

Jornbyte

Moderator



Beiträge: 7074


Zitat :
gehe dann in die Endlosschleife, in der auf Tastendruck gewartet wird

so wird es hier gemacht.
Ob die Daten am Port ankommen, ist eine andere Frage.

_________________
mfg Jornbyte

Es handelt sich bei dem Tipp nicht um eine Rechtsverbindliche Auskunft und
wer Tippfehler findet, kann sie behalten.

BID = 522744

Sebra

Schriftsteller



Beiträge: 663

wie wird das dann in Pascal heißen?
Und muss man wirklich eine Schleife schreiben? Oder reicht es bereits, wenn man einfach auf "1" setzt?
Konkret: Ist auf Port 2 nur für einen Moment Spannung, ein kurzer Impuls also, oder so lange, bis man es wieder deaktiviert?

mfg

BID = 522745

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika

Ja, ich sprach es bereits an:
Es kann passieren, dass dein Betriebssystem den (mehr oder weniger) lowlevel-Befehl zum direkten Adressieren der LPT-Hardware blockt, du also keinen Zugriff erhälst bzw. das Lesen/Schreiben ins Nirvana verläuft.

Weiterhin kann es sein, dass, wenn du die Taste sofort oder sehr schnell drückst, der Port noch garnichts macht. Nicht alle 'Befehle' sind so aufgebaut, dass nach ihrer Beendigung auch was passiert. Viele Befehle bzw. Instruktionen werden auf Daten im Speicher ausgeführt und wieder verlassen. Es kann dann u.U. erst viele Zeiteinheiten später z.B. durch ein Interrupt, dazu kommen, dass diese Daten an die entsprechende Hardware übergeben werden. Bist du mit deiner Tastatuer schneller als der Intervall zum Aktualisieren, kommen die Daten nicht im Register an
Da solltest du dir aber keine Sorgen, so schnell bist du nicht .

Wenn du kein Pascal kannst, dann eigne dir das entsprechende Wissen an.
Achso, die letzen 8 Pins führen alle Massepotential.

Edit2:
Normalerweise reicht es, einmalig einen neuen Wert, z.B. 1, zu schreiben. Der bleibt dann solange im Register, bis ein neuer kommt.
Nur, du wirst nichts mit dem MM messen, wenn du nicht ein paar Sekunden den Wert so lässt, daher ja die Wartescheife.
Für ein ordentliches System gehört es sich auch, den Startwert zu speichern, um ihn beim Beenden wieder zurückzuschreiben. Du siehst, so einfach ist das alles nicht.

Welches System nutzt du? Dos? Dann sehen die Chancen gut aus. Ansonsten musste fertige Treiber, z.B. winXP nutzen.




_________________


[ Diese Nachricht wurde geändert von: DonComi am 19 Mai 2008 23:55 ]

[ Diese Nachricht wurde geändert von: DonComi am 20 Mai 2008  0:01 ]

BID = 522821

Sebra

Schriftsteller



Beiträge: 663

Ich habe jetzt grade im Internet auf dieser Seite
http://www.franksteinberg.de/progss.htm
folgendes gefunden:

Zitat :
Die Eigenschaften des Parallelport können wir mit dem Parallelport-Debugger (Download) austesten. Mit dem Programm können wir alle Ausgänge schalten, die Eingänge beobachten und Statusbits setzen. Über einen Widerstand (ca. 1 kOhm) können wir die Ein- und Ausgänge nach Masse oder mit einer 5V-Spannungsquelle verbinden und die Reaktion beobachten.


Beim Download kann man eine Exe und eine andere Datei (ich vermute den Quelltext) herunterladen. Dies ist der Linkdazu. (Ich übernehme keine Verantwortung für das, was dort zum Download angeboten wird)

Kann mir jemand dieses Programm erklären? Es sieht ja sehr praktisch aus, man kann damit ohne Aufwand den LPT Port steuern, nur verstehe ich es nicht ganz, ich hab etwas rumgedrückt und weiß jetzt nicht, ob nach dem Herunterfahren des PCs alles wieder so wie vorher ist .

Und noch was: Welche Unit braucht man bei Pascal fürs Zugreifen auf den Befehl PORT[...]?
mfg

BID = 522847

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika

Ohne das Programm geöffnet zu haben (zwei Gründe: 1. ich nutze unix, 2. ich öffne grundsätzlich keine fertigen Maschienenprogramme aus Sicherheitsgründen (mit ein paar Ausnahmen, wenn ich die Quelle kenne)) kann das ja wohl nicht so schwer sein.

Ich vermute einen Haufen Buttons, die, wenn man sie drückt, Bits im Datenregister setzen oder löschen. Entsprechend dazu wird also eine Spannung von 5V zu messen sein oder nicht.

Korrekt ist, dass dort sowohl Quelltext als auch das Kompilat verpackt ist. Der Quelltext sieht aber nach irgendeiner Form von Basic aus.


Weiterhin gehen alle Bitmuster, die man in die Daten-, Kontroll- und Steuerregister der LPT-Hardware geschrieben hat mit dem Ausschalten des Rechners verloren. Bekommen sie wieder Strom werden Standardwerte geladen oder zufällige Werte könnten drinstehen. Auf jeden Fall kann man sie dennoch zum Drucken und was weiß ich nutzen, solange man nicht die Hardware, wie auch immer das genau aussehen mag, zerstört.

Zu deiner Sprache kann ich dir leider nichts sagen und anscheinend gibts hier keine anderen Programmierer, die Pascal sprechen. Du wirst also selber mal suchen müssen, so schwer kann das nicht sein. Man sollte voraussetzen, dass Programmierer wissen, wie man Librarys einbindet oder zumindest wissen, wie sie an die Informationen kommen, in der steht, wie man externe Routinen benutzen kann .

_________________

BID = 522930

Nukeman

Schriftsteller



Beiträge: 754
Wohnort: bei Kleve

Hi Sebra,

mit hardwarenaher Programmierung unter Pascal kenne ich mich leider auch nicht
aus. In Pascal hab ich zuletzt in der Schule programmiert, was schon ein paar
Jährchen(zehntchen) her ist

Aber vielleicht hilft das was:

Bei Pollin hatte ich mal ein paar Displays gekauft, wo auch Ansteuercode per LPT,
komplett mit Sourcecode für XP dabei war.
Die HW-Ansteuerung geschieht dabei über die zlportio.sys, die wohl
auch Sprut für seine Brenner nutzt.

Das Programm ist in Delphi geschrieben, was wohl so eine Art Weiterentwicklung
von Pascal ist.
Vielleicht findest Du Dich ja darin zurecht. Oder findest anderweitig was
zur zlportio.sys im Netz.

Hier ist der Link:
http://www.pollin.de/shop/downloads/D120144S.ZIP

Gruß
Stefan

BID = 522936

LeoLöwe reloaded

Schreibmaschine



Beiträge: 1407
Wohnort: Meine
Zur Homepage von LeoLöwe reloaded ICQ Status  

Vermutlich läuft dein Programm unter DOS/Win9x, da ist es relativ einfach, den Zustand wiederherzustellen.

Du müsstest z.B. nur ein Programm schreiben, dass den Port-Wert in eine Datei schreibt. Ein weiteres Programm, dass du über die autoexec.bat aufrufst, lädt den gesicherten Wert dann wieder.

Morgen kann ich eventuell nochmal in ein paar alten Beispielen nachsehen, da müsste ich noch was haben. Eigentlich müsste der Port-Befehl aber auch ohne Unit funktionieren, weil das vom Prinzip her nur ein Zugriff auf ein Array ist.
Schau dich mal in der Hilfe um (glaube ich Shift und F1, oder sowas), da gab es zu meiner Zeit mal eine Auflistung aller Befehle mit Beispiel und benötigten Units.

Ich hab in deinem Quelltext nochmal was geändert. Jetzt schreibt er den Port-Status und wartet dann auf den Tastendruck, ohne ständig auf dem Port rumzuschreiben.



Code :

Program Ausgang; 

uses crt;
const Portadresse = 888;

begin
clrscr;
Port[Portadresse]:=1;
repeat until keypressed;
Port[Portadresse]:=0;
end.



Wie gesagt, morgen kann ich mal nach der alten CD suchen, da müsste ich sowas noch irgendwo haben.

_________________
We now return you to your regularly scheduled nonsense.

BID = 522989

Sebra

Schriftsteller



Beiträge: 663

Ich glaube, ich habe mit meinem Programm keinen Zugriff auf den Parallelport. Hab im Internet auch schon gelesen, dass seit Windows 98 oder NT das geblockt wird und nur mit speziellem Treiber funktioniert.

Dann lass ich es eben sein (sollte eh nur eine kleine Spielerei sein )

Darüber will ich mir jetzt nicht den Kopf zerbrechen .

Vielen Dank für die Antworten.

mfg

BID = 522993

Sebra

Schriftsteller



Beiträge: 663

So, jetzt bin ich doch noch mal neugierig geworden und hab das Multimeter geholt.
Das Programm von Nukeman wäre sicherlich perfekt geeigent, da ich ja nur eine Spannung zu und ab schalten möchte. Ich habe jetzt zwischen Pin 25 (GND oder Masse) und Pin 2 gemessen, hatte auch Spannung, doch konnte ich sie mit dem Programm nicht abschalten. Was muss ich bei dem Programm anklicken damit ich an einem Pin die Spannung zu- und abschalten kann? Ich glaube, ich bin wirklich zu doof, jetzt die richtigen beiden Pins zu finden. (Pin 25 als Masse oder GND (gibts da einen Unterschied?)) wäre sicherlich schon richtig.

mfg

BID = 522994

Sebra

Schriftsteller



Beiträge: 663

Entschuldigt bitte meinen dreifach-Post, aber jetzt muss ich noch eins dazu sagen:

Ich habe mir eben bei Pollin den Artikel mit der Best.Nr. 710 722 angesehen, und da war das Programm zum Download angeboten, mit dem man diese Relais einzeln schalten kann. Das Programm ist Top. Die Schaltflächen nicht sehr aussagekräftig, aber in der Hilfe erklärt. Damit kann man 8 Ausgänge steuern, man muss nur ein altes Kalbel für den LPT-Port am Drucker-Ende abschneiden und die Adern freilegen. Ich denke, um die Ausgänge 1-8 zu steuern, werden die Pins 2-9 zu verwenden sein. Der 1.Ausgang ist auf jeden Fall Pin2, Masse hab ich auf Pin25.

Kann ich jedem nur empfehlen, total einfach, nur weiß ich nicht, ob das irgendwie Auswirkungen auf den Drucker haben kann.

mfg und nochmals vielen Dank

BID = 523007

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika

Hallo Sebra,

Es ist einfach, den Port zu benutzen. Nur ist es eben unter jüngeren Windowsversionen nicht mehr auf dieser lowlevel-Ebene möglich. Daher ja der Zugriff über diverse Treiber. Da wäre z.B. ioport.dll oder weiter oben angesprochene.

Man muss halt wissen, wie man in deiner Sprache auf dynamische Bibliotheken referenzieren kann - und ich weiß es eben bei deiner Sprache und der Version (kann ja sein, dass sie zu alt für dynamically linked librarys ist) nicht.

Ich hatte hier mal eine kleine Library für Linux hochgeladen, mit der das sehr einfach in C umsetzbar ist. Das geht auch auf lowlevel-Ebene, wenn man sich mit ioperm Zugriffserlaugbnis geholt hat.

Aber wenn du jetzt eine Lösung gefunden hast, ist doch alles perfekt!
Du kannst ja auch versuchen, den Quelltext für deine Zwecke zu verändern. Oder schau dir mal die VisualBasic-Sprache an. Die ist intuitiv erlernbar und recht einfach (ich persönlich halte nichts davon, aber es ist eben möglich, schnell Programme zu schreiben). Damit kann man definitiv die ioport.dll einbinden und hat so vollen Zugriff auf den LPT. Habe ich damals selbst gemacht.

:)

_________________

BID = 523023

Sebra

Schriftsteller



Beiträge: 663

Jetzt müsste ich nur an den Quelltext rankommen. Aber ich schau mal, ob ich in Pascal auf diese Datei Zugreifen kann (vermutlich irgendwie als Unit laden).

Sowohl im Programmieren, als auch im Modellbau bin ich noch ziemlich unerfahren, also denke ich, ihr werdet bald wieder von mir hören .

Es ist echt super, wie schnell man hier Antworten bekommt, und dann auch noch sehr präzise, .

mfg

BID = 523046

Sebra

Schriftsteller



Beiträge: 663

Hm, irgendwie gibts keine Edit-Funktion mehr...

Auf jeden Fall würde ich mich noch freuen, wenn hier jemand wäre, der mir erklären kann, wie ich das ganze selbst in Pascal programmiere.
Sollte ungefähr so (von der Schwierigkeit her) so aufgebaut sein wie folgendes, Schleifen usw. kann ich dann schon selbst machen.

Program Ausgang;
uses crt;
const Portadresse = 888;

begin
clrscr;
repeat
Port[Portadresse]:=1;
until keypressed;
Port[Portadresse]:=0;
end.


Dazu muss man ja dann noch etwas laden, damit das ganze auch auf Windows XP funzt, etwa ioport.dll oder sowas.
Wäre echt toll, wenn sich damit noch jemand auskennt.
Ich versuche auch noch es rauszufinden und werde ggf. posten, wenn ich die Lösung habe.



      Nächste Seite
Gehe zu Seite ( 1 | 2 Nächste Seite )
Zurück zur Seite 1 im Unterforum          Vorheriges Thema Nächstes Thema 


Zum Ersatzteileshop


Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum       Datenschutz       Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland       

gerechnet auf die letzten 30 Tage haben wir 24 Beiträge im Durchschnitt pro Tag       heute wurden bisher 6 Beiträge verfasst
© x sparkkelsputz        Besucher : 180920457   Heute : 5358    Gestern : 9237    Online : 659        18.4.2024    17:47
7 Besucher in den letzten 60 Sekunden        alle 8.57 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
xcvb ycvb
0.037868976593