Wie "Open Collector" gegen "Fehlfunktion" absichern?

M

Manuel Reimer

Guest
Hallo,

Ich mĂśchte an eine vorhandene PS/2 Tastaturschnittstelle mit einem
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
fĂźr mein Projekt zugute kommt, da ich praktisch fast beliebig langsam
senden darf.

Hat jemand eine Idee wie man sowas gegen "Softwarefehler" absichern
kann? Entwickeln werde ich mit einem billigen PS/2 nach USB Adapter,
aber Fehler kĂśnnen ja auch nach dem Entwickeln noch passieren.

Wenn aus irgendeinem Grund (Programmierfehler, Falsches Programm
geflasht, ...) einer der "Open Collector"-Pins hart auf "High" gezogen
wird, dann schließt der Keyboard-Controller auf dem Mainboard diese
niederohmig zugefĂźhrte Spannung gegen GND kurz. Mit nicht abzusehenden
Folgen.

Wie wĂźrdet ihr dagegen absichern? Das einzige halbwegs einfache, das mir
eingefallen ist, wäre zu testen wie hoch ich einen Widerstand in der
Leitung machen kann, dass die Kommunikation noch funktioniert
(vielleicht gehen ein paar hundert Ohm). Im "Kurzschlussfall" wĂźrde der
dann den fließenden Strom begrenzen...

Beim Suchen bin ich auf I2C gekommen. Funktioniert ja "grob ähnlich".
https://www.reichelt.de/-p188897.html
Realistisch? Geht damit auch mein PS2? Nicht ganz billig aber doch
deutlich billiger als das Gerät, das ich "fernsteuern" wollte.

https://www.reichelt.de/-p70072.html
GĂźnstiger, aber ich konnte nicht rausfinden wie der sich "offiziell"
verhält, wenn die RX-Leitung "hochgezogen" wird.

Gibt es eine "bessere" (aber nicht allzu aufwändige) externe Beschaltung
zur Absicherung gegen den Fall, dass mein Mikrocontroller eine
Datenleitung "hochzieht"?

Gruß

Manuel
 
Am 12.02.2019 um 19:07 schrieb Manuel Reimer:

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.

DĂźrfen nur die 0,7V "Restspannung" nicht stĂśren. Bei einer Datenleitung
mit 5V "high" sollte aber 0,7V (hoffentlich) deutlich genug "low" sein.

Danke schonmal. Teste ich auf jeden Fall. Ich hole mir sicherheitshalber
Schottky-Dioden dafĂźr um ein mĂśglichst deutliches "Low"-Signal zu bekommen.

Oder halt nen echten Open-Kollektor mit einem externen Transistor. Es
gibt auch Typen mit integriertem Basis-Vorwiderstand, insbesondere als
Array.
Wäre die sauberste LÜsung. Schottky-Dioden sollten aber auch gehen.

--
Michael
 
Am 12.02.2019 um 18:45 schrieb Manuel Reimer:
Hallo,

Ich mĂśchte an eine vorhandene PS/2 Tastaturschnittstelle mit einem
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
fĂźr mein Projekt zugute kommt, da ich praktisch fast beliebig langsam
senden darf.

Hat jemand eine Idee wie man sowas gegen "Softwarefehler" absichern
kann? Entwickeln werde ich mit einem billigen PS/2 nach USB Adapter,
aber Fehler kĂśnnen ja auch nach dem Entwickeln noch passieren.

Wenn aus irgendeinem Grund (Programmierfehler, Falsches Programm
geflasht, ...) einer der "Open Collector"-Pins hart auf "High" gezogen
wird, dann schließt der Keyboard-Controller auf dem Mainboard diese
niederohmig zugefĂźhrte Spannung gegen GND kurz. Mit nicht abzusehenden
Folgen.

Wie wĂźrdet ihr dagegen absichern? Das einzige halbwegs einfache, das mir
eingefallen ist, wäre zu testen wie hoch ich einen Widerstand in der
Leitung machen kann, dass die Kommunikation noch funktioniert
(vielleicht gehen ein paar hundert Ohm). Im "Kurzschlussfall" wĂźrde der
dann den fließenden Strom begrenzen...

Beim Suchen bin ich auf I2C gekommen. Funktioniert ja "grob ähnlich".
https://www.reichelt.de/-p188897.html
Realistisch? Geht damit auch mein PS2? Nicht ganz billig aber doch
deutlich billiger als das Gerät, das ich "fernsteuern" wollte.

