Forum: Mikrocontroller und Digitale Elektronik UART Verbindung scheitert - nur wieso?


von Timo K. (timok)


Lesenswert?

Hallo Community,

ist zwischen euch jemand dabei, der sich mit UART auskennt? Ich bin am 
verzweifeln. Zu beginn habe ich meine ICs mit einem Bootloader und einem 
USB-UART Port von myAVR bespielt und auch damit Daten versand. Da ich 
irgendwann aber nicht mehr mit diesem Einsteigerset von myAVR arbeiten 
wollte habe ich angefangen mit Programmiergeräten und ohne Bootloader zu 
arbeiten. Alles wunderbar, bin immer an mein Ziel gekommen.
Für mein nächstes Projekt benötige ich jedoch eine Serielle Verbindung 
und egal was ich probiere, die Verbindung kommt nicht zustande...

Erstmal zu meiner Ausstattung:
-Ich habe mir eine Platine zusammengelötet, auf der ich soweit alle 
Standartteile habe, die ich benötige (Transistoren, Quarze usw). Mit 
Steckverbindern kann ich mir meine Aufbauten zum testen immer schnell 
zusammenstecken. Der verbaute IC ist ein AtMega8.
-Ich verwende das Programmiergerät "DIAMEX PROG-S", funktioniert 
einwandfrei
-Programme schreibe und brenne ich mit AVRStudio4 (bisher nie Probleme 
gehabt)
-Um die UART verbindung zu testen habe ich mir Termite geladen
-Ich verwende den max232 zur umformumg
-Da mein Laptop nur USB anschlüsse hat, verwende ich den USB Serial 
Adapter von DeLock 
http://www.reichelt.de/USB-Konverter/DELOCK-61856/3/index.html?&ACTION=3&LA=446&ARTICLE=108881&GROUPID=6105&artnr=DELOCK+61856

Bisher habe ich folgendes Versucht:
Ich habe mehrere Programm-Codes aus dem Netz gezogen und ausprobiert. 
Die Programme sollten ganz einfach Zeichen senden oder ähnliches. Eines 
war beispielsweise Beitrag "ATmega8 UART (Assembler) Daten empfangen / senden"
Programm draufgeladen, Fuses gesetzt, Schnittstelle bei Termite 
konfiguriert und gehofft das was kommt. Nie geschafft.

Kennt sich jemand mit den typischen Fehlerquellen bei UART aus und 
könnte sie mir nennen? Ich habe bisher viel rumprobiert und weiß nicht, 
wie ich meine Fehlersuche weiter fortsetzen soll. Vielleicht hat ja 
jemand einen "Plan" zur Fehlersuche im Petto, damit ich den Fehler 
lokalisieren kann!
Achja, ich habe schon mehrere Codes probiert, aber solltet ihr noch 
irgend ein Beispiel im Netz kennen, das eine einfache UART Funktion 
gibt, bin ich immer dankbar für hinweise!

von Karl H. (kbuchegg)


Lesenswert?


: Bearbeitet durch User
von Frank K. (fchk)


Lesenswert?

Du solltest Dir einen Logicanalyzer zulegen, oder ein digitales 
Oszilloskop. Damit kannst Du dann messen, was auf Deiner seriellen 
Schnittstelle los ist, ob sich da überhaupt was tut, ob die richtigen 
Daten gesendet werden, ob die Bitrate die ist, die Du erwartest, usw 
usw. Ohne das stocherst Du nur im Dunkeln rum.

Dann nimmst Du Dir das Datenblatt und liest den entsprechenden Abschnitt 
und versuchst zu verstehen, was da vor sich geht und was Du machen musst 
und wieso.

fchk

von holger (Gast)


Lesenswert?

>Kennt sich jemand mit den typischen Fehlerquellen bei UART aus und
>könnte sie mir nennen?

RxD, TxD nicht gekreutzt oder GND vergessen.

Dürfte 99% abdecken.

von holger (Gast)


Lesenswert?

>-Ich verwende den max232 zur umformumg

Oder der ist falsch angeschlossen.
Schaltplan zeigen.

von Thomas E. (thomase)


Lesenswert?

