ひさびさのプログラミング
- 2022.01.07 Friday
- 10:49
JUGEMテーマ:アマチュア無線
ここ1〜2ヶ月ほどはArduinoやPICで遊んでいました。かつては仕事で、ワンチップマイコンのプログラムをやっていたこともあったのですが、だいぶ忘れていました。 C言語の変数型とか演算子がすぐ出てこなかったりしましたが、なんとか戻ってきました。まるでリハビリです。
とりあえず、練習用にPIC(PIC16F866)で温度計をつくりました。
玄関の温度は3.4度。古い家なので、寒いです。
温度センサーのADT7410は精度が-0.05度(typ)と高精度です。
センサーとの接続はI2Cで、7seg LED をダイナミック点灯するだけの機能です。 いまどきのプログラミングではツールやネット上に便利なライブラリーなどがあるので、それらを使いこなせれば、楽勝でしょう。
でも、ここはリハビリなので、そんなものは使いません。 PICはMSSPのレジスターを直接操作します。 意外と難しいのがバイナリーで出力される温度データを表示できるように10進に変換する部分です。 C言語なら、変数にfloatを使って、sprintf関数で簡単に変換できます。でも、PICのようなワンチップマイコンでは浮動小数点演算のハードは実装されていないので、C言語でfloatを使うとソフトウエアライブラリがリンクされます。 また、printfのような書式変換ライブラリーもかなりの大きさがあるし、複雑なので遅くなります。そもそも8ビットPICではメモリーが足りなくて、sprintfは使えないようです。
ということで、float や 便利な関数やツール類を使用しないとなると、固定小数点演算をすることになります。 DSPのプログラミンをやったことがあれば、Q15フォーマットなどの固定小数点をご存知でしょうが、そのさわりの部分の知識が必要です。
ちょっと大げさなこといいましたが、やっていることは難しくありません。 単に知っているかどうかです。