SysTick Abweichung

  • 1
  • 2
  • Page 1 of 2
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1340
Registered: 02 / 2009
Subject:

SysTick Abweichung

 · 
Posted: 27.03.2019 - 18:50  ·  #1
Hallo rolf,

ich habe den XMEGA mit 62MHz am laufen. Ich nutze den Systimer8 für meine internen Zeitfunktionen.

Dafür wird für jede Sekunde meine internen laufenden Timer erhöht.

Da ich meine Timer-Speicher in einem Process ablege, arbeite ich mit einem UPTIMER und übernehme den Rest für SetSysTimer().

Aber Trotzdem habe ich eine Abweichung von ca. 2-4 s pro Minute.
Systick ist 10, kann ich das noch irgendwie optimieren?
Ich möchte ungerne jede Sekunde meine RTC über I2C dafür lesen.

Code
{ Var Declarations }
var
// Timer / Zeiten
  Time1000ms         : SysTimer8,UpCount;
  xTime1000ms        : byte; // TimerWert
  xTime1000msRest    : byte; // Restzähler
  TimeBlock          : ARRAY [0..25] of TTime;  //Timer Routine Speicher


Code

procedure TimeJob;
var
 i : integer;
begin
// 1000ms erreicht
  xTime1000ms:= GetSysTimer(Time1000ms);

if xTime1000ms >= 100 then

  xTime1000msRest:= xTime1000ms - 100;

   SetSysTimer( Time1000ms, xTime1000msRest); // Timer starten

// Interne Timer erhöhen
//
   for i:= 0 to 25  // Schleife
    do
    //----------------------------------
    
   // hier werden die Timerspeicher erhöht

   endfor; // Ende der Schleife

 endif; // Zeitschleife zu ende

end TimeJob; // Ende Time Job


Thorsten
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2080
Registered: 03 / 2003
Subject:

Re: SysTick Abweichung

 · 
Posted: 27.03.2019 - 19:21  ·  #2
Hallo Thorsten,

du kannst deine RTC so konfigurieren, daß jede Sekunde an einem Pin ein Puls kommt (ich sag mal viele RTCs können das). Den Pin auf einen uC-Port, Interrupt, Sekunde hochzählen. So mach ich das bei meinem Ladegerät weil mir der SysTickTimer auch viel zu ungenau war.

Gruss
Harry
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: SysTick Abweichung

 · 
Posted: 27.03.2019 - 19:36  ·  #3
Hallo Thorsten
der systick hatte noch nie den Anspruch sehr genau zu sein.
Da steckt i.d.Regel nur ein popeliger 8bit timer dahinter.
Wenn die RTC die interne AVRco uhr ist dann kann diese auch mit einem 16bit timer interrupt betrieben werden.
rolf
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: SysTick Abweichung

 · 
Posted: 27.03.2019 - 19:42  ·  #4
Oder den systick mit einem 16bit timer betreiben
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1340
Registered: 02 / 2009
Subject:

Re: SysTick Abweichung

 · 
Posted: 27.03.2019 - 20:18  ·  #5
Quote by rh

Oder den systick mit einem 16bit timer betreiben


Hallo rolf,

ok, ich habe im Handbuch zwar gelesen, das der Systimer durch die Auflösung genauer ist als der Systimer8, aber beim Systimer8 werden die Interrupts nicht disabled. Somit geht dann alles deutlich schneller.

Im Moment passe ich mit Testmessungen meinen Teiler an. Die interne RTC vom XMEGA geht doch dann aber genauso falsch wie der SysTick oder?

Thorsten
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2080
Registered: 03 / 2003
Subject:

Re: SysTick Abweichung

 · 
Posted: 28.03.2019 - 07:46  ·  #6
Moin Thorsten,

kann man nicht an den (manchen?) XMega zusätzlich einen 32.768kHz-Quarz anschliessen für die RTC?

Gruss
Harry
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1340
Registered: 02 / 2009
Subject:

Re: SysTick Abweichung

 · 
Posted: 28.03.2019 - 10:49  ·  #7
Quote by Harry

Moin Thorsten,

kann man nicht an den (manchen?) XMega zusätzlich einen 32.768kHz-Quarz anschliessen für die RTC?

Gruss
Harry


Hallo Harry,

ja kann man, habe ich aber nicht auf der Leiterplatte / Produkt vorgesehen und dies wird dann wohl auch trotzdem den SysTick nicht genauer machen (so wie ich das verstehe)

rolf; wird der Systick mit SetSysTimerM() genauer oder bassiert dieser ebenso auf den nicht so genauen SysTick?

Ärgert mich jetzt etwas, das ich die IRQ/IO Leitung des Externen RTCs nicht wieder zurück auf den XMEGA geführt habe. Hier hätte ich dann die Clock vom 32.768 Hz über Parameter legen können.

Gibt es noch eine andere Möglichkeit ein sauberes 1s oder 500ms TickSignal zu erhalten? Oder sind die internen OSCs nicht so genau? Und wie stark verändert sich dies bei den verschiedenen XMEGA-Serien? Gibt es da evtl. Abweichungen?

Kann man mit dem ADJ irgendwie in der Laufzeit eine Optimierung machen?

Dann würde ich hier eine Kalibrierung mit der externen RTC machen.

Thorsten
Merlin
Administrator
Avatar
Gender:
Age: 24
Posts: 1372
Registered: 03 / 2005
Subject:

Re: SysTick Abweichung

 · 
Posted: 28.03.2019 - 11:31  ·  #8
You might want to take a look at my 'crude timers' with callbacks Crude timers. The code would need tweaking for your crystal, but the repetition would be very precise (not varying by much between successive callbacks). If you are using an oscillator accuracy would be poorer of course. Or maybe use OnSysTick?
  • 1
  • 2
  • Page 1 of 2
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 15 · Cache Hits: 14   138   152 · Page-Gen-Time: 0.023932s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI