Zeit messen

  • 1
  • 2
  • Page 1 of 2
TheBeginner
Schreiberling
Avatar
Gender: n/a
Location: Wunsiedel Bayern
Age: 67
Posts: 767
Registered: 06 / 2013
Subject:

Zeit messen

 · 
Posted: 01.04.2021 - 17:44  ·  #1
Hallo,

Ich würde gerne wissen wie lange meine Procedure an Zeit braucht.
Und diesen Wert an mein Display senden, ich habe sowas noch NIE
Programmiert, ich glaube man macht das mit systick ?

Hat von euch etwas fertig ?
Oder könnte Infos geben ?


Gruß Frank
Merlin
Administrator
Avatar
Gender:
Age: 24
Posts: 1409
Registered: 03 / 2005
Subject:

Re: Zeit messen

 · 
Posted: 01.04.2021 - 19:07  ·  #2
You can do it with RTC if you have it or with OnSysTick (which is an interrupt callback) but trying to use IsSysTimerZero will not work - it is too loose.

Be careful not to make your OnSysTick too long though! And be careful too if you use anything bigger than byte - always read until you get the same value twice in a row, unless you only read once, when you can use a flag with safety. So Something like

Code
var
  Elapsed : word;
  Active : boolean;
  
procedure OnSysTick;
begin
  if Active then
    inc( Elapsed );
  endif;
end;

procedure StartTimer;
begin
  Elapsed := 0;
  Active := True;
end;

function EndTimer : word; // in seconds
begin
  Active := FALSE; // atomic to interrupt safe!
  return(( Elapsed + (SysTick div 2)) div SysTick ); // get time in seconds, rounded to nearest secon
           // Elapsed can also be read at this point to give value in EysTicks!
end;

function ElapsedSoFar : word;   // while running
var
  iRead1, iRead2 : word;
begin
  iRead1 := Elapsed;
  repeat
    iRead2 := iRead1;
    iRead1 := Elapsed;
  until iRead1 = iRead2;
  return( iRead1 );
end;
TheBeginner
Schreiberling
Avatar
Gender: n/a
Location: Wunsiedel Bayern
Age: 67
Posts: 767
Registered: 06 / 2013
Subject:

Re: Zeit messen

 · 
Posted: 01.04.2021 - 19:49  ·  #3
Thanks Merlin, I'll test



Gruß Frank
golf
Benutzer
Avatar
Gender:
Location: Donauwörth
Age: 71
Posts: 256
Registered: 11 / 2009
Subject:

Re: Zeit messen

 · 
Posted: 02.04.2021 - 07:14  ·  #4
Hallo Frank.

für hohe Auflösung der Messung würde ich einfach zu Beginn der Prozedure einen Timer starten und am Ende der Prozedure den Timerwert auslesen und anzeigen
z.b.
TCD0CTRLA := $00; // mit $00 =Timer Off !
TCD0CTRLA := $07; // 3..0 Clock.select Prescaler $05: clk/64, 06: clk/256 07 : clk/1024
mit $07 pro Timer-Wert 32 µsec bei 32 Mhz, mit $06 sind 8 µsec pro wert bei 32 Mhz Takt usw.

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

Re: Zeit messen

 · 
Posted: 02.04.2021 - 07:55  ·  #5
Hallo Frank,

ein Bekannter wollte die Geschwindigkeit einer Luftgewehrkugel messen und hat folgenden Ansatz gewählt: Ein externer Quarztakt vom 1 (oder warens 2?) MHz geht über eine Logik auf einen Zähler, der via uC ausgelesen und resettet werden kann. 2 Lichtschranken geben den Takt frei und sperren ihn wieder. Funktioniert eigentlich ganz gut und ist recht genau ...... ich glaube genauer als eine reine Softwarelösung.

Harry
golf
Benutzer
Avatar
Gender:
Location: Donauwörth
Age: 71
Posts: 256
Registered: 11 / 2009
Subject:

Re: Zeit messen

 · 
Posted: 03.04.2021 - 07:18  ·  #6
hallo Frank,
ich hab das mal selbst getestet und die Zeitmessung ist mit sehr hoher Auflösung möglich.
z.b.

testpin:= true; // Testpin nur zum verifizieren der Messung über Oszi genutzt
w1:= 0;
TCC5CNTL:= 0;
TCC5CNTH:= 0;
TCC5CTRLA:= $00;
TCC5CTRLA:= $05; // 32Mhz /64 = 500000 > 2µsec Auflösung
// TCC5CTRLA:= $04; // 32Mhz /8 = 4 Mhz > 250 nsec $03: 125 nsec Auflösung

for w:= 0 to 1000 do // anstelle der zu messenden procedure
w1:= w1+1;
endfor;

TCC5CTRLA:= $00;

testpin:= false;
lo(TimeWert):= TCC5CNTL;
hi(TimeWert):= TCC5CNTH;

LCDxy(0,0);
Write(LCDout,inttostr(TimeWert *2 )+' usec '+ inttostr(w1));

golf

Nachtrag: TCC5 das ist der Timer vom ATXmegaE, bei den anderen ATXmegas entsprechend umbenennen.
TheBeginner
Schreiberling
Avatar
Gender: n/a
Location: Wunsiedel Bayern
Age: 67
Posts: 767
Registered: 06 / 2013
Subject:

Re: Zeit messen

 · 
Posted: 03.04.2021 - 07:27  ·  #7
Guten morgen,

ich Danke euch allen, werde aber erst nächste Woche dazu kommen
alles zu testen.

Es ist Ostern :-)

Gruß Frank
TheBeginner
Schreiberling
Avatar
Gender: n/a
Location: Wunsiedel Bayern
Age: 67
Posts: 767
Registered: 06 / 2013
Subject:

Re: Zeit messen

 · 
Posted: 04.04.2021 - 20:23  ·  #8
Hallo, ich habe mal Golf seinen Code heute getestet.
Ja das haut hin :-)

Ich habe ein 7Zoll TFT mit Controller SSD1963 bei 32Mhz dauert der Aufbau
1,06 Sec puhhh das ist lang


Gruß Frank
  • 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   139   153 · Page-Gen-Time: 0.045524s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI