Forum: Mikrocontroller und Digitale Elektronik ELM323 Onboard Diagnostic und AVR


von sebezahn (Gast)


Lesenswert?

Hi,

nachdem ich nun alles, was zum Bau meines Auto-Diagnosegeräts nötig
ist, fertig habe, hänge ich an einer letzten Hürde, die ich mir auch
nicht ergooglen konnte.

Ich habe zwei Prozessoren, einen Mega und einen ELM323.
http://www.elmelectronics.com/DSheets/ELM323DS.pdf

Der ELM ist eigentlich ein PIC und sendet und empfängt RS232-Daten. Ich
habe ihn gekreuzt mit Rx(Pin5) und Tx(Pin6) an den ATMEL gehangen,
beide liegen außerdem auf der gleichen Masse, haben aber eine getrennte
5V-Zufuhr (Beide einen eigenen 7805). Das Problem ist nun aber, dass
ich nur Datenmüll empfange.

Ich habe den ELM323 streng nach dem Datenblatt Seite 18 aufgebaut, ans
Auto habe ich Ihn noch nicht angeschlossen. Man kann ihn über
"AT-Befehle" nach seiner Versionsnummer fragen, anscheinend empfängt
er da auch irgendwas, denn er gibt mir ja was aus, was er sonst - so
jebenfalls das Datenblatt - nicht machen würde.

Das was er empfängt, gebe ich auf einem Display aus. Da andere Texte
einwandfrei auf dem Display landen, scheidet für mich eine Fehlerquelle
hier auch aus. Auch die Baudrate, Stopbit etc stimmen.

Jetzt habe ich gelesen, dass die Signale für einen PC invertiert sein
müssen. Wenn mich nicht alles trügt im Datenblatt, invertiert der PIC
aber nicht extern, sondern tut dies wohl intern. Das könnte erklären,
warum ich IMMER DEN GLEICHEN Müll erhalte (und auch sende???).

Mir ist es eigentlich herzlich egal, ob ich das per Software im AVR
korrigiere oder per Transistor, ich weiss nur leider beide Male nicht
wie.


Zu meinem bisherigen Programm in BASCOM:
Daten sende ich einfach per PRINT-Befehl. Das funktioniert bei anderen
Applikationen einwandfrei.
Daten empfange ich per RS232-Interrupt. Den aktuellen RS232-Wert, der
in der Variablen UDR steht, packe ich in einen String der Länge eins.
Den wiederum packe ich aufs Display. Auch hier: Andere Schaltungen
funktionieren mit diesen Befehlen einwandfrei.

Man kann in BASCOM zur Not auch ASM einfügen, nur hier steige ich
wissenstechnisch aus, wenn ich sowas selbst machen soll. Dennoch wäre
mir eine Softwarelösung am liebsten, wenn das nicht möglich ist, dann
gerne auch eine Hardware-Lösung.

Ich hoffe auf Euch! Das gesamte Projekt werde ich natürlich
veröffentlichen, wenn es fertig ist. Und das ist es fast, wenn diese
&%§$/! Kommunikation klappt...

Vielen Dank
Gruß
Sebezahn

von Chris (Gast)


Lesenswert?

Hallo,

Normalerweise invertiert der verwendete RS232-Treiber MAX 232 das
Signal in Schaltungen mit dem AVR. Er hat dafür vier Kanäle.
Das Invertieren eines Digitalsignals gelingt ganz einfach per Hardware
mittels Inverter. Das sind beispielsweise ein 4069, 4049, 4009, 7406
(offener Kollektor), mit NAND-Gattern oder mit einem Transistor in
Emitterschaltung. Z.B NPN-Transistor, B über 4,7kOhm ist der Eingang, E
an Ground, C über einen Widerstand von 10 kOhm an +5V. C ist
gleichzeitig der Ausgang.
Per Software könnte das mit einer Exor-Verknüpfung des einen Bits mit
logisch 1 gehen. Das Andere Bit ist der Eingang. Am besten nochmal in
die Wahrheitstabelle EXOR schauen.

Gruß Chris

von sebezahn (Gast)


Lesenswert?

Hi,

ich würde dann einen BC547A nehmen.

dann B über 4,7kOhm an den TX
E an Masse
C an den Rx vom empfangenen Prozessor
und C und 5V über 100k verbinden.

Und dann wird das Signal invertiert? Ist es Schlimm, dass die zwei
Prozessoren zwar die gleiche Masse, aber nicht die gleiche 5V-Quelle
haben?

Gruß
Sebezahn

von Khani (Gast)


Lesenswert?

>Ist es Schlimm, dass die zwei
>Prozessoren zwar die gleiche Masse, aber nicht die gleiche 5V-Quelle
>haben?

Denke ich eigentlich nicht - pass aber bloß auf, dass Du nicht die
beiden 5V-Schienen irgendwo verbindest. Denn durch Toleranzen in den
7805ern hat da jeder eine andere Meinung, was 5V sind und dann schaffen
die gegeneinander.

MfG, Khani

von Chris (Gast)


Lesenswert?

Hallo,


"ich würde dann einen BC547A nehmen."   paßt!

"dann B über 4,7kOhm an den TX"         paßt!
                    "E an Masse"        paßt!
                    "C an den Rx vom empfangenen Prozessor" paßt!
                    "und C und 5V über 100k verbinden. " siehe unten

                    Und dann wird das Signal invertiert?"

Dann ist es definitiv invertiert! Das macht jede Emitterschaltung,
Sourceschaltung oder Kathodenschaltung. Grundlagen der Elektronik. Das
läßt sich mittles LED oder Voltmeter leicht nachweisen. 100kOhm sind
etwas viel. Ich empfehle eher 4,7kOhm bis 27 kOhm, damit sich der
Eingang keine Störungen einfängt. Geschrieben habe ich 10kOhm beim
letzten Mal. Ach ja, der Transistor darf nicht zu sehr in die Sättigung
kommen. Falls es nicht zu gehen scheint mit µC, dann den Widerstand an
der Basis etwas vergrößern, bis etwa zum zehnfachen und die Baudrate
vermindern. Ansonsten stimme ich Khani nur zu.

Gruß

von kamil (Gast)


Lesenswert?

hallo,
ich hatte das gleiche problem mit einem elm323 und eine 2313.
ich hab den TX vom avr mit einem BC547 invertiert und dann gings.
grüsse

von sebezahn (Gast)


Lesenswert?

ES KLAPPT!!! Es FUNKTIONIERT!!! Er LEBT!!! DANKE! DANKE! DANKE!

Das Ausgangssignal vom AVR habe ich "einfach" mit einem BC547
invertiert und 10kOhm und 4,7Ohm wie oben angegeben benutzt. Und schon
reden die beiden miteinander ;-)

VIELEN VIELEN DANK!
Sebezahn

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.