https://www.reichelt.de/-p70072.html
GĂźnstiger, aber ich konnte nicht rausfinden wie der sich "offiziell"
verhält, wenn die RX-Leitung "hochgezogen" wird.

Gibt es eine "bessere" (aber nicht allzu aufwändige) externe Beschaltung
zur Absicherung gegen den Fall, dass mein Mikrocontroller eine
Datenleitung "hochzieht"?

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

--
Michael
 
On 2/12/19 6:58 PM, Newdo wrote:
Eine Diode.
Der PullUp kommt an die Leitung zum PS/2-Eingang, wie vorgesehen.
Der uC zieht Ăźber eine Diode die Leitung bei Bedarf auf 0, ansonsten
bleibt die Diode nichtleitend.

Da muss ich nochmal etwas drĂźber nachdenken. Scheint mir aber logisch zu
sein und kÜnnte tatsächlich funktionieren.

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.

DĂźrfen nur die 0,7V "Restspannung" nicht stĂśren. Bei einer Datenleitung
mit 5V "high" sollte aber 0,7V (hoffentlich) deutlich genug "low" sein.

Danke schonmal. Teste ich auf jeden Fall. Ich hole mir sicherheitshalber
Schottky-Dioden dafĂźr um ein mĂśglichst deutliches "Low"-Signal zu bekommen.

Gruß

Manuel
 
Am 12.02.2019 um 18:45 schrieb Manuel Reimer:

Gibt es eine "bessere" (aber nicht allzu aufwändige) externe Beschaltung
zur Absicherung gegen den Fall, dass mein Mikrocontroller eine
Datenleitung "hochzieht"?
Eine Diode.
Der PullUp kommt an die Leitung zum PS/2-Eingang, wie vorgesehen.
Der uC zieht Ăźber eine Diode die Leitung bei Bedarf auf 0, ansonsten
bleibt die Diode nichtleitend.

Hope it helps - Udo
 
On 2/12/19 6:49 PM, Gerrit Heitsch wrote:
Open-Collector impliziert genau das, der Treiber tut entweder nichts
oder zieht die Leitung auf GND.

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.

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.

Es geht nicht ums KĂśnnen.

Zahlreiche Beispiele fßr Arduino zeigen, dass es mit den gängigen Atmels
geht.

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

Was mich stÜrt, ist, dass eine Fehlkonfiguration der Ausgänge mein zu
steuerndes Gerät "schrotten" kÜnnte.

Gruß

Manuel
 
On 2/12/19 6:45 PM, Manuel Reimer wrote:
Wenn aus irgendeinem Grund (Programmierfehler, Falsches Programm
geflasht, ...) einer der "Open Collector"-Pins hart auf "High" gezogen
wird, dann schließt der Keyboard-Controller auf dem Mainboard diese
niederohmig zugefĂźhrte Spannung gegen GND kurz. Mit nicht abzusehenden
Folgen.

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
 
On 2/12/19 6:58 PM, Manuel Reimer wrote:
On 2/12/19 6:49 PM, Gerrit Heitsch wrote:
Open-Collector impliziert genau das, der Treiber tut entweder nichts
oder zieht die Leitung auf GND.

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.

Macht nichts... Auch da rettet dich der 74LS06... Plus einem Pullup. Du
tust das, was schon beim C64 getan wurde, fĂźr 1 Bit benutzt man 2
Leitungen die jeweils via Hardware (der erwähnte 74LS06) auf Eingang und
Ausgang konfiguriert werden. Selbst wenn du dich verprogrammierst kann
nichts passieren, denn der Ausgangstreiber des '06 verträgt mehr Strom
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
am Arduino (anderes Bit als fĂźr Ausgang). Dazu noch ein Pullup nach +5V
damit trotz Open-Collector HIGH erkannt wird.

Vorteil des 74LS06, er enthält 6 Treiber in einem IC.

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

Was mich stÜrt, ist, dass eine Fehlkonfiguration der Ausgänge mein zu
steuerndes Gerät "schrotten" kÜnnte.

Nicht wenn wie oben aufgebaut.

Gerrit
 
Ich mĂśchte an eine vorhandene PS/2 Tastaturschnittstelle mit einem
Mikrocontroller eigene Tasten "simulieren".

