Forum: Mikrocontroller und Digitale Elektronik Parallel Port perepherie Gerät Data Line Interface


von madtulip (Gast)


Angehängte Dateien:

Lesenswert?

Guten Tag.

Ich versuche nun seit einer Weile mit einem MC an einem seiner GPIOs ein 
Signal zu erzeugen und es auf einer Datenleitung eines Parallelports 
(LPT) eines peripherie Gerätes zu lesen.

Aus der beschreibung des Zielgeraetes:
"The system has two identical parallel port inputs: A and B. Both are 
configured for basic host-to-peripheral compatibility mode, where the 
ECC(das geraet selbst) is considered the peripheral. Parallel ports are 
8-bit wide, read-only ports."

Es soll zwischen MC und dem Zielgeraet eine optische Trennung 
vorgenommen werden. Ich habe eine kleine Schaltung als Bild angehaengt. 
"In 9" in der Schaltung ist direkt am GPIO des MC angeschlossen. Die 
Schaltung funktioniert soweit ich an "Out 9 Iso" nicht anschliesse (Ich 
messe 0V oder 5V an "Out 9 Iso").

Das Datenblatt des verwendeten Optokopplers findet sich hier:
http://www.farnell.com/datasheets/2763.pdf

Schliesse ich nun "Out 9 Iso" an einem Datenpin des LPT des Zielgeraetes 
an, so stellt sich mir nicht erklaerliches Verhalten ein.

1) Wenn ich die Schaltung so wie abgebildet verwende liest das 
Zielgeraet soweit ich mich erinnern kann logic 1, egal ob ich logic 0 
oder 1 am MC ausgebe. Über die Spannung an "Out 9 Iso" kann ich leider 
aus der erinnerung nichts mehr sagen. Es funktioniert jedenfalls nicht.

2) Entferne ich R5, so aendert sich die Spannung an "Out 9 Iso" nicht 
mehr. Ich weiss leider gerade nicht mehr ob sie high oder low blieb. Das 
Zielgeraet misst logic 1. Also bleibt die Leitung vermutlich high. Es 
funktioniert jedenfalls nicht.

3) Entferne ich R5 und schliesse statt dessen einen PullDOWN von 4k7 an 
"Out 9 Iso" an, so schwankt die spannung an "Out 9 Iso" zwischen 5V high 
und 2V low, was in beiden faellen vom zielgeraet als logic 1 
interpretiert wird.

4) Entferne ich R5 und schliesse statt dessen einen PullDOWN von 470R an 
"Out 9 Iso" an, so schwankt die spannung an "Out 9 Iso" zwischen ~1V 
high und ~0V low, was in beiden faellen vom zielgeraet als logic 0 
interpretiert wird.

5) Entferne ich R5 und schliesse statt dessen einen PullDOWN von 1k an 
"Out 9 Iso" an, so liest das zielgeraet logic 1 und logic 0 richtig.

Ist meine Idee einen open collector (entfernen von R5) als ausgang zu 
verwenden nicht richtig? Ich ging davon aus, dass das Zielgeraet einen 
internen pullup hat. Selbst wenn ich den Pullup R5 noch verwende, sollte 
das funktionieren. Ich verstehe offensichtlich nicht, welche 
Eigenschaften der Daten eingangspin des LPT des Zielgeraetes hat.

Die sache mit den unterschiedlich starken PullDOWN wiederstaenden die 
dann bei 1k nun zufaellig funktioniert scheint mir gar nicht geheuer. 
Mir währe es lieber eine Lösung zu haben die so "richtig" ist. Ich komme 
um den Optokoppler nicht wirklich herrum. Ich kann an der Schaltung 
relativ einfach noch zwischen "Out 9 Iso" und dem Zielgeraet basteln. 
Ich habe auch noch einige PNP und NPN transistoren auf Lager. Derzeit 
überlege ich, ob die 16mA die der optokoppler interne NPN sinken kann 
evtl nicht ausreichen und ich einen grösseren NPN vorschalten sollte.

Ich stehe ein wenig im Wald.

Vielen Dank für eure Zeit!

von Rainer U. (r-u)


Lesenswert?

Die Datenpins vom Parallelport sind eigentlich eher dafür gedacht, Daten 
zu empfangen. Ok, es gibt diesen bi-direktionalem Betrieb, aber dabei 
kann viel schief gehen und es hört scih an, als ob in Deiner Anwendung 2 
Ausgänge aufeinander treiben.

Sicherer ist es, wenn Du ein Signal verwendest, das ohnehin Eingang ist, 
z.B. "busy", siehe auch

http://de.wikipedia.org/wiki/IEEE_1284

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

madtulip schrieb:
> Aus der beschreibung des Zielgeraetes:

Was ist das für ein Gerät?

von Wusel D. (stefanfrings_de)


Lesenswert?

Deine Beobachtungen deuten darauf hin, dass das Zielgerät einen TLL 
Eingang hat. Weiterhin scheint der Transistor nicht richtig 
durchzuschalten. Der Pull-Down Widerstand (aus Beobachtung 4) 
unterstützt den Transistor und führt daher zum gewünschten Verhalten.

Bei TLL IC's gilt

<0,8V = Low
>2V = High

Alle Werte dazwischen sind illegal. TTL IC's haben einen Eingangsstrom 
von typischerweise ungefähr 1,3 mA bei Low Pegel.

Du hast 1k Ohm verwendet, dabei dürfte die Eingangsspannung im illegalen 
Bereich liegen. Laut deinem Bericht wird das (zufällig) als High 
gewertet.

