1つのAVRで、複数のAVRをマスタースレーブ風に制御する?
「AVRで電源スイッチを省きたい その3」という記事を参考に、ATtiny13Aの代わりにATtiny85で(微妙に修正した)プログラムを走らせてみたけれど・・・、というのが前回の記事でした。
ただ、ウンともスンとも言わないって訳ではなく、SWを押すと取り敢えず反応をしてくれるんだけど、プログラムの意図通りには動いてくれない状態。
うーん、もしかするとヒューズ設定の違いとかでクロック周波数とかが合っていなくて、だからSWを押すタイミングがダメで、みたいなことなのかもしれない。
とはいっても、これをアレコレいじるより(ま、そんな知識も技術も無いし)素直にATtiny13Aを買った方が早いだろということで、秋月電子で買いました。

壊すことも想定して(一番最初にATtiny45をいじった時に2つも壊してしまい、それから「壊すかも」ってトラウマになってるかな?)8個買いました。1個50円だし。
今度は、「AVRで電源スイッチを省きたい その3」の完成版プログラムをそのままAVR Studioに入力し、Buildして、HIDaspxでATtiny13Aへと書き込みました。
結果は・・・何の問題も無く動き出します(当然か)。これで一安心。
更に言えば、以前は一部は自作のプログラムだったのに、今度は「ChaN氏の電子オルゴール」と「AVRで電源スイッチを省きたい」という2つの(両方とも中身がブラックボックスの)プログラムを統合するという、もう無理の2乗のような試練で。
悩んだ末に思い付いた解決策(になっているかどうかは別にして)は、2つのAVRマイコンをマスターとスレーブのようにして使うのはどうだろうかと。
要は、ATtiny13Aで電源ON/OFF(スリープモードも)やLEDの制御と共に、電子オルゴールの入っているATtiny85の電源供給をコントロールするということです。
前回に続き、またまたヘンテコリンな回路図ですが、イメージはこんな感じ。

ATtiny13Aの「AVRで電源スイッチを省きたい」プログラムの仕様は、以下のようになっています。
起きている状態(PB0のLEDはゆっくり点滅)でスイッチを短押しする度に、PB2,3,4のLEDが順番に点灯していきます。
なので、PB2,3,4の先にLEDを接続する代わりにATtiny85を接続してあげれば、スイッチの長押しで電子オルゴールON(ついでにLEDもON)、短押しでATtiny85(1)、ATtiny85(2)、ATtiny85(3)と順に電源を供給していけるのではないかと。
この仕組みの素晴らしい点は、電子オルゴール用のメモリ容量(=曲数)を、接続するATtiny85の数分だけ増やすことが出来ることです。
結果は? 動くには動くけど、メチャクチャ不安定。流れ出すオルゴール曲がそこかしこで音飛びしています。うーむ、やっぱりダメかな?
最初の電源投入時に特に不安定になるので、もしかするとこの時、LEDやATtiny85へと一時的に大量の電流が流れ、電圧が急激に降下しているのかもしれませんね。
だとすると、電源ライン-GND間にバイパスコンデンサを入れて電流を “補充” してあげれば、もしかすると改善する可能性もあるのかな?

ただ、電源投入から安定状態に移行しても相変わらず不安定なので、根本的な解決策にはならないんでしょうね。
ってことで、続きます。
ただ、ウンともスンとも言わないって訳ではなく、SWを押すと取り敢えず反応をしてくれるんだけど、プログラムの意図通りには動いてくれない状態。
うーん、もしかするとヒューズ設定の違いとかでクロック周波数とかが合っていなくて、だからSWを押すタイミングがダメで、みたいなことなのかもしれない。
とはいっても、これをアレコレいじるより(ま、そんな知識も技術も無いし)素直に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の電源供給をコントロールするということです。
前回に続き、またまたヘンテコリンな回路図ですが、イメージはこんな感じ。

ATtiny13Aの「AVRで電源スイッチを省きたい」プログラムの仕様は、以下のようになっています。
- PB0 → 動作確認用のLED(状況によって低速 or 高速点滅)
- PB1 → タクトスイッチ(モーメンタリSW)
- PB2,3,4 → 動作するLED(SW操作により順次点灯)
起きている状態(PB0のLEDはゆっくり点滅)でスイッチを短押しする度に、PB2,3,4のLEDが順番に点灯していきます。
なので、PB2,3,4の先にLEDを接続する代わりにATtiny85を接続してあげれば、スイッチの長押しで電子オルゴールON(ついでにLEDもON)、短押しでATtiny85(1)、ATtiny85(2)、ATtiny85(3)と順に電源を供給していけるのではないかと。
この仕組みの素晴らしい点は、電子オルゴール用のメモリ容量(=曲数)を、接続するATtiny85の数分だけ増やすことが出来ることです。
動くには動くけど、メチャクチャ不安定
で、早速ブレッドボード上に配線して動かしてみました。結果は? 動くには動くけど、メチャクチャ不安定。流れ出すオルゴール曲がそこかしこで音飛びしています。うーむ、やっぱりダメかな?
最初の電源投入時に特に不安定になるので、もしかするとこの時、LEDやATtiny85へと一時的に大量の電流が流れ、電圧が急激に降下しているのかもしれませんね。
だとすると、電源ライン-GND間にバイパスコンデンサを入れて電流を “補充” してあげれば、もしかすると改善する可能性もあるのかな?

ただ、電源投入から安定状態に移行しても相変わらず不安定なので、根本的な解決策にはならないんでしょうね。
ってことで、続きます。
- 関連記事
-
-
「オーイ、なにバカなことやってんだ」って笑われそうな気もするけど
-
この年になって初めて、トランジスタって何なのかが分かった!
-
1つのAVRで、複数のAVRをマスタースレーブ風に制御する?
-
AVRマイコンの電源スイッチとスリープモードと
-
3種類の方式の電子オルゴール -- その音の違いは
-