Forum: Mikrocontroller und Digitale Elektronik Atmega1284p 128KHz ungenau


von David P. (devryd)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,
weiß jemand, wie genau der 128KHz Oszillator im atmega1284p ist?
Im Datenblatt habe ich dazu nichts gefunden.
Ich plane, damit eine Digitaluhr zu bauen, allerdings verliere ich 
mehrere Sekunden pro Minute.
Vielen Dank für eure Ratschläge.
Ich hänge den Code an, falls irgendwo ein Fehler drin ist, der dafür 
verantwortlich sein könnte

von Falk B. (falk)


Lesenswert?

David P. schrieb:
> weiß jemand, wie genau der 128KHz Oszillator im atmega1284p ist?

Nicht sonderlich, so um die +/-10%, eher schlechter.

> Im Datenblatt habe ich dazu nichts gefunden.
> Ich plane, damit eine Digitaluhr zu bauen,

Schlechte Idee.

> allerdings verliere ich
> mehrere Sekunden pro Minute.
> Vielen Dank für eure Ratschläge.

Nimm einen 32kHz Uhrenquarz und betreibe den am Timer 2 asynchron.

AVR - Die genaue Sekunde / RTC

von Wolfgang (Gast)


Lesenswert?

David P. schrieb:
> Im Datenblatt habe ich dazu nichts gefunden.

Psst, nicht weitersagen: S. 353
https://ww1.microchip.com/downloads/en/DeviceDoc/doc8059.pdf

von c-hater (Gast)


Lesenswert?

David P. schrieb:

> weiß jemand, wie genau der 128KHz Oszillator im atmega1284p ist?

Ziemlich ungenau.

> Ich plane, damit eine Digitaluhr zu bauen, allerdings verliere ich
> mehrere Sekunden pro Minute.

In Relation zu der Anforderung, die ich an eine "Uhr" stellen würde, 
katastrophal ungenau.

> Im Datenblatt habe ich dazu nichts gefunden.

Da musst du wohl deine Fähigkeiten bezüglich des Lesens eines 
Datenblatts noch deutlich erweitern...

von David P. (devryd)


Lesenswert?

Da hab ich wohl an der falschen Stelle gesucht. Ich hatte lediglich auf 
Seite 326 die Daten zum 8MHz Oszillator gesehen.

Warum nennt man das ganze 128KHz Oszillator, wenn er die Frequenz 
eigentlich nie hat?

von S. Landolt (Gast)


Lesenswert?

Es stimmt ja so ungefähr; ebenso wie die Angabe 8 MHz für den anderen 
(genaueren) RC-Oszillator - es kommt eben auf die Anforderungen des 
Anwenders an.

Vielleicht noch zwei Zitate aus dem Datenblatt:
"... providing a clock of 128kHz. The frequency is nominal at 3V and 25 
°C"
"Note that the 128kHz oscillator is a very low power clock source, and 
is not designed for high accuracy" - aber was ist schon unter Letzterem 
zu verstehen!?

von Falk B. (falk)


Lesenswert?

David P. schrieb:
> Warum nennt man das ganze 128KHz Oszillator, wenn er die Frequenz
> eigentlich nie hat?

Wenn man 1000 AVR ausmißt, liegt der Mittelwert schon ganz gut bei 
128kHz ;-) So wie der Durchschnittsmensch 1,70m groß ist . . .

von Georg M. (g_m)


Lesenswert?

David P. schrieb:
> Warum nennt man das ganze 128KHz Oszillator, wenn er die Frequenz
> eigentlich nie hat?

Ja, das ist eine interessante Frage, warum die Watchdog Oscillator 
Frequency durch ihren höchstmöglichen Wert repräsentiert wird.

von Dyson (Gast)


Lesenswert?

Georg M. schrieb:
> Ja, das ist eine interessante Frage, warum die Watchdog Oscillator
> Frequency durch ihren höchstmöglichen Wert repräsentiert wird.

Finde ich völlig uninteressant. Ausserdem ist es nicht der Höchstwert, 
sondern, wie schon weiter oben angedeutet, ein Durchschnittswert.

von David P. (devryd)


Lesenswert?

Ok, ich hab dann mal einen Uhrenquarz bestellt, mal schauen, wie es dann 
klappt.

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Die internen RC-Oszillatoren kann man für alle zeitkritischen Dinge 
vergessen. Die sind ungenau und driften mit diversen Einflüssen wie der 
Temperatur. Ich hab damit mal RS-232 probiert, kannste knicken. Sehr 
langsam geht (will man aber nicht) und bei hohen Bitraten gibts mehr 
Fehler als fehlerfreie Bytes.

von Thomas (kosmos)


Lesenswert?

womit versorgst du den AVR? Hängt da irgendwo ganz vorne ein Trafo in 
der Kette dann könntest du mit der Netzfrequenz synchronisieren.

https://de.wikipedia.org/wiki/Synchronuhr

