リンク

  • ninja analize
  • にほんブログ村

  • ジオターゲティング
  • ヤドカリ図鑑
  • リーフリング
  • NinjaTool
  • カウンター
    無料カウンター

AVRマイコン関連 Feed

2016年7月31日 (日)

久しぶりのマイコン回路

私の自宅の前の道路は細い道だけど、わりと車の通りが多いので、車を自宅ガレージに停める時に、多くの場合、前からか後ろからか他の車が来ている場合が多くて、ガレージに入れる場合、ハザードランプのスイッチを入れてからバックでガレージに入れるようにしている事が多い。

しかし、この頃というか、今の車に替わって以来、車を自宅のガレージに停めてから、ハザードランプのスイッチを切り忘れて家に入ってしまう事が多くなった。

どうしてハザードランプなんて目立つものを切り忘れるなんだろう・・・?、なんて考えてみると、運転席から見たときに、普通ハザードランプのスイッチを入れると、メーターパネルの左右のウインカーランプの表示が同時に点滅するのと同時にハザードランプのスイッチも点滅し、それと合わせてウインカーランプのリレーの音が「カチカチ」鳴るので非常に目立つ!!

どうして、こんなに目立つのに忘れるんだろう?、って冷静に考えてみると、今までの車はハザードランプのスイッチを入れたままエンジンを切っても、ウインカーランプの表示の点滅もスイッチの点滅も消えずに目立つところでチカチカしてたので、ハザードのスイッチを切るのを忘れる事は無かったけれども、今の車はなぜかエンジンを止めるとメーターパネルのウインカーの表示ランプも消えてしまって、ダッシュボードのど真ん中あたりにあるハザードスイッチの点滅だけが残る。このランプだけでも夜なら目立つけれども昼間の明るい時間帯だとランプが非常に暗くてスイッチを直視していないと点滅に気付かず、そのまま車を降りて家に入ってしまう。私の習性として車を降りると殆ど振り向いて車を見る事がないのも要因の一つではあるけどね(笑)


そこで、今回の作品は、そのハザードランプの消し忘れを防止するためのブザー。

エンジンを切ってからでも点滅に合わせて音が鳴れば消し忘れる事はない!(リレーの代わりの音がすれば良い)

また、永くマイコンプログラムを書かないと忘れてしまうので、それを防ぐためにも作ってみる(笑)


今回の回路は、左右のウインカーランプが同時に点滅したときだけ、その点滅に合わせて「ピ~ン、ピ~ン」と音が鳴る回路で、非常に単純な仕事なので、わざわざマイコンで作らなくてもトランジスタなんかで簡単に作れそうな物ですが、一度マイコンを覚えてしまうと、マイコンで作る方が楽になってくるし、またブザーの音程なんかも自由に作れたりいろいろと自由に作れるので、どうしてもマイコンに走ってしまう(笑)

また今回は、できるだけ小さな装置にしたかったので、よく小さなマイコン回路を作るのに使われている「フリスク」のケースに入れる形の回路を設計してみた。

P7091427

この回路の仕組みとしては、左右それぞれのウインカーランプの12Vの信号を引っ張ってきて抵抗器でおよそ3Vに分圧してマイコンの2つのポートに左右それぞれの信号を入力して監視し、その2つのポートに同時に信号が入力された時だけハザードランプと判断しブザーを鳴らすようにする。そして、ある程度の時間以上ハザードランプの信号が無ければ、マイコンをスリープ状態にして電力を消費させずに待機させる。(キーを抜いた状態で起動させる必要があって、マイコンの電源はアクセサリーではなくバッテリーから直で引っ張る必要があるので、キーを抜いてる時にはスリープさせておく必要がある)

いざやってみると、使ったマイコンは8ピンの小さなマイコンなので「フリスク」のケースでも面積はまだ余裕があったけど、ケースの高さが小さくてマイコンチップの台座を付けるとそれだけで入らなくなるので、マイコンチップは基板に直接ハンダ付けにし、100μFの電解コンデンサも横倒しで、基板裏のハンダ付けも大きくなると入らなくなるので全てハンダ付けが終わってからサンドペーパーでハンダ面を研磨して薄く仕上げた。

そして完成したけど、今回はできるだけ小さくシンプルな回路にしたかったので 「Attiny13A_PU」という小さな8ピンのマイコンチップを使い、プログラムできるメモリーが小さいので、できるだけ簡単なプログラムにするために、ブザー音を出すのにマイコンに装備されている「Sound命令」を使って音を出すようにした。でも、この「Sound命令」で出せる音は単純な方形波なので、なんとも発する音色がおもちゃっぽい感じがした。そこで同じSound命令で2種類の音を作り組み合わせて、「ピン、ポ~ン」という感じの音にしてみたけど、やっぱり安っぽい音にしかできない。

そんなに音色を気にする事でもないんだけど、やり始めると拘ってしまうのが悪い癖(笑)

いろいろ調べてみたところ、音色に拘るなら、やはり方形波ではなく正弦波で作るべきなのかな?。でも、Attiny13Aでは正弦波のプログラムを書ききれないので、使うチップを「ATTINY85-20PU」に替える事にして、正弦波で音を作ってみたけど、正弦波にしただけではそうも言うほど音色が変わる訳ではなく、もう少し調べてみたところ、自然な音(オルゴールの音やワイングラスで乾杯したときの様な音)を再現するには、音の減衰(小さくなって消えていく)を表現する必要がありそうなのでやってみた。