Frank K. schrieb:
> Du solltest Dir einen Logicanalyzer zulegen, oder ein digitales
> Oszilloskop. Damit kannst Du dann messen, was auf Deiner seriellen
> Schnittstelle los ist, ob sich da überhaupt was tut, ob die richtigen
> Daten gesendet werden, ob die Bitrate die ist, die Du erwartest, usw
> usw. Ohne das stocherst Du nur im Dunkeln rum.
>
Quatsch. Das ist nur mit Kanonen auf Spatzen schiessen.

> Achja, ich habe schon mehrere Codes probiert, aber solltet ihr noch
> irgend ein Beispiel im Netz kennen, das eine einfache UART Funktion
> gibt, bin ich immer dankbar für hinweise!

Erstmal die Checkliste.

Dann Drahtbrücke über Rx und Tx, den Controller aus der Fassung ziehen 
und mit dem Terminal senden, Wenn es sein Echo empfängt, ist bis dahin 
alles OK.

Dann das gleiche im Controller: Mit Terminal senden, Receive pollen und 
das Byte wieder zurück schicken. Wenn das nicht geht, stimmt zu 99,9516% 
etwas mit deinem Takt nicht. Bei mir wären es dann die fehlenden 
0,0484%, weil ich mal wieder Rx und Tx vertauscht habe.

mfg.

von oldmax (Gast)


Lesenswert?

Hi
Weitere bekannte Fehler: falsche Baudrate, keine externe 
Taktgenerierung. Die beschriebene Vorgehensweise bisher liefert dir eine 
Antwort, ob die Kabel richtig sind  und der Max korrekt arbeitet. Wenn 
du mit Assembler arbeitest, dann lies das entsprechende Tutorial über 
USART. Wenn dir das noch nicht reicht, bei der Konkurenz 
AVR-Praxis-Forum steht auch ein Beittrag, "Keine Angst vor Assembler" im 
FAQ , der diese SChnittstelle auch beschreibt.
Gruß oldmax

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Thomas Eckmann schrieb:
> Frank K. schrieb:
>> Du solltest Dir einen Logicanalyzer zulegen, oder ein digitales
>> Oszilloskop.
> Quatsch. Das ist nur mit Kanonen auf Spatzen schiessen.
Finde ich nicht. Fehlersuche ohne Oszilloskop ist in der Elektronik wie 
wenn du nur auf Zuruf "Rechts!" oder "Links!" Autofahren würdest: kann 
sein, dass es klappt, aber es ist sehr anstrendend.
Mit einem Oszi sehe ich in 30 Sekunden, ob und was eine serielle 
Schnitte tut. Klar kann es nicht schaden, wenn man vorher das Hirn 
einschaltet und schon mal überlegt, was da jetzt wie passieren soll...

von Martin V. (oldmax)


Lesenswert?

Hi
Nun ja, ein Oszi ist natürlich ein bewährtes Messgerät in der Elektronik 
und sicherlich auch wichtig, aber auch teuer. Oftmals folgt einem 
Billigkauf ein weiterer. Und bevor hier ein Glaubenskrieg "Nur mit Oszi 
ist man in der Lage... " ausbricht, es geht auch ohne. Der Weg ist 
bereits erklärt. Man kann manchmal aber auch allein mit einer LED 
feststellen, ob ein Controller Daten empfangen hat. Dazu ist ja im 
Tutorial beschrieben, wie ein Empfang per Interrupt parametriert ist. 
Ein wenig Kopfarbeit, lesen und experimentierren, dann klappt das auch. 
Meine erste Datenübertragung ging auch ohne Oszi nach Anleitung aus 
diesem Tutorial. Nicht auf Anhieb, aber nachdem der Quarz den Takt 
vorgab, die Berechnung der Baudrate richtig parametriert und die 
Kopfblockade gelöst war, hat's funktioniert. Man kann hier tausendmal 
etwas wiederholen, es ist im Prinzip alles im Tutorial enthalten. Auch, 
wie zu Testzwecken eine LED verwurstet wird. Man muss es halt lesen, 
dafür ist es gemacht.
Gruß oldmax

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Lothar Miller schrieb:
> Mit einem Oszi sehe ich in 30 Sekunden, ob und was eine serielle
> Schnitte tut

