Forum: Mikrocontroller und Digitale Elektronik MAX232 Problem


von Christine Kunius (Gast)


Lesenswert?

Zur Zeit arbeite ich gerade an einer seriellen Datenkomunikation
zwischen MC80C535 und dem PC. Dabei tritt folgendes Problem auf.
Der MC kann Daten an den PC senden (HyperTerminal) aber nicht richtig
empfangen. Was das seltsame ist, dass das hoechste Bit beim Wiederholen
eines Zeichen jeweils invertiert wird, der Rest wird richtig an den MC
uebertragen und verarbeitet. Das Problem muesste am MAX232 liegen, da
ich mit einem Counter die Flankenanzahl am Ausgang R1OUT gemessen habe
und diese immer um 1 Flanke unterschiedlich war.
Mein bisheriges Vorgehen:
- Austausch der Elko's; von 2,2µF auf 1µF, danach auf 10µF. Dabei trat
immer das gleiche Problem auf.
- Untersuchung auf kalte Loetstellen
- Leiterbahnenueberpruefung
- MAX232 ausgetauscht
Koennte es daran liegen, dass ich anstatt den Elkos, Tantalkondens.
benutzten sollte?
Hat irgendjemand eine Erklaerung fuer dieses Phaenomaen.
Fuer jegliche Hilfe waere ich dankbar:-)
Chris

von Stefan May (Gast)


Lesenswert?

Falsches Forum?

Tantal-Elkos kannst Du nur mit einer bestimmten Version des MAX232
nutzen (MAX233?). Teste mal, ob an V+ 10 Volt und an V- -10 Volt
anliegen. Wenn nicht, dann ist die Ladungspumpe des MAX232 defekt.

Dein Problem hört sich nach falscher Baudrate an. Versuche mal die
Baudrate etwas höher oder niedriger zu stellen.

ciao, Stefan.

von Jürgen Schuhmacher (Gast)


Lesenswert?

Lassen sich denn wenigesten einige Zeichen dekodieren?

von crazy horse (Gast)


Lesenswert?

dürfte eher ein Problem von Baudratentoleranzen sein. Passenden Quarz
(11.0592 statt 12MHz) nehmen, Baudrate korrekt einstellen, fertig. Am
MAX232 wird es eher nicht liegen, einfach mal mit einem Zweistrahl-Oszi
Ein- und Ausgang darstellen (einen Kanal invertieren). 99:1, dass es
daran nicht liegt. Wer setzt 1 Euro?

von Stefan May (Gast)


Lesenswert?

Ich :-)

von Christine Kunius (Gast)


Lesenswert?

Danke fuer die schnellen Antworten:-)

Die Ladungspumpen sind OK. Es liegen jeweils +10V und -10V an. Beide PC
und MC arbeiten mit 9600 Baud.
Bei einem Test ohne MC mit 2400 Baud und Endwiderstaenden, habe ich die
gleiche fehlerhafte Flankenzahl gehabt.

Leider habe ich den Vorschlag von Crazy horse nicht ganz verstanden.
Der Quarz hat doch nichts mit dem MAX232 zu tun, der bereits schon am
Ausgang (R1OUT) fehlerhafte Flankenzahlen angibt (gemessen mit Counter
und Oszilloskop).

Ich benuetze einen MAX232N von Reichelt.

von Christine Kunius (Gast)


Lesenswert?

Komisch ist allerdings auch, dass die Eingangssignale am R1IN deutlich
mehr Flanken aufweisen als am R1OUT.
Ich habe am Nullmodemkabel einmal ohne MAX gemessen. (TxD und RxD
verbunden und Pin5 auf GND gelegt). Dabei kamen die richtige Anzahl von
Flanken.

von Stefan May (Gast)


Lesenswert?

Also jetzt mal ganz von Grundauf. Zunächst solltest Du Deine Schaltung
mal posten. Wo sind da Widerstände drin? Wozu? Sind doch gar nicht
notwendig.

Weiterhin: Der MAX232 ist ein Pegelwandler, der nix mit Baudrate und
sowas zu tun hat. Das einzige was der macht ist TTL-Pegel in
RS232-Pegel umzuwandeln und umgekehrt.

Der Quarz, den Crazy Horse meint, ist der Quarz am 80C535. Den kannst
Du mit einem 11,09irgendwas MHZ-Quarz ersetzen, dann bekommst Du die
Baudrate mit 0% Fehler raus. Benutzt Du den 12 MHz Quarz, dann hast Du
eine Fehlerhafte Baudrate. Mein Vorschlag zum testen war, die Baudrate
ein wenig zu verstellen, indem das Register im 80C535 richtig gesetzt
wird.

Und wie mißt Du eigentlich Flanken? Mit dem Oszi?

von crazy horse (Gast)


Lesenswert?