↓こんな感じの音の減衰を再現してみる。

Photo

そして、音階や減衰の時間などを調整して、まぁまぁ納得できる「ピ~ン」という音が作れた。

P7091429

音が出てほしくない時もあるだろうから、一度ハザードスイッチを入れてからスイッチを切り、およそ1秒経過後に再度スイッチを入れた時には音が出ないようにプログラムしておいた。やっぱりマイコンは便利だわ!!


実際に車に取り付けてみたところ無事に機能した。

もう、これでハザードを消し忘れる事はないだろう・・・??

2015年4月27日 (月)

重量計 完成したかも?

完成寸前でSDカードの書き込みにエラーが出る事が分かった重量計


エラーの原因はSDカードの電源だろう、という事だった。

改良の必要がある部分は大きく2つ

まず1つはSDカードへ送る電源をAVRのポートから直接送っていた事。

これを解決する為に、AVRのポートからの信号でMOSFETをスイッチングしてSDカードへ電源を送る事にした。本来ならそれだけで良かったけれども、実は元々使っていた秋月の「SDカードスロットDIP化モジュール」に装備されていた3端子レギュの無負荷時の大きな消費電流が気に入らなかったのと、このスロットのバネが硬くてカードを挿入する感触が好きになれなかったので、SDカードスロット基板を丸ごと組み直す事にした。

P4250258
今回はサンハヤトのSDカードスロット変換基板を使った。

カードスロットが載ってるだけの基板だけれども、3端子やプルアップ抵抗までフル装備の秋月のカードスロットと比べて価格は、ほぼ4倍!!

しかし、秋月のカードスロットはカードを押し込むのが硬いので入れる時の感触だけじゃなくて、基板への取り付けを頑丈にしておかないと基板が潰れそうになるし、またカードが最後まで入っていなくてもカード検出用の端子からは入ってる事になってる信号が出てプログラム上でも問題が出るし、そのあたりを考えると、価格もそれなりかな?、という感じ(笑)

このカードスロットを取り換えて、カードを挿入する感触もソフトになって良い感じ!!

そして、3端子レギュレターも低損失タイプにしておいた。

ただ、基本的な仕様としては、5Vから3.3Vの変換器ICを使う「高級仕様」ではなく、ダイオードを使う「お手軽仕様」をそのまま使う事にした。これで本当に上手く動くのかどうかを最終確認したかったので!!


そして、もう一つ

回路全体の大元の電源になるDCDC昇圧コンバーターで、これも最大電流が100mA程度だったので、もっと余裕の有る物を探してみて

ストロベリーリナックスで販売されていた

https://strawberry-linux.com/catalog/items?code=12055

このDCDC昇圧コンバーターを使ってみる事に

P4250259 
左が今回購入したDCDCコンバーターで、右が元のコンバーター。

前回のコンバーターよりも小さいけれども、500mA程度くらいまで流せる感じ。

前回のコンバーターは0.25Vからでも5Vに昇圧できたので、乾電池1本の1.5Vで十分に使用する事ができ、出力電圧も自由に調整することができたけれども、悲しいかな最終的に出力電流が足りなかった。それに対して今回のコンバーターは最低2Vからしか5Vに昇圧できないので乾電池1.5Vが最低でも2本必要になるし、出力電圧は3.3Vか5Vの二者択一。しかし、その代わりに2Vから5Vへの昇圧で500mA程度まで流せるそうなので余裕がある。またパワーセーブという機能が付いていて低負荷時の消費電力を節約するんだとか?


上記の大きく2つの改良をしてみてどうか・・・?

結果としては、バッチリ!!

SDカードの読み込みも書き込みも全くエラーが出なくなった。

SPIの処理速度も遅くせずにデフォルトのままでも大丈夫!!


これで正常に機能するようになったけれども、こうして電源周りを変更する事で、消費電量が増えたのでは何をしてる事か分からないので、このあたりを確認してみる。

まずは、スイッチOFF時(AVRのスリープ時)には

P4260266
0.06mA

乾電池交換時にリセットが掛からないように、電気二重層コンデンサを入れると0.11mA

それから、スイッチON時には

P4250263 
14.55mA


このデータから、改良前と同じ計算をしてみると

実際に測定するときには1回の測定で余裕を見て3分間程度で、全部で5個の巣箱を1週間に1回ずつ測定するとして測定時間は1週間で3分✕5回=15分で1日あたり2.14分。もっと余裕を見て計算し易いように1日あたり3分間の使用として365日で、3分✕365日=1095分 1095分÷60分=1年あたり18.25時間の使用時間として、

スイッチONの時が計算しやすいように15mAとして、

18.25時間✕15mA=273.75mAh の消費となる。 

スリープ中は0.06mAなので

0.06mA✕24時間✕365日=525.6mAh

もし電気2重層コンデンサを入れると0.11mAなので

0.11mA✕24時間✕365日=963.6mAh

そして、AVRがスリープから目覚める瞬間の消費電流が

15mA✕(5/10000000)=0.0000075mA 常に流れてるのと同じになると思うので 0.0000075mA✕24時間✕365日=0.0657mAh

