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