von Wolfgang (Gast)


Lesenswert?

Georg M. schrieb:
> Ja, das ist eine interessante Frage, warum die Watchdog Oscillator
> Frequency durch ihren höchstmöglichen Wert repräsentiert wird.

Das ist der wesentliche Wert, der für einen Watchdog interessant ist, 
weil die höchstmögliche Frequenz festlegt, nach welcher Zeit minimal ein 
Watchdog Reset ausgelöst werden würde.

Dyson schrieb:
> Finde ich völlig uninteressant. Ausserdem ist es nicht der Höchstwert,
> sondern, wie schon weiter oben angedeutet, ein Durchschnittswert.

Dann kannst du diese Aussage bestimmt auch durch einen Verweis aufs 
Datenblatt belegen. Ansonsten würde ich die mal ganz deutlich als 
Falsch bezeichnen.

Hast du schon mal im Datenblatt ins Kapitel 27.11 Internal Oscillator 
Speed geguckt?
Die typischen Werte liegen alle deutlich  unter den 128kHz.
RTFM

von Peter D. (peda)


Lesenswert?

Ben B. schrieb:
> Ich hab damit mal RS-232 probiert, kannste knicken. Sehr
> langsam geht (will man aber nicht) und bei hohen Bitraten gibts mehr
> Fehler als fehlerfreie Bytes.

8MHz geht bis 38400Baud. Ab 57600Baud ist der Rechenfehler zu hoch. Ob 
Quarz oder RC ist dabei egal. Daher gibt es Baudratenquarze (z.B. 
7,3728MHz).

von Dyson (Gast)


Lesenswert?

Wolfgang schrieb:
> Dann kannst du diese Aussage bestimmt auch durch einen Verweis aufs
> Datenblatt belegen. Ansonsten würde ich die mal ganz deutlich als
> Falsch bezeichnen.

Kann ich nicht und will ich auch nicht. Warum sollte ich auch? Weil du 
hier den großkotzigen Schlaumeier machst? Die Aussage bezog sich 
eindeutig auf die Aussage 2 Beiträge zuvor. Ausserdem schreibt man 
falsch klein und auch fettgedruckt ist es grossgeschrieben falsch. Oder 
was willst du damit zum Ausdruck bringen? Dass es besonders falsch ist?

Wolfgang schrieb:
> RTFM

Wer oder was bist du eigentlich?

von EAF (Gast)


Lesenswert?

Ben B. schrieb:
> Die internen RC-Oszillatoren kann man für alle zeitkritischen Dinge
> vergessen. Die sind ungenau und driften mit diversen Einflüssen wie der
> Temperatur. Ich hab damit mal RS-232 probiert, kannste knicken.



> Atmega1284p
Ohne jetzt wirklich das Datenblatt geprüft zu haben....

Üblicherweise, ist der WDT zu ungenau für eine Uhr.
Der interne RC Oszillator (für den µC Takt) ebenso. Macht sogar u.U. mit 
der UART Probleme.

Also macht es Sinn, den ATMega mit einem Uhrenquarz zu versehen, wenn 
man denn halbwegs genau mit der Zeit sein möchte.

Hat man das getan, kann man den µC durchaus mit 8MHz intern laufen 
lassen, und diese Frequenz, anhand der Uhr, kalibrieren (OSCCAL?). Dann 
klappts auch mit der Baudrate viel besser.

von Der Da (Gast)


Lesenswert?

Wolfgang schrieb:
> Psst, nicht weitersagen: S. 353
> https://ww1.microchip.com/downloads/en/DeviceDoc/doc8059.pdf

Das sind aber nur typische Werte, die in der Realität schon nochmal 
ordentlich abweichen können. Atmel/Microchip verweigert hier (auf auf 
interne Nachfrage) sehr hartnäckig irgendwelche Toleranzangaben.



Bei der neuen (na ja, mittlerweile nicht mehr ganz so neuen) AVR-1 Serie 
wird ein "full-opteration range" von +-30% genannt. Aber auch das ist 
nicht zu 100% nachgemessen, sondern nur charakterisiert. Bei einem 
Betriebspunkt Vcc=3.0V und +25% werden (überprüfte) +-3 % genannt.
z.B. 
https://ww1.microchip.com/downloads/en/DeviceDoc/ATtiny417-814-816-817-DataSheet-DS40002288A.pdf 
Seite 511

Gruß

Robert

von c-hater (Gast)


Lesenswert?

EAF schrieb:

> Also macht es Sinn, den ATMega mit einem Uhrenquarz zu versehen, wenn
> man denn halbwegs genau mit der Zeit sein möchte.
>
> Hat man das getan, kann man den µC durchaus mit 8MHz intern laufen
> lassen, und diese Frequenz, anhand der Uhr, kalibrieren (OSCCAL?). Dann
> klappts auch mit der Baudrate viel besser.