すべて合わせて 273.75mAh + 525.6mAh + 0.0657mAh = 799.4mAh

すべて合わせて 273.75mAh + 963.6mAh + 0.0657mAh = 1237.4mAh

単3乾電池の容量を2000mAhとすると

2000mAh ÷ 799.4mAh= 約2.5年間

電気2重層コンデンサを入れるとしても

2000mAh ÷ 1237.4mAh= 約1.6年間

これに実際はSDカードの書込、読込時の消費電力があるけれども、これは計算しきれないのと、短時間なので若干という事にしておくとして

これなら、いけるかも知れない!!


もう少しテスト(バグ出し)を続けてみよう

 

 

2015年4月24日 (金)

次はSDカードスロットか・・・?

スリープ時の時刻が正常に進むようになり、ケースも作成したので

P4190247
これで完成か!!

と思いきや・・・・・・・

何度も動作のテストをしてると、また不具合が発見された。


今回の不具合はSDカードの書き込みで、SDカードに書き込んだデータをパソコンで確認すると何度か「ファイルが壊れてる」との事で、まともに書き込めていないデータが時々出てくる。

つい先日までは正常に書き込めてると思ってたのですが、記録データの量を増やしたところ、この不具合が発生し始めたように思う。

また、スイッチON時にSDカードから読み込むデータがいくつか有るのですが、なんとなく読み込むのに時間が掛かり過ぎてるように思う。(遅いというか、マイコンが考え込んでるような感じ)

SDカードの書き込みは、サーモスタット回路で使っており、これは現在も問題なく正常に書き込みも読み込みもできているし、ソフトウェアSPIだけれども、もっと速く書き込みもできている。今回の重量計ではハードウェアSPIを使っているのに非常に遅く感じる。

毎回、同じ症状が出るなら、プログラムを疑うところですが、ファイルが壊れるのは毎回では無いので、なんとなく疑わしいのがSDカードスロットモジュール!!

今来ならそのままでは使えない物にダイオードを取り付けて無理やり使えるようにしてた訳だから、そこに原因があるんじゃなかろうか?、簡単な仕事ならこなせるけど仕事量が増えたりすると処理できなくなるとか・・・・・・?

これ以上自分で考えて答えが出せるとは思えないので、SDカードスロット周りの回路を現在どうしてるか簡単な図を書いてまたO-Familyさんに見て頂き、回路に問題は無いだろうとの事でしたが、電源に問題がある事が判明した。

ここで初めて知った事でしたが、SDカードの書き込みには200mAを余裕で流せる電源が必要だとの事。

今までのSDカードの電源は、少し前に書き込みをしていない時でも50mA消費している事が分かったのでSDカードには常時電源を送らずに、書き込みや読み込み時にだけ、AVRのポートから5Vを送り出すようにしていたけれども、この方法だと200mAの電流は送り込めない。

それだけではなくて、大元の電源は乾電池の1.5VからDCDCコンバーターを使って5Vに昇圧しているけれども、このDCDCコンバーターも調べてみると、最大で100mA程度しか流せない事も分かった。


そんなところで、大元の電源回路を考え直すか、あるいはSDカードではなくEEPROMの増設など他の方法でデータを記録するのが良いのか??

完成寸前だったけれども・・・・・・

少しじっくりと考えてみる事にします。

2015年4月17日 (金)

クリスタルの異常発振??

只今作成中のミツバチの巣箱の重量を測定して記録していく重量計ですが

乾電池の1.5Vからの昇圧もなんとなく上手くいけそうな感じになり

SDカードへの書き込みも無事にできるようになり

データ書き込みのプログラムもまとまり

完成を見据えて、ケースを作製する材料のアクリル板もオーダーしたところで思わぬ不具合が・・・・


この重量計には巣箱の重量を測定して表示するだけではなく、測定した値をその巣箱ごとに記録していく機能を付けているけれども、この重量のデータを残していく上で重要なのが日時のデータなので、回路の中には日時を刻む時計の機能もある。

しかし、この時計の機能に不具合が・・・・

どんな不具合かと言うと

この時計は、あくまでも時計なので、重量計のスイッチを切っていても時刻は止まらずに刻み続ける必要があるので、スイッチをOFFにしても内部の時計機能だけは動作させている。

この時計機能が、普段テストしている時は何の問題もなく正確に時刻を刻んでいるように見えたのですが、スイッチをOFFにしたまましばらく放置して再度スイッチを入れてみると、確かに時刻を刻み続けているけれども、なぜかものすごく早く時刻が進んでいる事に気付いた。

数パーセントの狂いではなく、2倍以上のスピードで進んでいる事になる狂いだった。(狂いと呼べる範囲ではない)

ひょっとして、クリスタル発振子のパルスにノイズが乗ってカウント数が大幅に増えたのか?

しかし、いつもお世話になっているO-Familyさんに相談したところ、スリープ時のノイズが影響するのは考え難いとの事だったので、プログラムをもう一度、ゆっくりと再確認してみたけれども、時刻を早く刻んでしまうような間違いは見当たらない・・・・・

いったい何が原因なのか、いろいろネットサーフィンしてみると、クリスタル発振子は「オーバートーン」という異常発振(周波数が高くなる)をする事があるらしいく、その状態になると周波数が奇数倍になるんだとか??

