SysTick Abweichung

  • 1
  • 2
  • Seite 1 von 2
pvs-deck
PowerUser
Avatar
Geschlecht:
Alter: 54
Beiträge: 1344
Dabei seit: 02 / 2009
Betreff:

SysTick Abweichung

 · 
Gepostet: 27.03.2019 - 18:50 Uhr  ·  #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
Geschlecht:
Herkunft: zwischen Augsburg und Ulm
Alter: 60
Beiträge: 2155
Dabei seit: 03 / 2003
Betreff:

Re: SysTick Abweichung

 · 
Gepostet: 27.03.2019 - 19:21 Uhr  ·  #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
Geschlecht:
Herkunft: Germany
Alter: 25
Homepage: e-lab.de
Beiträge: 5558
Dabei seit: 03 / 2002
Betreff:

Re: SysTick Abweichung

 · 
Gepostet: 27.03.2019 - 19:36 Uhr  ·  #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
Geschlecht:
Herkunft: Germany
Alter: 25
Homepage: e-lab.de
Beiträge: 5558
Dabei seit: 03 / 2002
Betreff:

Re: SysTick Abweichung

 · 
Gepostet: 27.03.2019 - 19:42 Uhr  ·  #4
Oder den systick mit einem 16bit timer betreiben
pvs-deck
PowerUser
Avatar
Geschlecht:
Alter: 54
Beiträge: 1344
Dabei seit: 02 / 2009
Betreff:

Re: SysTick Abweichung

 · 
Gepostet: 27.03.2019 - 20:18 Uhr  ·  #5
Zitat geschrieben von 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
Geschlecht:
Herkunft: zwischen Augsburg und Ulm
Alter: 60
Beiträge: 2155
Dabei seit: 03 / 2003
Betreff:

Re: SysTick Abweichung

 · 
Gepostet: 28.03.2019 - 07:46 Uhr  ·  #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
Geschlecht:
Alter: 54
Beiträge: 1344
Dabei seit: 02 / 2009
Betreff:

Re: SysTick Abweichung

 · 
Gepostet: 28.03.2019 - 10:49 Uhr  ·  #7
Zitat geschrieben von 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
Geschlecht:
Alter: 25
Beiträge: 1474
Dabei seit: 03 / 2005
Betreff:

Re: SysTick Abweichung

 · 
Gepostet: 28.03.2019 - 11:31 Uhr  ·  #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
  • Seite 1 von 2
Gewählte Zitate für Mehrfachzitierung:   0

Registrierte in diesem Topic

Aktuell kein registrierter in diesem Bereich

Die Statistik zeigt, wer in den letzten 5 Minuten online war. Erneuerung alle 90 Sekunden.
MySQL Queries: 15 · Cache Hits: 14   138   152 · Page-Gen-Time: 0.039006s · Speichernutzung: 2 MB · GZIP: ein · Viewport: SMXL-HiDPI