das ist einfach zu verstehen:
gewisse Abweichungen von der der Baudrate sind zulässig, aber die
dürfen nicht zu gross werden.
Synchronisiert wird das ganze mit dem Startbit, üblicherweise erkennt
die UART den Beginn des Startbits, tastet nach der halben Bitzeit
wieder ab und startet dann das Einlesen des Bytes mit der eigenen
Zeitbasis. Sagen wir mal 9600Baud, das bedeutet ~104µs pro Bit, also
alle 104µs nach Mitte Startbit wird ein Datenbit eingelesen.
Das höchstwertige Bit wird als letztes gesendet, der evtl. vorhandene
Zeitfehler hat sich bis dahin verachtfacht und kann je nach Abweichung
ausserhalb des Abtastzeitpunktes liegen.
Mit "geraden" Quarzfrequenzen kann man aber keine exakten Baudraten
programmieren.
Weitere mögliche Fehlerquellen:
Einstellungen am Terminalprogramm, neben Baudrate sollte auch Anzahl
der Datenbits und Stopbits gleich sein.

Falls der MAX232 in Wirklichkeit ein HIN232 sein sollte - damit habe
ich auch schon allerhand komische Sachen erlebt, die sind alle im Müll
gelandet.
Gute Erfahrungen hingegen habe ich mit Teilen von TI und ST gemacht.
Der MAX202 von ST ist mein Standardbaustein für RS232.

von crazy horse (Gast)


Lesenswert?

Noch was: Testen kannst du den Treiber recht einfach:
vom PC aus: TTL-Seite von Sender und Empfänger zusammenschliessen (ohne
MC), vom Terminal gesendete Zeichen kommen auch wieder zurück.
Von MC-Seite aus geht das auch, RS232 Rx und Tx brücken. Schleife
programmieren, die verschiedene Zeichen ausgibt, gesendetes und
empfangenes Zeichen vergleich.
So kannst du Baudratenprobleme ausschliessen.

von Christine Kunius (Gast)


Lesenswert?

Ich habe jetzt den Treibertest so wie oben beschrieben, d.h. Pin11 und
Pin12 des MAX verbunden. Dies hat zu folgendem Ergebnis gefuehrt:
Das Zeichen wurde an den PC zurueckgesendet und korrekt ausgegeben.

Ich messe nicht mit dem Oszi sondern mit einem extra Counter, der auf
fallende Flanken reagiert.

Allerdings als ich den Counter zum Messen genommen habe, habe ich
folgendes festgestellt:
Das es wieder zu diesen Flankenanzahlunregelmaessigkeiten kommt. Einmal
eine Flanke mehr und beim naechsten mal wieder eine weniger.
Als ich an der Verbindung zwischen Pin11 und Pin12 eine Leitung, die
aus einem Widerstand und abschliessendem GND besteht, gehaengt habe,
habe ich immer die "richtige" Flankenanzahl erhalten.

Meine Fragen:
Wieso erkennt der PC, trotz verfaelschter Flankenanzahl das richtige
Zeichen?
Wieso funktioniert es mit dem Widerstand?

Der Sache mit der Oszillatorfrequenz gehe ich auch nochmal nach. Mir
fehlt noch der passende Oszi;-(

von Rufus T. Firefly (Gast)


Lesenswert?

Ein ausreichend schneller Störimpuls wird vom Zähler erfasst, stört aber
die serielle Übertragung nicht, wenn er ausreichend viel kürzer als eine
Bitzeit ist.
Ein Zähler ist daher an dieser Stelle nicht das geeignete
Messinstrument.

von crazy horse (Gast)


Lesenswert?

du sprichst mir aus dem Herzen :-)
Mit dem loop-Test dürfte das Problem eines fehlerhaften Treibers ja
eigentlich erledigt sein.
Den Euro bitte überweisen:-)

von Stefan May (Gast)


Lesenswert?

Hey, ich krieg auch noch einen.... :-D

ciao, Stefan.

von crazy horse (Gast)


Lesenswert?

Wieso du? Ich krieg einen von dir!

von Stefan May (Gast)


Lesenswert?

Ok, ich hätte mal schreiben sollen worauf ich setze. Ich habe ja oben
geschrieben, daß ich ein Baudratenproblem vermute. Also krieg ich jetzt
auch einen Euro. Fragt sich nur von wem. ;-)

ciao, Stefan.

von Stefan Kleinwort (Gast)


Lesenswert?

Kontrolliere mal die Baudraten-Einstelungen auf beiden Seiten. Hat der
PC ev. nur 7 Bit plus Parity eingestellt? Welchen Quarz verwendest Du?
Wie crazy horse schon sagte: kleine Timing-Fehler addieren sich. Dafür
spricht auch, dass die Übertragung nur in einer Richtung Fehler
aufweist. Einen elektrischen Fehler alte ich bei dem Fehlerbld für sehr
unwahrscheinlch.

Stefan

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.