Offensichtlich ist Dir bereits klar, dass die Verwendung eines 1k Ohm 
Pull-Down keine finale Lösung sein kann.

Zurück zu den Strömen. Dass Du einen 4,7k Ohm Pull-Up Widerstand 
verwenden wolltest, war gar nichtmal so falsch. Dabei solltest Du auch 
bleiben. Und zwar aus zwei Gründen:

1) Wenn Du ein anderes Gerät anschließt, dass CMOS Eingänge hat, ist der 
Widerstand Pflicht.
2) Die maximale Frequenz, die Optokoppler übertragen können, hängt vom 
Lastwiderstand ab. Ohne ausreichende Last, ist die Frequenz geringer. 
Die zusätzliche Belastung durch den Pull-Up Widerstand wirkt sich auf 
die Steilheit der Signalflanken und der übertragbaren Frequenz positiv 
aus.

Der TTL Eingang zieht etwa 1mA, der Pull-Up Widerstand zieht nochmal 
1mA, macht zusammen ca 2,3mA Last. Der Optokoppler hat ein 
Übertragungsverhältnis von 19%. Dass heisst, um 2,3mA schalten zu 
können, muss er Eingangsseitig mit 11,5mA angesteuert werden.

Das passt zu einer anderen Angabe im Datenblatt: Logic Low Output 
Voltage ist 0,1-0,4V bei IF=16mA.

Die Diodenspannung (Input Forward Volatge) ist etwa 1,8V. Du hast einen 
Vorwiderstand von 470 Ohm Gewählt. Also muss die Eingangsspannung 1,8V + 
11,5mA * 470 Ohm = 7,2V betragen.

Vermutlich hast Du aber weniger als 7,2V angelegt - eher etwas weniger 
als 5V. Richtig? Das ist die Fehlerursache.


Rechnen wir nochmal die Variante ohne R5 (Pull-Up) durch: Wir legen 4,5V 
an den Eingang an, der Strom IF ist dann (4,5V-1,8V)/470 Ohm=5,7mA. 19% 
davon sind 1,083mA. Das sind weniger als die erforderlichen 1,3mA.

Um sicher zu gehen, sollte der Eingangswiderstand so ausgelegt sein, 
dass der Optokoppler den doppelten Strom schalten kann. Mit Pull-Up 
Widerstand sind 2,3mA nötig. Wir wollen 4,6mA schalten können, brauchen 
also einen Eingangsstrom IF von 21mA.

(4,5V - 1,8V) / 21mA = 128 Ohm

Natürlich muss die Signalquelle die 21mA auch liefern können. Wenn 
nicht, brauchst Du einen Transistor zur Verstärkung.

von madtulip (Gast)


Lesenswert?

Das Zielgeraet an dem ich herrum furwerken darf ist ein MEG 
(http://de.wikipedia.org/wiki/Magnetoenzephalographie). Der LPT ist Teil 
eines Peripheriegeraets und dazu gedacht Daten an den Daten pins des 
LPTs zu lesen (Trigger Signale), es ist auch im LPT sinne ein peropherie 
LPT.

Vielen Dank für deine ausführliche Antwort Stefan. Sehr hilfreich! 
Super, dass du dir für unbekannt so viel Zeit nimmst!

Ich habe heute das Pferd von der anderen Seite aufgezaeumt und auch 
vermutet, dass der 1k Pulldown den nicht ausreichend durchschaltendem 
NPN im Optokoppler wohl entlastet. Meine noch nicht getestete Idee war 
R5 zu verwenden, die Basis eines zweiten externen NPN mit "Out9" zu 
verbinden, seinen Emitter auf GND_iso zu legen und seinen Collector an 
einen 4k7 Pullup und den LPT Datenpin anzuschliessen. Deine Lösung ist 
natürlich eleganter.

Ich habe morgen wieder Gelegenheit zum Testen und werde R2 wie von 
Stefan vorgeschlagen modifizieren. "In9" ist an einem GPIO eines MCs 
angeschlossen, der auf Vcc = 5V laeuft und imo 30mA sinken kann (werde 
ich nochmal überprüfen). Average Forward Input Current maximum IF(AVG) 
des Optokopplers = 25 mA. Deine 128ohm passen also auch bei 5V noch 
genau.

Ich melde mich ob und wie es funktioniert hat.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

madtulip schrieb:
> Der LPT ist Teil
> eines Peripheriegeraets und dazu gedacht Daten an den Daten pins des
> LPTs zu lesen (Trigger Signale), es ist auch im LPT sinne ein peropherie
> LPT.

Und damit meinst Du ernsthaft eine Druckerschnittstelle? Oder ist das 
nur eine parallele Schnittstelle, die Du aus Bequemlichkeit "LPT" 
nennst?

von Wusel D. (stefanfrings_de)


Lesenswert?

Wenn Du allerdings viele Pins des Mikrocontrollers belastest, erreichst 
Du irgendwann den maximal zulässigen gesamt-Strom.

Je nach Chip ist der Gesamtstrom nur für alle Pins zusammen definiert, 
oder für alle I/O Pins zusammen, oder für Gruppen von I/O Pins (zum 
Beispiel pro 8bit Port oder pro Chip-Seite) definiert.

Wenn Du mehr als 4 Pins mit den 21mA belasten wirst, dann rechne das 
lieber durch. Sonst geht Dir der Chip irgendwann plötzlich kaputt und 
keiner weiss, warum.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.