TJ3Bのセンサーを増やす マルチプレクサの使い方
TJ3Bでセンサーを増やしたいけど、もうセンサーポートがないよ、と言う場合があります。
方法として、センサーをつなげたサブマイコンを用意して通信させる手があります。
その場合も2つ方法があり、
案1. Arduino(アルディーノ)など、他のマイコンで作る
案2. TJ3Bまたは、TJ3Bcoreを用意して接続する
があります。
案1はArduinoは値段も安く、とても良い方法です。ただ、もう本体もArduinoにしたいと思っているレベルの選手ならやれるでしょうが、Arduinoを使ったことがない場合にセンサーを増やすためにやるのはちょっと難しいと感じるでしょう。
案2はものさえ用意できれば、ケーブルを接続しほぼ設定するだけでできるので難易度は低いです。ただし値段がそれなりにかかりますので、予算が問題になります。もう少し安くて工夫次第で使えるものはないのでしょうか。
値段は安く、難易度はそこそこで、電子工作やマイコンの仕組みなども学べるので今後TJ3Bを卒業してからも役に立つものです。
それができる装置は「マルチプレクサ」と言います。
今回はAmazonで買えるものを試してみました。
Amazonリンク https://amzn.asia/d/1HDxL57
10個で1000円以下とリーズナブルです。これでセンサーが増やせるなら楽しそうです。
マルチプレクサの仕組みと接続
C-CODEを使う部分はありますが、この値段でセンサーの数を増やせるのは魅力です。
例ではセンサーポート4つを使って8個のセンサーをつなぐ例です。
このように、CN8,CN9,CN10をOUTPUTにしてセンサーの番号を指定すると、CN7に特定のセンサーがつながるという仕組みです。
マイコンをつなぐことを考えれば単純な配線なので、これぐらいは練習でやってみると良いと思います。
マルチプレクサのプログラム(新(黒)マイコン)
※白マイコンについても同じ論理でできる(コードは異なる)はずなので確認次第追記します。
センサー番号を指定してからCN7を読み込めばいいのでプログラムを書いてみます。
理論上は、これで指定したC0のセンサーの値が変数Aに入るはずです。
だが、これだとおかしな値が出てきます。
解析の結果、原因はCM7にまだつながったばかりのC0の値が読み込まれていないためと分かりました。
実はマイコン内部の処理として、アナログセンサーの値はリアルタイムにCN7に入るわけではなく、CN1~CN10までが順番に読み込まれて保存されていく。なので切り替えた瞬間にはまだ古いデータが入っているのです。
つながったばかりのC0の値をCN7に読み込ませるために、以下のC-CODEを追加することで、変数AにC0につながったセンサーの値が入ります。
まずプログラムの変数定義のため、以下のC-CODEをプログラムの一番最初の1行目に加えます。自分のプログラムは2行目から書いてください。
プログラム最初の1行目(読み込み時に使う変数を定義する)
BYTE cADch[MAX_CN] = { AN0,AN1,AN2,AN3,AN5,AN8,AN9,AN10,AN11,AN12 };
これは後で使う変数を定義するものです。これを書かないと後のC-CODEの内容がややこしくなるのでこのまま書いてください。
次に、センサー番号を指定した後、変数Aに代入する前に2行のC-CODEを加えます。
読込前1行目(内部の接続をCN7に固定して少し待つ)
for (int n = 0; n < 1000; n++) {ADPCH = (BYTE)cADch[CN7];}
読込前2行目(電圧の値を読み込む)
gU_AD.H = ADRESH;gU_AD.L = ADRESL;gAD[CN7] = gU_AD.W;
マルチプレクサのプログラム(旧(白)マイコン)
少しだけC-CODEが異なりますが追加する箇所は同じです。下記のプログラムをそれぞれコピペして使ってください。
プログラム最初の1行目(読み込み時に使う変数を定義する)
int n; BYTE cADch[MAX_CN] = { AN0,AN1,AN2,AN3,AN4,AN8,AN9,AN10,AN11,AN12 }; volatile U_UINT gU_AD;
センサーの値の読込
読込前1行目(内部の接続をCN7に固定して少し待つ)
for (n = 0; n < 100; n++) {ADCON0 = cADch[CN7];}
読込前2行目(電圧の値を読み込む)
gU_AD.H = ADRESH;gU_AD.L = ADRESL;gAD[CN7] = gU_AD.W;
なんと、白マイコンのほうが値が安定する時間は短くできました。4つの値を連続で読み取って1msと黒マイコンより高速ですが、十分実用になる値が取得できました。理由は良く分かりません。
読込が成功したら、新マイコン同様、これをサブプログラムにして、使うと良いでしょう。
ブレッドボードのススメ
試す場合ははんだ付けしてしまう前に、ブレッドボードでやりましょう。ブレッドボードがない人はこの機会にブレッドボードとコード(ジャンプワイヤといいます)とセットで買っておくと良いですよ。電子工作の試作にはあるととても便利です。作ってから動かなかった、ということも減らせるので事前の実験は重要です。今後Arduinoに進む場合も使えます。
コメント
コメントを投稿