Forum: Mikrocontroller und Digitale Elektronik RS232 an UART


von Marc (Gast)


Lesenswert?

Hallo leut.
Ich würde gerne meine RS232 schnittstelle mit meinem AVR UART-Anschluss
verbinden. Aber leider habe ich keinen MAX232 zu Hand.
Kann ich jetzt einfach Rx und Tx über Widerstände an den UART
anschließen?

Marc

von Chriss (Gast)


Lesenswert?

Ich denke nicht das das fuktioniert. Der Max232 ist ein Pegelwandler und
macht aus 0V und +5 vom Controller -12 und +12 für die serielle RS232
Schnittstelle am PC.

Wie soll er den aus +5V mit nem Widerstand +12 machen.

Controller untereinander kann man direkt verbinden, aber nicht
Controller und PC.

Son MÄXchen kost doch nicht die Welt!

Gruß
Chriss

von Marc (Gast)


Lesenswert?

Es reucht, wenn ich daten vom PC zum Controller laden kann.

von Benedikt (Gast)


Lesenswert?

>Controller untereinander kann man direkt verbinden, aber nicht
Controller und PC.

Doch es geht !
Einfach einen Inverter dazwischen schalten, ist das Kabel kurz und der
PC hält sich an die RS232 Standards, dann geht es.

von Thorsten (Gast)


Angehängte Dateien:

Lesenswert?

Der MAX232 invertiert zusätzlich die Signale, somit funktioniert der
Anschluß über Widerstände nicht. Ist aber kein Problem, du kannst die
Schaltung wie im Anhang benutzen. Interessant ist natürlich nur der
linke Teil :)

Thorsten

von Marc (Gast)


Lesenswert?

Also müsste es mit einem inverter und einem Widerstand funktionieren.

von Marc (Gast)


Lesenswert?

Danke für den Schalplan.

marc

von Tobi (Gast)


Lesenswert?

müsste doch zum nur empfang auch mit widerstand und z-diode gehen wie
bei den einfachen programmern für die serielle schnittstelle

von Benedikt (Gast)


Lesenswert?

Es geht noch einfacher:
4,7k Vorwiderstand, 1k nach Masse und das ganze an einen BC547.
Kollektor an einen Portpin und Pullup aktivieren. Bei 19200Baud hatte
ich noch nie Probleme.

von mthomas (Gast)


Lesenswert?

Bei Nutzung des AVR Hardware-Uart funktioniert der Ansatz nur ueber
Widerstaende nicht. Invertierung "muss" fuer Hardware-UART sein, da
PC und AVR "genau andersrum" eine "1" markieren (negative
Spannungen aussen vor, sind bei "modernen" PCs nicht mehr
erforderlich). Es existieren jedoch Software-UART-Routinen fuer AVR,
die direkt mit "invertierten" Signalen umgehen koennen. Der
Programmieraufwand ist hoeher und das Timing ist kritischer. Aber es
gibt "fertigen" Bibliotheken z.B. die "AVR Component Library"
avrfreaks/Projekt 59(?), die die Umsetzung erleichtern.

von Benedikt (Gast)


Lesenswert?

>negative Spannungen aussen vor, sind bei "modernen" PCs nicht mehr
erforderlich).

Wenn du als alten PC ein 50 Jahre altes Gerät meinst, dann stimme ich
dir zu.
Selbst 20 Jahre alte Geräte funktionieren mit TTL Pegel, da alle
üblichen RS232 Wandler (75189 usw.) eine Schaltschwelle im Bereich 1-2V
haben, wie TTL eben.

von Marc (Gast)


Lesenswert?

Danke für die Info.
Es funktioniert jetzt, aber wenn ich jetzt im Dezimaler schreibweise
vom Controller die zahl 65 an COM1 sende, erscheint in dem
HyperTerminal Programm ein völlig anderes zeichen als der Buchstabe A.
65 steht doch für A!
Warum wird ein völlig anderes Zeichen ausgegeben?

Marc

von Thorsten (Gast)


Lesenswert?

Sind alle Parameter korrekt eingestellt (auf beiden Seiten) ?

- Buadrate
- Anzahl Startbit
- Anzahl Stopbit
- Parität

von Marc (Gast)


Lesenswert?

Ja, alle Parameter auf beiden Seiten stimmen.

von Thorsten (Gast)


Lesenswert?

Ist jetzt vielleicht albern von mir, aber du sendest auch wirklich 65
dezimal ? Welches zeichen erscheint denn ? Probiers auch mal mit nem
anderen Terminalprgogramm, z. B. dem von Bray.

http://bray.velenje.cx/avr/terminal

von Thorsten (Gast)


Lesenswert?

Läuft dein AVR mit internem Oszillator ? Evtl. ist dann der Fehler zu
groß.

