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
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.
Man kann den internen Oszillator abgleichen. Man kann auch eine
Temperaturkompensationstabelle nehmen, oder mit einem 32k Quarz
automatisch abgleichen.
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.
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...
...
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.
...
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
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...
;-)
...
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...
...
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.
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