Wie "Open Collector" gegen "Fehlfunktion" absichern?

Feb 12, 2019 33 Replies

Hallo,


Mikrocontroller eigene Tasten "simulieren".



Beispiele und Infos gibt es im Internet zuhauf. Grob gesagt funktioniert die Schnittstelle so, dass beide Seiten die Datenleitungen (CLK und DATA) hochohmig auf +5V ziehen und zur Kommunikation wird die jeweilige Leitung auf GND gezogen. Dabei gibt die "Tastatur" den Takt vor, was mir



senden darf.



Hat jemand eine Idee wie man sowas gegen "Softwarefehler" absichern kann? Entwickeln werde ich mit einem billigen PS/2 nach USB Adapter,


Wenn aus irgendeinem Grund (Programmierfehler, Falsches Programm geflasht, ...) einer der "Open Collector"-Pins hart auf "High" gezogen


Folgen.


Leitung machen kann, dass die Kommunikation noch funktioniert


formatting link
Realistisch? Geht damit auch mein PS2? Nicht ganz billig aber doch


formatting link


zur Absicherung gegen den Fall, dass mein Mikrocontroller eine Datenleitung "hochzieht"?


Manuel


Open-Collector impliziert genau das, der Treiber tut entweder nichts oder zieht die Leitung auf GND. Ist wie ein Transistor mit dem Emitter auf GND, und dem Collector als Ausgang mit der Basis als Eingang. Falls dein Microcontroller das nicht kann empfehle ich einen 74LS06 zwischen Controller und PS/2 auf den Leitungen die auf Ausgang geschaltet sind.

Gerrit

Und solange niemand die Leitung "niederohmig" hochzieht ist das auch garkein Problem.

Wogegen ich mich zumindest etwas absichern wollte, war der Fall, dass auf meinem Mikrocontroller durch Fehlprogrammierung einer der Daten-Pins als Ausgang konfiguriert und "High" geschaltet wird. Damit liegt 5V eben nicht mehr hochohmig sondern niederohmig auf der Datenleitung.

geht.

"Passiver" Modus (Lesen): DDR auf "Input" und Pullup einschalten "Runterziehen": *Erst* Ausgang auf "Low" und dann DDR auf "Output"

Manuel

Am 12.02.2019 um 18:45 schrieb Manuel Reimer:

Eine Diode. Der PullUp kommt an die Leitung zum PS/2-Eingang, wie vorgesehen.

bleibt die Diode nichtleitend.

Hope it helps - Udo

Durch die Diode kann ich, wenn ich meinen Pin auf Eingang schalte, auch nach wie vor in die Leitung "lesen" und wenn ich meinen Pin auf Ausgang schalte und "Low" ziehe, ziehe ich wie geplant die Datenleitung runter.

Versehentliches "Hochziehen" wird durch die Diode aber nie am Ausgang ankommen.

mit 5V "high" sollte aber 0,7V (hoffentlich) deutlich genug "low" sein.

Danke schonmal. Teste ich auf jeden Fall. Ich hole mir sicherheitshalber

Manuel

Am 12.02.2019 um 18:45 schrieb Manuel Reimer:

NPN-Transistor oder N-MOSFET Gibts auch als Array.

Michael

Am 12.02.2019 um 19:07 schrieb Manuel Reimer:

Oder halt nen echten Open-Kollektor mit einem externen Transistor. Es gibt auch Typen mit integriertem Basis-Vorwiderstand, insbesondere als Array.

Michael

Macht nichts... Auch da rettet dich der 74LS06... Plus einem Pullup. Du

Ausgang konfiguriert werden. Selbst wenn du dich verprogrammierst kann

als dein Arduino liefern kann. Im C64 muss er mit einem Pullup von 180 Ohm an +5V zurechtkommen was 27mA sind.

Ausgangsschaltung: Treiber des '06 mit Eingang am Arduino und Ausgang am PS/2-Signal

Eingangschaltung: Treiber des '06 mit Eingang am PS/2-Signal und Ausgang

damit trotz Open-Collector HIGH erkannt wird.

Nicht wenn wie oben aufgebaut.

Gerrit

aber damals mit Optokoppler:

formatting link

MfG JRD

m Ausgang, eine (Schottky-)Diode und vieles mehr.

/ \ Mail | -- No unannounced, large, binary attachments, please! --

Interessant.

bidirektional kommunizieren muss. Einfach stur senden geht wohl laut diverser Infos im Netz nicht gut.

Manuel

Am 12.02.2019 um 18:58 schrieb Manuel Reimer:

auf Ausgang umschaltet und versucht die Leitung auf 5V zu ziehen,

Blick ins Datenblatt was dieser Port liefert. Schutzwiderstand vor den Pin setzen, Mindestwert = Portstrom / 5V. Da der Port als Eingang

mfG W.Martens

Manuel Reimer schrieb:

Frank

Absichern, macht das nicht bei Euch die Allianz? Oder ein Rauchmelder?

So macht man das normalerweise. Sollte es woanders mal schneller laufen muessen, kann man diesen mit einem kleinen Kondensator bruecken, denn i.d.R. muss man bei Fehlprogrammierung eines Port Pins nur den DC-Fall absichern.

Gruesse, Joerg http://www.analogconsultants.com/

Die verschiebt Dir den Low-Pegel - kann noch gehen, reduziert aber die Reserven.

Wenn es eh ein externes Bauteil braucht, dann eher ein NPN-Transistor, N-FET

cu Michael

Push-Pull umschaltet und aktiv high treibt.

also schlecht vorherzusehen - an einem PC geht es, an einem anderen nicht.

cu Michael

Am 12.02.19 um 18:45 schrieb Manuel Reimer:

Das geht auch. Aber beliebig weit kann man nicht gehen. Um wirklich

Dimension 1k vordringen. Das wird nichts.

Wenn Du externe Hardware willst, dann probiere es mit einem Transistor.

programmieren. Und schon dreht man sich im Kreis.

Die Billigversion ist eine Schottkydiode. Silizium kannst Du bei PS/2 vergessen.

kritisch.

Marcel

Michael Schwingen schrieb:

Das Teil arbeitet doch mit 5V da ist genug Reserve.

denn dann sollte schon noch ein Widerstand davor und das

Frank

muss Low > Wenn es eh ein externes Bauteil braucht, dann eher ein NPN-Transistor

Ist aber letztlich der "korrekte" Weg.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required