Forum: Mikrocontroller und Digitale Elektronik richtiger Quarz für Clock...


von Marcel (Gast)


Lesenswert?

hi zusammen,

ich hoffe es kann mir einer von euch helfen.
ich finde keinen richtigen quarz für mein board.
was ich vor habe ist eine clock zu intergrieren habe aber an meinem 
controller keinen eingang für einen 32.768khz quarz somit bin ich auf 
den hauptquarz angewiesen...ich bekomme immer total schiefe werte...das 
passt mir überhaupt nicht...gibt es überhaupt einen passenden?? wenn ja 
sollte der zwischen 4 und 8 mhz liegen. danke für eure hilfe.

gruß,
marcel

von crazy horse (Gast)


Lesenswert?

ist doch nur ne Softwarefrage, dürfte mit jedem beliebigen Quarz gehen. 
Die MC-Quarze sind allerdings nicht besonders genau, zumindest nicht 
die, die man für wenige Cent bei Reichelt und Co kauft.

von Marcel (Gast)


Lesenswert?

wo bitte schön ist ein 4Mhz genau??

beim 8bit timer und einem teiler 1024 komme ich auf 65,536 ms.wie soll 
ich denn da auf eine sekunde kommen ohne das mir die uhr am tag ein paar 
sekunden wegläuft?

von thkaiser (Gast)


Lesenswert?

Man kann den Timer mit einem Wert vordefinieren. In jedem Interrupt wird 
dieser Wert wieder in den Timer hineingeschrieben - damit kann man sogar 
Ungenauigkeiten des Quarz ausgleichen, die Uhr also kalibrieren. Noch 
einfache ist es, wenn Du den 16-Bit Timer (Timer1) des Atmel benutzt und 
mit dem Compare-Interrupt arbeitest. Es gibt eine Option, die den Timer1 
in diesem Fall gleich löscht. So kann man aus einem beliebigen Quarz 
beliebige Frequenzen erhalten. Im Datenblatt ist alles beschrieben.
Ansonsten Quarze benutzen, deren Freqenz eine 2er-Potenz ist. Es gibt 
nicht viele, aber es gibt sie.

von Peter D. (peda)


Lesenswert?

Hallo Markel,

Du kannst jeden Quarz nehmen und trotzdem eine hochgenaue Uhr damit 
bauen.

Kein Mensch kann nämlich erkennen, ob Dein Sekundentakt wirklich genau 
ist. Du must also nur verhindern, daß sich diese kleinen Fehler 
addieren.
Und das geht sehr einfach:

http://www.specs.de/users/danni/appl/soft/clock/timebase.htm

Die C-Routine hat den Vorteil, daß sie alle Korrekturrechnungen 
selbsttätig ausführt.
Du must also nur die genaue Quarzfrequenz eintragen.

Theoretisch erreichst Du damit nur wenige Sekunden / Jahr. Praktisch 
wirds durch Temperaturschwankungen etwas mehr sein.


Peter

von Marcel (Gast)


Lesenswert?

dank erstmal peter.
also ich hab mir den code mal angeschaut und werde daraus irgendwie 
nicht richtig schlau.
z.b:

void t0_int( void ) interrupt 1
{
  static uchar prescaler = 0;
  union bw i;
  if( --prescaler == 0 ){

du legst ein uchar prescaler in der int routine an mit wert 0. danach 
kommt deine if schleife, in der du erst 1 von prescaler abziehst und 
dann auf 0 vergleichst.
meiner meinung nach kann das innere der if bedingung niemals ausgeführt 
werden weil prescaler vorher immer auf null gesetzt wird und dann noch 1 
abgezogen wird.

von Peter D. (peda)


Lesenswert?

Hallo Marcel,

static Variablen innerhalb einer Funktion behalten ihren Wert vom 
Verlassen bis zum nächsten Aufruf bei und werden nur einmal vor dem 
main() initialisiert.

Sind quasi wie globale Variablen, bloß eben nur innerhalb der einen 
Funktion sichtbar.


Als Editor nehme ich Borland C++ 3.0, da ist eine schöne deutsche Hilfe 
mit dabei, die sowas auch erklärt.



Peter

von nobody0 (Gast)


Lesenswert?

Das ist aber ein bischen übertrieben, denn durch Exemplarstreuung und 
Temperaturschwankungen hat man auch mit nicht billigen Bauteilen eine 
Ungenauigkeit von ca. 1 s pro Tag, selbst wenn man den Quarz genau 
ausmißt. Dazu kommt noch die Alterung.
Mit Temperaturstabilisierung, aktiv gealtertem Quarz und Eichen mit 
mind. 12-stelligem Frequenzzähler kann man es genauer bekommen, aber ein 
DCF-77-Empfänger ist meist billiger.

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.