Forum: Mikrocontroller und Digitale Elektronik Anpassung mit Standard-Transistoren


von Kermit (Gast)


Angehängte Dateien:

Lesenswert?

Da meine andere Frage zum K-Line Anpassung wohl zu speziell war, Frage 
ich hier mal allgemeiner.


HINTERGRUND:
Ich möchte mit einem Atmega-Mikrocontroller mit meinem KFZ über die 
OBD2-Buchse kommunizieren. Mein KFZ nutzt das K-Line Protokoll (was 
quasi eine UART-Schnittstelle ist, wo  RX/TX zusammen über eine Leitung 
im Halbduplexbetrieb reden mit 10400baud und 12V Pegeln). Zur Anbindung 
gibt es auch spezielle Schnittstellen-ICs, z.B. den MC33230.
Leider ist dieser schwierig zu kriegen, bzw. ich möchte nicht extra 5EUR 
Versandkosten für einen SMD-IC zahlen (zudem löte ich nicht gerne 
SMD-ICs).

Deshalb möchte ich das lieber mit einfachen Transistoren anpassen. Es 
gibt einen fertigen OBD2 Interpreter-IC namens "ELM323", welcher auch 
nur ein (PIC-)Mikrocontroller ist. Dieser wird wie folgt angebunden: 
Siehe angehängtes Bild, was ein Auszug aus der Beispielschaltung aus dem 
ELM323 Datenblatt ist (rote Schrift stammt von mir, Rest original).

Der 510 Ohm 12V-Pullup-Widerstand ist wohl so in der Norm 
vorgeschrieben. Aber die Eingangs-Transistorschaltung unten kapier ich 
nicht so ganz (der obere 10K Widerstand ist irgendwie seltsam 
geschaltet).
Ich habe die Schaltung einfach mal aufgebaut. Problem: Sowohl der 
Ausgang, als auch der Eingang sind invertiert. Da ich die Hardware-UART 
des Atmega nutze, kann ich die Pegel auch nicht im uC zurückinvertieren 
(lasse mich aber gerne eines besseren belehren!). Eine funktionierende 
Software-UART für den Atmega, habe ich auch nicht gefunden, bzw. 
empfangsmäßig zum Laufen bringen können.


FRAGE:
Zurück zur Schaltung und meiner eigentlichen Frage: Ich habe sowohl 
Eingang als auch Ausgang einfach mal über einen simplen 
NPN-Emitter-Folger invertiert. So funktioniert das auch prinzipiell. 
Doch ich möchte ungern soviel externe Beschaltung (und damit 
Signalverfälschung) haben. Kriegt man das nicht auch mit jeweils nur 
einem Transistor hin?
Kann ich den NPN-Transistor am Ausgang durch einen PNP tauschen und am 
Eingang den PNP durch einen NPN und habe dann invertierte Pegel? Doch 
wie schalte ich die Transistoren dann richtig, insbesondere der 
Eingangstransistor mit der seltsamen Widerstandsbeschaltung macht mir 
Kopf zerbrechen. Ich möchte auch nicht gleich die OBD2-Schnittstelle des 
KFZ schrotten! Darum meine Frage an die Transistorexperten hier ;)

Danke im voraus,
Kermit

von Kermit (Gast)


Angehängte Dateien:

Lesenswert?

So, mal noch einfacher:

Im Anhang der Ausgang. Kann man den so invertieren? Oder hau ich mir so 
über die Emitter-Basis-Strecke die 12V-Spannung in den TTL-Eingang?

von Kermit (Gast)


Lesenswert?

Sorry, meinte natürlich TTL-Ausgang!

von Kermit (Gast)


Angehängte Dateien:

Lesenswert?

So, hier ist der Eingang. Kann man den so invertieren?

von HildeK (Gast)


Lesenswert?

Beim Bild ausgang.png von 22:10 ist ein Emitterfolger verwendet. Du 
erhälst am Data nur rund 5V als High-Pegel und keine 12V. Geht so also 
nicht. Deinem TTL-Ausgang würde nichts passieren.

Beim eingang.png von 22:12 gibt es auch ein Problem: der LOW-Pegel für 
dein TTL-Signal wird die 1.4V nicht unterschreiten können - das ist kein 
LOW!

Kleiner Tipp: mit dem kostenlosen LTSpice kann man das in wenigen 
Minuten prima simulieren und sieht die Probleme ...

von Kermit (Gast)


Lesenswert?

