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
Hallo Mr.Chip, die Stabilität des internen Oszillators reicht für einen sicheren Betrieb der UART nicht - siehe Tutorium. Gruß Otto
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.
Also kurz gesagt: Man kann 9600 Baud vergessen? Was denkt ihr, kriege ich via I2C mehr hin? (da synchron)
> Ja.
Ok, danke. Dann weiss ich jetzt immerhin, dass es nicht an der Schaltung
liegt.
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... ...
mit den internen 8MHz sollte 9600Baud drin sein... - selbst schon probiert.
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...
Wie kann man die als internen Takt einstellen??? (siehe ersten Post)
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...
;-)
...
7,3728MHz einstellen ? Genau gleich wie man 8MHz einstellt. Baurate auf 9600 einstellen und am OSCCAL schauben bis es passt.
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... ...
Am OSCCAL zu drehen ist stabil, sofern die Temperatur sich nicht aendert. Die Spannungsabhaengigkeit ist fast vernachlaessigbar.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.