サーミスタ103JTで計った温度をシリアル出力
サーミスタ103JTで計った温度をアナログ出力
この製作で使ったマイコンは8ピンのATtiny85。
内蔵タイマーが8ビットで、PWM出力でD/Aするには
分解能不足。
そこで、DACを使ってアナログ電圧を出力しました。
今回の「ダイソー ミニケース 5個組」を使った工作。
やはりサーミスタ103JTを使った温度計なのですが、
シリアル出力でデータを得ようと目論見ました。
14ピンのATtiny841を使って、5つのサーミスタを
つなげられるようにしています。
ブロックダイヤグラム
1秒間隔で測定値を出力します。
先頭が6桁数字が連番。
データ抜けをチェックできます。
スペース区切りで5つの温度を出力。
セミテックの103JT温度・抵抗値表が元データ。
-30.0℃~125.0℃をテーブルにしています。
※10bit A/D値から温度データテーブルを
直に呼び出すことで、浮動小数点関数計算
を使わなくて済みます。
ATtiny841のROMサイズは8kバイトしかあり
ません。
浮動小数点や「sprintf」による数値→文字列
変換関数を使うと、ROM領域が足らなくなって
しまいます。
可能ならROM半分のATtiny441でも動くようにと。
ところが・・・ここでも失敗に遭遇。
ATmega328Pを使ったピピちゃん温度計
では、外に取り出した内蔵基準電圧1.1Vを使っての
サーミスタ抵抗測定がうまく行ったので、ATtiny841でも
大丈夫だろうと考えたのです。
※ATtiny841と同じ14ピンのATtiny84は
内蔵基準電圧を外に取り出せない。
そして、外部からの基準電圧も2.0Vが
最低というスペックで断念。
・回路設計はデータシートの熟読から。 スペックをちゃんと調べろ!
こんな接続をしたかった。 (ATmega328Pでは実績あり)
ATtiny841のAREFピンからちゃんと1.1Vは出てきました。
これを低オフセット電圧のオペアンプでバッファします。
しかし、この出力を「神様抵抗」のプラス側としてA/D変換
すると・・・オープンにしても(10kΩでAREF電圧につながる)
フルスケールの「1023」が出てこないのです。
5つのチャンネルとも、計算値より低い値が出るのです。
フルスケールに近い電圧の高い所だと2~3。
電圧が低い所だと、3~4、出てくるA/D値が小さいのです。
全体に下へシフトしてる感じです。
※ATmega328Pではこんなことには
ならなかった・・・
そこで、外部から基準電圧を供給してみることに
しました。
※基準電圧を出力するAREF端子。
ノイズ低減のためにパスコンを入れる
ためのもの。この電圧出力を利用
できるとは、データシートには記され
てない。
※ATtiny85や84では2.0Vが最低電圧
という制限あり。
そうすると大丈夫に。
※完璧に誤差がないというわけではく
そこそこエエ感じ。
ということで、
「同じシリーズのチップでうまいこと行った
経験があっても、始めて使うチップは、何が
あるかわからへんでぇ」
と、あたりまえの結果に。
※L型ダブルのピンヘッダーが無かったんで、
オムロンのツメ付ヘッダーを切断改造。
| 固定リンク
「AVRマイコン」カテゴリの記事
- ATmega4809のシリアルポート(2023.01.18)
- PWMでD/A変換:アナログマルチプレクサの応用で(2023.01.02)
- ガレージのLED表示デジタル時計がダウン(2022.12.20)
- FLUKE 87IV デジタルテスターのデータをIrDAで吸い上げる(2022.11.15)
- 数値をBCD出力(表示)するルーチン(2022.10.08)
「温度測定」カテゴリの記事
- 今日の修理:熱電温度計(2023.11.05)
- 120W電子負荷 予備実験#2 冷やすのはファンだ!(2023.10.10)
- Arduino サーミスタを使った温度測定で 【ゼロ除算問題】(2023.03.23)
- A/Dコンバータでサーミスタの抵抗値を読む サーミスタをつなぐ場所は?(2023.03.21)
- トラ技の目次検索 『サーミスタ』(2023.03.19)
コメント