von Marc (Gast)


Lesenswert?

Das Programm ist echt gut!
Und ich kriege vom Programm den Wert 159, aber der Controller sendet
den Wert 65.
Ich habe den TXD pin direkt mit RXD der Seriellen-Schnittstelle
verbunden, kann es daran liegen?

von Marc (Gast)


Lesenswert?

Ja, der läuft mit internem 1MHz.
Aber daran liegt es wohl nicht, der Terminal empfängt daten. Aber
nicht, was ich will. Und ich habe eine Schleife eingebaut, dass dafür
sogt, dass der Wert 65 ständig gesendet wird. Da kommt dann auch immer
159 am Terminal an

von Thorsten (Gast)


Lesenswert?

> Ich habe den TXD pin direkt mit RXD der Seriellen-Schnittstelle
> verbunden, kann es daran liegen?

Schreibs doch gleich :) Das kann nicht funktionieren, da fehlt die
notwendige Invertierung. Siehe den von mir geposteten Schaltplan (der
Schaltplan selbst ist NICHT von mir).

Thorsten

von Marc (Gast)


Lesenswert?

Also,
dass UART sendet HIGH und es muss dann an der Seriellen-Schnittstelle
als LOW ankommen und anders rum.

von Thorsten (Gast)


Lesenswert?

So würde ich das sehen, ja !

von Marc (Gast)


Lesenswert?

OH, stehe heute völlig auf der Leitung.
Ich versuche es mal.

von Marc (Gast)


Lesenswert?

Funktioniert jetzt besser, aber da wird trotzdem immer noch ein völlig
anderes Zeichen als das was ich haben will Ausgegeben. Oder ist nur die
ASCII-tabele auf http://www.asciitable.com/ falsch?

von Marc (Gast)


Lesenswert?

Nein, ist nicht falsch. In dem Terminal Programm ist auch eine Tabelle.
65 steht für A. Was mache ich falsch?

von Marc (Gast)


Lesenswert?

Mir ist aufgefallen, dass bei der übertragung vom Controller die Werte
0, 1, 6, 255 auch so vom Terminal verstanden wurden. Aber ausgerechnet
der Wert 65(A) wird als ein anderes Zeichen ausgegeben.
Warum?

von Marc (Gast)


Lesenswert?

Es funktioniert jetzt sehr gut, ohne Fehler.
Alerdings musste ich die Baudrate auf 2400 verringern. Hauptsache, es
funktioniert.
Danke für die hilfe.

Marc

von Thorsten (Gast)


Lesenswert?

Hmm, hast du mal ins Datenblatt geschaut ? Z. B. beim ATmega16 Seite
162, Tabelle 68 ? Alles größer 4800 Baud @ 1MHz produziert Fehler > +-
7%. Das kann nicht funktionieren !! Für eine fehlerfreie
RS232-Übertragung muß der Fehler deutlich unter 1% liegen. Wenn du
allerdings den Oszillator auf 8MHz stellst, sind 38k4 Baud problemlos
möglich, hab ich hier auch laufen.

Gruß
Thorsten

von Benedikt (Gast)


Lesenswert?

>Für eine fehlerfreie RS232-Übertragung muß der Fehler deutlich unter 1%
liegen.

Es reichen 5%, wenns nicht anderst geht. Für eine  eine gute Schaltung
sollte der Wert unter 2-3% liegen, dann treten eigentlich nei
Übertragungsfehler auf.

von Thorsten (Gast)


Lesenswert?

Naja, man sollte sich aber nicht darauf verlassen. Für einzelne Zeichen
mögen die 5% vielleicht noch tolerabel sein. Wenn aber mehr Daten am
Stück bei hohen Baudraten übertragen werden sollen, kommst du nicht
weit. Weißt du zufällig, was dazu in der RS232-Spezifikation steht ?
Ich hatte da schonmal gesucht, aber nichts gefunden. Gibts die Spec
irgendwo zum download ?

Thorsten

von Benedikt (Gast)


Lesenswert?

Ich bin mir nicht sicher, ob es wirklich aktuelle RS232 Spezifikationen
gibt, denn der RS232 Standart ist uralt und geht nur bis 9600 Baud....

Die einzigen Probleme die ich bisher hatte, lagen alle an der
Kabelverbindung. Ganz gut sind Stereo Audiokabel mit getrennt
geschirmten Leitungen. Liegen RX und TX nebeneinander konnte ich mein
gesendetes Zeichen durch kapazitive Kopplung zwischen den Leitungen
wieder empfangen !

von Marc (Gast)


Lesenswert?

Ja, stimmt.
Im Datneblatt steht bei 9600Baud eine höhere Fehlerkuote als bei
2400Baud.

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.