そう言えば・・・・・・

昨夜、異常を感じてからもう一度時刻を合わせてスイッチをOFFにしたのが夜の12時前だったけれども、今朝7時頃にスイッチONにして確認してみたところ装置が示す時刻は22時になっていた。そして帰宅してもう一度確認すると夜の8時の時点で、装置の時刻は17日の11時半。という事は20時間経過した時点で装置の時刻は55.5時間進んでる。

約3倍程度進んでる事になる・・・・・

奇数倍・・・・・
ひょっとして、オーバートーンという現象が起きてるのか??

これを確かめるのに、とりあえず、スイッチOFF時のパワーセーブからの1秒毎の復帰に合わせてLEDが点滅するようにしてみたところ、普通に1秒のピッチで点滅しているので、このオーバートーンは違う・・・・・・・・


クリスタルが正常に発振してるという事はクリスタル自体でも回路の問題でも無く、残っているのはプログラムの問題だけのはずなので、プログラムの中から、時計の機能以外の部分を全て削除し、時計機能だけを残してテストしてみると、スリープ時に時刻が異様に進んでしまう症状に変わりは無い。

ここで、スリープ時の割り込みのタイミングを確認するためにもう一度、パワーセーブのすぐ後に、LEDを10msecだけ点灯させる

Powersave
Test = 1 

Waitms 10
Test = 0

↑TESTというのは、LEDを点灯させるポート

こんなコードを入れてみて、再度確認したところ、前回と同じく、LEDは正確に1秒ピッチで点滅するけれども、スリープから再起動させたところ、なぜかスリープ時の時刻が正常に進むようになった??

この前記のコードの前後も書くと

P_down:
 Powersave   'パワーセーブモードに     
 Test = 1    ’LEDを点灯  
 Waitms 10  ’10msec間点灯
 Test = 0  ’LEDを消灯  
 If Sw_power = 1 Then Goto P_down  'スイッチがが押されていなければループさせる

上記のコードはパワーセーブの状態からTimer2の1秒毎の割り込みで復帰し、すぐにスイッチの状態を確認して、スイッチが押されていなければすぐに再度スリープさせていたコードの中に、LEDを点灯させるコードを挿入している。

少し前に、LEDの点滅で1秒の割り込みを確認したとき(スリープ時には異様に時刻が進んだとき)のLEDを点灯させるコードは

Toggle Test だけだった

このコードを

Test = 1 
Waitms 10
Test = 0

こう書くことで、時刻が正確に進むようになったので、ひょっとして待ち時間を入れてやる必要が有るのか?、と O-Familyさんに尋ねてみたところ、Timer2を32.768KHzで動かす場合、マイコンの動作クロックを8MHzになると処理時間が短くなり(速く処理できる)、Timer2が仕事を完了する前にスリープに入ってしまうとの事でした。

そんなところで、動作クロックを8MHzにするなら、スリープ復帰から再度スリープに入る間に10~30μsecの待ち時間を入れるべきだとアドバイスを頂きました。


そこで、上記のプログラムのLEDの点滅のコードの代わりに、Waitus などの待ち時間を入れれば解決するんですが、よくよく考えてみれば、いつもの癖で8MHzを使っていたけれども、この重量計のプログラムには8MHzで動かさないと処理できないようなスピードを要求する仕事は無いし、そもそも省電力を望むなら8MHzで作るよりも1MHzにするべきじゃないか??、と考えを改め、1MHzでプログラムを組み直した。


そして、スリープ時にも無事に時刻を刻んでくれるようになりました。

O-Familyさん、今回もありがとうございました。



電気には、まだまだ分からない事が多過ぎる・・・・・(笑)

2015年4月 3日 (金)

DCDCコンバーターのテスト

先日の重量計バージョン2の記事に、そらさん、中年会社員Aさんより、コメントでいろいろ情報やアドバイスを頂き、確認しておく必要があるところがいくつか見つかりました。今回もありがとうございます。

そして、その中から、まず使おうとしているDCDCコンバーターが使い物になるのかどうかを確かめておく必要がありそうなので、そこを確認してみる事にしました。

コンバーターは既に届いているので、早速テストボードでテストしてみる事に・・・

P4020168

まずは、コンバーターだけで乾電池1本でホントに昇圧できるのか?

できるのが当たり前でしょうけど、私は使い方自体に自信が無いので(笑)

P4020169

https://strawberry-linux.com/pub/ltc3105-manual.pdf

マニュアルにMPPCとGNDに22kΩの抵抗を入れるように書いてあるので、それだけ入れて、Vinから乾電池より1.5Vを放り込んでみる。そして電圧調整用のボリュームを回して出力電圧を確認してみると入力が1.59Vで確かに最高5.66Vまで昇圧できている。

P4020170

この状態で何も負荷は繋がずに乾電池からVinに入る電流(本当の消費電流)を測ってみると0.14mA。

単2の乾電池の容量が6000mAhだとして 6000mAh÷0.14mA=42857時間

42857時間÷24時間=1785日間

1785日÷365日=4.89年間


この出力を実際にAVRの電源としてテストボードでAVRに繋いでみる!!

使うAVRはATmega644P

