Forum: Mikrocontroller und Digitale Elektronik AVR -> RS232 -> PC: Zeichen nach 0x00 wird falsch angezeigt


von emperorl0ser (Gast)


Angehängte Dateien:

Lesenswert?

Moin,
ich versuche Grade eine Kommunikation zwischen einem ATMega32 und einem 
PC per RS232 aufzubauen. Es gibt dort jedoch einen merkwürdiges 
Verhalten. Sende ich 2 oder mehr Byte hintereinander, und ein Byte ist 
0x00, wird das folgende Byte falsch empfangen. Ist beim ersten Byte ein 
beliebiges Bit gesetzt, wird das zweite Byte korrekt empfangen.
Ich muss mindestens 6 ms warten, um das zweite Byte erfolgreich zu 
senden.

Das Problem konnte ich auf das angehängte Minimalbeispiel eindampfen.

Infos zum Aufbau:
Ein ATmega32 (TQFP) mit 5V und 16 MHz betrieben sitzt auf einer selbst 
entwickelten Platine. Er wird über eine Ethernetbuchse mit 9V (2 Adern 
Plus; 2 Minus; 7805 auf Platine) versorgt und sendet seine Daten 
ebenfalls über diese Buchse. Daran angeschlossen ein Cat5 Kabel mit 0,5 
Metern. Von dort aus geht es über einen MAX3232 und knapp zwei Metern 
Kabel in den PC.

Baudrate: 9600
Terminal-Programm: GtkTerm (Debian/Linux)

Auf dem Auszug vom Oszi (angehängt) sieht alles in Ordnung aus (bis auf 
den Sägezahn durch den MAX3232). Die mit dem Oszi gemessene Baudrate 
beträgt 9612. Das zweite Byte sieht man auf dem Auszug nicht komplett, 
aber ist ebenfalls in Ordnung. Weitere Messungen kann ich bei Bedarf 
einreichen.

Kanal 1 vom Oszi ist nach dem Ethernetkabel aufgenommen worden. Kanal 
zwei direkt hinter den MAX3232.

Meine Lösungsversuche (ohne Erfolg):
- Ich habe bereits den RS232 Pegelwandler getauscht (MAX232N DIP gegen 
MAX3232 SMD)
- Ich habe einen RS232-Usb-Dongle verwendet und diesen direkt hinter dem 
MAX232 angeschlossen, so dass das 2 Meter RS232 Kabel zum PC entfielen.

Kennt jemand das Problem, hatte es selbst und konnte es Lösen?

Grüße emperor

PS: Das Errata vom ATMega32 enthält keine Punkte zum USART.

von Christopher G. (cbg)


Lesenswert?

Wie wärs mit einem Oszi Screenshot wo der Fehler zu sehen ist?
Kann gtkterm die Daten in Binär-, Hex- oder Dezimaldarstellung anzeigen? 
0x00 wirst du als char nicht sehen.

Edit: 8N1 überall eingestellt?

von emperorl0ser (Gast)


Angehängte Dateien:

Lesenswert?

Hier nochmal der Screenshot vom 2. Byte. Habe ein paar Markierungen 
eingefügt

Klar, 0x00 sieht man nicht, jedenfalls nicht als String, deshalb ist 
GtkTerm auf Hex eingestellt, 8N1 ist auch eingestellt.

Der Fehler muss irgendwo Richtung PC liegen:
- Habe einen zweiten AVR genommen, das selbe Programme eingespielt -> 
gleicher Fehler.
- Habe den zweiten AVR mit einem kleinen Programm zum Empfangen 
ausgestattet und dieser zeigt die übertragenen Daten auf einem Display 
an und zwar korrekt.

von Christopher G. (cbg)


Lesenswert?

Mit einem anderen PC testen.
Ich wollte nicht den Oszi Screenshot vom zweiten Byte sondern eines wo 
man den Fehler in den +/- 15 V Signalen sieht. Da die Signale jedoch 
immer korrekt sind muss es am PC liegen.

von emperorl0ser (Gast)


Lesenswert?

Es gibt keine falschen Oszi Bilder, das Oszi zeigt immer 0xAA als 
zweites Byte an. Bestätigt ja auch der zweite AVR + LCD, welchen ich zum 
Empfangen genutzt habe.
Der PC empfängt immer falsch, wenn das erste Byte 0x00 ist. Wie gesagt 
hatte auch schon nen USB-Dongle statt der Onboard RS232-Schnittstelle 
benutzt, werde jetzt aber nochmal nen Laptop samt Windows probieren. 
Muss aber leider den selben USB-Dongle einsetzen, da ich nichts anderes 
zur Verfügung habe

von emperorl0ser (Gast)


Lesenswert?

Punkt 1: Der USB-Dongle funktioniert unter Windows 7 (64Bit) nicht, 
Windows findet online keine Treiber und von Hand vorgesetzte Treiber von 
FTDI akzeptiert Windows nicht... Auf dem Dongle steht natürlich kein 
Hersteller oder sonst irgendwas drauf.

Punkt 2: GtkTerm ist schuld. Das von mir seit langem eingesetzte 
Programm baut Mist. Ich habe eben die serielle Schnittstelle auf dem PC 
richtig eingestellt (BAUD 9600 8N1) und mit "cat /dev/ttyS0 > dump" nen 
paar Daten aufgenommen. Anschließend habe ich die Datei "dump" mit nem 
Hex-Editor geöffnet und siehe da, in der Datei ist alles korrekt... 
Jetzt such nen neues brauchbares Terminal-Programm für Linux. juhu 2 
Tage Arbeit wegen nicht funktionierender Software

von forget (Gast)


Lesenswert?

probier mal putty. Das ist zwar Windows-Software, läuft aber 
normalerweise mit wine (zumindest bei meinem Ubuntu 10.4). Gibt es auch 
als Source für Unix bei 
http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

von Christopher G. (cbg)


Lesenswert?

Es gibt auch eine hterm Version für Linux.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

emperorl0ser schrieb:
> Punkt 1: Der USB-Dongle funktioniert unter Windows 7 (64Bit) nicht,
> Windows findet online keine Treiber und von Hand vorgesetzte Treiber von
> FTDI akzeptiert Windows nicht... Auf dem Dongle steht natürlich kein
> Hersteller oder sonst irgendwas drauf.

Im Gerätemanager die Eigenschaften ansehen, da gibt es dann die 
Möglichkeit Details anzeigen zu lassen, und so VID/PID bestimmen. Wenn 
das Ding nicht von FTDI ist, funktioniert ein FTDI-Treiber natürlich 
nicht.

Mit VID/PID lässt sich über Google der korrekte Hersteller bestimmen und 
natürlich auch ein Devicetreiber lokalisieren.

von emperorl0ser (Gast)


Lesenswert?

N'abend nochmal,
verwende jetzt Cutecom.

@forget
Kann putty Daten in Hex ausgeben und ermöglicht auch eine Hex-Eingabe? 
Wundert mich etwas, das Ziel von Putty liegt doch definitiv woanders.

@Christopher G.
Das würde ich mit glatt nochmal ansehen. HTerm finde ich nicht schlecht.

@Rufus Τ. Firefly
Joa, ein Vorgehen in der Art hatte ich mir gedacht, hatte aber gerade 
nicht so viel Lust mich damit rum zu schlagen. Dachte immer man muss 
sich nur unter Linux mit solchen Problemen prügeln. Werde ich mir aber 
merken, sofern es nochmal nötig sein sollte. Aber jetzt wie gesagt nicht 
nötig, das Problem hat sich zum Glück endlich erledigt.

Grüße emperor

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.