Paralleler Druckerport über Pascal steuern Im Unterforum Projekte im Selbstbau - Beschreibung: Selbstbau von Elektronik und Elektro
Autor |
Paralleler Druckerport über Pascal steuern |
|
|
|
|
BID = 522734
Sebra Schriftsteller
Beiträge: 665
|
|
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: 7178
|
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: 665
|
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: 665
|
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
|
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: 665
|
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: 665
|
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: 665
|
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: 665
|
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: 665
|
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.
|
|
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 20 Beiträge im Durchschnitt pro Tag heute wurden bisher 10 Beiträge verfasst © x sparkkelsputz Besucher : 182395701 Heute : 2897 Gestern : 7548 Online : 707 25.11.2024 12:49 9 Besucher in den letzten 60 Sekunden alle 6.67 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
|
xcvb
ycvb
0.0389549732208
|