Forum: Mikrocontroller und Digitale Elektronik Bi-direktionales Level-Shiften mit minimalem Bauteilaufwand


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Zwirbeljupp (Gast)


Lesenswert?

Hallo zusammen!

Ich knobel gerade an der folgenden Aufgabe:

Ich möchte an 24 Pins einer Kfz-Steuergerät-Schnittstelle die 
Fehlercodes auslesen. Die Pins des Steuergeräts liegen im Ruhezustand 
auf ~12 V. Zum Auslesen eines Fehlercodes zieht man den jeweiligen Pin 
für ca. 4 Sekunden auf Masse. Nach ca. 2 Sekunden "antwortet" das 
Steuergerät dann auf diesem Pin, in dem es seinerseits den Pin im 
Sekundentakt auf Masse zieht.
(die Anzahl der Low-Impulse entspricht dann dem Fehlercode)

Soviel zu den Rahmenbedingungen. Ich möchte nun dieses Auslesen 
automatisiert durch einen Mikrocontroller durchführen lassen.

Mein erster Lösungsansatz:
Das Signal vom Steuergerät über einen Spannungsteiler auf <= 3.3V 
reduzieren. Funktioniert leider nicht, das Steuergerät erkennt dies 
bereits als "auf Masse gezogen".

Mein zweiter Lösungsansatz:
Alle Pins des Steuergeräts mittels 74 HC 4050 auf 
mikrocontrollergerechte Pegel reduzieren. Damit wäre die eine Richtung 
bereits erledigt. Allerdings muss der Mikrocontroller ja auch jeden Pin 
auf Masse ziehen können. Dies wäre mit einem Transistor pro 
Signalleitung VOR dem 4050 möglich.
Die Erfolgschancen sehen gut aus, allerdings würde bedeuten, ich müsste 
48 Pins am µC opfern, zudem 4x 74 HC 4050 + 24 Transistoren + 
Hühnerfutter auf der Platine vorsehen.

Hat vielleicht jemand eine Idee, wie man die Signale eleganter abfragen 
könnte? Gibt es bidirektionale Levelshifter-ICs, die mit 12V 
zurechtkommen?

Vielen Dank im Voraus!

Gruß
daniel

von Rene Z. (renezimmermann)


Lesenswert?

>Ich möchte an 24 Pins einer Kfz-Steuergerät-Schnittstelle die
>Fehlercodes auslesen.

Wow, kenne ich nur von Mercedes. Jedes Steuergerät hat seinen eigenen 
Pin am Diagnoseanschluss. Dort wird aber multiplext und gut ist.

Gruß Rene

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Zwirbeljupp schrieb:
> ~12 V.

Echt Wechselspannung?!

Zwirbeljupp schrieb:
> Gibt es bidirektionale Levelshifter-ICs, die mit 12V
> zurechtkommen?

Bestimmt. TPIC6C595 für µC->12V. Vom Steuergerät zum µC mit hochohmigen 
Spannungsteilern oder dem schon erwähnten 4050.

von remo (Gast)


Lesenswert?

Bei ELV ist im Drei-Achsen-Beschleuniger-Bausatz ein bidirektionaler 
Pegelshifter realisiert. Der Schaltplan müsste im Inet verfügbar sein. 
Spick doch dort mal. Ich denke mich erinnern zu können, das die das mit 
einem Fet und einem R je Kanal hinbekommen.
so long
Remo

von remo (Gast)


Lesenswert?

noch ein weiterer Tipp:
NXP Application Note AN97055 
http://ics.nxp.com/support/documents/i2c/pdf/an97055.pdf

von Zwirbeljupp (Gast)


Lesenswert?

Hey, das ging ja flott! Vielen Dank!

Rene Zimmermann schrieb:
> Wow, kenne ich nur von Mercedes. Jedes Steuergerät hat seinen eigenen
> Pin am Diagnoseanschluss. Dort wird aber multiplext und gut ist.

Richtig, ein alter Mercedes :-)
Ähm, multiplexen? Wie läuft das? Ich hab nur mal ein Original-Lesegerät 
von Mercedes gesehen, das besteht fast ausschließlich aus Relais...

Knut Ballhause schrieb:
>> ~12 V.
>
> Echt Wechselspannung?!

Ähm, nein :-D Das sollte "circa 12V"  heißen ;-)

Knut Ballhause schrieb:
> Bestimmt. TPIC6C595 für µC->12V.
wow, das ist ja ein cooles Teil. Diese Variante werde ich auf jeden Fall 
mal durchdenken!

remo schrieb:
> Bei ELV ist im Drei-Achsen-Beschleuniger-Bausatz ein bidirektionaler
> Pegelshifter realisiert. Der Schaltplan müsste im Inet verfügbar sein.
> Spick doch dort mal. Ich denke mich erinnern zu können, das die das mit
> einem Fet und einem R je Kanal hinbekommen.