P4020171

LCDの表示はできているし、SDカードの書き込みも無事にできた!!

この状態からパワーセーブ状態にしてみると

P4020179コンバーターだけで0.14mAだったので、AVRが喰ってるのは0.01mAだけ

テスターのレンジがmAなので、コンバーターを使わずに乾電池3本の4.5Vを直接繋いで測ってみると

パワーセーブの状態で

P4020181

わずか1.3μA

これを見ると、殆どコンバーターが喰ってるのが分かる・・・・・

そして実際に重量を測定しながらLCDも表示させてSDカードも繋ぐと、どの程度の電流が流れ出るのかを測定してみたところ

P4030190 
100mA前後の電流が流れてるので、SDカードの電源を外してみると

P4030191 
50mA前後になる。

という事は、SDカードについては書き込み動作や読み込み動作に入る時だけ電源を送るプログラムにしよう。


というところで、ざっと計算してみると

実際に測定するときには1回の測定で余裕を見て3分間程度で、全部で5個の巣箱を1週間に1回ずつ測定するとして測定時間は1週間で3分✕5回=15分で1日あたり2.14分。もっと余裕を見て計算し易いように1日あたり3分間の使用として365日で、3分✕365日=1095分
1095分÷60分=1年あたり18.25時間の使用時間として、SDカードの電源も使用中はずっと入ってるとすると

18.25時間✕100mA=1825.mAh の消費となる。 

スリープ中は0.15mAなので 0.15mA✕24時間✕365日=1314mAh

それからもう一つ、AVRが1秒に一度、Timer2の割り込みで一瞬だけ目を覚ましますが、この瞬間にどれだけの電流を消費するのかが分からないので、仮にタイマー割り込みから目覚めてフラグを確認してからもう一度パワーセーブに入るまでの時間から計算するのに、これをBASCOMのシミュレーターで見てみると、0.0005msecとなってたので、仮にこの間スイッチONの時と同じだけ(15mA)電流を喰うと仮定すれば、 これを均すと15mA✕(5/10000000)=0.0000075mA 常に流れてるのと同じになると思うので 0.0000075mA✕24時間✕365日=0.0657mAh

全て合わせると 1825mAh+1314mAh + 0.065.7mAh=1年あたり3139.0657mAh

単2の乾電池だと容量が6000mAhとして 6000mAh÷3139.0657mAh=1.91年間


これが本当だとすると、なんとかいけるけど・・・・

ホンマかいな・・・・???


こんな計算で合ってるのかな?????



小さい電流で安物のスターなので、テスターの値を信じて良いのかも?ですが・・・・・

物凄く自信が無くなってきたけど・・・・笑


※スリープ状態から復帰する時の電流の計算が間違っていたので訂正4/3 ↑上記青字の文章を修正

2015年3月31日 (火)

重量計バージョン2

バージョン1は完成したけれども、実は一度も使っていないうちに、バージョン2が作りたくなった。

バージョン1は、ただの重量計なので、機能としては重さを測るだけで、体重計のままだと使い勝手が悪いので巣箱の重量を測り易いように形を変えただけでしたが、せっかくマイコンを使うなら、もっと高機能な重量計も作れるんじゃないか?と、いろいろ考えてきており、その案がほぼ煮詰まってきたので、本格的に設計の段階に入る事にした。

今回のバージョンアップで一番大きな改良点は、測定した重量のデータをSDカードに記録していけるようにする事。このデータを記録するのに重量のデータが大切なのは当たり前ですが、もう一つ大切なのが日付、時刻のデータになる(時刻はあまり重要では無いが・・)ので、時計の機能も付け加える必要がある。

そして、装置に時計の機能を追加すると、スイッチOFFの時も常に時計だけは稼働させておく必要があり、当然ながら時計を動かす為の電流が必要となり、それだけ乾電池の消耗が早くなるので、電流の消費量をできるだけ下げる工夫が必要になる。


まず、SDカードについては先日、秋月で売られていたSDカードスロットモジュール

http://akizukidenshi.com/catalog/g/gK-05818/

を購入してテストし、使える事が確認できたので、あとは回路に組み込む事と、データをどのタイミングで、どうような形で残していくか?、というプログラムの部分を組み立てていく事になる。(品質は今一だけれども、品質をとやかく言う価格ではないので良しとする・・・笑)


それから、もう一つの省電力化については、私にとってはSDカードを使う事よりも難しくて、どう組み立てていこうか?、というところがなかなかまとまらなかった。電源に使うのは使い勝手の問題から乾電池を使う以外には考えられないけれども、乾電池をどう使うか?というところを悩んだ。

バージョン1の電源としては006P(四角い9Vの電池)を使って、その9Vの電圧を3端子レギュレターで5Vまで落として使った。バージョン1もスイッチOFF時は完全に電源が切れるのではなく、マイコンがスリープ状態で待機する形になるので多少なりとも電流を使っていたけれども、スリープ中の電流は非常に小さく押さえられたので、おそらく使わなければ楽に1年以上は持つだろう?、という回路に仕上がっていた。

