erstellt17.11.2012
RS232 Schnittstelle
Es gibt Serielle RS232 Kabel und sogenannte Nullmodem Kabel.
Um von einem PC aus mit einen Mikrocontroller zu kommunizieren benötigen wir ein Nullmodem Kabel.
Bei einen Nullmodem Kabel sind die Datenleitungen nicht eins zu eins angeschlossen wie beim RS232 Kabel,
sondern gekreuzt.



RS232-Nullmodem Kabel
Warum sind die Adern gekreuzt ?
Man stelle sich eine Telefonverbindung vor.
Wenn an einen Apparat in die Sprechmuschel gesprochen wird kommt es ja am anderen Apparat aus der Hörmuschel wieder raus.
Umgekehrt ist es dann genauso.
Also muss eine Verbindung statt finden zwischen Sprechkapsel und Hörmuschel und umgekehrt zwischen Hörmuschel und Sprechkapsel
was voraussetzt das die Verbindungen gekreuzt sind.
Und genau das entspricht den gekreuzten Datenleitungen.
Also was der PC sendet soll am Mikrocontroller ja nicht an der Senderseite sondern an der Empfängerseite ankommen,
und umgekehrt.
Man kann bei Mikrocontroller die keine  UART Schnittstelle besitzen , diese auch Softwaremäßig nachbilden ,
das benötigt aber sehr viel Ressourcen und ist auch langsamer.
Wenn in der Programmierung des Atmega's  nichts anderes angegeben wurde benutzt der Atmega standardmäßig den Hardware UART
sofern die Bascom Direktive " Baud " im Programmkopf angegeben wurde.
Fehlt diese Direktive werden die mit RXD und TXD benannten Anschlüsse am Atmega  wie ganz normale I/O Pins behandelt.
Datengeschwindigkeit
Um die Daten vom PC zum Mikrocontroller zu übertragen benötigt man ein sogenanntes Protokoll ,
das ist praktisch eine Leitlinie darüber wie die Daten übertragen werden , ob die Datenübertragung verifiziert
wird oder wie die Daten Codiert oder Verschlüsselt werden usw.
Da die Datenübertragung hier nur über drei Leitungen statt findet , also eine Leitung von PC zum Mikrocontroller , eine vom Mikrocontroller zum PC und eine Masse Leitung,
und es keine zusätzlichen Leitungen für die Synchronisation gibt müssen die Daten mit der gleichen Geschwindigkeit Empfangen werden , in der sie auch Gesendet wurden.
Weichen die Geschwindigkeiten mehr als 2% voneinander ab muss man mit Datenverlust rechnen.
Diese Geschwindigkeit wird in Baud pro Sekunde angegeben.
Um die Daten fehlerfrei zu übertragen muss die "Baud" Angabe innerhalb der Programmierung angegeben werden.
Die Taktfrequenz des Mikrokontrollers ist immer ein vielfaches des Baud Wertes oder besser gesagt die Baudgeschwindigkeit ist immer ein Bruchteil des Prozessor Taktes.
Das ist auch der Grund warum so oft Quarze Verwendung finden die völlig krumme Werte haben z.B 3,686400 MHz oder 1,843200 MHz

Bei einem Quarz mit 1Mhz würden folgende Baudraten fehlerfrei funktionieren: 2400 oder 4800
Und bei einem Quarz mit 3,6864 Mhz, funktionieren 2400-4800-9600-14400-1920-28800-38400 Baud ,
wir erkennen also das eine krummer Quarz mehr Einstellmöglichkeiten für die Baudrate bietet.

