Forum: Mikrocontroller und Digitale Elektronik Quarzabweichung 800ppm oder Programmfehler?


von Erich Unger (Gast)


Lesenswert?

Hallo,

ich habe ein Arduino Mega 2560 Board, ich programmiere aber mit dem 
Atmel Studio ganz normal, also einen AtMega2560.

Ich habe einen Timer, der jede ms abläuft im CTC Modus, sich also selbst 
bei Vergleichswert zurücksetzt.

In der ISR Routine passiert folgendes:
1
ISR(TIMER1_COMPA_vect){
2
  xx++;
3
  if(xx>=1000)
4
  {  xx=0;
5
    second++;
6
    if(second>=60)
7
    {  minute++;
8
      second=0;
9
      if(minute>=60)
10
      {  hour++;
11
        minute=0;
12
      }
13
    }
14
  }
15
}

Ich habe eine Abweichung von ca. 60 Sekunden Pro Tag. Macht also ~ 
800ppm.
Der Timer läuft mit 1/64 CPU Takt ( 16MHz ) und der Vergleichswert ist 
249, also jede ms ein Compare Interrupt.

Auf dem Board ist ein Quarzoszillator drauf.

Habe ich einen Programmfehler, oder ist der Quarzoszillator so mies?

Es laufen übrigens keine anderen Interrupts, das heißt ein "auslassen" 
ist eigentlich nicht möglich.

Danke für Eure Unterstützung

Erich

von Amateur (Gast)


Lesenswert?

Der Fehler liegt ganz klar in Zeile 42.
Bei den verwendeten Einstellungen, für die publizierte Unterbrechung, 
ist das auch kein Wunder...

von Michael U. (amiga)


Lesenswert?

Hallo,

laut Schaltplan von arduino.cc hat der 2560 einen Keramic-Resonator und 
keinen Quarz. Dann könnte das so schon passen.

Gruß aus Berlin
Michael

von Homer (Gast)


Lesenswert?

das sind aber mit 1/64 und 249 Reload 0.996ms, ergo ist Deine Abweichung 
schon besser als rechnerisch bei perfektem Quarz. Da wären es 
-345,6ms/Tag. Die Abweichung Deines Quarzes liegt schon auf der 
günstigen Seite...

von m.n. (Gast)


Lesenswert?

Erich Unger schrieb:
> Auf dem Board ist ein Quarzoszillator drauf.

Quarzoszillator? Da ist genau so ein bescheidener keramischer Resonator 
bestückt, wie auf dem Uno Board. Dafür ist 800 ppm ja noch richtig gut.
Abhilfe siehe 2. Abschnitt von 
http://mino-elektronik.de/fmeter/fm_software.htm#bsp7
Die Pinbelegung für den Mega2560 mußt Du Dir anpassen.

von Falk B. (falk)


Lesenswert?

@  Homer (Gast)

>das sind aber mit 1/64 und 249 Reload 0.996ms, ergo ist Deine Abweichung
>schon besser als rechnerisch bei perfektem Quarz. Da wären es
>-345,6ms/Tag. Die Abweichung Deines Quarzes liegt schon auf der
>günstigen Seite...

Nö, denn bei einem Reload-Wert von 249 beträgt der Teilerfaktor 250. 
RTFM.

800ppm Abweichung schafft normalerweise kein Quarz, da müsste man sich 
schon SEHR anstrengen.

von Daniel H. (Firma: keine) (commander)


Lesenswert?

Laut den Schematics von Arduino hat das Board keinen Quarz sondern einen 
16 MHz-Keramikresonator mit einer Toleranz von +/- 0.5%, also einer 
Abweichung von bis zu 5000 (!) ppm.

von Erich Unger (Gast)


Lesenswert?

Hallo an alle, und schonmal herzlichsten Dank für eure zahlreichen 
Antworten!

Den Schaltplan habe ich mir schon angesehen:
https://www.arduino.cc/en/uploads/Main/arduino-mega2560_R3-sch.pdf

Habe aber nur auf das Schaltzeichen geachtet, und dachte das wäre 
sowieso ein Quarz, laut Typenbezeichung, aber tatsächlich ein 
Keramikresonator!

Dann ist die Abweichung auch klar, herzlichen Dank!

Gibt es eigentlich noch ein anderes Erkennungsmerkmal, dass es ein 
Keramikresonator ist, anstatt eines Quarzes, außer der eindeutigen Type?

von m.n. (Gast)


Lesenswert?

Ein Quarz braucht keine Kücke und steht gut auf zwei Beinen.

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.