でも、バージョン2ではスイッチOFF時にも時計だけは動作させる必要がある。この時計だけを動かすにはマイコンをパワーセーブの状態にさせれば大きく消費電流を抑える事ができるけれども時刻を刻む為に1秒に一度だけ一瞬マイコンを目覚めさせる必要があるので、おそらく006Pでは長く持たないだろうと思う。(やってみないと分からないけど)
そこで、乾電池を単3を6本の9Vか、4本の6Vにして3端子で5Vに落すか、それとも乾電池3本の4.5Vにして電圧を落とさずにそのまま使う事で無駄になる電流をできるだけ節約するか?なんて事も考えたけれども、レギュレターを使わないと乾電池の消耗とともに電源電圧が下がる事になる。電源電圧が下がってもADCの基準電圧も下がるから大丈夫なんて思ってたけれども、よく考えてみれば、ADCの基準電圧は電源電圧ではなくて1.1Vに設定している。電源電圧が下がれば重量センサーのブリッジから返ってくる電圧は下がり、増幅するアンプの倍率は一定なので結果としてはマイコンに帰るブリッジの電圧は下がる事になるけれども基準電圧は1,1Vの一定なので、結果としてマイコンが出す測定値としては下がる事になる。と言う事は同じ重さの巣箱を測定しても乾電池がヘタってくれば、それだけ軽い値を出すことになる。

そうなると、残るのは単3乾電池を6本、あるいは4本にして3端子レギュで5Vに落すのが一番長持ちさせる事ができるかな?と、ほぼその形で設計を進めようとしたところで面白いサイトを見つけた。

そのサイトも許可をもらっていないので公開はしませんが、そのサイトでは乾電池からマイコンの電源として3Vを取るのに、乾電池を長持ちさせるのに単3(1.5V)を2本使って3Vを取るよりも、単3を1本の1.5VからDCDCコンバーターで3Vに昇圧させた方が長持ちさせることができるんだとか?
DCDCコンバーターを使えばそれだけロスになる電流が発生するはずなのに長持ちさせる事ができる、その理由を簡単に説明すると、このサイトで使われていた回路にもLCD(液晶表示器)が付いており、そのLCDは電源として最低2.6V必要で、2.8Vを切ったあたりからコントラストが出なくなってきて表示できなくなってくるんだとか、なので元は1本あたり1.5Vの電圧が1.4Vに落ちただけでLCDが表示できなくなってくる。わずか0.1V落ちただけで支障を来す事になり使えなくなる。しかし、1本の1.5VからDCDCコンバーターで昇圧させると、ここで使われていたコンバーターは0.25Vから昇圧できるらしいので、乾電池が0.25Vに落ちるまで使える事になり、ほぼ空っぽになるまで使い切れる事になり、結果として長持ちさせる事ができるんだとか。確かに乾電池が1.4Vに下がれば捨てるのと、0.25Vまで使えるのとでは大きな違いがある。

このサイトの記事を見て、ひどく感動した!!



そんな方法を見つけたので、うまく出来るかどうかは分からないけれども、とにかくやってみる事に。



とりあえず、パーツの発注から・・・・・・


2015年3月26日 (木)

SDカードスロットのテスト その2

先日のテストでSDカードスロットへの配線にダイオード入れてみるのは失敗したので、次は中年会社員Aさんからアドバイスをもらった方法でやってみる事に。

方法は単純にAVR自体を3.3Vで動かすという方法。

3.3Vで動かせば、SDカードとの電圧を合わせる必要は無いし、ダイレクトに接続すれば良いだけのはず。

AVRを3.3Vで動かせば、LCDとを3.3Vに換えるか電圧変換器を使うなどのその他の部分で組み替える必要が出てくるけれども、とりあえずはSDカードスロットが働かないと始まらないので、まずはSDカードだけのテストをしてみる事に。

本来なら、3.3Vの電源を作るべきですが、まずはテストだけなので1.5Vの乾電池2本使って3Vの電源でテストしてみた・・・・


がっ


まったくSDカードに書き込めない・・・・・・・

今回、初めて使ったハードウェアSPIだったので使い方がダメなのか?、と思って

使用経験のあるソフトウェアSPIに切り替えてみたけれども、やはりダメ

何がダメなんだろう?

私の乏しい知識の中で、いろいろ考えて何度も確認してみたけれども

もう間違いは見つからない・・・・


考えても分からないので、挙句の果てに、はじめから5Vでは使えない商品を、まるで5Vでも使えるようにアピールしていた商品に疑いの目を向け始めた(自分が悪いんじゃないと言い聞かせながら)

そして疑いながら、このカードスロットの端子とピンの導通を順番に確認していくと、どうもおかしなところに気が付いた!!

Sd
ピンクの文字で書いたのが左のピンがどの端子に繋がってるかを書いたものですが

上から4つ目と5つ目の端子がどちらもGNDのピンに繋がってる?

きっと、これが原因だ!!、やっぱり自分が悪かったんじゃない!!

と、少しホッとしながら接点の数を数えてみると、数が合わないので、以前に使ったカードスロットを出してきて比べてみたところ

P3260109

上に重ねてるのが以前に使った事のあるカードスロットですが、裏向きに使うタイプだったので裏向きにして重ねてみると、理由は分からないけれども、なぜかGNDの接点が短い距離で2つ出ているだけだった。だから接点の数も合わなかったけど、これだと問題なく働くはずだ、いったい何が悪いんだろう?と、もう一度今度はソフト側を確認して気付いた・・・・

