googleAI Gemini NanoBananaで製作

 

プログラムで変わったところは〇印のEI();割り込み許可、R_Config_TAU0_1_Start() 1msec定周期割込みタイマースタートの追加と、4つのウエイト関数の入れ替えだけです。

EI()割り込み許可関数 は割り込みを使うプログラムでは必ず必要です。DI()は割り込み禁止です。

R_Config_TAU0_1_Start()は1msecタイマーを動作開始する関数です。自動生成されるConfig_TAU0_1.cの中にあります。他のコンポーネンツも使う前に必ずこのxxx_Start()関数をコールする必要があります。

ウエイト関数はどう変わったのでしょうか? 使ってない旧ウエイト関数と今回使っているウエイト関数の違いを分かりますでしょうか?

旧関数はwtimeをメインプログラムの中で減算して時間を作っているのに対して、新関数はint_wtimeの減算をメインプログラムで行なっていない所が違います。ではどこで?

 

Config_TAU0_1_user.cの中、前にも触れましたが1msecに1回コールされる関数の中でint_wtimeは0でなければ-1されています。

ですので、この1msecの時間が正確であれば、例えば500msecの時間もそれなりに正確になるはずです。

 

 int_wtime変数はメインでも、割り込みでも使うわけですが、割込み側では下記のようにextern宣言(ここでないところで定義されてます)すればOKです。

なお、volatileはコンパイラの最適化で勝手に削除、順番変更、キャッシュされないように追記しています。最適化が無い場合は不要です。

 

 動作させてみるとSW1が押されるとLEDが100msec ON,100msec OFF で点滅します。↓Hレベルが4×25msec=100msec、Lレベルも100msecです。

押さないと500msecになります。

計測するために押さない時の時間を500msecから5msecに変更してみます。

計算上5msec×2=10msec=100Hz 実測で100.191Hzでした。

約0.2%ずれてますが、用途によっては十分な精度と言えます。この精度は内蔵されている発振器の精度です。ハードウエアマニュアルによれば、よく使う条件で±1%で、室温の実測で0.2%、温度が変化しても1%以内に入るようです。

 

以上、番外編で時間を割込みで動作させる方法、時間精度について記しました。

 

RL78_G23_100PJ 回路図、取扱説明書

 

通販サイト