Oh, interessante Schaltung (hier mal der Link: 
http://www.elv.de/output/controller.aspx?cid=758&detail=10&detail2=7). 
Auch diese Alternative werde ich mal genauer untersuchen! Mal sehen, 
womit ich zu einer kleiner PCB-Fläche komme...

Vielen Dank für die guten Inputs!

-daniel

von Zwirbeljupp (Gast)


Lesenswert?

Nach genauem Hinsehen ist der TPIC6C595 leider doch keine Option :-(
Der hat nämlich eine minimale Supply-Voltage von 4.5V, was sich mit der 
Betriebsspannung des µCs (3.3V) beißt...

von Christian B. (casandro)


Lesenswert?

Naja, da wirst Du folgendes machen müssen:

<=Auto     µC=>

E---+-----+
    |     |
    R     |
    |     |
    +->   |
  __|__    \|
   / \      |---R--->
  /___\    /|
    |     V
M---+-----+

Die Diode ist eine Z-Diode mit grob 5 Volt, zum Beispiel 4,8 oder 5,1 
Volt. Der Widerstand darüber sollte so groß sein, dass er noch nicht als 
Pulldown erkannt wird. Beispielsweise 1 Megaohm.

Der Transistor hängt mit dem Emitter an der Masse des Autos, mit dem 
Kollektor an der Leitung. Du kannst ihn über die Basis und den 
Widerstand einschalten, und somit die Leitung auf Masse legen.

Wie schon gesagt, es ist eine Frage der Dimensionierung. R muss groß 
genug sein damit noch kein Pulldown erkannt wird, aber klein genug, 
damit der Eingang des µCs noch schaltet.

Die Z-Diode dient dazu, dass Dein µC nicht bei Überspannung die Grätsche 
macht. Eventuell kannst Du noch parallel dazu einen Kondensator 
schalten, so dass das RC dann als Tiefpassfilter Störungen rausfiltert.

von gaast (Gast)


Angehängte Dateien:

Lesenswert?

Zwirbeljupp schrieb:
> Die Erfolgschancen sehen gut aus, allerdings würde bedeuten, ich müsste
> 48 Pins am µC opfern,

Du kannst die Pins auch abwechselnd als ein- und Ausgang schalten, oder 
ebenso wie das Auto gleich nur eine Leitung nutzen, womit wir wieder bei 
24 wären. Diese ließen sich durch Multiplexen oder Schieberegister noch 
weiter bis auf drei reduzieren.

Zwirbeljupp schrieb:
>24 Transistoren + Hühnerfutter auf der Platine vorsehen.

Transistoren gibt es in Arrays, allen voran der allseits bekannte 
ULN2803.

Die Transistoren in der Schaltung im Anhang sind ebensolche, den oberen 
kann man zwecks Schaltschwellen ggf. auch als ULN2804 wählen. Pull-Ups 
gibt es ebenfalls als DIL bzw SIL. Wären dann insgesamt 6 Treiber + 
Pullups und drei Schieberegister an drei Pins.

von Christian B. (casandro)


Lesenswert?

Nö so wie in dem Bild geht das nicht, durch die Basis-Emitter-Strecke 
des rechten Transistors wird so viel Strom fließen, bis die 
Basis-Emitter-Spannung, und somit die Spannung an der Leitung, grob 0.6 
Volt sind...

=> ständiger Pulldown und verbrutzelter Transistor.

von Zwirbeljupp (Gast)


Lesenswert?

Hall und Danke für die Schaltungsvorschläge!

@ Christian Berger (casandro):
Eine ähnliche Schaltung hatte ich mir mit einem zweiten Transistor 
anstelle der Diode + Widerstand aufgemalt. Ich denke, das wird auf jeden 
Fall hinhauen (mit 2 Transistoren oder eben Deine Variante). Aber leider 
bedeutet das 48 Pins am µC... Es sei denn, ich "multiplexe" die Signale 
vom Steuergerät auf einen einzigen µC-Eingang. Allerdings ist mir nicht 
ganz klar, wie das funktionieren würde. Alle geshifteten Signalleitungen 
über eine Diode auf einen "Sternpunkt" verbinden?

@ gaast:
irgendwie glaube ich auch, dass Deine Schaltung so nicht ganz 
funktionieren würde. Aber danke für den Hinweis mit den ULNs! Mit ULNs + 
Multiplexing lässt sich das Problem vielleicht doch elegant lösen?

von Christian B. (casandro)


Lesenswert?

Zwirbeljupp schrieb:
>  Allerdings ist mir nicht
> ganz klar, wie das funktionieren würde. Alle geshifteten Signalleitungen
> über eine Diode auf einen "Sternpunkt" verbinden?

1. Mit meiner Idee hast Du ja 2 Leitungen vom µC, eine ist ein Eingang, 
der andere ein Ausgang. Du kannst nun zum Beispiel UND-Gatter verwenden, 
damit der Ausgang nur dann high, und somit heruntergezogen, wird, wenn 2 
oder mehrere Anschlüsse des µCs auf High sind. Damit kannst Du deutlich 
mehr Leitungen schalten.

2. Die Rückmeldung ist relativ einfach wenn Du nur eine Leitung 
gleichzeitig bedienen willst. Bei der Lösung mit den Dioden bräuchtest 
Du nur ein UND-Gatter mit vielen Eingängen, so bald eine der Leitungen 
heruntergezogen wird, kriegst Du das mit. (allerdings nicht welche 
Leitung, das dürfte Dir aber egal sein, da es immer die Leitung ist, auf 
der Du angefragt hast)

von Rene Z. (rzimmermann)


Lesenswert?

>Richtig, ein alter Mercedes :-)
>Ähm, multiplexen? Wie läuft das? Ich hab nur mal ein Original-Lesegerät
>von Mercedes gesehen, das besteht fast ausschließlich aus Relais...

Was ist das den für ein Daimler von welchem Baujahr?
Mit Multiplexen meine ich du hast den Pegelwandler nur ein mal
und schaltest ihn nacheinander auf die entsprechende Leitung.
So machen das aktuelle Diagnosetester zumindestens.

Gruß Rene

von gaast (Gast)


Lesenswert?

Christian Berger schrieb:
> Nö so wie in dem Bild geht das nicht, durch die Basis-Emitter-Strecke
> des rechten Transistors wird so viel Strom fließen, bis die
> Basis-Emitter-Spannung, und somit die Spannung an der Leitung, grob 0.6
> Volt sind...
>
> => ständiger Pulldown und verbrutzelter Transistor.

Als wenn ich nicht schon deutlich darauf hingewiesen hätte, dass damit 
jeweils ein einzelner Treiber des 2803 gemeint ist... Dieser hat als 
solcher bereits Basiswiderstände und noch ein bisschen mehr integriert, 
und diskrete Transistoren kommen für den TS ja nicht in Frage, somit hat 
sich das auch erübrigt. Letztenendes geht es um die Grundschaltung an 
sich, vor dem Aufbau sollte man manchmal eben das Hirn einschalten.
Überpenible Nörgler dürfen sich Basiswiderstände hinzudenken oder gleich 
die innenschaltung des ULN2803 im Geiste hinmalen. Oder gleich einen 
FET, womit die Basiswiderstände wieder hinfällig wären. Wundert mich ja, 
dass sich noch keiner über den fehlenden Widerstandswert beim Pullup 
beschwert hat, schließlich könnte da ja ein falscher Wert ebenso die 
ganze Schaltung braten.

Zwirbeljupp schrieb:
> irgendwie glaube ich auch, dass Deine Schaltung so nicht ganz
> funktionieren würde.

Glauben tut man in der Kirche.

Zwirbeljupp schrieb:
> Mit ULNs +
> Multiplexing lässt sich das Problem vielleicht doch elegant lösen?

Was gefällt dir denn konkret am Vorschlag nicht?

von Zwirbeljupp (Gast)


Lesenswert?

Hallo,

Rene Zimmermann schrieb:
> Was ist das den für ein Daimler von welchem Baujahr?
> Mit Multiplexen meine ich du hast den Pegelwandler nur ein mal
> und schaltest ihn nacheinander auf die entsprechende Leitung.
> So machen das aktuelle Diagnosetester zumindestens.
Ein r129, Baujahr 7/95.
Ja, der offizielle Tester scheint die Leitungen tatsächlich über Relais 
zu multiplexen. Ich bräuchte aber etwas für die Hosentasche :-)

