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
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
>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.
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
müsste doch zum nur empfang auch mit widerstand und z-diode gehen wie bei den einfachen programmern für die serielle schnittstelle
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.
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.
>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.
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
Sind alle Parameter korrekt eingestellt (auf beiden Seiten) ? - Buadrate - Anzahl Startbit - Anzahl Stopbit - Parität
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
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?
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
> 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
Also, dass UART sendet HIGH und es muss dann an der Seriellen-Schnittstelle als LOW ankommen und anders rum.
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?
Nein, ist nicht falsch. In dem Terminal Programm ist auch eine Tabelle. 65 steht für A. Was mache ich falsch?
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?
Es funktioniert jetzt sehr gut, ohne Fehler. Alerdings musste ich die Baudrate auf 2400 verringern. Hauptsache, es funktioniert. Danke für die hilfe. Marc
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
>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.
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
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 !
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.