Forum: Mikrocontroller und Digitale Elektronik UART empfängt Daten ohne Gegenstelle


von Chris D. (chris79)


Angehängte Dateien:

Lesenswert?

Hallo Community,

ich habe nach dem Wechsel von einem ATMega16 auf einen ATMega32 ein 
UART-Problem (Lib von Peter Fleury), daß sich wie folgt äußert:

Datenempfang auch ohne angeschlossene Gegenseite (Datenmüll incl. 
Buffer overflows)
kein gezielter Datenempfang möglich (naja, manchmal schon).
kein Senden möglich.

Hardware (funktionierte mit dem mega16):
max232n mit AbblockC(schon ausgetauscht)
ATMega32, RXT testweise nun mit externem Pullup (100k)

Die Codesegmente sind im Anhang zu finden.


Hat von euch einer eine Idee, woran mein Problem liegen könnte?

Besten Dank schonmal,
Gruß
Christoph

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Bevor du eine Softwareanalyse machst - Hast du schon den UART-RX-Pin mit 
dem Oszi beobachtet, ob dort physikalisch ein Signal bzw. Störung 
reinkommt (d.h. Hardwareproblem)?

von Michael Wilhelm (Gast)


Lesenswert?

Oder er macht Mist wegen Übertaktung? Kann das sein?

MW

von Chris D. (chris79)


Lesenswert?

Danke ihr beiden,

habe leider kein Oszi zur  Hand. Wenn ich T1OUT vom Max auf Masse 
kurzschließe, verschwinden die Fehler (Aber neben den Fehlern 
verschwindet leider auch die Funktion; mit Kommunikation ist dann nix 
mehr).

Vorher war ein 16MHz Quarzoszi drin, damit gab es den gleichen Mist. Bin 
auf das Baudratenquarz gegangen, weil ich dies als Fehlerquelle 
ausschließen wollte.

von Johannes M. (johnny-m)


Lesenswert?

Wenn der Eingang offen ist, dann kann da alles Mögliche passieren, weil 
Du offensichtlich keinen Pull-Up aktiviert hast.

von Chris D. (chris79)


Lesenswert?

Also ein
1
PORTD |=(1<<PD0)  ;
 (keine Verbesserung)

hinter die UART-Initialisierung?

Habe testweise zZ einen 100kOhm Pull-Up zw. RxT und +5V.

Mache ich da vielleicht was falsch?

von Michael Wilhelm (Gast)


Lesenswert?

Sind die Eingänge des MAX definiert?

MW

von Chris D. (chris79)


Lesenswert?

Am Max liegt alles richtig an, soweit ich das überprüfen kann.

Habe noch alles nicht an der Buchse benötigtes abgeklemmt (Hatte 
irgendwie noch die Steuerleitungen an V+ des max232 gelegt; keine Ahnung 
warum...ist schon was her).

Nun ist das Verhalten ein anderes:
bei Anschluss an PC sendet der atmel mir unentwegt '\0'.
1
uart_putc((unsigned char) c);
(senden ist schon richtig; aber scheinbar bekommt er von irgendwoher 
genau die '\0')

Wenn ich das Kabel entferne, bekomme ich buffer overflows.
Senden (PC->atmel) kann ich immer noch nicht.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

> Wenn ich T1OUT vom Max auf Masse kurzschließe, verschwinden die Fehler
> ...
> Am Max liegt alles richtig an, soweit ich das überprüfen kann.

Spätestens jetzt wäre das Bekanntgeben des Schaltplans und eines 
aussägefähigen Fotos des konkreten Aufbaus notzlich.

Hat der MAX232n Vcc und GND und korrekt angeschlossene 
Ladekondensatoren? Wie kommt das Signal PC seitig in den MAX232n - RX, 
TX und GND vorhanden?

von Chris D. (chris79)


Angehängte Dateien:

Lesenswert?

Hier der Schaltplan und die Bilder.
Die rot gekreuzten Leitungen sind eben von mir 'per Hand' gekappt 
worden.
(sowohl im Schaltplan, als auch auf den Fotos markiert).

Die Platine ist zweiseitig beschaltet. Man kann auf der Vorderseite 
nicht alle Leitungen sehen. Habe aber nochmal entsprechend dem 
UART-Tutorial hier alles überprüft und für richtig befunden.
Die Ladekondensatoren sind entsprechend dem Datenblatt des Max 1µ. 
Allerdings keine Elkos.

Die Schaltung hat so mit einem ATMega16 schon korrekt funktioniert; weiß 
leider nichtmehr, ob auch mit der aktuellen Programmierung.



Seid nachsichtig mit mir ;-)
Es ist meine erste ausführliche Lötarbeit und meine erste selbst 
erstellte Platine.

von Chris D. (chris79)


Angehängte Dateien:

Lesenswert?

vorderseite

(gibt es eigentlich eine Möglichkeit, mehrere Anhänge an einen Beitrag 
anzuhängen?)

von Chris D. (chris79)


Angehängte Dateien:

Lesenswert?

Rückseite

Danke für die Hilfe

edit:
Achja, ich vergaß zu sagen:
RxD und TxD sind im Schaltplan gekreuzt.
Da ich habe ein normales Kabel (kein Nullmodemkabel) verwende, habe ich 
sie entsprechend im Kabel zurück gekreuzt.
(War ein Fehler im Layout meinerseits, der im Kabel leichter zu beheben 
war).

von Stefan B. (stefan) Benutzerseite


Lesenswert?

1/ Die korrekte Beschaltung mit einem 1:1 Kabel (kein Nullmodemkabel) 
zwischen PC und µC ist diese Verbindung:

AVR        MAX          DB-9 Buchse F  | 1:1-Kabel |  DB-9 Buchse M   PC
                                       | M       F |
======================================================================== 
=
TXD     T1IN/T1OUT         Pin2                             Pin2 
RXD
RXD     R1OUT/R1IN         Pin3                             Pin3 
TXD
GND                        Pin5                             Pin5 
GND

Wenn du auf der Platine an der DB-9 Buchse F fir Belegung von Pin2 und 
Pin3 getauscht hast, kannst du nicht mit einem 1:1 Kabel arbeiten.

Du müsstest in diesem Fall das 1:1 Kabel an einer Seite öffnen und die 
Verbindungen an Pin2 und Pin3 tauschen.

2/ Ich sehe in deinem Schaltplan (und den zu kleinen Fotos) keine 
Kondensatoren zwischen Vcc und GND bei den ICs (Atmega und MAX232).

3/
> Datenempfang auch ohne angeschlossene Gegenseite (Datenmüll incl.
> Buffer overflows)
> kein gezielter Datenempfang möglich (naja, manchmal schon).
> kein Senden möglich.

Was meinst du mit "Gegenseite" bzw. wo entdeckst du die 
Übertragungsfehler?
Hast du schon mal den Atmega32 entfernt und eine Brücke zwischen Pin14 
und Pin15 an der Fassung IC2 angebracht und dann vom PC aus probiert, 
was zu senden? Wenn die Verkabelung und der Anschluss des MAX232 i.O. 
ist, solltest du so ein Echo bekommen.

von Chris D. (chris79)


Lesenswert?

Hallo Stefan,
erstmal danke für deine ausführliche Antwort.

Stefan "stefb" B. wrote:

> Wenn du auf der Platine an der DB-9 Buchse F fir Belegung von Pin2 und
> Pin3 getauscht hast, kannst du nicht mit einem 1:1 Kabel arbeiten.
>
> Du müsstest in diesem Fall das 1:1 Kabel an einer Seite öffnen und die
> Verbindungen an Pin2 und Pin3 tauschen.

Ist genau so, wie du schreibst; An der Buchse Pin2 und Pin3 vertauscht, 
dafür in dem 1:1 Kabel auch an einer Seite Pin2 und Pin3 getauscht.

> 2/ Ich sehe in deinem Schaltplan (und den zu kleinen Fotos) keine
> Kondensatoren zwischen Vcc und GND bei den ICs (Atmega und MAX232).

Die Abblockkondensatoren habe ich tatsächlich im Schaltplan vergessen 
(Wie gesagt, war mein erster), dafür sind sie nachträglich auf der 
Rückseite der Schaltung zu finden.


> 3/
>> Datenempfang auch ohne angeschlossene Gegenseite (Datenmüll incl.
>> Buffer overflows)
>> kein gezielter Datenempfang möglich (naja, manchmal schon).
>> kein Senden möglich.
>
> Was meinst du mit "Gegenseite" bzw. wo entdeckst du die
> Übertragungsfehler?
> Hast du schon mal den Atmega32 entfernt und eine Brücke zwischen Pin14
> und Pin15 an der Fassung IC2 angebracht und dann vom PC aus probiert,
> was zu senden? Wenn die Verkabelung und der Anschluss des MAX232 i.O.
> ist, solltest du so ein Echo bekommen.

Ich habe an der Schaltung ein LCD-Display (das irgendwie auch fehlerfrei 
funktioniert. Hierüber lasse ich darstellen, was der UART empfängt.
Aktueller Stand ist:

Kein ser. Kabel an der Schaltung -> datenmüll am µC
Kabel an der Schaltung (und anderes Ende am PC/Hyperterminal) ->
nix am µC
nix im Hyperterminal;
Wenn ich was zum µC sende, kommen (manchmal!) '\0' in unterschiedlicher 
Anzahl zurück

Werde jetzt mal den atmel aus der Fassung nehmen und das Ganze mal mit 
der von dir vorgeschlagenen Methode testen.
Gebe dann sofort wieder Rückmeldung.

von Chris D. (chris79)


Lesenswert?

Problem gelöst:

Habe auf Stefans Anraten hin mal vom PC angefangen die Leitung 
gecheckt...

erster Fehler: der USb-RS232-Konverter war falsch eingestellt.
(da sich das Problem nicht besserte über die native rs232 habe ich hier 
bei der Problembeschreibung den Konverter außen vor gelassen).

zweiter Fehler: Max232 kaputt (beide getesteten, echt doof)


letzt läuft es (fast) perfekt.
Ab und zu werden befehle vom µC nicht verarbeitet, aber da es sich bei 
der UART nur um einen Testaufbau im System handelt 
(Prototypen-Datalogging), kann ich hier mit einem geeigneten Protokoll 
Abhilfe schaffen.

Vielen Dank nochmal allen, die sich des Problems angekommen haben.

Beste Grüße & ein schönes Wochenende,
Christoph

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.