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.
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
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
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