Raus aus dem LPT

Du hast eine Frage aber bist neu im Thema?
Troll86

Raus aus dem LPT

Beitrag von Troll86 »

Hallo,
Ich hab mit meinem alten Klassenlehrer ein Projekt vor, dafür ist es notwendig, das wir Daten aus und in einen Rechner geben, wir wollen dafür den LPT verwenden, das haben wir auch schon ohne Probleme geschaft. Wir wollen nun d0-d3 als Ausgang und d4-d7 als eingang verwenden, haben wir auch schon fertig. Nur sind vier Einzelleitungen pro richtung viel zu wenig, da dachte ich nun an BCD-Hex wandler, bzw Hex-BCD wandler, die müsste ich aber erst kaufen, ich hab aber in meinem Keller noch ein Paar UB8841M gefunden und dacht das ich die evtl. dafür verwenden kann.

Kann mir einer sagen ob das geht und wenn ja WIE.

danke schon mal im vorraus.
Benutzeravatar
Dosenware
DOS-Gott
Beiträge: 3745
Registriert: Mi 24. Mai 2006, 20:29

Beitrag von Dosenware »

nebenbei: wie kann man die Datenausgaenge als eingaenge verwenden? Die sind als Ausgaenge definiert. Auf meinem alten GA7zx ging das zwar, aber eben nur dort. (musste mir dann einen Multiplexer basteln, der den Kram ueber die Steuerleitungen reinschickt)

Aehm, BCD/Hex sind doch immer nur 4bittige Codes... was spricht also gegen einen Multiplexer, statt den kram immer erst aufwendig umzukodieren (denke mal du willst 2stelligen BCD in einen einstelligen Hexcode wandeln um die uebertragung hinzubekommen) - Steuerleitungen hast du ja genug...
Benutzeravatar
Odin
DOS-Guru
Beiträge: 712
Registriert: Fr 3. Feb 2006, 16:52

Beitrag von Odin »

Die Datenleitungen des LPT-Ports sind laut Standard unidirektional (Ausgänge). Es gibt aber manchmal, welche, die können auch Bidirektional arbeiten. Von daher sollte man lieber seriell übertragen (geht auch mit LPT, nur halt langsamer) oder für die Eingänge die Steuerleitungen nehmen.
"640k ought to be enough for anybody." - Bill Gates (1981)
"Windows 95 needs at least 8MB RAM." - Bill Gates (1996)
... also braucht niemand Windows 95 !!!
elianda
DOS-Übermensch
Beiträge: 1150
Registriert: Mi 31. Jan 2007, 19:04
Wohnort: Halle
Kontaktdaten:

Beitrag von elianda »

Vielleicht kannst du etwas naeher beschreiben, wie genau ihr die Daten austauschen wollt? Was fuer ein Geraet befindet sich denn auf der anderen Seite? Womoeglich koennen wir dir einen Tipp geben, wie du bestimmte Sachen am besten realisierst.

Typischerweise ist ja Seriell ueber RS232 die absolute Gebrauchskartoffel des klassischen Datentransfers. Gerade aus den Modem / Mailboxzeiten gibt es da Beispielsources und Dokumentation.
Der LPT eignet sich fast nur fuer 8 Bit digital Output. (wie z.B. beim Covox Speech Thing)
Troll86

Beitrag von Troll86 »

alo ein und ausgabe haben wir ja schon hin bekommen.
als kleines beispiel (wirklich sehr klein):
ein wasserbecken mit zwei sensoren (voll und leer), einem motor und einem ablassventiel.
signal "leer" an d0
signal "voll" an d1
motor an d4 (über transistor)
ablassventiel an d5 (auch über nen transistor)
ablauf:

Code: Alles auswählen

wenn (d0 == true)
{
d4 = true;
d5 = false;
}
wenn (d1 == true)
{
d4 = false;
d5 = true
}
und das ganze in einer endlos schleife
bei dem beispiel werden nur zwei ein und ausgänge benötigt, aber wenn wir mehr benötigen finde ich das einfachste nen bcd-hex wandler (ausgang), denn kann ich im prog einfach sagen out (888, 7)(qbasic) und denn hab ich an der leitung nr. 7 nen signal.
ich will also einfach nur den bcd-hex-bcd wandler dur einen ub8814m ersetzten um nicht einkaufen zu müssen, ich weiß aber nicht ob das geht und schon gar nicht wie.

das ganze soll denn als vorzeige und versuchs aufbau für den unterricht sein. damit mein alter lehrer seinen schülern mal prktisch zeigen kann was man noch so für spielereien mit nem guten alten dos rechner machen kann. damit die theorie nicht so trocken ist.
Benutzeravatar
Dosenware
DOS-Gott
Beiträge: 3745
Registriert: Mi 24. Mai 2006, 20:29

Beitrag von Dosenware »