単純にプログラム内でポートの設定を間違っていた(爆)


間違ってる部分が分かったので、書き換えて、もう一度テストしてみると・・

無事に書き込めた!!

3Vなら使える!!


自分の未熟さを棚に上げて、商品の欠陥を疑った自分を反省しながら、3Vで無事に書き込みができたけど、ひょっとすると最初に試した5Vでダイオードを使う方法でもできるかもしれないと、昨日、中年会社員Aさんからアドバイスを頂いた通りにSDOのピンにはダイオードを入れず、またCDのダイオードも抜いてみて、もう一度電源を5Vに切り替えてテストしてみた。

すると

2

ガ~~~ン

書き込みも、読み取りもできた!!

私の使い方が間違ってただけだった(笑)

P3260115

P3260112 
という事で、CS、CLK、SDI の3箇所にダイオードを入れれば、5Vで無事に使える事が確認できた。

Photo

こうして5Vで使えればLCDもそのまま使えるし、非常に助かる。


中年会社員Aさん

使う事ができました。

今回もありがとうございました!!

 

 

2015年3月25日 (水)

AVRテストボード完成と SDカードスロットのテスト

マイコンにプログラムを書き込んだりデバックしてみたり、実際にテストボードを使ってみて、気付いたところを修正し、最終的にブレッドボードも付け加えて、テストボードの完成、という事にした。

P3180079

このテストボードでATmega1284、644、164などの40ピンのチップ、それからATmega328、168、88などの28ピンのチップ、それからATtiny2313、861などの20ピンのチップ、そして最後にATtiny13、85などの8ピンのチップのプログラム書き込みと、デバッグなどのテストができるように作ってみた。

そして、この4種類のチップを連係させてテストする事もできるように、それぞれ同時に稼動させる事もできるようにしておいた。例えば、8ピンのチップからパルスを出力させ、そのパルスを28ピンのチップに周波数をカウントさせるとか、28ピンのチップから出力したデータを40ピンのチップで受け取るとか、そんな事もできるようにしてみた。

そして、テストボードに組み込んであるチップは基本的にはテストボードに組んだままにして、プログラムのテストを行い、プログラムが完成すれば実機にプログラムしたチップを入れるのではなく、チップは入れ替えずに完成したプログラムだけを実機に書込むようにする事にした。要するに、テストボードに入ってるチップはテストボードに入れたままで書き込めなくなるまで使い潰す事にする。


そして、テストボードが完成したので早速、秋月で売っていたSDカードスロットモジュールのテストをしてみる事に・・・・・

http://akizukidenshi.com/catalog/g/gK-05818/ ・・・・・これ!

このモジュールは既に基板にセットした状態で販売されており、しかも、3.3Vでも5Vでも使えるんだとか?

これなら取り付けるのも簡単だ!!

と思ったところですが、サイトの画像をよくよく見てみると、なんか可笑しい???

言葉で説明するのは難しいけど、この構造だとAVRの5Vで使った場合に、SDカードにダイレクトに5Vが掛かってしまうはず・・・・・・??
どうも可笑しいなぁ・・・ と思いながら、どこかにこんな便利なものを使った情報が無いかなぁ、とネットサーフィンしてみると、有った!!

許可をもらっていないのでリンク公開しませんが、同じ様にSDカードにダイレクトに5V掛かるはずだと思った方がいて、その方はマイコンからSDカードに送るラインにダイオードを噛ます事で、マイコンからの5Vが直接SDカードに掛からないように工夫をされていた。

原理を簡単に書いてみると

Sd

マイコンからの5V出力時にはダイオードが遮るけれども、プルアップ電圧の3.3VだけはSDカードに掛かる事になり、逆にマイコンの出力が0Vの時にはプルアップの3.3Vをマイコンが吸い込む形になり、ダイオードの電圧降下分の0.6V程度だけがSDカードに掛かる事になる。そうなる事でマイコンからの5VのパルスがSDカードには3.3Vとなって無事に伝わるとの事。

なるほど、とは思ったけれども、そんな簡単に使えるようになるのかな?

SDカードには0.6V残るけど、それでも大丈夫なのかな?

などなど、「ホンマかいな?」なところがあるので、試しにテストしてみようと!

届いたSDカードスロットをテストボードに組み込んで、マイコンにはSDカードにデータを書込む簡単なプログラムを書き込んでテストしてみると・・・・・


予想に反して(いや、予想通り)、いきなりドライブエラーが出て機能しない!!

やはりそんな簡単に事は進まないようだ・・・・・笑

もう一度、ゆっくりと添付されてるマニュアルの図面と睨めっこしてみると・・・・

Sd2_2 ※赤で書いたダイオードは私が追加した

私の乏しい知識で正解が出せるとは思わないけど、なんとなく、マイコンからSDカードに向かう「行き」方向のデータは上手く届くだろうけど、SDカードからマイコンへの「帰り」のデータが、これだと届かなくないかな????

やっぱり、ちゃんとした5V~3.3Vの変換器を使わないとダメかな??・・・・・笑

2015年3月11日 (水)

ウェーブコントローラー「激波」 モデルチェンジ

ウェーブコントローラー「激波」

P3100049

