Forum: Mikrocontroller und Digitale Elektronik AVR+interner RC Oszillator extrem ungenau


von Daniel R. (daniel_r)


Lesenswert?

Hallo,

ich habe ein kleines Gerät entwickelt, welches LEDs in bestimmten
Zeiten verschieden ansteuert.

Im Gerät sitzt ein ATmega48, welcher mit dem internen Oszillator auf
128KHz läuft.

Nun soll eine LED 150 Sekunden lang leuchten.
Bei einem der Geräte leuchtet diese jedoch 161 Sekunden, bei einem
anderer genau 150. Die Programme sind zu 100% identisch. Die Fusebits
stimmen ebenfalls überein.

Kann das sein, dass der Oszillator so ungenau ist, dass es so viel
ausmacht?

Kalibrieren kann man den Oszillator anscheinend nur auf 8MHz, oder?

Kann man da sonst noch was dagegen machen?


Gruß

Daniel

von mr.chip (Gast)


Lesenswert?

Hallo

Ja, es ist bekannt, dass der interne Oszillator sehr ungenau ist. Ich
kann es nicht ganz verstehen, warum Atmel den nicht genauer macht,
zumal ja sehr viele uC-Anwendungen zeitkritisch sind und nochdazu
vielleicht sehr klein (=ohne externen Oszillator) gebaut werden solle.
Keine Ahnung, ob die Antwort hier im Geld oder in der Technik liegt
;-)

Gibt es nicht einen Frequenz-Prescaler ähnlich wie bei den Timern?
D.h., man könnte den Oszillator auf 8 MHz kalibrieren und danach die
Frequenz teilen.

Gruss

Michael

von A.K. (Gast)


Lesenswert?

"Ich kann es nicht ganz verstehen, warum Atmel den nicht genauer
macht"

Schlag Atmel vor, wie man das macht, ohne jeden Baustein einzeln mit
Laser trimmen zu müssen.

von Hannes L. (hannes)


Lesenswert?

> Ich
> kann es nicht ganz verstehen, warum Atmel den nicht genauer macht,

Beim Mega48/88/168 hat Atmel versucht, die Stromaufnahme gegenüber
AT90S4433 und Mega8 drastisch zu senken. Dies ging auf Kosten der
Stabilität und Genauigkeit des Oszillators. Für genaues Timing nimmt
man einen Quarz.

> man könnte den Oszillator auf 8 MHz kalibrieren und danach die
> Frequenz teilen.

So wird das auch gemacht. der Oszillator läuft mit 8MHz und mit dem
Register CLKPR wird der Vorteiler eingestellt. Bei Reset wird dieses
Register bei gesetzter CKDIV8-Fuse auf 1:8 (1MHz) eingestellt, kann
aber durch das User-Programm im AVR nachträglich verändert werden.

Das steht übrigens alles im Datenblatt, das Schwarze ist die
Schrift...

...

von Dirk (Gast)


Lesenswert?

Hi,

die Ungenauigkeit wird auch mit zunehmender Temperatur groesser!

Falls du wirklich einen genauen Takt brauchst solltest du lieber auf
einen externen Quarz o. Quarzoszillator umsteigen.

Gruß,

Dirk

von Daniel R. (daniel_r)


Lesenswert?

Das Problem ist, dass ich keinen Platz für einen externen Quarz habe.
Ich würde den ja auch gerne schneller laufen lassen, aber das Gerät ist
batteriebetrieben und lässt somit keinen schnelleren Takt zu, wegen der
Stromaufnahme.

Somit habe ich, wenn ich das richtig verstanden habe keine Chance
oder?

>der Oszillator läuft mit 8MHz und mit dem
>Register CLKPR wird der Vorteiler eingestellt.


Läuft der Oszillator also immer auf 8MHz, egal ob ich in den Fusebits
128KHz einstelle oder nicht? Wird er lediglich geteilt?

von Rolf Magnus (Gast)


Lesenswert?

Die 128kHz werden vom Watchdog-Oszillator erzeugt. Der ist besonders
ungenau und auch von der Versorgungsspannung und der Temperatur
abhängig (Die 128kHz gelten bei 3V/25°). Er ist im Gegensatz zum
8Mhz-Oszillator auch nicht kalibriert.
Wie schon von Hannes erwähnt, steht das aber alles im Datenblatt. Da
ist auch ein Diagramm zu finden, das die Temperatur- und
Spannungsabhängigkeit des Watchdog-Oszillators zeigt.

> Ich würde den ja auch gerne schneller laufen lassen, aber das
> Gerät ist batteriebetrieben und lässt somit keinen schnelleren
> Takt zu, wegen der Stromaufnahme.

Vielleicht kannst du den 8Mhz-Oszillator mit passend eingestelltem
Prescaler nehmen. Der maximale Teiler ist 256, womit du auf 31,25kHz
kämst.

von Benedikt (Gast)


Lesenswert?

Du könntest den internen Takt über einen 32,768kHz Quarz kalibrieren.
Damit lief ein mega48 bei mir etwa 5Monate an zwei Mignon Akkus
durchgehalten.

von Daniel R. (daniel_r)


Lesenswert?

@Rolf:
>ielleicht kannst du den 8Mhz-Oszillator mit passend eingestelltem
>Prescaler nehmen. Der maximale Teiler ist 256, womit du auf 31,25kHz
>kämst.

OK, ich werde das mal versuchen...


>Die 128kHz werden vom Watchdog-Oszillator erzeugt.
Deswegen ist der also so ungenau. Hab ich nicht gewusst.