Troll86 hat geschrieben:alo ein und ausgabe haben wir ja schon hin bekommen.
aber diese Variante laeuft nur auf einem Rechner, auf dem naechsten schon nicht mehr...

Mit einem Multiplexer laeufts ueberall und du hast 8 Ein und 8 Ausgaenge zur verfuegung.

Hier mal die Softwareseite meines Multiplexers.
(nicht meckern, das ist der quelltext der ersten lauffaehigen Variante (~10 Jahre her, war auch meine erste Bastellei) - Warum ich allerdings Strobe und AFXT zum umschalten des Multiplexers genutzt habe, weiß ich auch nicht mehr....evtl. wollte die Schaltung mit Strobe alleine nicht so recht...)

Code: Alles auswählen

   
{Einlesen von 8 Bit}
{die Ersten 4 Bit}
   Port[$37A]:=$02;  {Strobe}
   delay(1);         {um Datenmuell zu vermeiden}

                {bit 3}                        {bit 2}
   in_1:=(((not port[$379])and 64)div 8)+(((port[$379])and 128)div 32)+
                    {Bit 1}                   {Bit 0}
         (((not port[$379])and 32)div 16)+(((not port[$379])and 8)div 8);

{die Restlichen 4 Bit}
   Port[$37A]:=$01;    {AFXT - Umschalter fuer die Restlichen 4 Bit}
   delay(1);  {um Datenmuell zu vermeiden}

   IN_1:=IN_1*16+
                      {bit 3}                  {bit 2}
         (((not port[$379])and 64)div 8)+(((port[$379])and 128)div 32)+
                    {Bit 1}                   {Bit 0}
         (((not port[$379])and 32)div 16)+(((not port[$379])and 8)div 8);
die Schaltung selbst liefere ich dann noch nach - der Prototyp liegt hier auch noch herum.

EDIT:
Die Schaltung haengt uebrigens an der 36 Poligen LPT-Variante
kleines Bild: click
elianda
DOS-Übermensch
Beiträge: 1150
Registriert: Mi 31. Jan 2007, 19:04
Wohnort: Halle
Kontaktdaten:

Beitrag von elianda »

[leicht OT ein]

Etwas sehr nettes und auch recht beeindruckendes ist folgendes:

Flugzeugpositionsbestimmung mit der Soundkarte

Man empfaengt mit einer Antenne einen Radiosender und mixed den extern herunter auf den Bereich 0 - 44 kHz, das gibt man der Soundkarte.
Nun ist es so, wenn ein Flugzeug sich irgendwo am Himmel befindet, reflektiert es die Radiowellen und man erhaelt zwei Signale die leicht verschoben sind. Man mixed in Bezug auf die Sendertraegerfrequenz runter.
Wenn man nun die Position des Radiosenders und die eigene kennt, kann man die Entfernung des Flugzeugs bestimmen. Mit zwei Messpositionen (Dreieck) kann man die Position bestimmen.

[leicht OT aus]
Troll86

Beitrag von Troll86 »

Dosenware hat geschrieben:
aber diese Variante laeuft nur auf einem Rechner, auf dem naechsten schon nicht mehr...
Hä, warum? Mein einfaches beispiel haben wir schon an mehreren rechnern ausprobiert. bedingung ist nur das das OS nicht über win 98 ist.
Wenn ich meine Idee umsetzten kann, hab ich übrigens 15 ein und ausgänge. ich zeichne mal die TTL schaltung für den ausgang fertig, dauert nur ein bischen.

Das mit dem multiplexer versteh ich nicht ganz, kannst du das bitte ausführlich beschreiben.
Benutzeravatar
Dosenware
DOS-Gott
Beiträge: 3745
Registriert: Mi 24. Mai 2006, 20:29

Beitrag von Dosenware »

wenn du die Datenleitungen des LPT sowohl als EIN- als auch als AUSgang verwenden willst, klappt das nicht immer - hatte ich seinerzeit versucht -> das lief auf einem Rechner, auf dem anderen schon nicht mehr.

und wenn du dir die Beschreibung des LPT ansiehst, wirst du sehen, dass die Datenleitungen nur als Ausgang gedacht sind.

Siehe auch http://www.lukasbit.de/computer/pinbele ... p#parallel
Das mit dem multiplexer versteh ich nicht ganz, kannst du das bitte ausführlich beschreiben.
Also: der Multiplexer bekommt 2 Eingangssignale, ein Steuersignal und ein Ausgangssignal.
Ueber das Steuersignal wird bestimmt welches Eingangssignal an den Ausgang weitergeleitet wird -> du uebertraegst also 2Bit auf einer Leitung, musst allerdings zwischen diesen beiden hin und herschalten.

die Schaltung die ich gepostet habe zerlegt also eine 8Bit Wert in zwei 4Bit Werte zwischen denenen mittels AFXT (AUTOFD) umgeschaltet wird.

