限定しりとり

このジャンルでお願いします。

①『4桁LEDディスプレイ』
【入力】表示する数値(②の出力から)

②『タイマー発生装置』
【入力】どのインターバルでカウントアップさせるか?(③の出力1から)
【出力】→ 秒数(①の入力と③の入力1へ)

③『メイン』
【入力1】秒数(②の出力から)
【入力2】再生が終了したか?(⑤の出力から)
【出力1】インターバル(②の入力へ)
【出力2】メロディの選択(④の入力へ)

④『メロディ発生装置』
【入力】メロディの選択(③の出力から)
【出力】メロディ(⑤の入力へ)

⑤『サウンド出力装置』
【入力】メロディ(④の出力から)
【出力】再生が終了したか?(③の入力2へ)


このシステム構成でどういうことをやりたいかというと、

③の『メイン』である条件になったら、②の『タイマー発生装置』に例えば0.1ミリ秒間隔でタイマーを発生するように要求します。

②の『タイマー発生装置』のから①の『4桁LEDディスプレイ』に秒数が出力されます。
同時に③の『メイン』にも秒数が返され(出力され)ます。

その秒数を元に、例えば10秒経過したらあるメロディを出力するように③の『メイン』から④の『メロディ発生装置』にメロディの番号を入力します。

メロディ番号を受け取った(入力)した④の『メロディ発生装置』から⑤の『サウンド出力装置』に選択されたメロディを送信します。

⑤の『サウンド出力装置』からは再生し終えた場合に③の『メイン』にそのことを知らせます。

大体このような流れなのですが、これを実現しようとした場合に例えば
I2Cという通信手段なら出力(マスタ)から入力(スレーブ)へ1方向だけなら簡単に実現できると思います。
例えば、
○ 【マスタ】②『タイマー発生装置(出力だけ)』 → 【スレーブ】①『4桁LEDディスプレイ(入力だけ)』

でもI2Cはマスタからマスタへの送信はできないので、
③の『メイン』がマスタだとすると、
× 【マスタ】③『メイン』 → 【マスタ】②『タイマー発生装置』 → 【スレーブ】①『4桁LEDディスプレイ』

こういう方向への通信ができないのです・・・
かといって複数の入力、出力をもつ『メイン』がスレーブというのは違うんじゃないかなぁ?と思います。。。
まぁあれもこれも1つのマイコンチップ(メイン)にまとめて詰め込んでやればできるとは思うのですが、
なるべくそれぞれの機能を独立させてモジュール化して接続してこのシステムを構成したいと思っているのですが、
どうすれば良いのでしょうか?
I2Cでも可能なのでしょうか?
あるいはこのシステム自体を変更したほうが良いのでしょうか?

A 回答 (1件)

モジュールに分けて、間をI2Cでというのなら、メインをI2Cマスターにして、他の4つをスレーブにしてアドレスを振っておけばいいのではないですかね。

スレーブモジュール間の通信は、一回メインに読み込んでからモジュール側へ書き込めばいいと思いますが。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
なるほど、たしかにそれならメインがマスタとして制御して実現できそうなのですが、
ただそれだとメインが全てのチップの機能を把握する必要があると思うので
それはやりたくないのです・・
例えばこのシステムで、次の3つの場合だと、

①『4桁LEDディスプレイ』
②『タイマー発生装置』
③『メイン』

『メイン』は『タイマー発生装置』が必要としてること(【入力】どのインターバルでカウントアップさせるか?)
だけを把握してそれだけを出力してあげれば機能するような仕組みにしたいのです。
つまり『4桁LEDディスプレイ』が何を必要(【入力】表示する数値)としてるかは『タイマー発生装置』に任せたいのです。

ただ

③『メイン』
④『メロディ発生装置』
⑤『サウンド出力装置』

この関係では『サウンド出力装置』から『メイン』に出力する必要があるので
そういうわけにはいきませんが。

つまり物理的に接続してる両隣(入力、出力)

入力←『あるモジュール』→出力

の範囲だけを把握する構造にしたいのです。

お礼日時:2016/02/01 15:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!