mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Welche Baudrate mit internem Oszillator?


Autor: mr.chip (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Seit knapp 2 Stunden tüftel ich hier an einer kleinen Schaltung herum, 
aber krieg das UART beim besten Willen nicht über 4800 Baud. Ich 
verwende den internen Oszillator des Mega8. Könnte es daran liegen? Ok, 
meine Platine sieht zwar auch nicht genial aus, allerdings funktioniert 
beispielsweise der ISP problemlos - während ich die UART-Anschlüsse 
sogar direkt am Pin festmachen kann und selbst dann keine höhere 
Datenraten kriege.

Was sind so eure Erfahrungen? Wie viel kriegt man mit dem internen 
Oszillator hin? Und vorallem: Wie kann man mehr hinkriegen? (Ein Quarz 
ist nicht vorgesehen, aber ich brauch das UART, und zwar mit etwas 
Speed...)

Gruss

Michael

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Mr.Chip,

die Stabilität des internen Oszillators reicht für einen sicheren 
Betrieb der UART nicht - siehe Tutorium.

Gruß Otto

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ohne Kalibrierwert (=>OSCCAL) geht's garnnicht, dafür ist der interne 
Oszillator zu ungenau.

Und mit Kalibrierung sollte man sich dabei auf Debug-Ausgaben oder 
ähnlich Unwichtiges beschränken. Über Spannungs/Temperaturbereiche 
hinweg ist er auch dann nicht genau genug.

Autor: nullpointer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man kann den internen Oszillator abgleichen. Man kann auch eine 
Temperaturkompensationstabelle nehmen, oder mit einem 32k Quarz 
automatisch abgleichen.

Autor: mr.chip (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also kurz gesagt: Man kann 9600 Baud vergessen?

Was denkt ihr, kriege ich via I2C mehr hin? (da synchron)

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja.

Autor: mr.chip (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ja.

Ok, danke. Dann weiss ich jetzt immerhin, dass es nicht an der Schaltung 
liegt.

Autor: nullpointer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man sollte I2C nicht gegen ein UART ausspielen. Die sind zu verschieden. 
Es gibt eine Appnote bei Atmel, wie man den internen RC gegen einen 32k 
Quarz abgleicht. Braucht um die 240 bytes. Ich denke es mit weniger zu 
schaffen. Duch manuellen Abgleich, am Scope habe ich fuer eine 
Temperatur 9600 ohne problem laufen. Dazu muss man das UART dazu 
bringen, einen Satz 0x55 rauszulassen. 10bits sollen nun 1041us lang 
sein. Nach ein paar Iterationen am OSCCAL ist man dort.

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nullpointer wrote:
> Es gibt eine Appnote bei Atmel, wie man den internen RC gegen einen 32k
> Quarz abgleicht. Braucht um die 240 bytes. Ich denke es mit weniger zu
> schaffen.

Wenn man aber schon auf PB6 und PB7 verzichtet, um einen Uhrenquarz 
anzuschließen, um dann per Software am internen Oszillator zu schrauben, 
dann kann man auch gleich über den Einsatz eines Baudratenquarzes 
(Suchbegriff) nachdenken.

Der Einsatz eines Uhrenquarzes (asynchron über Timer2) ist eigentlich 
nur bei Batteriegeräten interessant, bei denen der AVR die meiste Zeit 
im Power-Down-Sleep verbringt, aber trotzdem die Uhrzeit weiter zählt.

> Duch manuellen Abgleich, am Scope habe ich fuer eine
> Temperatur 9600 ohne problem laufen. Dazu muss man das UART dazu
> bringen, einen Satz 0x55 rauszulassen. 10bits sollen nun 1041us lang
> sein. Nach ein paar Iterationen am OSCCAL ist man dort.

Als Notlösung nicht übel, erfordert aber auch die entsprechende 
("55"-sendende) Software am PC. Eine praktikable Allround-Lösung ist es 
auch nicht. Baudratenquarz bleibt nunmal Baudratenquarz...

...

Autor: Holger Krull (krulli) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mit den internen 8MHz sollte 9600Baud drin sein... - selbst schon 
probiert.

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Holger Krull wrote:
> mit den internen 8MHz sollte 9600Baud drin sein... - selbst schon
> probiert.

Ging bei mir nicht, jedenfalls nicht zuverlässig. Daher hatte ich GLCD 
(8-Bit-Datenbus) und UART am Mega8 damals aufgegeben.

...

Autor: Holger Krull (krulli) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Hannes,
wie zuverlässig das war, kann ich nicht sagen, ich hatte es probiert und 
es schien vernüftig zu laufen. Aber danach hatte ich auf einen externen 
Baudratenquarz umgefust und das nicht weiter ergründet.
Diese Ozillatorkalbrierung ist für mich noch ein Buch mit 7 Siegeln ;-)
Viele Grüße nach KB
Holger

Autor: nullpointer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
die bessere Frequenz als 8MHz ist 7.328MHz...

Autor: Holger Krull (krulli) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nullpointer wrote:
> die bessere Frequenz als 8MHz ist 7.328MHz...

Wie kann man die als internen Takt einstellen??? (siehe ersten Post)

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nullpointer wrote:
> die bessere Frequenz als 8MHz ist 7.328MHz...

Oder noch besser 7,3728MHz, aber das sollte der Frager mittels 
Suchbegriff "Baudratenquarz" eigentlich selbst herausfinden...

;-)

...

Autor: nullpointer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
7,3728MHz einstellen ? Genau gleich wie man 8MHz einstellt. Baurate auf 
9600 einstellen und am OSCCAL schauben bis es passt.

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Holger Krull wrote:
> nullpointer wrote:
>> die bessere Frequenz als 8MHz ist 7.328MHz...
>
> Wie kann man die als internen Takt einstellen??? (siehe ersten Post)

Durch Manipulation von OSCCAL. Das hält dann aber nur von Zwölf bis 
Mittag...

OSCCAL muss beim Mega8 (und allen anderen AVRs nach Calibrationsmode 
3.0, siehe AN053) sowiso händisch calibriert werden, wenn der Oszillator 
mit 2, 4 oder 8 MHz läuft. Die automatische Calibration beim Kaltstart 
erfolgt nur für 1MHz.

Gruß übern Bach...

...

Autor: nullpointer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Am OSCCAL zu drehen ist stabil, sofern die Temperatur sich nicht 
aendert. Die Spannungsabhaengigkeit ist fast vernachlaessigbar.

Autor: Axel R. (axelr) Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Morgen,

Den Wert, der in OSSCAL drinnsteht (+/r/n), über die UART ausgeben. Dann 
um einen erhöhen lassen. Wenn du was siehst, weisst Du, was in OSCCAL 
rein muss. So fünf bis sieben Prints wirst Du lesbar untereinander 
stehen haben. Der Rest sind "Hieroglyphen". Von den lesbaren nimmst Du 
den "mittleren". Bei Zimmertemperatur passt das ganz gut. Auch bei 9600.

Gruß
AxelR.

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Ergebnisse können aber ziemlich abweichen, auch bei gleichen 
Umgebungsverhältnissen. Ich hab mal eine Displayansteuerung mit nem M8 
gebaut die bei mir prima mit internem Takt funktioniert hat. Dann hab 
ich diese Schaltung nochmal gebraucht und hab 1:1 alles nochmal 
aufgebaut und es ging garnix. Den alten M8 in die neue Schaltung 
gedrückt und es funktioniert sofort. Daraufhin hab ich mir 8 rumliegende 
M8 geschnappt und dasselbe Programm draufgebrannt. Mit 2 Stück 
funktionierte die Schaltung wie schon mit dem ursprünglichen M8, ein 
Weiterer tats wenns nicht zu warm war. Dann kamen Experimente mit OSCCAL 
dran, was immerhin 6 Controller zum laufen brachte. Besonders stabil war 
das aber nicht. Schaltung ne Stunde ins Eisfach und nix geht mehr. Quarz 
ist in jedem Fall besser, weil stabiler und reproduzierbar.

bye

Frank

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.