Baud sagt uns nun wie viele ASKII Zeichen innerhalb einer Sekunde übertragen werden , so sagt uns der Baudwert von 2400 das innerhalb einer Sekunde
2400 ASKII Zeichen übertragen werden können.
Bei einen Protokoll von 8N1 , was soviel heißt wie 8Bit für ein ASKII Zeichen plus 1 Stop Bit werden also pro ASKII Zeichen 9 Bit übertragen.
Bei einer Baudrate von 2400 werden also pro Sekunde 9 mal 2400 Bit übertragen, also 21600 Bit / Sekunde.
Spannungsanpassung
Die meisten Atmega Mikrocontroller arbeiten mit einer Spannung von 5 Volt es gibt auch einige die mit ca 3,8 Volt, arbeiten z.B. der Atmega8 L (L für Low) .
Beim Mikrocontroller entspricht die Spannung nahe Masse eine Logische Null und die Spannung nahe der Positiven Betriebsspannung eine Logische Eins.
Die Schnittstelle im PC , also die COM Schnittstelle arbeitet mit ganz anderen Spannungspegel, nämlich mit Spannungen von ca 12 Volt Minus bis 12Volt Plus.
Dabei stellt die Spannung unter Minus 3 Volt eine Logische 1 dar und über 3 Volt Plus eine Logische 0 dar.
Also es sind nicht nur die Spannungen Unterschiedlich sonder es sind auch noch invertierte Signale.
Um diese Differenzen zwischen Mikrocontroller und PC anzupassen setzt man einen sogenannten Pegelwandler ein. quasi ein Dolmetscher der zwischen beiden
Parteien fremder Sprachen vermittelt.
Der bekannteste Pegelwandler dieser Art ist wohl der Max232 . Den kann man mit der gleichen 5 Volt betreiben mit der auch der Mikrocontroller betrieben wird,
intern wird durch einen Spannungsvervielfacher die Spannungen unter Zuhilfenahme externer Kondensatoren auf den erforderlichen Wert angehoben und invertiert.
Anders sieht es aus ,wenn der Controller nicht mit dem PC sondern mit einem anderen Mikrocontroller verbunden werden soll, dann können beide Controller
direkt kommunizieren und es ist kein Pegelwandler erforderlich.
Wegen der Unterschiedlichen Spannungspegel bezeichnet man den Anschluß am Controller auch nicht "RS232" oder "COM" sondern
"UART"
( Universal Asynchronous Receiver Transmitter)
Der Pegelumsetzer MAX232

Der MAX232 ist einer der Bekanntesten Pegelkonverter für die RS232 (serielle Schnittstelle des PCs) und verfügt über 2 integrierte DC-DC-Wandler, einer zur Spannungsverdopplung (+10V) und einen als Spannungsinverter (-10V). Für diese Wandler werden 4 Kondensatoren benötigt. Um eine korrekte Wandlung eines TTL Signals auf ein RS232 Signal zu ermöglichen muss eine Pegelumsetzung auf die höheren Pegel erfolgen und zusätzlich muss das Signal invertiert werden.
Da eine logische 1 bei TTL 5V und bei RS232 -12V entspricht.Um eine genaue Pegelumwandlung zu ermöglichen , benötigt der Max 232 externe Kondensatoren, die abhängig sind vom Typ des Pegelwandlers, dazu sollte man sich das nötige Datenblatt des Herstellers ansehen. Im Falle des Types Max 232A sind die externen Kondensatoren 100 nf .Es gibt aber auch Typen die beispielsweise 1 uF benötigen.

 

Max232 Übersicht
Max 232 Datenblatt
Plan vergrößern
PC - Mikrocontroller / Stecker oder Kupplung ?

Auf der Seite des PC's wird am Datenkabel eine Kupplung benötigt der PC selber hat den dazugehörigen Einbaustecker , auf der Mikrokontrollerseite hab ich es so eingerichtet , das ich an dieser Seite des Datenkabel einen Stecker benötige , falls man kein Nullmodem Kabel zur Verfügung hat, kann man sich Alternativ ein sogenannten "Gender Changer " besorgen,das ist ein Adapter in dem die Datenleitungen gekreuzt sind , so kann man ein Normales Serielles Kabel benutzen und steckt einfach den Adapter drauf,somit hat man sich ein Null-Modem geschaffen.

Adapter mit gekreuzten Datenleitungen------------------>

gender

Sub D Stecker am PCDie RS232 Schnittstelle am PC verfügt über einen 9 poligen SUB-D Steckeranschluss.

Pin
Anschluss
Funktion
1
   
2
Rxd Empfangsleitung
3
Txd Sendeleitung
4
   
5
Masse  
6

 
7
CTS Wird hier nicht verwendet
8
RTS Wird hier nicht verwendet
9
   
Datenaustausch PC <-> Mikrocontroller

