P0ピンを「1msだけオン、99msの間オフ」というプログラムの実機評価をしてみた。
実験環境はこんな感じ。
①普通にやったとき
オン時間(実測3.8ms)、オフ時間(実測120ms)とも、実測は長くなっている。
以下のブログでは、
[ずっと]サブプログラムの実行では,一番下から一番上に戻るのに、20msのpause(一時停止)が挿入されているとなっている。
https://coskxlabsite.stars.ne.jp/html/for_students/microbit/programming/makecodeprog.html
②オフ時間を、20msのpauseを考慮して、プログラム上で短くしてみる。
オン時間(実測3.8ms)、オフ時間(実測100ms)となり、オフ時間は意図した時間になった。
③「**ミリ秒ごとに」というブロックがあったので、100msごとに設定してみて動作させてみた。
オン時間(実測3.8ms)、オフ時間(実測96ms)となり、周期10Hzはきれいに出るようになった。
(オフの時間は、100ms-3.8ms≒96msなので自動で計算され、正しい)
④オン時間の短縮について確認してみる。
まず、ピン設定の遅延時間を調べるため、一時停止を削除してみる。
オン時間は実測1.350usなので、無視できる。
一時停止ブロックの処理に時間を要しているということになる。
⑤「バックグラウンドで実行する」、「全体を一時停止(wait)」というブロックの存在を知ったので試してみる。
オン時間(実測1ms)、オフ時間(実測95.6ms)となり、ほぼ意図した動きとみなせる。
ほかにもアナログ出力、アナログ出力周期を使ってもできそうな気がする。
上記までを応用して、下記プログラムを作る。
P0が1msオン、
9msオフ
P1が1msオン
9msオフ
P2が1msオン
9msオフ
70msオフ
→1周期100ms
⑪バックグラウンドで実行
P0:CH1:黄色 P1:CH2:水色 P2:CH3:紫色
オン時間(実測960us)、オフ時間(実測95.4ms)となり、ほぼ意図した動きとみなせる。
⑫今回、最後のオフ時間が長いので、それを見越せば、[ずっと]サブプログラムでも大丈夫か確かめてみる。
オン時間(実測940us)、オフ時間(実測95.4ms)となり、ほぼ意図した動きとみなせる。
参考URL
・micro:bit MakeCodeプログラミング
https://coskxlabsite.stars.ne.jp/html/for_students/microbit/programming/makecodeprog.html
・ブロックを積みながら(31) BBC micro:bit、バックグラウンド実行とループ速度https://jhalfmoon.com/dbc/2021/08/12/%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%82%92%E7%A9%8D%E3%81%BF%E3%81%AA%E3%81%8C%E3%82%8931-bbc-microbit%E3%80%81%E3%83%90%E3%83%83%E3%82%AF%E3%82%B0%E3%83%A9%E3%82%A6%E3%83%B3%E3%83%89%E5%AE%9F/