@Benedikt:
Wie macht man das???

von Benedikt (Gast)


Lesenswert?

Schau dir mal die AppNotes von Atmel an...

von Dirk (Gast)


Angehängte Dateien:

Lesenswert?

Hi,

externe Quarze zu gross? Also die ich kenne sind so gross wie 0805
Widerstaende.

Im Anhang ein Bild. Der Widerstand hat die Groesse 0603.

Gruß,

Dirk

von Rahul (Gast)


Lesenswert?

Selbst einer im HC49U-Gehäuse sind nicht besonders groß.

von Hannes L. (hannes)


Lesenswert?

Naja, bei den DIL28-Megas ist man oft nicht bereit, die Portpins
zugunsten des Quarzes zu opfern...

Dazu noch UART, und hoch lebe das 6-Bit-Konzept.

;-)   <---(datt iss'n Smily...)

...

von Rolf Magnus (Gast)


Lesenswert?

@Dirk:

> externe Quarze zu gross? Also die ich kenne sind so gross wie 0805
> Widerstaende.

Wo bekommt man die denn?

von Dirk B. (dirk-)


Lesenswert?

Hi,

ich kann Dir morgen mal den Hersteller raussuchen, dann kannst du bei
deinem Distri des Vertrauens anfragen.

von Daniel R. (daniel_r)


Lesenswert?

Nicht dass die wirklich zu groß wären....Die Platinen sind halt schon
fertig und ich habe nicht das Geld und die Lust dazu Neue machen zu
lassen. Ich hätte schreiben sollen, dass kein Platz für den Oszi
vorgesehen ist.

Ich habe jetzt auf den 8MHz Oszi umgestellt und teile den durch 64,
sodass ich auf 125KHz komme. Naja, genau ist der auch nicht wirklich.
Im Schlimmsten Fall hatte ich eine Abweichung von 1,5s auch die 150
Sekunden...Aber da kann ich wohl nicht viel machen(außer vllt.
Benedikts Vorschlag, den ich erst suchen muss).

Gruß

Daniel

von Daniel R. (daniel_r)


Lesenswert?

@Hannes

Nun hast Du das Smiley eindeutig nicht vergessen ;)

von Ingo (Gast)


Lesenswert?

Könnte des Rest der Ungenauigkeit vllt. auf Eigenheiten des Codes zurück
zu führen sein?

von Markus S. (schmidle)


Lesenswert?

@ Dirk,

die kleinen Quarze interessieren mich auch. Hast du schon nach dem
Hersteller schauen können?

Gruß
Schmidle

von Daniel R. (daniel_r)


Lesenswert?

@Ingo...
Nein, alle haben den gleichen Code, welcher immer dieselbe
Durchlaufzeit hat.

Ich habe noch eine andere Frage. Um keinen neuen Thread aufmachen zu
müssen stell ich sie hier:
Ich möchte bei den Mega48 die LockBits setztn, sodass man das Programm
nicht mehr auslesen kann.
Wenn ich das im AVRStudio mache werden die LockBits sofort wieder
zurückgesetzt(ich mache keinen ChipErase).
Im Datenblatt steht, dass man die auch in der Software setzen kann.
Muss man das per Software machen oder gehts nicht auch direkt im AVR
Studio??

Gruß

Daniel

von Dirk (Gast)


Angehängte Dateien:

Lesenswert?

Hi,

anbei mal das Datasheet vom Hersteller. Vertrieb kann ich leider nicht
nennen, aber bei www.csd-electronics.de wuerde ich mal um ein Angebot
bitten.


Gruß,

Dirk

von Markus S. (schmidle)


Lesenswert?

@ Dirk,

danke dir.
Ich werde mal versuchen ein, zwei Samples zu ordern. Ich muß die Dinger
mal noch genauer unter die Lupe nehmen.

Gruß
Schmidle

von ka-long (Gast)


Lesenswert?

Hi,

RC vom Atmel ist natürlich ungenau und im Gegensatz zu anderen
Möglichkeiten stark temperaturabhängig.

Aber ich habe noch nichts von OSCCAL hier gelesen....

Mit dem STK500 kannst Du für unterschiedliche Frequenzen des RCO einen
von ATMEL in den AVR geschriebenen Wert auslesen und am Anfang des
Programms in das OSCCAL Register laden.

Wenn ich mich richtig erinnere, hat man dann bei Raumtemperatur
+-3%....

Sollte eigentlich bei allen Megas exisiteren (Mega8 und Mega16 haben
das).

Bye ka-long

von Hannes L. (hannes)


Lesenswert?

> Aber ich habe noch nichts von OSCCAL hier gelesen....

Beim Mega48 wird bei jedem Reset automatisch das Calibrationsbyte in
das Register OSCCAL geschrieben. Die Calibration erfolgt für 3V und
25°C und soll +/- 1% genau sein. [Datenblatt Seite 30]

Ich bin sicher, dass der Threaderöffner dies auch gelesen hat.
Daher gab es wohl bisher keinen Grund über OSCCAL zu diskutieren.

...

von Daniel R. (daniel_r)


Lesenswert?

Richtig    ;), das hab ich gelesen.
Ich habe auch versucht Benedikts Vorschlag zu realisieren, jedoch
stimmt in der Atmel-Batch gar nichts(mal von den Device-Namen und den
Adressen abgesehen, welche sowieso nicht stimmen).

Das LockBit Problem hat sich zum Teil gelöst.
Aber warum kann ich LPM und SPM in der Application-Section nicht
verbieten(die Bits werden gleich wieder zurückgesetzt)?


Daniel

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.