BenĂśtigte auch mal sowas,
aber damals mit Optokoppler:
http://www.embeddedFORTH.de/temp/ps2.pdf

MfG JRD
 
Manuel Reimer wrote:
Hat jemand eine Idee wie man sowas gegen "Softwarefehler" absichern
kann?

Da es nicht schnell sein muß, geht alles. Ein Transitor mit echtem OC am
Ausgang, eine (Schottky-)Diode und vieles mehr.

--
/Ż\ No | Dipl.-Ing. F. Axel Berger Tel: +49/ 221/ 7771 8067
\ / HTML | Roald-Amundsen-Straße 2a Fax: +49/ 221/ 7771 8069
 X in | D-50829 Köln-Ossendorf http://berger-odenthal.de
/ \ Mail | -- No unannounced, large, binary attachments, please! --
 
On 2/12/19 8:16 PM, Rafael Deliano wrote:
BenĂśtigte auch mal sowas,
aber damals mit Optokoppler:
http://www.embeddedFORTH.de/temp/ps2.pdf

Interessant.

Leider habe ich noch keine besonders gute Doku Ăźber das Protokoll gefunden.

Senden ist kein Thema. Bedenken habe ich eher weil ich zwangsläufig
bidirektional kommunizieren muss. Einfach stur senden geht wohl laut
diverser Infos im Netz nicht gut.

Gruß

Manuel
 
Am 12.02.2019 um 18:58 schrieb Manuel Reimer:

Open-Collector impliziert genau das, der Treiber tut entweder
nichts oder zieht die Leitung auf GND.

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.

Sie fßrchten also, dass ein als Eingang konfigurierter Pin fälschlich
auf Ausgang umschaltet und versucht die Leitung auf 5V zu ziehen,
während diese auf GND gezogen ist.
Blick ins Datenblatt was dieser Port liefert. Schutzwiderstand vor den
Pin setzen, Mindestwert = Portstrom / 5V. Da der Port als Eingang
hochohmig ist, stĂśren ein paar Kiloohm bei der langsamen Frequenz nicht.

mfG W.Martens
 
Manuel Reimer schrieb:

Wenn aus irgendeinem Grund (Programmierfehler, Falsches Programm geflasht,
...) einer der "Open Collector"-Pins hart auf "High" gezogen wird, dann
schließt der Keyboard-Controller auf dem Mainboard diese niederohmig
zugefĂźhrte Spannung gegen GND kurz. Mit nicht abzusehenden Folgen.

Dann hänge doch einfach eine Diode rein.

Frank
 
On 2019-02-12 16:27, Wolfgang Martens wrote:
Am 12.02.2019 um 18:58 schrieb Manuel Reimer:

Open-Collector impliziert genau das, der Treiber tut entweder
nichts oder zieht die Leitung auf GND.

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.

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

<duck>

Sie fßrchten also, dass ein als Eingang konfigurierter Pin fälschlich
auf Ausgang umschaltet und versucht die Leitung auf 5V zu ziehen,
während diese auf GND gezogen ist.
Blick ins Datenblatt was dieser Port liefert. Schutzwiderstand vor den
Pin setzen, Mindestwert = Portstrom / 5V. Da der Port als Eingang
hochohmig ist, stĂśren ein paar Kiloohm bei der langsamen Frequenz nicht.

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/
 
On 2019-02-13, Frank MĂźller <dw2fm@hotmail.com> wrote:
Dann hänge doch einfach eine Diode rein.

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
(BSS138, 2N7002 o.ä.) oder ein OC-Gatter (74LS07, 74LS06).

cu
Michael
 
On 2019-02-13, Wolfgang Martens <na3506b2013@t-online.de> wrote:
Sie fßrchten also, dass ein als Eingang konfigurierter Pin fälschlich
auf Ausgang umschaltet und versucht die Leitung auf 5V zu ziehen,
während diese auf GND gezogen ist.

Nein. Er fürchtet, daß ein auf OC-Ausgang konfigurierter Pin fälschlich auf
Push-Pull umschaltet und aktiv high treibt.

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

Geht, versaut aber den Low-Pegel, genau wie die LĂśsung mit der Diode. Wie
schlimm das ist, hängt von den am anderen Ende verbauten Pullups ab, ist
also schlecht vorherzusehen - an einem PC geht es, an einem anderen nicht.