Daten auszutauschen ist mit Bascom nicht schwierig. Zunächst gibt man dem AVR im Header eine Baudrate an und schon kann man mit einem einfachen "Print X" den Wert
einer Variablen an den Rechner senden.
Natürlich können über so eine Datenleitung nur Binärzahlen (Bytes) gesendet werden.
Jeder Zahl ist deshalb ein Buchstabe/Sonderzeichen (Ascii-Tabelle) zugeordnet, den PC-Programme anzeigen, wenn der entsprechende Zahlenwert empfangen wird.
Bascom kümmert sich von selbst um die Umwandlung des Zahlenwertes in ASCII-Zeichen und sorgt auch dafür, dass nach der Zahl in die nächste Zeile gesprungen wird,
indem es das Sonderzeichen mit der Ascii-Nummer 13 (CR) als Zeilenumbruch anhängt.
Man kann aber natürlich auch direkt Binärwerte oder Buchstaben/Texte senden:

$baud = 9600 'aktiviert die Schnittstelle und setzt die Baudrate auf 9600

Achtung!
Schreibt man das Baud-Statement in den Header wird nicht nur die UART initialisiert, sondern es werden außerdem gleich die entsprechenden RXD / TXD-Pins konfiguriert!
das heißt praktisch:
Beim Atmega 8 wird Pin 2 als Eingang und Pin 3 als Ausgang gesetzt und die Digital-IOs "PD0" und "PD1" sind damit nicht mehr verfügbar!
Wenn man die serielle Schnittstelle nicht benutzt sollte also auch auf das "$Baud"-Statement im Header verzichtet werden.

Ein Beispiel für die Ausgabe von Werten über die serielle Schnittstelle:

x = 107
y = 110

Bascom-Befehl gesendete Werte Bildschirmanzeige
Print "x"
Print "y"
sendet binär die Werte 120 und 121 für die Buchstaben x und y
und anschließend den Wert 13 für Zeilenwechsel
x
y
Print x
Print y
zerlegt die Zahl 107 in 3 Ascii-Zeichen und sendet
diese nacheinander + Zeilenwechsel
107
110
Print x ;
Print y ;
das Semikolon verhindert den Zeilenwechsel 107110
Printbin x
Printbin y
sendet direkt die Variablenwerte ohne Umwandlung
(das Empfangsprogramm wandelt nach Ascii um)
k
n
Print "x = ";
Print x
Print
Print "y "
Printbin 61;
Print y
Beispiel für Kombinationen
(Ascii Code 61 entspricht Gleichheitszeichen;
Semikolon nach "y" wurde vergessen, Print ohne
weitere Angabe sendet nur einen Zeilenumbruch)
x = 107

y
=110

Will man zwischen anderen ASCII-Zeichen ein Sonderzeichen versenden dass BASCOM nicht kennt, dann kann man den ASCII-Code des Sonderzeichens einfach
in geschweiften Klammern in den String hineinschreiben, den man senden will.
Beispiel:
Print "Hallo Welt!" sendet genau das selbe wie Print "Hallo{032}Welt{033}" weil die {032} dem Ascii-Code des Leerzeichens und {033} dem Ausrufungszeichen entspricht.
Wichtig: der Ascii-Code in den geschweiften Klammern muss immer dreistellig als Dezimalwert angegeben werden.
Wenn man Daten empfangen will ist das Ganze etwas aufwendiger.
Trifft ein Byte beim AVR ein muss dieses möglichst schnell ausgelesen werden, weil erst dann der Speicher (Udr) frei ist um den nächsten Wert zu empfangen.
Weil so etwas zeitkritisch ist ,ist im AVR wieder ein Interrupt vorgesehen (Urxc), mit dem automatisch beim Eintreffen eines Bytes ein Unterprogramm anspringen kann, um das Auslesen sofort zu erledigen.

Den RS232-Empfang im Header vorbereiten:

On Urxc Datenempfang ' Unterprogramm für RS232 Empfang angeben
Enable Urxc ' Interrupt aktivieren
   
Dim x As Byte 'beliebige Variable zum Auslesen des Wertes

und dann später im Programm:

Datenempfang: ' Label für Unterprogramm
x = Udr ' empfangenen Wert (Udr) in die Variable x auslesen
  ' weitere Befehle
Return ' Rückkehr zum Ursprungsprogramm
Ascii-Zeichen: A (Buchstabe, Ziffer, Sonderzeichen)
Ascii-Wert: 65 (Dezimalzahl)
Für den Empfang bzw. zum Senden von Daten im Ascii-Format genügt auf dem PC grundsätzlich jedes Terminalprogramm.
Der AVR generiert seine Baudrate indem er den Quarztakt teilt.
Wie bei allen binären Teilen kann es da zu Rundungsfehlern kommen, die zumindest bei höheren Baudraten, also schnellem Datentransfer,
zu Übertragungsfehlern führen können.
Deshalb ist es sinnvoll hierbei keine "glatten" Taktfrequenzen zu verwenden, sondern "krumme" Quarze mit Frequenzen wie 3,6864 7,3728 oder 9,216 MHz.

