Forum: Mikrocontroller und Digitale Elektronik UART und atmega8


von Silk7 (Gast)


Lesenswert?

Hi,

ich versuche gerade den UART an meinem atmega8 zu aktivieren.
Auf meinem Rechner nutze ich HTerm.

Das senden der Zeichen von meinem PC funktioniert super.
Beim Empfangen bekomme ich jedes Zeichen genau um den Wert 128 versetzt 
vom atmega8 geliefert (sendet der avr den dez-Wert 100, empfängt HTerm 
228)????

Baudrate ist 9600, es wird 8N1 verwendet und ich nutze die internen 
1MHz.
Den Quellcode habe ich akt. nicht zur Hand, liefere ich noch nach.

Kann es sein, dass evt. das Stopbit als Datenbit gesehen wird und 
dadurch die 128 immer auf 1 ist?

Danke.

von spess53 (Gast)


Lesenswert?

Hi

>Baudrate ist 9600, es wird 8N1 verwendet und ich nutze die internen
>1MHz.

Das ergibt schon bei exakten 1MHz einen Baudratenfehler von 7%. Da fällt 
die ungenauigkeit des internen Oszillators schon gar nicht mehr ins 
Gewicht.

Also, das kann nicht gehen.

MfG Spess

von Silk7 (Gast)


Lesenswert?

...also Baudrate auf 2400 oder 4800 (Takt will ich nicht erhöhen)?
Ich werde das mal probieren.

Danke.

von Walter V. (low-budget)


Lesenswert?

Mit U2X (Double speed) sollten auch 9600 klappen.

http://www.gjlay.de/helferlein/avr-uart-rechner.html

Gruß

von spess53 (Gast)


Lesenswert?

Hi

>...also Baudrate auf 2400 oder 4800 (Takt will ich nicht erhöhen)?
>Ich werde das mal probieren.

Mit dem internen RC-Oszillator bleibt es trotzdem ein Glücksspiel.

MfG Spess

von oldmax (Gast)


Lesenswert?

Hi
>...also Baudrate auf 2400 oder 4800 (Takt will ich nicht erhöhen)?
Klingt fast so wie: Ich trau mich nicht....
Warum nicht den Takt mit einem externen Quarz erhöhen, was spricht 
dagegen? Sicherlich, die ersten Versuche mögen wie bei mir auch,  mit 
ausgesperrten Controllern enden, aber die sind ja nicht defekt. Man kann 
mit ein wenig Nachdenken diese auch wieder beleben. Und es ist ja nicht 
gesagt, das man die Controller abschießt. Es gibt genug Beiträge, die 
alle Informationen beinhalten. Hätt ich diese damals gelesen, wär mir 
einiges erspart geblieben. Aber so ist das nun mal, man ist ja selbst 
der King....
Der Vorteil eines externen Taktes ist die Genauigkeit. Nicht nur bei 
einer seriellen Datenübertragung, sondern auch, wenn mal Zeitsteuerungen 
gewünsccht sind. Also laß dich nicht kirre machen und schau, wie andere 
ihren Quarz an den Controller klemmen. Einmal kapiert, und du machst nie 
wieder etwas anderes.
Natürlch gibt es auch Schaltungen, die sollen so klein wie möglich sein 
und da ist einfach kein Platz für einen Quarz. Auch möchte man die 
Portpins anderen Zwecken zuordnen. (bspw. Mega8)
Aber da sollte eine serielle Anbindung auch nicht vorgesehen werden.
Gruß oldmax

von Werner (Gast)


Lesenswert?

spess53 schrieb:
> Mit dem internen RC-Oszillator bleibt es trotzdem ein Glücksspiel.

..., es sei denn, man hält ihn auf Zimmertemperatur, sorgt für stabile 
Versorgungsspannung und macht sich die Mühe, den Oszillator zu 
kalibrieren und zu Anfang des Programmablaufs das richtige Byte ins 
OSCCAL-Register zu schreiben.

Mehr dazu in den Application Notes
  AVR053: Calibration of the internal RC oscillator
  AVR054: Run-time calibration of the internal RC oscillator via the 
UART
von Atmel

von c-hater (Gast)


Lesenswert?

oldmax schrieb:

> Der Vorteil eines externen Taktes ist die Genauigkeit. Nicht nur bei
> einer seriellen Datenübertragung, sondern auch, wenn mal Zeitsteuerungen
> gewünsccht sind. Also laß dich nicht kirre machen und schau, wie andere
> ihren Quarz an den Controller klemmen. Einmal kapiert, und du machst nie
> wieder etwas anderes.

Richtig.

> Natürlch gibt es auch Schaltungen, die sollen so klein wie möglich sein
> und da ist einfach kein Platz für einen Quarz.

Es gibt auch noch andere Gründe, auf den Quarz zu verzichten, nämlich, 
wenn man dessen Genauigkeit einfach nicht benötigt. Selbst UART-Nutzung 
ist nicht zwingend ein Hindernis. Wenn die Umweltbedingungen annähernd 
konstant sind (Temperatur, Spannung), reicht der interne RC-Oszillator 
aus. Man muß ihn aber natürlich kalibrieren.
Auch sollte die UART-Bitrate so niedrig gewählt werden, daß wenigstens 
kein systematischer Fehler durch durch die ganzzahlige Teilung mehr da 
ist, denn natürlich addieren sich dieser systematische Fehler und der 
durch die Ungenauigkeit der Taktquelle verursachte.

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
Noch kein Account? Hier anmelden.