Naja, der für jemand mit Erfahrung mag das stimmen, aber für einen 
Anfänger der gerade seinen ersten uC programmiert bekommen hat...

von Karl H. (kbuchegg)


Lesenswert?

Es ist eigentlich nicht so schwer eine USART zu debuggen.
3 Themenkreise:
* die Pegelanpassung.
der normalerweise benutzte MAX muss korrekt verschaltet sein. Das lässt 
sich mit einem Voltmeter tadellos testen. Mit ein wenig Erfahrung kann 
man dazu auch eine LED nehmen und aus der Helligkeit (bei für 12V 
errechnetem Vorwiderstand) abschätzen, ob die Spannungspegel so in etwa 
passen oder nicht. Auf 1V wird man natürlich nicht genau, aber den 
Unterschied zwischen ca 10V und ca 5V sieht man schon
* Kabel nicht korrekt ausgekreuzt
Auch hier kann wieder die LED zum Einsatz kommen, gleich nach dem 
Loopback-Test. Bei langsamen Baudraten kann man die Signale auf der 
jeweiligen Tx Leitung wunderbar mit lediglich einer LED verfolgen. Das 
ist überhaupt kein Problem. Gestandene Administratoren hatten in grauer 
Vorzeit immer einen Zwischenstecker für die RS232 in der Schublade 
liegen, der mit 4 LED bestückt war. Kurz eingestoppelt und man sah 
wunderbar ob die Leitung korrekt gekreuzt war oder nicht. Ein nicht 
korrekt gekreuztes Kabel erkennt man daran, dass gar nichts geht.
* Baudrate
Im Gegensatz zur falschen Kreuzung macht sich eine falsche Baudrate 
dadurch bemerkbar, dass zwar an der Gegenstelle was ankommt, allerdings 
das falsche. Auf einem AVR ist eine falsche Baudrate praktisch immer auf 
eine falsche bzw. fehlerhafte µC-Taktfrequenz zurückzuführen.

Gerade bei den letzten beiden Punkt ist es vernünftig, einen 
Kommunikationspartner der USART-Verbindung durch ein vertrauenswürdiges 
Gerät zu ersetzen. D.h. es ist absoluter Unfug, die USARTs 2-er AVR 
miteinander zu verbinden und zu denken man kriegt raus, warum das nicht 
geht. Für die eine Seite nimmt man einen PC, denn dessen USART ist 
getestet und funktioniert. Auch nimmt man für erste Tests ein 
Terminalprogramm oder hTerm, so dass man sieht, was (wenn überhaupt) von 
der Seriellen ausgelesen wird. Die erste zu testende 
Übertragungsrichtung ist µC zu PC, mit Anzeige im Terminal (und nicht 
umgekehrt). Läuft diese Richtung, dann läuft auch die andere Richtung im 
Normalfall auf Anhieb. Wenn nicht, dann hat man beim Empfangscode auf 
dem AVR einen Fehler.

Auf die Art und mit ein wenig Nachdenken und ohne in Panik zu verfallen, 
kriegt man jede USART zum Laufen, bzw. findet raus wo das Problem liegt 
und was zu tun ist. Mit nicht viel mehr als einer LED als Hilfsmittel.


Und PS: timo, Standard schreibt sich hinten mit einem D und nicht mit 
einem T. Das ist keine Stand-Art (also die Kunst des Stehens oder die 
Kunst einen Messestand aufzubauen, und mit einer Standarte aus dem 
Militär hat das auch nichts zu tun)

: Bearbeitet durch User
von Timo K. (timok)


Lesenswert?

holger schrieb:
>>-Ich verwende den max232 zur umformumg
>
> Oder der ist falsch angeschlossen.
> Schaltplan zeigen.

http://halvar.at/elektronik/kleiner_bascom_avr_kurs/max232_nullmodemkabel/rs232_max232_atmega8_nullmodem_v04.gif

Der Schaltplan entspricht meiner Schaltung mit kleinen Ausnahmen:
1.C6 ist nicht vorhanden, da ich keine Referenzspannung brauche (Muss 
die angeschlossen sein?)
2.Pin 7 und 8 beim SUB-D Stecker sind getauscht.
3.Ich benutze keine 1uF ELKOs sondern unipolare 1uF Kondesatoren, der 
Effekt sollte aber der selbe sein.


