Wanderlst

温度計

Attiny45の内蔵温度計を使ったLCD温度計の作成

回路図はこちら
ソースはこちら

作成から2年近く経っても電池交換なしで動いています。

2008.1.7 トラ技に

トラ技に、PICでLCDを使った駆動方法の記事が載っていました。考えることは一緒なのですが、液晶のBPピンも振った方がいいみたいです。そりゃそうですなー。

2005-11-28 温度計完成

CodeVisonからgcc-avr用にプログラムを書き換えて、色々調整を行い、ようやく完成しました。
結論としては、電池2本での駆動時で、消費電流0.244mA(244uA)とかなりの低消費電流となり、これなら目標にしていた半年間の駆動も可能になったかと思います。結局、MAX856は消費電流多すぎて使いませんでした。

gcc-avrに変更した段階で、6,4MHz時に2.4mA電流食ってたんですが、AVRのペリフェラルをプログラムでOFFにしていなくて、これを行ったところ、1.2mAの減少につながりました。電池駆動する場合は、PRRレジスタによる未使用ペリフェラルの電力管理を行いましょう(笑
最終段階で6.4MHzから内部WDの128kHzにしたんですが、クロック差50倍で、消費電流約5倍ですか。今回は消費電力については色々勉強になりました。消費電流落とす一番手っ取り早い方法は、クロック落とすことですね。

ATtiny45の温度計は調整された温度計と比較して調整していったら、±3度ぐらいまではでました。個々のデバイスによって調整し直さないといけませんが、高温度検出等には非常に使えるデバイスかと思われます。

2005-11-26 winavrのATtiny45対応

温度計用のLCDが届いたので、基板を作り、さてプログラム・・と思っていたら、CodeVisionではサイズオーバーとか表示されたあと、例外エラーが起る。
関数1個追加しただけなのに・・。てか、たったこれだけでどれだけサイズふえてんねん。

イライラしながら、WinAVRのHPを覗いてみるが・・・。やっぱバージョンアップはされてないので、gccに関するHPみてたら、最近のgcc-avrは対応済みと書かれている。・・・・WinAVRのリリースが遅いのかな・・?

ふと、Tiny45を売っているTIプラザではアセンブラでやってんのかなあ?とふと思い、サポートページを見ていたら、
>※ WinAVR 20050214ではTiny45はサポートされていませんので、AVR-WikiからWinAVR20050801.7z(差分バイナリ)を入手してオーバーライトする必要があります

┌(_△_;)┐な、なんですとぉぉぉぉ!!差分パッチなんてあったのかあああ!

CodeVisionアンインストール確定

2005-11-03 LCDドライブ方法

ふと思ったんだけど、LCDって直流流すと焼き付けを起こすけど、なら交流ならええのか・・?単に正弦波か与えたら駆動できるんかな〜・・。

調べていたら、トラ技の2004年2月号に、液晶のことが書かれた記事を発見。もってないよorz
バックナンバーの在庫も2004年6月までで、あるかどうかわからーん。

・・・まあ、論より証拠。買ってきて試すしか・・・(汗

(後日試したら、普通に動作しました。データシートの電圧範囲内で交流としてAVRで正方波を作り出してやるだけです。

2005-11-02 LCDの消費電流

消費電力の多さで未だに悩みの種の温度計だけど、消費電流の減少に成功した。
プルアップ抵抗を取っ払って、AVRを128kHz駆動で数mA減らし、2桁のLEDの表示回数を抑えると、20mAが5mAまで減少した。てか、AVRのIOピン駆動でLEDって光らせることができたのね。しらんかった^^;

ただ、LEDを取ると200uAまで減るのに、LCDつけた瞬間5mAまであがってしまう。ううう。かなりの電流食いだ。仮に2000mAhの電池で、半年間(180日)駆動させるとすると、180日×24時間で4320時間なので、0.46mAに抑えれば、電池一本で半年駆動可能って事になる。すでにCPUとシフトレジスタ(74HC164)で0.2mA食ってるから表示器で0.26mAしかつかえない。こんな低消費電流でやっていけるのは、LCDしかない・・・んだが、2桁表示なんて小さいの無いんだなあ・・。Digikeyに売ってはいるけど、LCDコントローラが入手できない。T-T

ところで、秋月に売っているバックライトなしのキャラクタ表示LCDだけど、これってすごいね・・。
消費電流全部uAでかかれとる・・。このサイズでもこんな低消費電流。7-seg LEDならぬ、7-seg LCDなんて売ってたら飛びつくのになあ・・。

・・・・売れないか(^^;

2005-10-27 太陽電池+MAX856

えー、試しに太陽電池でMAX856を動かしてみました。てわけで、結果ですが。

秋月に売っていた最大1.5Vの太陽電池で、MAX856動作致しました。

ただね、MAX856の動作範囲って最低0.8Vなんだけど、最初に5Vまであげるためには、入力を1.2Vぐらいまで一度引き上げてやる必要があるのね。言い換えると、最初だけ光源ぎりぎりまで近づけないといけない状態。それ以降であれば、その辺に置いておいてもいいんだけど・・・。
330Ωの抵抗を出力につけたら一気に2V付近まで落ち、後は徐々に1V付近まで下がりました(T-T

だめだこりゃ。

2005-10-24 MAX856を使用した場合の電池の持ち

温度計は無事完成に至ったので、電池の持ちがどれくらいになるのか、電池をつけっぱなしの状態で放置した。
約15時間経過で、1.52Vから1.3vまで下降していた。温度計はずっと電源ONの状態でつかうので、このままでは3日に一度電池を取り替えないといけないことになる。(汗

消費電流をはかってみた。
電池と直列に電流計を接続すると、50mA流れている。かなりでかい。うーん。なんで50mAも流れるのかが疑問ではあるが・・。
試しに、MAX856をはずし、VCCラインに電池2本(3V)をつなげてみる。15〜20mAの間を数値がさまよっている。数字によってLED消費電流が違うため、計算通りである。
てことは、3〜5mA程度CPUが消費していることになる。クロックが速いとそれだけ電力消費が大きいのもうなずける。128kHzクロックで動作できればいいが、ISPが早すぎてプログラミングができなくなるという事態に陥るため、パラレルプログラミングができる環境でないとWD Clockは使えないよう(?)だ。
(ISPのSCKクロックを落とせばいいと思うのだが、AVR Studioの設定では4kHz以下にできないのだ・・。4kHzで取りこぼしが起きる状態なので、他のライタを使わないとダメであろう。)

電池駆動する回路は作ったことがあるが、常時電力消費しているわけではないため、あまり問題にならなかった。数ヶ月もたせるというなら、1mA以下に抑えないとだめでしょうねえ・・。結局、機能はすれど、実用性がないため、電源については他の方法を取らないとダメである。

代用方法を考えていたら、秋月で売っていた太陽電池のことを思い出した。
早速HPを見てみると、2V(解放時)で250mA(短絡時)もとれるのがあるもよう。電流は0Ωでの最大値なので、部屋のなかで使用したときにどこまでとれるのか疑問ではあるが、300〜400円と安いので、試してみる価値はありそう。

早速注文だ。

ところで、太陽電池といえば、子供の頃、太陽電池を買ってもらって、扇風機の羽根のついたモータをつけて駆動させた記憶がある。部屋の中では何とか動く程度だったが、机に設置してあった白熱電球にかなり近づけて、結構動いたような記憶がある。もっとも、白熱電球の熱の方が熱くて、扇風機になってなかったのだけど(笑)
父親に見せたら、「それって効率悪いな〜」などと言われたことをよく覚えている(笑
まあ、子供の実験だし、効率のことは全然考えてなかったしね。

2005-10-22 温度計その3

結局温度計はMAX856を使って電池一本でATtiny45を駆動することにしました。
まあ、ぎりぎり載ったわけです。

ところで、WinAVRなんだけど、ATtiny45サポートしてないことに後から気がつきました(涙
このことに気がついたのは、デバイスを購入して設計し終わった後なのでした。どうするか、アセンブラで書こうか・・。

他のCコンパイラを探していたら、CodeVisonAVRというコンパイラを発見。これならtiny45もサポートしてる上、2Kまでのコードならフリーなので、使ってみることにした。

早速インストールして起動して、プロジェクトを作成するときに驚いた。デバイスを選ぶと、そのデバイスの初期設定をGUIでできるという優れもの。そのまま設定してOKをおすと、Cソースのスケルトンができあがる。

最初はいろいろ感動していたが、WinAVRとは結構相違点があり、割り込みの定義の仕方もチト違う。
うーむ。これではなあ・・・。

1時間いじってみた感想。
・結構厳密(?)なC言語仕様
 コードの前に変数の定義がないといけない等
・関数ローカルでROMを定義できない(グローバルでは可能)
 ex) const static unsigned char a[] = {0, 0, 0};
 7セグLEDの数字用データテーブルがエラーでひっかかった。
・WinAVRで使っていた定義がない
 PB0とか、PUDとかのビット定義やね
・一度ウイザードでデバイスの初期設定を定義してソースを作ると、手動変更しかできない(?)
  ふつーに数値でかきだすので、変更する場合はかなりわかりずらい
・エディタが使いづらい(笑

【結論】
私は WinAVRのほうがいい(笑
一番困ったのが、PB0とかのビットの定義がない点。ソースの可読性を重視するなら、ないとこまるのですよ。
あと、CodeVisionから直接プログラムすると、なぜか次からプログラムモードにはいれなくなります。ヒューズのリセットビットを消してるんや無いか・・?
なので、初期設定のままtiny45に書き込んだら、次から書き込めなくなりまた一個無駄になりました。たぶん、パラレルライタでヒューズを戻してやればいいと思うけど、シリアルライタしかないし。

結局AVR Studioのツール使っていつも通りに書き込みましたよ。

WinAVRがデバイスをサポートしてない以上、しかたないので、今回はCodeVisonで作りましたが・・。
コードの生成効率とか、速度については全く検証していないので、どちらがいいとは言えないのですが、CodeVisonはかなり使いやすいです。ええ。AVR初心者にはかなり取っつきやすくていいと思います。が、ソースをエディタでごりごり書くのが得意な人は、無用でしょうね。

2005-10-21 MAX856結果報告

MAX856だけど、コンデンサの値を変えて実験してみることにした。
温度計1号に搭載したMAX856はなぜか8Vの出力になる&コンデンサの異常発熱というよく分からない失敗に終わっているので、きちんと5Vがでてるのか気になったからだ。

持っていなかった推奨のショットキーと68uFの電解コンデンサ、47uHのコイルをdigikeyにて購入し、ユニバーサル基板に部品を乗せて配線してみる。ちゃんとでるかな?電池をつなげてみた。

電池の電圧がそのままでてる。(涙

なーぜーだーー

回路チェック。たった部品5点のICに振り回されている気分。(T-T
よくみると、ハンダ付けしてないところがあった。接続してなかった部分のハンダ付けを行い、再度電池をつなげると・・。
おお。でてるでてる。5V。正確には4.95Vですか。温度計に搭載したMAX856は無負荷で8Vでてたから、きちんとでている模様。

コンデンサやダイオードを変更してみた。
とりあえず、ダイオード。手持ちのショットキーEK04に変更。きちんと5Vでてる。コンデンサも47uF等にかえたが、問題なく5V出力していた。唯一変更しなかったのはコイルだけど、これが規定値のものじゃないとだめなのかなあ。データシートには、10〜100uHでOKとか書いてあったはずなんだけど。
ICが壊れたという可能性もあるけど・・・。

まあ、何はともあれ電池1本でも5Vでているので、起動に2本必要というわけではなさそうだ。
1本で5Vでるのであれば、非常に使えるICでありますな。外部部品5つですむし

2005-10-20 温度計その2

とりあえず、時計に温度計の回路が入るか確認するため、あててみた。

入ることは入るけど、ぎりぎり・・。予定外の昇圧回路で、部品点数が増えたためゆとりがない。相変わらずコンデンサは少し発熱したままで、温度計ICまで温度が伝わって暖かくなってる始末。これでは電圧がまともにでたとしても意味がない。

そもそも意外と電流食いのAttiny26Lをどうにかしなきゃいけなくて、それに変わるAVRを探したんだけど、結局20pinでA/Dの載っているのはこれしかないのです。28pinだとでかくて入らないのだ。7セグLEDは、1個でもピン数が多くなって困る・・。8ピンAVRとシフトレジスタ(74164)をつかって構築する方法もあるけど、スペースがなあ・・。Attiny2313にA/Dがついてれば、文句はなかったのだけどなあ。2313はかなり消費電力すくないです。電池駆動するなら、これがおすすめ。つっても、AVRは全部mA単位のオーダーなのでなぜAttiny26Lで、あんなに電圧降下するのかが未だに疑問なのだけど。

念のため、8ピンAVRのデータシートを見返してみる。Attiny15とその上位の45なら、A/D載ってるなあ・・・。

が、Attiny45のA/Dの解説を見ていたら、温度計の文字がある。なんだこれ? うおお。Attiny45って温度計内蔵してるのかぁ!

温度計内蔵
  ↓
最悪1.8Vでも動く
  ↓
MAX856使わなくてすむ
  ↓
部品点数減る
  ↓
8pin AVRと74HC164で構成可能

これで行くしかない。
で、これ、新しいデバイスだけど、入手可能なの?なんて思っても、やっぱり売ってるところは売ってます。 プティマイズで売ってました。いつの間にか、Attiny45も扱うようになってたのね。

購入手続きをとり、早速送ってもらいました。ついでにmega 168も購入。
送料500円もとってるのに、実際にかかった送料は120円という、ずいぶん差があるのに疑問を覚えつつも、Attiny45をAVRWriterに乗っけて、ヒューズの確認。

内蔵クロックは8Mと6.4M・・・ですか。もっと遅くならんのかね。ん?WD Clock 128kHz?
こんなのあるんじゃん。これでいいよ。なんでWatch Dogなのかよくわからんけど。と安易に設定したら、今度はまともにプログラムモードに入れなくなりました。(汗

えー・・・・届いてから5分で、1個のAttiny45と通信不能に。AVRWriterの通信クロック下げたけど、ダメでした。なんでじゃああ・・・(涙
パラレルモードでしか通信できなくなりました。ちゃんちゃん。やっぱパラレルライタ作らないとだめなのかのぅ・・。

次は、Attiny45内蔵の温度計の精度をテストしないと・・。

2005-10-19 温度計

木工教室でアナログ時計を作ったのだけど、そのときこの時計に温度計がつけばいいと回路を埋め込む長方形の穴を空けて帰ったのでした。

ずいぶん前に千石で購入したナショセミの温度センサICと、秋月で購入したまま使い道の無かったAttiny26Lにて設計。電池2本で動けばいいなーなんて思っていたら、温度計ICの作動電圧が4V以上。 スペースの関係で、電池3本は乗らない。

3vを5vに昇圧してくれるDCコンバータを探していたら、マキシムからMAX856なるICを発見。
売っているお店を探したら、ありました。
http://www2.wbs.ne.jp/~buster/index.htm

数日後、郵便で届いていて、届く間に作っておいた自作プリント基板に搭載。

・・・・全然昇圧しないじゃん・・。 なんで?設計がまずいノン?ショットキーとか、コイルが推奨のものが無くて、代用したのだけど・・なんでやろう。

回路を見直すこと数時間。設計が間違っていることが判明。データシートを見間違えたらしい。

パターンカットして、ちょいちょいと修正したら・・・。それも電圧がでない。
しばらく色々とテスターでしらべていたら、異常なほど温度計ICが発熱していることに気がつく。

・・・・えーと、ピンが間違っていて、VCCとGND逆に配線してました。部品ライブラリの登録で間違えたらしい。
温度計ICは向き入替えたら、とりあえず電圧は昇圧されてるんですが・・・8Vもでとるやん。なんで・・。

うーむ・・・。
とりあえず、電圧が規格外だけど、そのままAttiny26Lと7segLEDを乗っけてみる。

2vまで下降しとるのですが・・・。50mAまで保証してるはず・・だよね? Attiny26Lが意外と電流食いなのは経験から知ってはいたけど・・・・。LEDとっても、電圧が下がったまま。やっぱ、IC類で電流を食ってる模様。とりあえず動くことは動くのですが、温度計ICがまともに動作していないので、温度表示が変。85度とかでてます(汗

まあ、表示はされてるし、一定時間経つと表示が変わるので、プログラムは問題ないようだ。
しばらくLEDを眺めていて、電池を抜こうとしたら、MAX856付近のコンデンサ類が熱を帯びているのに気がつく。やばぁいかも?

てわけで、MAX856については、後日別に検証する必要があるかも・・。