www.mikrocontroller.net

Forum: Compiler & IDEs RTC Appnote AVR134 Verständnissfrage.


Autor: AVRli (Gast)
Datum:

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

Autor: Falk Brunner (falk)
Datum:

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

Autor: AVRli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Falk,

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

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

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

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

  set_sleep_mode(SLEEP_MODE_PWR_SAVE);



Der Interrupt:
ISR(TIMER2_OVF_vect) {
  clk_sec++;
  if (clk_sec == 60) {
    fINT.bSigNewMin = 1;
    clk_sec=0;
    clk_min++;
    if (clk_min == 60) {
      clk_min=0;
      clk_std++;
      if (clk_std==24) clk_std=0;
    }
  }
}



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


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

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.