これはマイコン回路としては私が一番最初に作り始めた装置で、2010年の春に作製したので、初めて作った作品だけれども、もうかれこれ5年間休みもなく故障もなく稼動し続けてきた。


最初に作製してから、もう何度となくバージョンアップさせてきて、自分で使っていく上で欲しい機能は全て取り入れてきたので、今現在で不足してると思われる機能は何一つ無い。言ってみればパーフェクトな装置ではあるけれども、今までバージョンアップを重ねてきて、逆に今となっては必要の無い機能も存在する。例えば、作製当初はDCポンプを電源電圧でコントロールしていたので大電流を扱う回路が組み込まれてるけれども、今はフォルスのDCポンプになり電源電圧ではなく制御用の微弱な電流でコントロールするので大電流を扱う必要はなくなった。また一番最初の作製だったのでプログラムの勉強の為に組み込んだ8連装のLED、これはポンプの動きにともなって光が左から右へ流れるように点灯していくものですが、こんなのも装置を見ていて派手なだけで特に必要なものではない(笑)。それに水槽の波の動きを読み取るためのジャイロセンサーなんかの機能も組み込んだけど、使っていない。

そして、使っているマイコンチップもATmega644という巨大なメモリーを持つ大きなチップだけれども、メモリー領域は40数%しか使っていない。(このチップで40%使用するのは非常に大きなプログラムですが・・・・笑)


そんなところで、もう以前からこの「激波」を回路もプログラムも組み直したいとは思いながらも、組み直すとなるとデバッグなど、非常に手間と時間が掛かるのでなかなか踏み出す気になれなかった。

でも、マイコンのテストボードが組み上がってきたので無性に何かプログラムを作りたくなってきた、この機会にATmega644という大きなチップから フラッシュメモリーが1/4のATmega168というチップにプログラムの勉強と頭の体操も兼ねて組み直してみようか?、と・・・そろそろフルモデルチェンジでも

普通に考えると容量オーバーだけれども、必要のない機能を省略して、無駄なプログラムを整理して効率の良いプログラムに書き換えて圧縮していく。

以前よりはマシなプログラムが書けるようになったかな??

できるかどうか、やってみる事に!!

 

2015年3月 7日 (土)

重量計の改良

そろそろ使う季節が近付いてきた自作の重量計のケースの微調整などを行っていたところ、妙に電池が減るのが早い事に気付いた。

この重量計もマイコンで制御している回路で、電源は乾電池ですが、スイッチOFFの時は完全に電気を止める訳ではなく、マイコンには最低限の電流だけを送って休止させておく方法を取っていた。これは「パワーダウン」というマイコンのモードだけれども、このモードを使うと単なる電源によるON、OFFと違って、マイコンによってON、OFFも制御する事ができるので、スイッチの切り忘れを防ぐオートオフ機能を付けたり、またON、OFFの切り替えをプッシュボタン一つで行う事ができたり、いろいろ便利な機能を追加する事ができる。

ただし、その代わりにスイッチOFFの間もマイコンを働かせておく必要があるので、極微量ではあるけれども電気を喰う事になり、乾電池だと徐々に消耗してくる。しかし、これは本当に極少量の電流で事足りるので、普通ならパワーダウンモードのままなら乾電池でも1年以上は持つのが普通。


でも、パワーダウンのままで放置しておいたら、なぜか1週間ほどしか経過していないのに電池がヘタってしまっていた。・・・・

はじめは、マイコンのプログラムに何か不備が有るんだろう?、といろいろプログラムを確認してみたけれども、電気を消耗してしまうようなプログラムの不備は見当たらない。

そうなると、回路に不備があるのか?、と細かいところまで検査してみるけれども、どこにも間違って電気を消耗してしまうようなところは見当たらない。

その状態で電流を測ってみると、3mA程度の電流が流れている。3mAだと乾電池ならすぐに消耗する。(計算上では7日と持たない)

仕方が無いので、次は電気を消耗する可能性のあるLDC(表示器)を外してみて電流を測るも変わらず3mA。回路からマイコンチップを外しても変わらず3mA。

仕方が無いので、電源回路の出力側で回路をブチ切っても変わらず3mA。

電源回路の3端子レギュレター(乾電池からの9Vの電圧をマイコン用の5Vに落すためのパーツ)周りの回路に不備があるのか?と、とりあえず3端子レギュレター単体で電池を繋いで電流を測ってみると、3mA・・・・・・


まだまだ無知でした・・・・・・・(爆)


いつもお世話になっているO-Familyさんに聞いてみると

普通の3端子レギュレターだと無負荷(何も出力しない状態)でも、3mA程度の電流を消費するのが当たり前だとか・・・・(汗)


そして、そんな時に使う「低損失CMOSタイプ」の3端子レギュレターがある事を教えて頂き、取り寄せて取り換えてみた。

P3060006

3mA流れていた電流が、1.3μAになっている(電流が1/2307になった)

これだと計算上(あくまでも計算上)は、パワーダウンの状態で30万時間(12500日)

年数で言うと、34年間、電池が持つ事になる。(実際には自己放電するから持つわけないけどね・・・ホントなら私が先に死んでるかも)


上手くいった!!


いつまで経っても、ド素人な私ですが

ド素人の方が楽しいかも(笑)



アクアも同じく!!