www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Mega8 Uart Empfangs Problem


Autor: UB (Gast)
Datum:

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

Autor: Falk Brunner (falk)
Datum:

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

Autor: Paul Baumann (Gast)
Datum:

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

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ICh glaub, du musst das Interrupt Flag alleine löschen, irgenwie war das 
bei UART so.

Autor: Falk Brunner (falk)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: Paul Baumann (Gast)
Datum:

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

Autor: Markus Burrer (Firma: Embedit Mikrocontrollertechnik) (_mb_)
Datum:

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

Autor: Falk Brunner (falk)
Datum:

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

Autor: Paul Baumann (Gast)
Datum:

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

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.