Moderne AVR8 können diese Autokalibrierung teilweise sogar selbstständig 
in Hardware leisten. Man muss das nur noch aktivieren. Z.B. die 
AVR128Dxyyy.

von David P. (devryd)


Lesenswert?

Falk B. schrieb:
> AVR - Die genaue Sekunde / RTC

Die Uhrenqartze sind heute gekommen. Ich habe versucht die Anleitung zu 
befolgen, leider passiert dabei gar nichts.

von Dyson (Gast)


Lesenswert?

David P. schrieb:
> Ich habe versucht die Anleitung zu
> befolgen, leider passiert dabei gar nichts.

Welche Anleitung? Der Uhrenquarz ist nur für Timer2. Da ist beim ersten 
Mal ein bisschen Umdenken erforderlich.

https://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/Die_Timer_und_Z%C3%A4hler_des_AVR#Timer2_im_Asynchron_Mode

von David P. (devryd)


Lesenswert?

Auch das hab ich grad versucht umzusetzen, leider völlig erfolglos.

von S. Landolt (Gast)


Lesenswert?

Also mit Verlaub: Ihre Beschreibung ist mehr als dürftig, sie ist nahezu 
unbrauchbar.

Trotzdem ein Versuch:
> Auch das hab ich grad versucht

So?
Dann mal die letzte Zeile der ISR ('while(ASSR...') kopieren und zu 
Beginn zwischen 'OCR2A=...' und 'TIMSK2>=...' einfügen.

von Georg M. (g_m)


Lesenswert?

David P. schrieb:
> Die Uhrenqartze sind heute gekommen.

Achtung: Figure 9-3 ist nicht vollständig.

von Peter D. (peda)


Lesenswert?

David P. schrieb:
> leider passiert dabei gar nichts.

David P. schrieb:
> leider völlig erfolglos.

Da sind Nullaussagen, damit kann niemand was anfangen.
Du mußt schon ins Detail gehen und natürlich auch Deinen konkreten 
Sourcecode anhängen (nicht einfügen).

von David P. (devryd)


Angehängte Dateien:

Lesenswert?

Ich habe den jeweiligen Source code aus den beiden anleitungen kopiert 
und in Microchip studio compiliert. Da das ohne Fehler ging, habe ich 
ihn hochgeladen. Leider leuchtet keine LED. Das wäre der Code.

von S. Landolt (Gast)


Lesenswert?

> Leider leuchtet keine LED. Das wäre der Code.

LED? Bei diesem Programm?

von S. Landolt (Gast)


Angehängte Dateien:

Lesenswert?

Mit diesem Programm blinkt eine LED an D6 - vielleicht hilft's Ihnen ja.

von Dietrich L. (dietrichl)


Lesenswert?

David P. schrieb:
> Leider leuchtet keine LED. Das wäre der Code.

Dann lies mal diese Stelle in "deinem" Programm:
1
  while(1)
2
  {
3
    /*Hier kann die aktuelle Zeit
4
      ausgeben werden*/
5
  }

von David P. (devryd)


Lesenswert?

Dietrich L. schrieb:
> David P. schrieb:
>> Leider leuchtet keine LED. Das wäre der Code.
>
> Dann lies mal diese Stelle in "deinem" Programm:
>
1
>   while(1)
2
>   {
3
>     /*Hier kann die aktuelle Zeit
4
>       ausgeben werden*/
5
>   }
6
>

Da hab ich wohl den falschen Code geschickt. Bei mir stand da schon das:
1
PORTD=sekunde;

und vor der While schleife hab ich auch schon port d als output 
festgelegt

von David P. (devryd)


Lesenswert?

S. Landolt schrieb:
> Mit diesem Programm blinkt eine LED an D6 - vielleicht hilft's Ihnen ja.

Auch das tut es bei mir leider nicht...

von S. Landolt (Gast)


Lesenswert?

Der Quarz ist an C6 & C7 angeschlossen?

von David P. (devryd)


Lesenswert?

S. Landolt schrieb:
> Der Quarz ist an C6 & C7 angeschlossen?

Und das ist die Antwort, ich hatte ihn an xtal 1 und 2.
dann soll es auch nicht funktionieren...

von S. Landolt (Gast)


Lesenswert?

Was mir noch einfällt: bei mir hier läuft der ATmega1284P mit den 
Standardfuses, also auf 1 MHz - falls bei Ihnen noch der 128 
kHz-Oszillator eingeschaltet sein sollte:
  "Asynchronous Operation of Timer/Counter2 ...  The CPU main clock 
frequency must be more than four times the Oscillator frequency"

von David P. (devryd)


Lesenswert?

Vlt hatte ich es falsch formuliert. Nachdem ich den Qartz an die 
richtigen Pins gehängt habe, geht es jetzt. Vielen Dank für die 
Antworten

von S. Landolt (Gast)


Lesenswert?

> ich hatte ihn an xtal 1 und 2
Das geht nur bei den kleineren, den '8ern': ATmega8, _48 ... _328.

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.