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セグに出力 とやるから さらに処理時間を使います・・・ あまりにも、長かったら 処理をみなおしますが・・・ これくらいなら大丈夫でしょう。 今回は割り込み処理もありませんし。 次回くらいは温度計くらいまでいけるかな? |