Danke für die Antwort! Dann muss ich wohl zum Invertieren doch zwingend 
jeweils einen 2. Transistor als Emitterfolger nachschalten um den Bus 
nichtinvertiert ansteuern und auslesen zu können.
Auf Grund der Menge der Bauteile (aufwendige Platinenherstellung!) werde 
ich es erst mal lassen und das Projekt jetzt erst mal auf Eis legen und 
mich dann lieber mit Software-UARTS beschäftigen, die ich im Atmega dann 
selbst invertieren kann.

von Bernd H. (bhallinger) Benutzerseite


Lesenswert?

Die Handvoll Bauteile lötet man doch in ner Stunde auf Lochraster!

Wenn nicht schneller.

Aber das Invertieren würde ich in jedem Fall eh in Software machen!

Dann bleibt die UART auch frei um die empfangenen Daten weiter zusenden.
Grad beim Softwaredebuggen sehr hilfreich.

von Kermit (Gast)


Lesenswert?

Das Löten ist nicht das Problem. Aber das Platinenentwickeln (ich 
zeichne sowas meist per Hand). Umso mehr Bautteile, um so komplizierter 
wird es und um so eher schleichen sich Fehler ein.

Und mit einer Platinensoftware wie Eagle, wo man erst eine Woche 
Einarbeitung für braucht um halbwegs brauchbare Platinen zu erstellen, 
möchte ich gar nicht erst anfangen. Selbst dann muss man das Layout von 
Rechner auch noch irgendwie auf die Platine kriegen, was wieder 
aufwendig Belichten, Entwickeln, usw. bedeutet und entsprechende 
Belichtugnsgeräte erfordern. Ein Laserdrucker, um den Toner 
"aufzubügeln" besitze ich auch nicht.
Das lohnt sich nur bei aufwendigen Projekten. Da halte ich es lieber 
einfach.

Und bei Lochrasterplatinen habe ich ja keine Verbindungen zwischen den 
Bauteilen. Das alles per Brücken (auf der Unterseite oder wie macht man 
das?) zu machen, etc. ist doch alles nur Pfusch. Aber selbst dann gilt: 
Umso mehr Bauteile, umso komplizierter die Verdrahtung.

von Gast (Gast)


Lesenswert?

Lötzinn ergibt eine Brücke zwischen benachbarten Punkten...
zwei Beinchen ins gleiche Loch...
Beinchen in die passende Richtung biegen...
Wenn du keine Löcher magst, nimm Streifen...

von Bernd H. (bhallinger) Benutzerseite


Lesenswert?

SO kompliziert ist die schaltung ja auch net....

Es gibt auch Fädeldraht. Damit hab ich auch schon digitalschaltungen mit 
8bit Bus an mehrere Bauteile gebastelt.

Also so bis 20 - 30 Bauteile auf ner Lochraster ist doch noch Pipifax!
Das lohnt es sich doch garnet drüber nachzudenken für einen Prototypen 
ne LP zu machen. Wenn das Projekt dann komplett ist mit allem was man 
zur EMV Filterung braucht. Dann LP machen. Vergissnicht, wenn das im 
Autolaufen soll, das Bordnetz ist nicht 12 Gleichspanung, sondern nur 
sowas ähnliches sehr stark versautes.

von Olaf (Gast)


Lesenswert?

> Aber das Platinenentwickeln (ich zeichne sowas meist per Hand).

Du machst wohl Witze oder? Schau mal hier:

http://www.criseis.ruhr.de/lancia/lancia.html

So mache ich das fuer den Anschluss an meinem Palmpiloten.
Komm aber jetzt nicht auf die Idee die Schaltung einfach hirnlos
abzumalen. Der Palmpilot hat eine Schnittstelle wie ein PC, die
Signale sind also aus der Sicht eines Microcontroller nochmal
invertiert. Aber das laesst sich natuerlich einfach mit einem
Transistor oder einem Einzelgatter loesen.

Ausserdem noch zwei Punkte fuer den wackeren Nachwuchsprogrammierer...

1. Die 500 Ohm pullup sind fuer die korrekte Funktion zwar notwendig,
   bei meinem Wagen waren die aber schon im Auto eingebaut.

2. Software-Uart ist voll Banane. Hast du dir schonmal Gedanken gemacht
   warum es ueberhaubt soetwas wie ein ELM323 gibt? Man koennte die
   Schnittstelle doch einfach direkt an einen PC anschliessen, so wie
   ich es mit dem Palmpiloten gemacht habe. Das Problem ist bloss das
   du sehr wenig Zeit hast um auf Kommandos oder Daten auf der
   Datenleitung zu reagieren. Wenn dein Auto da eine gewisse
   Zeitverzoegerung bemerkt dann stellt es einfach die Kommunikation 
ein.
   Vor dem Hintergrund will man sich einen SoftwareUart gewiss nicht
   antun. Selbst dann nicht wenn man sich dabei einen Transistor und
   zwei Widerstaende sparen kann.

Olaf

von Kermit (Gast)


Angehängte Dateien:

Lesenswert?

@Olaf: Danke für den Link!
Jetzt weiß ich wenigstens, wie ich den Eingang schalten kann! Habe das 
mal angepasst (siehe Anhang). Im Grunde ist es nur ein Spannungsteiler 
von 10:1, der an die Basis geht. Bei Highpegel auf dem Bus (1/11*12V an 
der Basis) sperrt dann der PNP-Transistor und bei Lowpegel schaltet er 
durch.

Dein TX-Ausgang ist aber immer noch invertiert. Ich denke das liegt an 
der RS232-ähnlichen Schnittstelle Deines Palms, welche schon ein 
invertiertes Signal ausgibt. Das macht die UART eines Atmegas leider 
nicht.

Was die UART angeht, so reden wir wohl irgendwie aneinander vorbei. Mit 
Software UART meine ich eine Software UART im Mikrocontroller. Diese 
steht doch, wenn man sie vernünftig realisiert, der Hardware-UART in 
nichts nach! Es geht hier ja auch um eine relativ lahme 
Schrittgeschwindigkeit von "nur" 10400baud.
Zur Klarstellung: Ich habe nicht vor den Mikrocontroller an einen PC 
anzuschließen. Er soll nur auf einem LCD Fahrzeugdaten ausgeben.

Aber auch für den PC gibt es durchaus Software, die über die 
RS232-Schnittstelle direkt mit dem Fahrzeug sprechen kann (ohne ELM323). 
Das ist dann ein sogenannten KL oder KKL Interface, welche auch nur eine 
Pegelanpassung machen.

Nichtdestotrotz. In dem Thread geht es mir nur um die Invertierungen und 
ich habe versucht mich so auszudrücken, dass hier jeder 
Transistorexperte
anworten kann, auch wenn er keine Ahnung vom K-Line Protokoll hat!

von Olaf (Gast)


Lesenswert?

> Was die UART angeht, so reden wir wohl irgendwie aneinander vorbei.

Aeh..nein. Ich weiss schon was ein SoftwareUART ist.

> Diese steht doch, wenn man sie vernünftig realisiert, der
> Hardware-UART in nichts nach!

Noe. Bei einem Hardware UART uebergibst du ein Datenbyte
an den UART und hast danach eine Menge Zeit andere Dinge zutun.
Und noch wichtiger, wenn ein Byte reinkommt so hast du ebenfalls
etwas Zeit bis du dich darum kuemmern musst.

> Zur Klarstellung: Ich habe nicht vor den Mikrocontroller an einen PC
> anzuschließen. Er soll nur auf einem LCD Fahrzeugdaten ausgeben.

Das kannst du ja auch tun. Aber wenn die Schnittstelle zu deinem
Auto einmal steht so musst du dauernd Daten austauschen. So war
es zumindest bei mir. Hast du einmal nicht genug Zeit dich darum
zu kuemmern bricht sofort die Verbindung zusammen.

Das ist vermutlich auch noch in Software machbar wenn du nur noch ein
Display am Controller hast. Aber die Arbeit laesst sich VIEL entspannter
loesen wenn man den UART benutzt.


> In dem Thread geht es mir nur um die Invertierungen und
> ich habe versucht mich so auszudrücken, dass hier jeder
> Transistorexperte

Um einen Inverter zu bauen muss man nicht wirklich ein
Transistorexperte sein. Jede einfache Emitterschaltung sollte
es da tun. Und fallst du unbedingt noch einen Widerstand
einsparen willst dann kannst du auch einen Digitaltransistor
nehmen. (z.B DTC114)
Du kannst aber natuerlich auch ein IC mit sechs Inverter nehmen.
(74HC14) Und falls du angesichts dieser nackten Verschwendung
nicht schlafen kannst, es gibt auch Einzelgatter. Toshiba TC7S14.
Die sind aber in Deutschland etwas schlechter zu bekommen. Ich
finde aber davon gehoeren einfach immer ein paar Dutzend in die
Bastelkiste. :)

Olaf

p.s: Achte darauf das im Fehlerfalle, also wenn dein Controller
nicht laeuft und seine Ausgaenge hochohmig sind, dein Bus nicht
runtergezogen wird.

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.