Forum: Mikrocontroller und Digitale Elektronik ISO9141/K-Line bzw. Atmega HW UART: 10400baud Problem


von Kermit (Gast)


Lesenswert?

Hallo,
nachdem ich 1 1/2 Tage nun an einem Problem suche, frage ich mal hier 
nach, ob vielleicht noch jemand ein Tipp oder Idee hat:

Ich habe einen Atmega644 und nutze die Hardware UART mit der UART 
Ringbuffer-Library von Peter Fleury: 
http://homepage.hispeed.ch/peterfleury/avr-software.html#libs

Als UART_BAUD_RATE definiere ich dann 10400. Ich habe es sowohl mit dem 
UART_BAUD_SELECT_DOUBLE_SPEED() und dem UART_BAUD_SELECT() Makro 
probiert. Ich habe auch testweise mal von 8N1 auf 7O1 umgestellt, weil 
ich gelesen habe, dass es K-Line auch so geben soll.

Ich möchte nur auf dem Bus mitlauschen und lasse mir die empfangenen 
Zeichen auf ein Display ausgeben. Das erste 3byte, die ich empfange, 
sollten 0x55, 0x08, 0x08 sein. Mit einem ELM323 kann ich das auch so 
mitloggen (ATH1, ATMA eingeschaltet - nur RX angeschlossen).
Nur mit meiner Atmega644 UART bekomme ich immer 0x55, 0x0F, 0X0F, 0x04 
...

Ich verstehe das echt nicht. Der ELM323 läuft m.W. auch nur fest mit 
10400baud. Ich habe das übrigens mit internem 1MHz RC-Takt (Teiler 8) 
und mit einem externen 20MHz Quarz (ohne Teiler) probiert. Jedesmal 
exakt das selbe Resultat auf der K-Line.

Hat jemand eine Idee, woran das noch liegen könnte? Im Programm benutze 
ich auch keinerlei weitere Interrupts, geschweige denn schalte irgendwo 
Interrupts aus. Das Programm stellt bloß die HEX-Werte der K-Line auf 
einem 4x27 Display da.

Achja, wenn ich UART_BAUD_RATE auf 9600 stelle, dann kann ich 
einwandfrei von einem PC-Terminal Zeichen empfangen und es werden auch 
die korrekten HEX-Werte der Zeichen wiedergegeben!
UART_FRAME_ERROR, UART_OVERRUN_ERROR oder UART_BUFFER_OVERFLOW treten 
bei der K-Line auch nicht auf, weil ich dann auf dem LCD eine 
entsprechende Ausgabe kriegen müsste.


Danke im voraus,
Kermit

von Kermit (Gast)


Angehängte Dateien:

Lesenswert?

So, mal eine Nacht drüber geschlafen und das Problem ist gelöst!

Der UART-Eingang musste noch invertiert werden. Habe einfach zwischen 
der K-Line Eingangsschaltung vom ELM323 (=seltsam geschalteter 
PNP-Transistor und eine Diode) und dem Atmega noch einen NPN-Transistor 
in Emitterschaltung als Invertierer geschaltet.

Jetzt mal eine einfachere Frage:
Problem: Das ist mir zuviel Schaltaufwand! Kann der Atmega irgendwie 
vielleicht selbst das UART-Eingangssignal invertieren?

Ansonsten habe ich die K-Line Anschaltung aus dem ELM323 Datenblatt mal 
angehangen. Oben kommt direkt die K-Line und rechts der 
Mikrocontrollereingang.
Kann ich eventuell den 4,7K einfach am Emitter gegen +5V schalten statt 
am Kollektor gegen Masse (und den Kollektor folglich direkt an Masse 
legen)? Wenn ich dann mit dem Emitter zum Mikrokontrollereingang gehe, 
müsste ich doch auch ein invertiertes Signal haben? Ich arbeite sonst 
nie mit PNP Transistoren, darum frage ich lieber noch mal nach.
Aber am liebsten wäre es mir, wenn der Atmega den UART-Eingang intern 
noch irgendwie invertieren kann? Geht das? Im Datenblatt habe ich bis 
jetzt nichts gefunden.


Danke im voraus,
Kermit

von aasass (Gast)


Lesenswert?

Hello Kermit,
I am doing that project too. Do you invert Tx line from Atmega? And 
maybe do you know what is protocol for paugeot 406 with 30 pin 
connector?

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.