Die LĂśsung mit dem echten OC-Treiber kostet zwar 2 Portpins extra (fĂźr die
Eingänge), ist aber dafßr sauber.

cu
Michael
 
Am 12.02.19 um 18:45 schrieb Manuel Reimer:
Wenn aus irgendeinem Grund (Programmierfehler, Falsches Programm
geflasht, ...) einer der "Open Collector"-Pins hart auf "High" gezogen
wird, dann schließt der Keyboard-Controller auf dem Mainboard diese
niederohmig zugefĂźhrte Spannung gegen GND kurz. Mit nicht abzusehenden
Folgen.

Da passiert zumeist gar nichts, wenn das nur fßr ein paar ¾s während der
DatenĂźbertragung ist.

Wie wĂźrdet ihr dagegen absichern? Das einzige halbwegs einfache, das mir
eingefallen ist, wäre zu testen wie hoch ich einen Widerstand in der
Leitung machen kann, dass die Kommunikation noch funktioniert
(vielleicht gehen ein paar hundert Ohm). Im "Kurzschlussfall" wĂźrde der
dann den fließenden Strom begrenzen...

Das geht auch. Aber beliebig weit kann man nicht gehen. Um wirklich
sicher innerhalb der Limits zu bleiben, mĂźsste man schon in die
Dimension 1k vordringen. Das wird nichts.

Beim Suchen bin ich auf I2C gekommen. Funktioniert ja "grob ähnlich".
https://www.reichelt.de/-p188897.html
Realistisch? Geht damit auch mein PS2? Nicht ganz billig aber doch
deutlich billiger als das Gerät, das ich "fernsteuern" wollte.

Wenn Du externe Hardware willst, dann probiere es mit einem Transistor.
Nachteil: Du brauchst 2 Ports, einen fĂźr Ausgabe, einen fĂźr Eingabe. Und
nun kĂśnnte man natĂźrlich auch den Eingangsport wieder als Ausgang
programmieren. Und schon dreht man sich im Kreis.

Gibt es eine "bessere" (aber nicht allzu aufwändige) externe Beschaltung
zur Absicherung gegen den Fall, dass mein Mikrocontroller eine
Datenleitung "hochzieht"?

Die Billigversion ist eine Schottkydiode. Silizium kannst Du bei PS/2
vergessen.
Wenn Du noch einen Widerstand darĂźber legst, geht es auch noch als
Eingang. Ohne die Leitung dazwischen ist die Größe des R nicht mehr so
kritisch.


Marcel
 
Michael Schwingen schrieb:
On 2019-02-13, Frank MĂźller <dw2fm@hotmail.com> wrote:

Dann hänge doch einfach eine Diode rein.

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

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

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

WĂźrde natĂźrlich auch gehen, aber der Aufwand ist dann hĂśher,
denn dann sollte schon noch ein Widerstand davor und das
ganze muß negativ angesteuert werden.

Frank
 
Am 14.02.19 um 10:26 schrieb Frank MĂźller:

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

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

PS/2 ist steinalt, das dĂźrfte noch mit TTL-Pegeln definiert sein, und da
muss Low <0.8V sein. Mit einer Schottky-Diode sollte es noch gehen,
normale Diode wird zu knapp.

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

WĂźrde natĂźrlich auch gehen, aber der Aufwand ist dann hĂśher,
denn dann sollte schon noch ein Widerstand davor und das
ganze muß negativ angesteuert werden.

Ist aber letztlich der "korrekte" Weg.
 
On 2/14/19 11:17 AM, Hergen Lehmann wrote:
Am 14.02.19 um 10:26 schrieb Frank MĂźller:

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

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

PS/2 ist steinalt, das dĂźrfte noch mit TTL-Pegeln definiert sein, und da
muss Low <0.8V sein. Mit einer Schottky-Diode sollte es noch gehen,
normale Diode wird zu knapp.

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

WĂźrde natĂźrlich auch gehen, aber der Aufwand ist dann hĂśher,
denn dann sollte schon noch ein Widerstand davor und das
ganze muß negativ angesteuert werden.

Ist aber letztlich der "korrekte" Weg.

74LS07 wäre besser, der invertiert nicht.

Gerrit
 

Welcome to EDABoard.com

Sponsor

Back
Top