www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik RS232 an UART


Autor: Marc (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Chriss (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Marc (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es reucht, wenn ich daten vom PC zum Controller laden kann.

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thorsten (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Marc (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also müsste es mit einem inverter und einem Widerstand funktionieren.

Autor: Marc (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für den Schalplan.

marc

Autor: Tobi (Gast)
Datum:

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

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: mthomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Marc (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sind alle Parameter korrekt eingestellt (auf beiden Seiten) ?

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

Autor: Marc (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, alle Parameter auf beiden Seiten stimmen.

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Thorsten (Gast)
Datum:

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

Autor: Marc (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Marc (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Marc (Gast)
Datum:

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

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So würde ich das sehen, ja !

Autor: Marc (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OH, stehe heute völlig auf der Leitung.
Ich versuche es mal.

Autor: Marc (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Marc (Gast)
Datum:

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

Autor: Marc (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Marc (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 !

Autor: Marc (Gast)
Datum:

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.