Wenn kein Null-Modem Kabel zur Hand sein sollte und auch keinen Adapter zur Verfügung hat, kann man die Anschlüsse PIN 2 und Pin 3 untereinander vertauschen und somit ein Normales Serielles Kabel benutzen.
Sollte also Hardwaremäßig alles korrekt sein, versuchen wir einen ersten Test mit dieser Schnittstelle, dazu schließen wir die beiden PIN's 11 und 12 am Max232 kurz, also stellen eine Brücke her, vorher müssen wir die beiden Pins die ja eine Verbindung zum Atmega haben, am Atmega unterbrechen, oder wir nehmen den Atmega für diesen Test aus seiner Fassung heraus.
Wenn wir dann ein Terminal Programm starten einfacher weise das im Bascom enthaltene Zusatz -Tool ,,im Menüpunkt unter Tools/Terminal Emulator. Oder auch jedes andere z, B das im Windows
enthaltene

Hyperterminal müssen wir die auf der PC Tastatur eingegeben Zeichen auf dem Bildschirm sehen können , weil dieser Tastaturcode über die RS232 Schnittstelle zum Max232 gesendet wird, und von da an , ( durch die Brücke) wieder zurück zum PC.
Somit ist dann sichergestellt, das der Max232 und die Verbindung zum PC korrekt verdrahtet ist.
Zuvor müssen wir im Terminal Programm noch die benötigte Adresse für den Com Port eingeben , wenn wir die nicht auf Anhieb wissen testen wir einfach halber durch angefangen von Com Port 1 bis ...... , anschließend müssen wir die benötigte Datenübertragungsrate in Baud eingeben, die ist hauptsächlich von der verwendeten Taktfrequenz abhängig und kann auch wenn man sich die Berechnungen ersparen möchte einfach durchgetestet werden , man fängt beispielsweise bei der kleinsten also 1200 an und arbeitet sich langsam hoch 2400 usw....
Sollte nur Hieroglyphen auf dem Bildschirm erscheinen , haben wir möglicherweise die falsche Datenübertragungsrate eingestellt.
Schreibt man das Baud-Statement in den Header wird nicht nur die UART initialisiert, sondern es werden außerdem gleich die entsprechenden RXD / TXD-Pins konfiguriert! D.h. Praktisch beim Atmega 8: Pin 2 wird als Eingang und Pin 3 als Ausgang gesetzt und die Digital-IOs PD0 und PD1 sind damit nicht mehr verfügbar! Wenn man die serielle Schnittstelle nicht benutzt sollte also auch auf das $baud-Statement im Header verzichtet werden.
Testprogramm zum Testen der Rs232 Schnittstelle und der Displayausgabe hier:
Folgende Bascom Befehle beziehen sich auf die UART Schnittstelle :
$Baud
Damit stellt man die gewünschte Übertragungsgeschwindigkeit ein. Diese ist von der Frequenz abhängig, mit der der µC getaktet wird. Diese muss Bascom mit $crystal bekannt gegeben werden. Beispiel:
$baud = 9600 
Print

Dieser Befehl sendet eine Zeichenfolge (einen Text) über die UART.
Mehrere Zeichenfolgen können mit einem Strichpunkt (;) getrennt werden.
An diese Zeichenfolge werden automatisch die unsichtbaren Zeichen CARRIAGE RETURN (CR) und LINEFEED (LF) angehängt.
Diese unsichtbaren Zeichen kennzeichnen einen Zeilenumbruch.
Möchte man nicht, dass diese unsichtbaren Zeichen angehängt werden, dann muss der PRINT-Befehl mit einem Strichpunkt (;) abgeschlossen werden.
Wird an PRINT eine Zahl übergeben, dann wird diese in einen Text umgewandelt. Es wird also nicht die Zahl übermittelt, sondern der ASCII-Code dafür. Die Zahl 123 besteht aus den drei Zeichen "1", "2" und "3". Es werden die drei ASCII-Codes für die Zeichen "1", "2" und "3" und die ASCII-Codes der beiden unsichtbaren Zeichen CR und LF übertragen.
Dieser Code :
PRINT "Hallo Welt!"

