closed

Loginbox

Please enter your username and password into the following fields to log in.


  • Username:
  • Password:
  •  
  • Auto log in on every visit.


  •  

SysTick Abweichung



pvs-deck offline
PowerUser
Avatar
Gender: male
Location: GERMANY 
Age: 48
Posts: 1015
Registered: 02 / 2009
Homepage Private message
Subject: SysTick Abweichung  -  Posted: 27.03.2019 - 18:50   -  
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
---------------------------------------------------------
Nichts ist unmöglich in der Elektronik und der Software, die Grenzen
setzt nur das Budget, Zeit und der Entwickler! ( P V S - D E C K )
go down go up
Harry offline
PowerUser
Avatar
Gender: male
Location: GERMANY  zwischen Augsburg und Ulm
Age: 54
Posts: 1520
Registered: 03 / 2003
Private message
Subject: Re: SysTick Abweichung  -  Posted: 27.03.2019 - 19:21   -  
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
Elektronik arbeitet mit Rauch - wenn man den Rauch raus läßt, funktioniert es nicht mehr.
Electronics works with smoke - if you let the smoke out, it works no longer.
go down go up
rh offline
Administrator
Avatar
Gender: male
Location: GERMANY  Germany
Age:
Posts: 5450
Registered: 03 / 2002
Homepage Private message
Subject: Re: SysTick Abweichung  -  Posted: 27.03.2019 - 19:36   -  
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
Cars don't buy cars -- Autos kaufen keine Autos.
Henry Ford
go down go up
rh offline
Administrator
Avatar
Gender: male
Location: GERMANY  Germany
Age:
Posts: 5450
Registered: 03 / 2002
Homepage Private message
Subject: Re: SysTick Abweichung  -  Posted: 27.03.2019 - 19:42   -  
Oder den systick mit einem 16bit timer betreiben
Cars don't buy cars -- Autos kaufen keine Autos.
Henry Ford
go down go up
pvs-deck offline
PowerUser
Avatar
Gender: male
Location: GERMANY 
Age: 48
Posts: 1015
Registered: 02 / 2009
Homepage Private message
Subject: Re: SysTick Abweichung  -  Posted: 27.03.2019 - 20:18   -  
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
---------------------------------------------------------
Nichts ist unmöglich in der Elektronik und der Software, die Grenzen
setzt nur das Budget, Zeit und der Entwickler! ( P V S - D E C K )
go down go up
Harry offline
PowerUser
Avatar
Gender: male
Location: GERMANY  zwischen Augsburg und Ulm
Age: 54
Posts: 1520
Registered: 03 / 2003
Private message
Subject: Re: SysTick Abweichung  -  Posted: 28.03.2019 - 07:46   -  
Moin Thorsten,

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

Gruss
Harry
Elektronik arbeitet mit Rauch - wenn man den Rauch raus läßt, funktioniert es nicht mehr.
Electronics works with smoke - if you let the smoke out, it works no longer.
go down go up
pvs-deck offline
PowerUser
Avatar
Gender: male
Location: GERMANY 
Age: 48
Posts: 1015
Registered: 02 / 2009
Homepage Private message
Subject: Re: SysTick Abweichung  -  Posted: 28.03.2019 - 10:49   -  
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
---------------------------------------------------------
Nichts ist unmöglich in der Elektronik und der Software, die Grenzen
setzt nur das Budget, Zeit und der Entwickler! ( P V S - D E C K )
go down go up
Merlin offline
Schreiberling
Avatar
Gender: male
Location: UNITED KINGDOM 
Age:
Posts: 868
Registered: 03 / 2005
Private message
Subject: Re: SysTick Abweichung  -  Posted: 28.03.2019 - 11:31   -  
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?
Merlin.

:magic:

Software is a black art.
go down go up
pvs-deck offline
PowerUser
Avatar
Gender: male
Location: GERMANY 
Age: 48
Posts: 1015
Registered: 02 / 2009
Homepage Private message
Subject: Re: SysTick Abweichung  -  Posted: 28.03.2019 - 12:52   -  
Quote by Merlin

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?


Hello Merlin,
I take a look at your Crude Timers, thanks for the tip

Thorsten
---------------------------------------------------------
Nichts ist unmöglich in der Elektronik und der Software, die Grenzen
setzt nur das Budget, Zeit und der Entwickler! ( P V S - D E C K )
go down go up
golf offline
Benutzer
Avatar
Gender: male
Location: GERMANY  Donauwörth
Age: 66
Posts: 146
Registered: 11 / 2009
Private message
Subject: Re: SysTick Abweichung  -  Posted: 28.03.2019 - 17:18   -  
Hallo Thorsten,
geht das nicht evtl besser mit einem normalen Timerinterrupt. Die 62 Mhz lassen allerdings keinen genauen Teilerwert zu. Aber der Takt des ATXmegas wird je eh nicht sehr genau sein.


interrupt TCD0_INTOVF; // counterzeit 1 sec
begin
SekBol := true; //
end;

// in der main

// Timer setzen für ca. 1 sec Overflow @62MHz
TCD0PERL:= $83; // PERL - Period Register L Bite 7..0
TCD0PERH:= $EC; // PERH - Period Register H 15..8
TCD0CTRLA:= $07; // 3..0 Clock.select Prescaler 03= Clk/4 04: clk/8 05: clk/64 06: clk/256 07 : clk/1024
TCD0INTCTRLA:= $02;

// mit TCD0CTRLA := $00; ist der Timer Off

in der loop:

if SekBol= true then
SekBol:= false;
.......
endif;

Golf
go down go up
 


Registered users in this topic
Currently no registered users in this section

Delete cookies of this forum  •  FAQ / Help  •  Team page  •  Imprint   |  Local time: 20.06.2019 - 15:33