Hi,
hab hier einen Mega8 der über einen MAX232 mit einem PC verbunden ist.
Nutze den internen Oszillator (8Mhz,9600Baud) und die Lib von Peter
Fleury.
Wenn ich über Minicom oder Hyperterminal Zeichen sende, empfängt der
Mega alles korrekt. (Senden klappt auch fehlerlos)
Will ich aber eine Zeichenfolge senden z.B. echo ABC1234 > /dev/ttyS0
empfängt der Mega nur das erste Zeichen.
Wie kann der Mega trotz Interrupt-Betrieb Zeichen bei der Kommunikation
verlieren ???
Alle anderen Programmteile wie z.B. Timer usw. hab ich ausgeblendet.
Es läuft wirklich nur die Uart-Empfangsroutine.
Ist ess Möglich das der PC trotz richtiger Baud-Rate "zu schnell" sendet
???
MfG Uwe
@ UB (Gast)
>Nutze den internen Oszillator (8Mhz,9600Baud) und die Lib von Peter>Fleury.
MÖÖÖP! Fehler!
>Ist ess Möglich das der PC trotz richtiger Baud-Rate "zu schnell" sendet>???AVR-Tutorial: UART
MfG
Falk
Hm, 8Mhz und 9600Baud ergibt nur einen Fehler von 0,2%. Warum sollte das
nicht gehen? Ich habe hier einen Akkulader mit Mega8, der auch nur mit
dem internen Takt läuft und mir seine Ladedaten über RS232 auf den
Rechner bringt. Der geht fehlerlos.
MfG Paul
@ Paul Baumann (Gast)
>Hm, 8Mhz und 9600Baud ergibt nur einen Fehler von 0,2%. Warum sollte das>nicht gehen?
"Nutze den internen Oszillator (8Mhz,9600Baud)"
Der hat keine 0,2%, eher 2% und mehr. Sihe Link.
MFG
Falk
Paul Baumann wrote:
> Hm, 8Mhz und 9600Baud ergibt nur einen Fehler von 0,2%. Warum sollte das> nicht gehen?
Weil das keine 8Mhz sind.
Eher sowas von: "in der Gegend von 8Mhz. Können aber auch nur 7.5Mhz
oder doch schon 8.5Mhz sein"
> Ich habe hier einen Akkulader mit Mega8, der auch nur mit> dem internen Takt läuft und mir seine Ladedaten über RS232 auf den> Rechner bringt. Der geht fehlerlos.
Möglich ist es. Kann gehen, muss aber nicht.
Ich habe das Programm "AVRbaud" benutzt, das bringt die 0,2%
Fehlerangabe.
Kann sein, daß ich Glück hatte, aber einen Versuch habe ich mal gemacht:
Ich ließ mir mit einem Mega8 und internem Takt an einem Pin 100Hz
erzeugen und setzte einen industriellen Frequenzzähler dahinter, der
sogenannte
"Shots" machen kann. d.h. er mißt die Frequenz an seinem Eingang
periodisch
und speichert das Ergebnis zusammnen mit der abgelaufenen Zeit.
Dann habe ich den armen Kerl (Mega8) mit Kältespray und/oder Lötkolben
aus nächster Nähe bearbeitet. Ergebnis: Das verdroß ihn kaum, die 100Hz
waren
"wie ein Mann" da. Da dachte ich: Guck an, so schlimm ist die Drift doch
gar nicht, wie die Leute immer behaupten´.
MfG Paul
der initerne Oszillator ist ungenau. Wenn du mehrere Zeichen
hintereinander ohne Pause sendest kann es sein das der UART die ersten
1-2 Zeichen noch erkennt, alle folgenden nicht mehr. Wenn Du einzelne
Zeichen mit Pausen sendest (wie mit Hyperterm) kann sich der UART bei
jedem Zeichen synchronisieren und schafft das eine Zeichen gerade so.
Also bei UART Aktionem empfiehlt sich ein externer Quarz, am besten mit
den speziellen UART Quarzen wie 7,3728 oder 14,745MHz
@ Paul Baumann (Gast)
>Dann habe ich den armen Kerl (Mega8) mit Kältespray und/oder Lötkolben>aus nächster Nähe bearbeitet. Ergebnis: Das verdroß ihn kaum, die 100Hz>waren>"wie ein Mann" da.
Dann hast du irgendwie falsch gemessen, vielleicht war ein
angeschlossener Quarz aktiv? Der RC-Oszillator macht schon EINIGES an
Drift, schau mal in Datenblatt. So zwischen 7,9..8,3MHz von -40..85
Grad. Das sind ca. +/- 2,5%. Für eine Oszillator sind das Welten.
MFG
Falk
Nein, das kann ich gerade noch so erkennen, ob ich einen Quarz
eingelötet
habe, oder nicht. (breit grins) Vielleicht wollen sie in den
Datenblättern nur auf der sicheren Seite sein und geben die
Wurst-Käse-Fälle (oder so ;-)) an.
Für eine Massenproduktion würde ich auch immer mit Quarzen an's Werk
gehen,
aber für einzelne Apparate für zu Hause kann man schon mal versuchen, ob
es auch so geht. Das ist der Sonnabend-Nachmittag-Effekt: gerade den
Quarz, den man bräuchte, hat man nicht da.
Guten Rutsch (aber langsam, höchstens mit 300 Baud) wünscht
Paul