gaast schrieb:
> Zwirbeljupp schrieb:
>> irgendwie glaube ich auch, dass Deine Schaltung so nicht ganz
>> funktionieren würde.
>
> Glauben tut man in der Kirche.
>
> Zwirbeljupp schrieb:
>> Mit ULNs +
>> Multiplexing lässt sich das Problem vielleicht doch elegant lösen?
>
> Was gefällt dir denn konkret am Vorschlag nicht?

Sorry, hatte einen Gedankenfehler. War irgendwie der Meinung, der linke 
Transistor in Deiner Zeichnung würde durchschalten, sobald am 
Signaleingang die 12V liegen... Blödsinn. Nach reiflicher Überlegung 
behaupte ich nun das Gegenteil. Ich werde wohl am besten mal einen 
Schaltungsvorschlag erEaglen und dann noch einmal zur Diskussion 
stellen.

Danke nochmals!

Gruß
Daniel

von Zwirbeljupp (Gast)


Lesenswert?

Christian Berger schrieb:
> 2. Die Rückmeldung ist relativ einfach wenn Du nur eine Leitung
> gleichzeitig bedienen willst. Bei der Lösung mit den Dioden bräuchtest
> Du nur ein UND-Gatter mit vielen Eingängen, so bald eine der Leitungen
> heruntergezogen wird, kriegst Du das mit. (allerdings nicht welche
> Leitung, das dürfte Dir aber egal sein, da es immer die Leitung ist, auf
> der Du angefragt hast)

Ja, das klingt plausibel :-)
Danke für die Nachhilfe. Ich komme eher von der Softwareseite und habe 
noch ein paar Defizite, was digitale Schaltungstechnik angeht...

von Alexander S. (esko) Benutzerseite


Angehängte Dateien:

Lesenswert?

gaast schrieb:
> 2011-09-08_17-52-50_483.jpg
>
> Die Transistoren in der Schaltung im Anhang sind ebensolche, den oberen
> kann man zwecks Schaltschwellen ggf. auch als ULN2804 wählen.

Die Einwände sind schon berechtigt, denn die Schaltung funktioniert so 
nicht.

* Der µC ist auf Tristate
* der rechte NPN ist aus
* der linke NPN ist durchgeschaltet
* Es liegen 0V auf dem Pin des Steuergerätes
* Will das Steuergerätes den Pin auf 0V ziehen,
  dann hat das keine Wirkung.

Im Anhang eine LTspice Simulation der Schaltung von gaast.

von gaast (Gast)


Lesenswert?

Stimmt natürlich, ursprünglich ging ich von der Verwendung getrennter 
Schieberegister für Ein- und Ausgang aus, weshalb die oben von mir 
vorgesclagenen bidirektionalen Portexpander Quatsch sind. Allerdings 
darf dann auch der Pull-up weg, dafür eventuell ein Array 
Schutzwiderstände vor die Ausgänge des Portexpanders setzen.

von Reinhard Kern (Gast)


Lesenswert?

Zwirbeljupp schrieb:
> Die Erfolgschancen sehen gut aus, allerdings würde bedeuten, ich müsste
> 48 Pins am µC opfern, zudem 4x 74 HC 4050 + 24 Transistoren +
> Hühnerfutter auf der Platine vorsehen.

Nicht wirklich, du kommst mit 6 Pins aus: mit 5 Pins gibst du eine Zahl 
von 1..24 aus an 3 Decoder, die jeweils einen Transistor zum 
Kurzschliessen eines Eingangs ansteuern - wenn du Decoder mit Open 
Collector und ausreichender Spannungsfestigkeit findest, kannst du sie 
direkt anschliessen.

Die 24 Eingänge fasst du nach der Pegelwandlung (muss kein 4050 sein, 
wenn du den Spannungsteiler hochohmig genug machst geht jeder 
CMOS-Inverter) mit Oder-Gattern zusammen, es kann ja nur ein Eingang 
antworten, wenn ich deine Beschreibung richtig verstanden habe. Also 
genügt 1 Pin am µC.

Von 48 auf 6: Nachdenken lohnt sich fast immer.

Gruss Reinhard

von Reinhard Kern (Gast)


Lesenswert?

Hallo,

Nachtrag: mit 74LS145 brauchst du keinen Transistor, sondern nur 3 ICs 
zum Anwerfen der Daten-Ausgabe. Weniger dürfte nicht gehen.

Gruss Reinhard

von Zwirbeljupp (Gast)


Lesenswert?

Hallo zusammen,

noch einmal vielen Dank für die guten Vorschläge! Ihr habt mir wirklich 
weitergeholfen!
Nach dem Check der Verfügbarkeit der Chips habe ich mich jetzt auf 
folgenden Plan festgelegt:
Ich beschränke mich auf nur noch 18 Signale, die ich vom Steuergerät 
abfrage.
Pegelwandlung der Signale durch 3x 74HC4050, pulldown der 
Signalleitungen durch 2x 74LS145 und Zusammenfassen der Steuersignale 
nach der Pegelwandlung durch 3x 74LVX32D. Ich komme dann mit maximal 20 
Pins am µC aus, das ist völlig okay.

Das wird zwar mit den ganzen ICs trotzdem etwas sperrig für die 
Hosentasche, aber das ist mir deutlich lieber als 48 Transistoren + 
Basiswiderstände von Hand zu löten und zu routen :-D

Wenn ich den Schaltplan entworfen habe, bettel ich hier noch einmal um 
Feedback ;-)

Danke & Gruß
Daniel

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.