Als eingaenge dienen:
ACK (10)
BUSY (11)
PE (12)
Error (32

die werte landen dann auf Port 379h und muessen ueber eine Verknuepfung zusammengebastelt werden...
bedingung ist nur das das OS nicht über win 98 ist.
??? was passiert denn da? meine Schaltung laeuft unter 98 super...

PS. jetzt weiß ich auch wieder warum ich Strobe und AFXT, statt nur Strobe, zum umschalten genommen habe: gab da beim Prototyp Probleme, wenn ich nur ein Signal abgefragt hatte gabs Datenmuell - hatte wohl was mit der eigenen Stromversorgung zu tun...
Benutzeravatar
Odin
DOS-Guru
Beiträge: 712
Registriert: Fr 3. Feb 2006, 16:52

Beitrag von Odin »

Die I/O-Ports können ab Windows 2000 nicht mehr direkt angesprochen werden. Deshalb funktioniert das nicht. Es gibt aber überall im Internet DLLs für fast alle Programmiersprachen, die einen direkten Zugriff ermöglichen.

Zum Thema Datenleitungen als Eingänge: in der Spezifikation für diesen Port ist das nicht vorgesehen. Es gibt aber immer mehr Hersteller, die auch eine Nutzung als Eingang ermöglichen. Allerdings wird das auch nur bei neueren Rechnern der Fall sein. Wenn Du alte Rechner benutzt (wovon ich jetzt mal ausgehe, denn sonst bist Du im falschen Forum), dann ist das eher selten, dass es funktioniert.
"640k ought to be enough for anybody." - Bill Gates (1981)
"Windows 95 needs at least 8MB RAM." - Bill Gates (1996)
... also braucht niemand Windows 95 !!!
Benutzeravatar
Dosenware
DOS-Gott
Beiträge: 3745
Registriert: Mi 24. Mai 2006, 20:29

Beitrag von Dosenware »

Odin hat geschrieben:Die I/O-Ports können ab Windows 2000 nicht mehr direkt angesprochen werden.
passiert wenn man ein wort ueberliest... "ueber"... :roll:
Benutzeravatar
Odin
DOS-Guru
Beiträge: 712
Registriert: Fr 3. Feb 2006, 16:52

Beitrag von Odin »

Das war eine Information, die sagen sollte warum es "über" Windows 98 nicht mehr geht... Und "über" Windows 98 wäre dann Windows 2000 (dazwischen kommt zwar noch ME, aber das basiert auf Windows 98, ergo kann man das vernachlässigen).
"640k ought to be enough for anybody." - Bill Gates (1981)
"Windows 95 needs at least 8MB RAM." - Bill Gates (1996)
... also braucht niemand Windows 95 !!!
Troll86

Beitrag von Troll86 »

also ich kann mit dem eingägen sowei von keinen fehlern berichten, wir arbeiten hauptsächlich mit 386'ern und 486'ern, das einzige problem was wir hatten, war das wenn wir ein signal ausgeben (z.b. do-d3 auf high) und dann einlesen sagt der uns, das da ein signal rein kommt, deshalb ja auch d0-3 eingang und d4-d7 audgang um zu verhindern, das wir unser eigenes signal einlesen.

Mir ist grade eingefallen, dass meine idee mit dem bcd-hex-bcd wandler nur beim ausgang funktioniert, denn wenn ich in die eingangsleitung (ich nen die mal e1-e15) zwei signale rein geben bekomme ich am bcd teil nur müll raus. ich werd mal die multiplexing sache genauer angucken, das hat bestimmt mehr sinn.
nur in der schlatung (hier) sind mehr NOR's als ich habe (mein vorrat ist da sehr limitiert), also wieder zu meiner ursprünglichen frage: Kann ich das durch einen UB8841M ersätzen?
Benutzeravatar
Dosenware
DOS-Gott
Beiträge: 3745
Registriert: Mi 24. Mai 2006, 20:29

Beitrag von Dosenware »

Troll86 hat geschrieben: nur in der schlatung (hier) sind mehr NOR's als ich habe (mein vorrat ist da sehr limitiert)
das sind 3 Chips... TTL SN74LS02

im Prototyp sinds 2X T74LS08B1 und 2x T74LS32B1 -> sollten 2 Ands und 2 Negatoren sein... wenn mich mein Gedaechnis nicht truegt...
Troll86

Beitrag von Troll86 »

ich habs mal durch gezählt, mein vorrat würde reichen, ich möchte es aber trodsdem lieber mit dem microcontroler machen, denn das hab ich noch nie gemacht und würde auch gerne in die richtung zumindest ein paar grundlagen können.
Also der chip ist der UB8841M, wer weiß was darüber und kann mir erklären, wie ich den programiere usw.?
Antworten