Habe ich denn ein Nullmodem Kabel?! Ich habe diesen Adapter 
http://www.reichelt.de/USB-Konverter/DELOCK-61856/3/index.html?&ACTION=3&LA=446&ARTICLE=108881&GROUPID=6105&artnr=DELOCK+61856. 
Ist ein Nullmodem Kabel oder?

von holger (Gast)


Lesenswert?

>2.Pin 7 und 8 beim SUB-D Stecker sind getauscht.

Bringt gar nichts. Wenn dann Pin 2 und 3 tauschen.

>Habe ich denn ein Nullmodem Kabel?! Ich habe diesen Adapter

Das ist kein Nullmodem.

von Karl H. (kbuchegg)


Lesenswert?

timo k. schrieb:
> holger schrieb:
>>>-Ich verwende den max232 zur umformumg
>>
>> Oder der ist falsch angeschlossen.
>> Schaltplan zeigen.
>
> 
http://halvar.at/elektronik/kleiner_bascom_avr_kurs/max232_nullmodemkabel/rs232_max232_atmega8_nullmodem_v04.gif
>
> Der Schaltplan entspricht meiner Schaltung mit kleinen Ausnahmen:
> 1.C6 ist nicht vorhanden, da ich keine Referenzspannung brauche (Muss
> die angeschlossen sein?)

Was hat AVcc mit der Referenzspannung zu tun?
AVcc ist die Stromversorgung des Ports, an dem die ADC Eingänge liegen. 
Und zwar auch dann, wenn der ADC gar nicht benutzt wird! Dann versorgt 
AVcc die digitalen Ausgänge mit Strom.

> 2.Pin 7 und 8 beim SUB-D Stecker sind getauscht.

Ist zwar keine so gute Idee, denn die Belegung von CTS/RTS sollte mit 
der Belegung von Rxd und Txd harmonieren.
Wenn die falsche Belegung dir beim Handshake auf dem PC nicht in die 
Suppe spuckt, dann ist es ok. Einfacher wäre es, wenn Pin 7 und 8 gar 
nicht angeschlossen wären. Dann hat man eben kein Handshake. Aber auch 
keinen Ärger mit falschen Pegeln an der falschen Leitung.

> 3.Ich benutze keine 1uF ELKOs sondern unipolare 1uF Kondesatoren, der
> Effekt sollte aber der selbe sein.

Was sagt der Hersteller des MAX dazu?

> Habe ich denn ein Nullmodem Kabel?! Ich habe diesen Adapter
> 
http://www.reichelt.de/USB-Konverter/DELOCK-61856/3/index.html?&ACTION=3&LA=446&ARTICLE=108881&GROUPID=6105&artnr=DELOCK+61856.
> Ist ein Nullmodem Kabel oder?

Probier es aus!

Zieh den MAX aus dem Sockel, starte auf dem PC ein Terminalprogramm und 
leg auf einen Stein auf die Tastatur. Dann siegst du nach, an welchem 
Pin vom MAX die seriellen Daten ankommen. Mit einer LED + 220Ohm gegen 
Masse verschaltet, sieht man die wunderbar blinken.
Wenns der falsche Pin ist, dann ist auch das Kabel falsch gekreuzt.
Ist doch nicht so schwer. AUf dem PC kommen an seinem TxD Pin die Daten 
rausgeflitzt und an deiner Eingangsbeschaltung müssen die an RxD wieder 
reinflitzen.

: Bearbeitet durch User
von Timo K. (timok)


Lesenswert?

Zu den ELKOs:
Beitrag "MAX232 - Kondensatoren"

Darauf habe ich mich berufen.

Zu AVCC:
Also ist egal das ich die nicht belegt habe

von holger (Gast)


Lesenswert?

>Zu AVCC:
>Also ist egal das ich die nicht belegt habe

Nein, AVCC muss angeschlossen werden. Alle GND auch.
Da darf nichts offen bleiben. Wer das nicht tut
darf sich über Nebenwirkungen nicht wundern.

