2019/02/02(SAT) 【Nチビ】すいおん!B
はい、水温計を続けます。
まずは、センサーの追加実験
フォト

ジップロックに入れて
フォト

お湯を掛けてみる
フォト

857mvくらいまで、出力の電圧が上がりました。
計算してみると約70℃らしい。
普通の温度計が見当たらなかったので
妥当性がわからないけど
まぁ出力電圧が上がったのでヨシとしますか?

続いてプログラム
前回、16bitでシフトする関数を作ったので
今度はそれを使って25倍する関数を作ります。
25 = 11001b なので
25倍するということは
被乗数を4ビット左シフト(=16倍)した値と
被乗数を3ビット左シフト(=8倍)した値と
被乗数を足した値が25倍した値となります。
それをアセンブラで書くと↓こうなります。
フォト

たかだか25倍するのにこんなにステップの処理が必要なのか・・・
あ、ちょっと冗長さは残してます。
もう少し単純化できますが
処理が複雑になっちゃうので・・・
で、
シミュレーターで動かしてみる
前回同様、127を25倍してみます
フォト

赤枠が結果が入っているレジスタです。
027h番地が上位8bit 028h番地が下位8bitです。
2進数で
  0000 1100 0110 0111
16進数で
  0C 67
10進数で
  3175
です。
電卓で計算してみると
  127 × 25 = 3175
なので、大丈夫そうですね。

続いて
32で割るルーチン
32で割るということは
2の5乗で割るということ
ということは、右に5bitシフトすることと同義です。
それをアセンブラで書くとこんな感じ
フォト

シミュレーターで動かしてみましょう
先ほどの127 × 25 の結果を掛けてみます
フォト

結果は赤枠です。
  3175 ÷ 32 = 99.21875
なので、小数点以下は切り捨ててるので
10進数で
  99
なので、大丈夫そうですね。

はい、最後に復習。
センサーからの出力電圧から温度を求める式は
以下の通り
  y = (25/32)(x - 86)
   y: 温度
   x: PICでのAD変換値
ということで
ほぼ計算式はプログラミングできましたね。

でも、
出てきた温度を7セグに出力するのに
結局、100で割って7セグに出力、
10で割って7セグに出力、
そして7セグに出力
とやるから
さらに処理時間を使います・・・
あまりにも、長かったら
処理をみなおしますが・・・
これくらいなら大丈夫でしょう。
今回は割り込み処理もありませんし。

次回くらいは温度計くらいまでいけるかな?