1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

M5STACK BASIC タイマー割り込みの精度

Posted at

計測的な用途で,タイマー割り込みを使ってみました。uiflowでプロトタイプし,thonnyで仕上げてM5に転送して使います。手軽でいいです。

main(抜粋).py
@timerSch.event('timer')
def ttimer():
  global s
  s=s+1

s=0
timerSch.run('timer', 1000, 0x00) # 変数sには経過時間(秒)が入るはず...

M5をWiFiに接続できない環境でしたので,これを選択したのですが,数分とか数時間使うとどうもずれているようでした。

WiFiに接続できる環境で,NTPと比較してみました。

image.png

経過時間 19611 秒,Timerでは442回カウント少なかったようです。2.3%ほど指定した1秒より長いようですね。

タイマーの時間を2.3%減らしてみました。

main(抜粋).py
a = 1000 * (1 - 442 / 19611)
timerSch.run('timer1', a, 0x00)

image.png

いい感じです。ただ,割り込みじゃないときの負荷によって,変わるのかもしれません。

さらに調べていくと,経過時間を知るだけなら utime モジュールが使えそうです。utimeとNTPで比較してみました。

main(抜粋).py
import utime
u0=utime.ticks_ms()/1000 # 最初の時を保存
# 中略
u=utime.ticks_ms()/1000-u0 # 経過時間

image.png

はい。こちらのほうがいいですね。BASICはRTCを持ちませんので,WiFiを使えない場合はutimeを使うようにしてみます。

(補足)Core2も,タイマー割り込みは2.6%ほど遅くなっていました。「そういうもの」なのかもです。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?