ATXMEGA 128a1 RTC 1ms Counter

OP #4451495
Servus Leuts.
Hab jetzt schon soooo viel von den hier, und anders wo, RTC Beispielen 
durch probiert, aber bin zu keinem Gewünschtem Ergebnis gekommen.

Ich will die RTC im atXmega128a1 einfach nur als Real Time Counter 
nebenher laufen lassen, und mich ab und zu (duch anderen Interrupt 
ausgelößt) auf den RT Counter synchroniesieren.
Das ganze möglichst auf 1 ms basis.

Laut angehängter Figur 17-1 sollte ich den RT Counter mit 1024 Hz 
betreiben können, durch die auswahl des Internen 32KHz Oscillator und 
duch die umstellung des RTCCTRL Multiplexer auf den DIV32.

Hier mal mein code dazu:
CCP    = CCP_IOREG_gc;          // Schützt I/O Register, Interrupts 
werden ignoriert
  OSC.CTRL = OSC.CTRL | OSC_RC32MEN_bm;  //enable internal 32MHz 
oscillator
  while(!(OSC.STATUS & OSC_RC32MEN_bm));  //wait for stable

  CLK.CTRL  = CLK_SCLKSEL_RC32M_gc;    // select internal 32MHz 
oscillator as CLK input
  CLK.RTCCTRL = 0x05;            // RTCSRC[2:0] = 0b010 für "1.024kHz 
from 32.768kHz internal oscillator"
                      // & RTCEN = 0b1 für "...enables the selected RTC 
clock source for the real-time counter."
  while(RTC.STATUS & RTC_SYNCBUSY_bm);  // wait on RTC

  RTC.CTRL  = RTC_PRESCALER_DIV1_gc;  // Prescaller = 1 turns RTC on

Jetzt geht, der Counter allerdings in ca. 70us schritten und nicht in 
1ms schritten hoch...
nen plan woran das liegt?

Vielen Dank!
Angehängte Dateien:
(Firma: keine) #4451558
Mir fehlt da das vollständige Programm, in dem angegebenen Code wird nur 
der 32 MHz Oszillator aktiviert und für Systemtakt selektiert, wo 
aktivierst du denn den internen 32.768Hz Oszillator?

1
OSC.CTRL = OSC.CTRL | OSC_RC32MEN_bm | OSC_RC32KEN_bm;  //enable internal 32MHz and 32.768 Hz oscillator
OP #4451700
@Daniel H.
Vielen Dank für die schnelle Antwort!
Das war der ganze Quellcode für die Initialisierung ^^
Ich habe mit dem von dir vorgeschlagenem Befehl jetzt auch den internen 
32KHz Oszillator aktiviert (hoffentlich richtig).

Hier der Initialiesierungscode noch einmal leserlich:
1
  CCP    = CCP_IOREG_gc;          
2
  OSC.CTRL = OSC.CTRL | OSC_RC32MEN_bm | OSC_RC32KEN_bm;
3

4
  while(!(OSC.STATUS & OSC_RC32MEN_bm));
5
  CLK.CTRL  = CLK_SCLKSEL_RC32M_gc;
6
        
7
        /*rtc clock source 1KHz from internal 32KHz*/
8
  CLK.RTCCTRL  = CLK_RTCSRC_RCOSC_gc|CLK_RTCEN_bm;                
9
  while(RTC.STATUS & RTC_SYNCBUSY_bm);
10
  
11
  RTC.CTRL  = RTC_PRESCALER_DIV1_gc;

Sollte so nun nicht die RTC mit 1KHz (~1ms) getaktet werden?
OP #4458392
Hey Jungs, ich hab mich nun Entschieden anstelle der RTC einen Timer 
Counter zu verwenden.
Das Problem bei meiner RTC war vermutlich nur, dass der Simulator die 
Systemzeit einfach nur Ausrechnet und das anhand von den eingestellten 
32MHz. Da die RTC aber mit 1KHz getacktet werden sollte, konnte ich die 
Tacktperiode nicht eindeutig bestimmen.

Leider kann ich mir so auch nicht sicher sein, dass die RTC so Tacktet 
wie ich des will, und auf dem xmega lässt sich das auch nur schwer 
testen, also nur mit nem Oszie.

Vielen Dank für deine Hilfe Daniel.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 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.