www.mikrocontroller.net

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


Autor: Daniel R. (daniel_r)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: mr.chip (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht 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...

...

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Daniel R. (daniel_r)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Daniel R. (daniel_r)
Datum:

Bewertung
0 lesenswert
nicht 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???

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schau dir mal die AppNotes von Atmel an...

Autor: Dirk (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Rahul (Gast)
Datum:

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

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht 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...)

...

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Dirk:

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

Wo bekommt man die denn?

Autor: Dirk Bxxxxx (dirk-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

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

Autor: Daniel R. (daniel_r)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Daniel R. (daniel_r)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Hannes

Nun hast Du das Smiley eindeutig nicht vergessen ;)

Autor: Ingo (Gast)
Datum:

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

Autor: Markus S. (schmidle)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Dirk,

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

Gruß
Schmidle

Autor: Daniel R. (daniel_r)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dirk (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Markus S. (schmidle)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ka-long (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht 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.

...

Autor: Daniel R. (daniel_r)
Datum:

Bewertung
0 lesenswert
nicht 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

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.