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!
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
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.
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.
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.