Hallo liebe Forengemeinde,
Für ein Projekt arbeite ich mit einem ATMega128 dessen UART ich für eine
RS232 Verbindung zu einem PC benötige. RS232 Verbindungen haben mir
eigentlich noch nie Probleme bereitet. Der ATMega128 will aber nicht so
recht. Erst hab ich nix empfangen und dachte es liege an einer
Fehlverdrahtung vom MAX232. Nach eingehenden Tests kann ich sagen, dass
die Hardwareverkablung richtig ist. Ich bin jetzt so weit, dass der
Controller Zeichen senden kann, diese werden aber nur in 10% der Fäll
richtig übertragen, sprich wenn ich 10-mal das Zeichen a sende ist nur
einmal a im Hyperterminal zu sehen, sonst nur Sonderzeichen. Wenn ich
die Verbindung mit meinem USB-RS232 Adapterkabel aufbaue, funktioniert
alles reibungslos. Ich würde ja davon ausgehen, dass die onboard RS232
Schnittstelle einen Fehler hätte doch sie verhält sich nur mit diesem
Controller so eigenartig. Hat jemand eine Idee woran das liegen könnte.
Wäre echt dankbar. Anbei noch der Source des simplen Testprogramm.
>Wenn ich die Verbindung mit meinem USB-RS232 Adapterkabel aufbaue, >funktioniert
alles reibungslos.
>Das klingt mir sehr nach einem Baudratenproblem
Wohl eher nicht. Das klingt nach einem Schaltungsproblem.
Mal wieder Masse am Sub-D vergessen?
Etros schrieb:> Ich bin jetzt so weit, dass der> Controller Zeichen senden kann, diese werden aber nur in 10% der Fäll> richtig übertragen, sprich wenn ich 10-mal das Zeichen a sende ist nur> einmal a im Hyperterminal zu sehen, sonst nur Sonderzeichen.
Dann nimm dir mal ein vernünftiges Terminalprogramm (z.B. HTerm), guck
dir an, welchen HexCode die Sonderzeichen haben, male dir das serielle
Signal auf und überlege, ob das wohl an falschem Timing liegen kann.
Oder nimm ein Oszilloskop ;-)
Also ich hab mir die einkommenden Zeichen mal mit HTerm angeschaut und
mir ist aufgefallen das manchmal das 8 Datenbit auch auf 1 ist obwohl es
0 sein sollte. Schicke ich z.B. 'A' kommt manchmal richtig 0x41 an und
manchmal 0xC1. Bei anderen Zeichen verhaelt es sich gleich. Manchmal wir
das 8 Bit einfach High. Am Oszi hab ich mir mal das Signal angeschaut.
Ich habe testweise ein 'A' alle 8 ms senden lassen. Bei einer Baudrate
von 9600 muesste jedes Zeichen ungefaehr 0,1 ms anliegen was auch der
Fall ist. Nur beidem 8 Datenbit und dem Stoppbit ist es so das das
Stoppbit frueher als erwartet gesendet wird sprich Datenbit 8 liegt nur
ungefaehr 80% seiner Zeit an, dann kommt schon das Stoppbit. Ich hab
keine Ahnung was man da machen kann.
@Hubert G. der Programmierer ein JTAGICE3 ist die ganze Zeit ueber die
JTAG Schnittstelle angeschlossen.
Hi
>Also ich hab mir die einkommenden Zeichen mal mit HTerm angeschaut und>mir ist aufgefallen das manchmal das 8 Datenbit auch auf 1 ist obwohl es>0 sein sollte. Schicke ich z.B. 'A' kommt manchmal richtig 0x41 an und>manchmal 0xC1.
Sieht nach falscher Baudrate aus.
MfG Spess
Etros schrieb:> Also ich hab mir die einkommenden Zeichen mal mit HTerm angeschaut und> mir ist aufgefallen das manchmal das 8 Datenbit auch auf 1 ist obwohl es> 0 sein sollte.
Da auf der RS232 das LSB zuerst übertragen wird, liegt es nahe, dass
deine Baudrate ein ganz klein wenig daneben liegt, so dass du hier
manchmal das nach dem 7. Datenbit folgende Stopbit siehst.
die 8Mhz, sind die vom internen RC-Generator erzeugt?
Auf meinem Board habe ich noch einen 16MHz Quarz an dem ATMega128
angeschlossen. Den hab ich nicht benutzt weils mit dem am Anfang auch
nicht geklappt hat und ich mit einer niedrigeren Frequenz testen wollte.
Ich benutze den Quarz jetzt wieder und die Schnittstelle funkt endlich.
Auf dem Oszi ist zu sehen das der Uebergang zwischen Datenbit 7 und
Stoppbit sauber ist. Die Schnittstelle funktioniert tadellos auch mit
XON XOFF bei 115200 Baud. Ist der Fehler also nur daher gekommen, dass
der interne Quaroszilator des ATMega128 zu ungenau ist und sich
deswegen die Signale verschoben haben was dazu gefuehrt hat das sich
Datenbit 7 und das Stoppbit ueberlappt haben?
Etros schrieb:> XON XOFF bei 115200 Baud. Ist der Fehler also nur daher gekommen, dass> der interne Quaroszilator des
Der Fehler ist, dass es keinen internen Quarzoszillator gibt.
Das ist ein stink normales RC-Glied, das da am Werk ist. Und je nach
Temperatur (aber nicht nur) verändert der seine Frequenz bzw. rauscht
rund um die Sollfrequenz.
Woher kommt immer dieses 'interne Quarzoszillator'?
Mit ein wenig nachdenken ist doch klar, dass man wohl keinen externen
Quarz benutzen würde, wenn der IC schon einen eingebaut hätte.