1つのAVRで、複数のAVRをマスタースレーブ風に制御する?

「AVRで電源スイッチを省きたい その3」という記事を参考に、ATtiny13Aの代わりにATtiny85で(微妙に修正した)プログラムを走らせてみたけれど・・・、というのが前回の記事でした。

ただ、ウンともスンとも言わないって訳ではなく、SWを押すと取り敢えず反応をしてくれるんだけど、プログラムの意図通りには動いてくれない状態。

うーん、もしかするとヒューズ設定の違いとかでクロック周波数とかが合っていなくて、だからSWを押すタイミングがダメで、みたいなことなのかもしれない。

とはいっても、これをアレコレいじるより(ま、そんな知識も技術も無いし)素直にATtiny13Aを買った方が早いだろということで、秋月電子で買いました。

ATtiny13A

壊すことも想定して(一番最初にATtiny45をいじった時に2つも壊してしまい、それから「壊すかも」ってトラウマになってるかな?)8個買いました。1個50円だし。

今度は、「AVRで電源スイッチを省きたい その3」の完成版プログラムをそのままAVR Studioに入力し、Buildして、HIDaspxでATtiny13Aへと書き込みました。

結果は・・・何の問題も無く動き出します(当然か)。これで一安心。

ATtiny13Aをマスターに、複数のATtiny85をスレーブとして制御できる?

さて、ここで前回触れた問題点が再浮上します。いくつかの機能の違うプログラムを、一つのAVRマイコンに統合することが出来ないという問題が。

更に言えば、以前は一部は自作のプログラムだったのに、今度は「ChaN氏の電子オルゴール」と「AVRで電源スイッチを省きたい」という2つの(両方とも中身がブラックボックスの)プログラムを統合するという、もう無理の2乗のような試練で。

悩んだ末に思い付いた解決策(になっているかどうかは別にして)は、2つのAVRマイコンをマスターとスレーブのようにして使うのはどうだろうかと。

要は、ATtiny13Aで電源ON/OFF(スリープモードも)やLEDの制御と共に、電子オルゴールの入っているATtiny85の電源供給をコントロールするということです。

前回に続き、またまたヘンテコリンな回路図ですが、イメージはこんな感じ。

回路図2

ATtiny13Aの「AVRで電源スイッチを省きたい」プログラムの仕様は、以下のようになっています。
  • PB0 → 動作確認用のLED(状況によって低速 or 高速点滅)
  • PB1 → タクトスイッチ(モーメンタリSW)
  • PB2,3,4 → 動作するLED(SW操作により順次点灯)
スイッチ長押しでPB0のLEDが高速点滅し、電源ON/OFF(実際にはスリープモードから起きる/眠りに入る)がなされます。

起きている状態(PB0のLEDはゆっくり点滅)でスイッチを短押しする度に、PB2,3,4のLEDが順番に点灯していきます。

なので、PB2,3,4の先にLEDを接続する代わりにATtiny85を接続してあげれば、スイッチの長押しで電子オルゴールON(ついでにLEDもON)、短押しでATtiny85(1)、ATtiny85(2)、ATtiny85(3)と順に電源を供給していけるのではないかと。

この仕組みの素晴らしい点は、電子オルゴール用のメモリ容量(=曲数)を、接続するATtiny85の数分だけ増やすことが出来ることです。

動くには動くけど、メチャクチャ不安定

で、早速ブレッドボード上に配線して動かしてみました。

結果は? 動くには動くけど、メチャクチャ不安定。流れ出すオルゴール曲がそこかしこで音飛びしています。うーむ、やっぱりダメかな?

最初の電源投入時に特に不安定になるので、もしかするとこの時、LEDやATtiny85へと一時的に大量の電流が流れ、電圧が急激に降下しているのかもしれませんね。

だとすると、電源ライン-GND間にバイパスコンデンサを入れて電流を “補充” してあげれば、もしかすると改善する可能性もあるのかな?

パスコン追加

ただ、電源投入から安定状態に移行しても相変わらず不安定なので、根本的な解決策にはならないんでしょうね。

ってことで、続きます


コメント:












管理者にだけ表示を許可する
トラックバック:
トラックバック URL:

http://55life555.blog.fc2.com/tb.php/1303-e9a11192

<< topページへこのページの先頭へ >>