RTC Appnote AVR134 Verständnissfrage.

Gast #1276142
Hallo, ;-)

ich arbeite mit einem ATmega 644 und habe versucht die Appnote AVR134 
auf diese CPU zu portieren. Orig. ist ATmega 103 doch der ist wohl 
Geschichte...

Ich habe den Uhrenquarz direkt an PC6/PC7 angeschlossen. Externe C's hab 
ich nicht angeschlossen, vlt. auch der Grund warum die Uhr etwas zu 
ungenau läuft. Doch dazu später... ;-)

Der Timer läuft ja asyncron und die CPU geht in den Sleep Mode. Wenn ich 
es nun richtig verstanden habe wird unabhängig von der Main Clock, bei 
mir 3,8 MHz, alle Sekunde die CPU aufgeweckt durch den asycronen 
Uhrenquarz.

Läuft nach dem aufwecken das Programm im Int dann mit dem 3,8 MHz Takt?

Mein "Problem" ist eben das die RTC auf einen Tag gesehen gut eine 
Minute zu schnell läuft. Wodurch ist mir nun etwas unklar. Liegt es an 
den fehlenden C's am Uhrenquarz oder ist am Ablauf noch was falsch?

Es wird in der Appnote auch von syncronisierung mit der Main clock 
gesprochen, doch wie kann man sicher sein das es so ist?

Vielen Dank für Eure Hilfe.

Gruß AVRli...
#1276399
@AVRli (Gast)

>Läuft nach dem aufwecken das Programm im Int dann mit dem 3,8 MHz Takt?

Muss ja, siehe Sleep Mode.

>Mein "Problem" ist eben das die RTC auf einen Tag gesehen gut eine
>Minute zu schnell läuft. Wodurch ist mir nun etwas unklar.

Das sind 694ppm, So weit kann man keinen Quarz normal ziehen.

> Liegt es an
>den fehlenden C's am Uhrenquarz oder ist am Ablauf noch was falsch?

Zu 99% ein Softwarefehler.

>Es wird in der Appnote auch von syncronisierung mit der Main clock
>gesprochen, doch wie kann man sicher sein das es so ist?

Sourcecode?

MFg
Falk
Gast #1276424
Hi Falk,

ok hier mal die Auszüge aus dem Code...

Initialisierung:
1
//--- Timer 2 -----------------------------------------------------------------
2
//  Timer für Wakeup
3
  fINT.bShortAct = 1;          // STA LED blinken aktivieren
4

5
  long_delay(1000);          // Einschwingzeit des 32kHz Quarzes
6

7
  TIMSK2 &=~((1<<TOIE2)|(1<<OCIE2A)|(1<<OCIE2B));  // disable TC2 interrupt
8
    ASSR |= (1<<AS2);    //set Timer/Counter2 to be asynchronous from the CPU clock 
9
              //with a second external clock(32,768kHz)driving it.  
10
  TCNT2 = 0x00;
11
  TCCR2B |= (5 << CS20);  //exactly 1 second for every overflow to occur
12
  while ((ASSR & (1<< TCN2UB)));  //Wait until TC2 is updated
13
  TIFR2 = (1<<TOV2);                 // Interrupt löschen
14
  TIMSK2 |= (1 << TOIE2);         // Interrupt für Timer2 einschalten
15
  sei();                // Interrupt global freigeben
16

17
  set_sleep_mode(SLEEP_MODE_PWR_SAVE);



Der Interrupt:
1
ISR(TIMER2_OVF_vect) {
2
  clk_sec++;
3
  if (clk_sec == 60) {
4
    fINT.bSigNewMin = 1;
5
    clk_sec=0;
6
    clk_min++;
7
    if (clk_min == 60) {
8
      clk_min=0;
9
      clk_std++;
10
      if (clk_std==24) clk_std=0;
11
    }
12
  }
13
}



und der Sleep Aufruf:
1
  TCCR2B |= (5 << CS20);  //exactly 1 second for every overflow to occur
2
  while ((ASSR & (1<< TCN2UB)));  //Wait until TC2 is updated
3
  fINT.bSleepOn = 1;
4
  sleep_mode();            // in den Schlafmodus wechseln


Hoffe man kann was erkennen... ;-)
Gruß AVRli...

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.