übermittelt die Zeichenfolge "Hallo Welt!" und fügt die unsichtbaren Zeichen CR und LF an. Das sieht in einem normalen Terminalprogramm so aus:
Hallo Welt!

Analysiert man aber die übermittelten Daten, dann sieht man, dass für jedes Zeichen der ASCII-Code übermittelt wurde. Hier der Dezimal- und Hex-Code der übermittelten Zeichen:
Dezimal: 72 97 108 108 111 32 87 101 108 116 33 13 10
Hex:........ 48 61 6C 6C 6F 20 57 65 6C 74 21 0D 0A
Text:....... H a l l o W e l t ! CR LF

Wenn man diese Codes mit einer Askiitabelle vergleicht, dann erkennt man die Zusammenhänge.
Dieser Code:

PRINT 1 
übermittelt das Zeichen "1" und nicht die Zahl 1. In einem normalen Terminalprogramm wird also das Zeichen "1" angezeigt. Analysiert man was wirklich übermittelt wird, dann sieht das so aus:
Dezimal: 49 13 10 
Hex: 31 0D 0A
Text: 1 CR LF
Will man die Zahl 1 ohne Umwandlung in ein Zeichen übermitteln, dann nimmt man dafür den Befehl PRINTBIN.
Printbin
Mit PRINTBIN werden die Daten, ohne Umwandlung in einen Text, übermittelt. Folgender Befehl übermittelt wirklich die Zahl 1:
PRINTBIN 1 
Analysiert man das was an den Computer gesendet wurde, dann sieht das so aus:
Dezimal: 1 
Hex: 01
Text: <unsichtbar>
So können reine Daten, ohne umwandeln, übermittelt werden. Diese lassen sich aber dafür nicht mehr in einem normalen Terminalprogramm anzeigen. Dafür bräuchte man einen Anzeigemodus der die empfangenen Daten in Hex oder Dezimal anzeigt.
Input

Der Befehl INPUT erwartet eine Zeichenfolge von der UART und schreibt diese in eine Variable. INPUT wartet so lange auf die Zeichenfolge bis CARRIAGE RETURN (CR) übermittelt wurde. Das Programm bleibt also stehen, bis CR über die UART rein kommt. Das ist ideal, wenn das Programm in der MainLoop nur kommuniziert. Es ist nicht ideal, wenn in der MainLoop auch noch andere Dinge erledigt werden sollten. Dafür gibt es andere Befehle wie INKEY oder ISCHARWAITING. Außerdem gibt es sogar die Möglichkeit, einen Interrupt auslösen zu lassen, wenn eine Zeichenfolge angekommen ist.

Dieses Beispiel wartet bis eine mit CR abgeschlossene Zeichenfolge übermittelt wurde und schickt diese über die UART zurück:

Dim Empfangen As String * 20 
Do
Input Empfangen
Print "Empfangen: " ; Empfangen
Loop
End
Mit CONFIG INPUT kann man einstellen, welches unsichtbare Zeichen oder welche unsichtbare Zeichenfolge einen Empfang abschließt. Und mit ECHO OFF kann man einstellen, dass in ein Terminal eingegebene Zeichen nicht sofort wieder zurück geschickt werden.
Inputbin
Bei diesem Befehl wartet Bascom auf Binärdaten. Es wartet also nicht auf Text, wie es INPUT macht, sondern auf reine Daten. An diesen Befehl wird als Argument eine Variable übergeben. INPUTBIN stoppt das Programm so lange, bis diese Variable befüllt wurde. Wird also eine BYTE-Variable übergeben, dann genügt ein Byte und das Programm läuft weiter. Wird eine WORD-Variable übergeben, dann wartet INPUTBIN bis zwei Byte (=WORD) übergeben wurden. Beispiel:
Dim My_word_var As Word 
Do
Inputbin My_word_var
Printbin My_word_var
Loop
End
Waitkey
Dieser Befehl wartet bis ein Zeichen über die UART zum µC übertragen wurde und gibt dieses zurück. WAITKEY blockiert so lange bis ein Zeichen übermittelt wurde. Wird eine BYTE-Variable damit befüllt, dann steht in der BYTE-Variable der ASCII-Code des übermittelten Zeichens. Wird eine STRING-Variable befüllt, dann weiß Bascom, dass der übermittelte ASCII-CODE ein Textzeichen ist und gibt dieses bei PRINT als solches zurück. Beispiel:
Dim My_byte As Byte 
Dim My_string As String * 1
Do
My_byte = Waitkey()
Print "Empfangen: " ; My_byte 'Gibt den ASCII-Code des Zeichens zurück
My_string = Waitkey()
Print "Empfangen: " ; My_string 'Gibt den Text zurück
Loop
End
Inkey
Wenn ein Zeichen im zwei Byte großen UART-Buffer steht, dann gibt INKEY ein Zeichen zurück. Steht nichts mehr im UART-Buffer, dann gibt INKEY die Zahl 0 zurück. INKEY bleibt also nicht stehen wie es bei WAITKEY der Fall ist. Das ist oft eine feine Sache, aber nicht ideal wenn in den zu übermittelnden Daten auch mal ein Nullbyte vorkommen kann. In so einem Fall sollte man vorher mit ISCHARWAITING prüfen ob etwas im UART-Buffer steht. Beispiel:
Dim My_string As String * 1
Do
My_string = Inkey()
If My_string <> Chr(0) Then
Print "Empfangen: " ; My_string
End If
Loop
ISCHARWAITING
ISCHARWAITING gibt 1 zurück, wenn im UART-Buffer ein Zeichen wartet. ISCHARWAITING gibt 0 zurück, wenn kein Zeichen im UART-Buffer wartet. Beispiel: siehe INKEY
Dim My_string As String * 1 
Do
If Ischarwaiting() = 1 Then
My_string = Inkey()
Print "Empfangen: " ; My_string
End If
Loop
Echo
Die Einstellung ECHO ON gibt an, dass vom Befehl INPUT sofort nach dem Empfang eines Zeichens, dieses Zeichen zurück geschickt werden soll. Das ist die Standardeinstellung! Die Einstellung ECHO OFF gibt an, dass nichts zurück geschickt werden soll.
CONFIG SERIALIN
Stellt die Hardware-UART so ein, dass ein Buffer für den Empfang verwendet wird.
CONFIG SERIALOUT
Damit kann man einen Buffer für den Versand von Daten über die UART einrichten. Wenn man Daten ohne Buffer über die UART schickt, dann bleibt das Programm so lange stehen bis alle Daten verschickt wurden. Im Gegensatz zum µC selber, ist so ein Versand sehr, sehr langsam. Um das Programm schneller fortsetzen zu können, kann man einen Buffer einrichten. Die Daten werden mit PRINT in den Buffer geschrieben. Und falls der Buffer groß genug für die neuen Daten ist, läuft das Programm weiter. Die Daten werden im Hintergrund über die UART verschickt.
CONFIG COM1
Probleme ?

Überprüfe ob das richtige Serielle Kabel benutzt wird , ist es wirklich ein Null-Modem Kabel ?

Oder sind nicht alle Pins innerhalb des Kabels miteinander verbunden. Es gibt spezielle Kabel die man mitunter von anderen Geräten benutzt, die eine andere Pin Belegung aufweisen?

Haben die Kondensatoren die für den Pegelwandler Max 232 Verwendung finden die richtige Kapazität?
Bitte im Hersteller Datenblatt kontrollieren. Achtung es sind nicht für jeden Pegelwandler alle Kapazitäten wie hier angegeben 100 nF. Es gibt auch welchen mit 1 uF

Stimmt die Datenübetragungsrate? bei falsch gewählter Datenübetragunsrate bekommt man gar keine Information im Terminal Programm angezeigt, oder es erscheinen Hieroglyphen auf dem Bildschirm . Die Datenübetragungsrate ist in der Hauptsache von der Prozessor Geschwindigkeit abhängig z.B. bei 1 Mhz ( also Standard beim Atmega 8) sollte es mit einer Datenübetragungsrate von 2400 Baud funktionieren.
Beim Atmega 8 mit externen Quarz von 3,4 Mhz, sollte es auch mit 9600 Baud funktionieren .

Oder der Prozessor fängt an zu Schwingen, und verhindert dadurch eine saubere Datenübertragung was man erfolgreich verhindert indem man möglichst nahe am Anschluss des Prozessors zwischen dem Minus und Plus Anschluss einen 100 nf Kondensator anschließt.

  • Es kommt auch absoluter Blödsinn an, wenn man den MAX232 zwar korrekt mit den Kondensatoren beschaltet, aber die Stromversorgung vergisst Es kommt dann zwar was an, aber das ist mehr oder weniger zufällig.
Aktualisiert 22.06.2022
Copyright 2009 by Ms