von Timo K. (timok)


Lesenswert?

Habe jetzt Kabelbelegung geprüft. MAX232 - PC-Seite Stimmt.
Von MAX232 - Atmega ist aber komisch. Ich bekomme ein Dauersignal auf 
die Pins T1In und R1Out

: Bearbeitet durch User
von Thomas E. (thomase)


Lesenswert?

Lothar Miller schrieb:
> Thomas Eckmann schrieb:
>> Frank K. schrieb:
>>> Du solltest Dir einen Logicanalyzer zulegen, oder ein digitales
>>> Oszilloskop.
>> Quatsch. Das ist nur mit Kanonen auf Spatzen schiessen.
> Finde ich nicht. Fehlersuche ohne Oszilloskop ist in der Elektronik wie
> wenn du nur auf Zuruf "Rechts!" oder "Links!" Autofahren würdest: kann
> sein, dass es klappt, aber es ist sehr anstrendend.
> Mit einem Oszi sehe ich in 30 Sekunden, ob und was eine serielle
> Schnitte tut. Klar kann es nicht schaden, wenn man vorher das Hirn
> einschaltet und schon mal überlegt, was da jetzt wie passieren soll...
Ich auch. Aber ich muss mir auch nicht extra einen kaufen.

Für einen Hobbyelektroniker, der seine Kommunikation mit dem PC nicht zu 
laufen kriegt, ist das aber keine Empfehlung, sondern einfach nur 
Gelaber.

mfg.

von Timo K. (timok)


Lesenswert?

Kümmere mich morgen ums weiterkommen. Nacht!

von Martin V. (oldmax)


Lesenswert?

Hi
Vielleicht mal etwas grundsätzliches.... T = Transmit, also das wo die 
Bits seriell ausgegeben werden. R = Read. Demnach  ist TxD mit RxD 
zuverbinden.
Um zu wissen, wo auf den Pins einer Com oder RS 232 Schnittstelle TxD 
und RxD bei den 9pol. Sub-D Steckern liegen, Google fragen. Dann 
entsprechend ein einfaches 3 adriges Kabel nehmen und GND mit GND, 2 mit 
3 und 3 mit 2 verbinden. Vom Controller zum MAX und vom MAX zum Ste´cker 
wird nix gekreuzt. Dann sollte auch der Test mit der Brücke und 
anschließend mit dem Controller auch klappen.
Gruß oldmax

: Bearbeitet durch User
von Stefan (Gast)


Lesenswert?

>> Du solltest Dir einen Logicanalyzer zulegen, oder ein digitales
>> Oszilloskop. Damit kannst Du dann messen, was auf Deiner seriellen
>> Schnittstelle los ist.

>Quatsch. Das ist nur mit Kanonen auf Spatzen schiessen.

Und, immer noch dieser Meinung. So ein Meßgerät hätte viele Fragen 
überflüssig gemacht.

Schon für 300 Euro kann man ganz regulär ein einfaches aber dennoch sehr 
hilfreiches Oszilloskop bekommen. Das ist für Kinder und Azubis sicher 
schon eine Menge Geld, aber gut investiertes.

> Oftmals folgt einem Billigkauf ein weiterer.

Mag sein. Das bedeutet aber nicht, dass die preisgünstigen Geräte nichts 
taugen.

von Timo K. (timok)


Lesenswert?

Also ich kann mir so ein Teil nicht kaufen. Ist halt nur ein Hobby und 
mach das auch nur abends nach der Arbeit. Wenn jetzt demnächst das 
Studium anfängt habe ich noch weniger Kohlen... :(



Verbindung steht, nachdem ich mal alle Eure Posts durchgearbeitet habe. 
Ich bedanke mich bei allen die mir geholfen haben!

Fehlerzusammenfassung:

-Adapter ist kein Nullmodemkabel, Schaltung ist für Nullmodemkabel. Lsg: 
PIN 2 u 3 an SUB-D Buchse getauscht.

-Fuses falsch gesetzt. Hatte CLKSEL 110 muss aber 111.

-Einen Kondensator falsch geschaltet (Im Eifer des Gefechts ausversehen 
die Beinchen vertauscht)

: Bearbeitet durch User
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.