PICマイコンを開発するワークベンチ、MPLAB IDE。MPLAB X IDEを使って、C言語で開発してみようとして・・ドツボにはまっている状態。解決の糸口が見えないので、そもそもどこに原因があるのかを最初から検証してみることにした。
Nゲージレイアウト用制御盤、残る機能は・・
製作中のNゲージの固定式レイアウト。
線路を敷く天板が出来上がったので、いざ線路を敷いて・・
と思ったが、まだポイントマシンができていない。
ポイントマシンを制御する部分も出来上がっていないのでポイントマシンの製作も途中で止まっているのであった。
そのためにはまず、制御盤の残っている機能・ポイントマシンの制御部を作らなくては。
これが、レイアウトのメイン部分。
・・パノラマモードで写真を撮っているので湾曲して見えるが、実際は長方形。
下段はこの台枠を周回するエンドレスの線路を敷くが、ここにはポイント類はない。
メインのレイアウトの両脇に連結して延長部分となる2個の台枠。
結果的には3分割のコの字型のレイアウトになる。
制御盤の配置
現在作っている制御盤は3個の台枠それぞれに対応するもの計3個と、それら3個をまとめる機能とコントローラ部を持つ主制御盤の合計4個。
制御盤の主な機能は列車を走行させるコントローラとアナウンス音、ディーゼルエンジン音、汽笛などの効果音を出すこと、それにポイントを制御し、信号を点灯させること。
このうち、コントローラと効果音などについてはほぼ制御盤に組み込みが終わっている。
(詳細は「Nゲージレイアウト用制御盤」で。)
また、ポイントマシンについては市販のメーカー製のものは使わず、PICマイコンとステッピングモーターを使ったスローアクションのものを製作中。
(詳細は「ポイントマシン」で。)
台枠ごとに制御盤を持たせたのは?
・・常に延長部のレイアウトをくっつけなくても運転できるように。
また、主制御盤は盤面上のテコに応じて進路を決定して各制御盤にポイント切り替えの指示を出す。
しかし、プログラムにバグがあると進路が構成できず、列車が走行できない。
ということで、各台枠に対応した3個の制御盤はソフトによる制御だけではなく、押し釦によってポイントマシンを強制的に切り換える機能を持たせた。
最終的にはポイントの切り換えはPICマイコンが行うのでここにバグがあるとポイントは切り換わらないが?
・・ごもっとも。
だが、ポイント数は20個くらいあり、常に使用する機能だからいずれバグも枯れるでしょう。
なぜ、主制御盤にポイントマシンを強制的に切り換える押し釦を設置しなかったか?
・・各台枠までの配線が膨大な量になるから。
そして、台枠を切り離す際のコネクタも端子数が相当な数が必要になるから。
そこまでして複雑にしなくても、市販のポイントマシンと切換えスイッチを並べた方が安価で確実ではないか?
・・PICマイコンで遊ぶのも趣味だから。
それに市販のポイントマシンでは赤/青等の信号は実感的に切り換えられない。
3個の台枠と4個の制御盤はこんな感じに配置。
主制御盤
主制御盤は発車する区間のテコを進みたい方向に倒し、到着したい区間のボタンを押すことによってそこまでの進路が開通するようにポイントを転換していく機能を持つ。
メインの制御盤はレイアウト上の各線へ、どのコントローラから給電を行うかの切り替えもできる。
コントローラとしては、
- 自作のPWMコントローラ
- 製作中の電気機関車用コントローラ
- 市販のメーカー製コントローラ
の3種。
コントローラの種類を切り替えることによっていろんな走行パターンが楽しめる・・はず。
また、PWMコントローラでは走行できない車両があったとしても、メーカー製コントローラを使うことで走行できる・・はず。
幹線駅制御盤
メインのレイアウトのポイントを制御する制御盤。
担当するポイントの数も12個と台枠くくりつけの3つの制御盤の中では最も多い。
青/赤2色の信号の他、入換信号もある。
これらはすべて点灯。
ここにはターンテーブルの制御も追加するのだが、これまた製作途中。
生きているうちに完成するのだろうか?
信号所制御盤
コの字型となるレイアウトの出っ張り部分。
PWMコントローラと効果音を再生するユニットもある。
効果音を再生するユニット
ただ、どんな音にするか未定のため、ラベルを貼り付けていない。
ローカル線駅制御盤
コの字型となるレイアウトの出っ張り部分のうちの残りの1個。
基本的には信号所制御盤と同じ。
担当するポイントは2個。
制御盤の連携
ポイントの制御に関してはPICマイコンで行う。
PICマイコン同士を連携させるには、
・I/Oピンの電圧のON/OFFによるもの
・USARTによる通信
・I2Cによる通信
などが考えられる。
複数のPICマイコン間で多量のデータのやり取りをするのならI2Cによる通信であろうか。
数多くのPICマイコンの連携機能を作り込むのはデバッグも大変そうということで、これらを統括するものとして「Raspberry Pi3(シングルボードコンピュータ・ラズベリーパイ)」を使用することにした。
ラズベリーパイが制御の主体を担い、PICマイコンが手足となって動くという感じ。
連携のイメージとしては左図のような感じか。
・PIC32MX120F032B
・PIC16F887
・PIC16F886
・PIC16F1823
を想定。
PIC32MX120F032B
各制御盤に配置する。
I2Cが2chある。
1chはRaspberry Pi3と通信し、自身が管理しているポイントが定位なのか、反位なのかをRaspberry Pi3に通知したり、Raspberry Pi3からのポイント転換の指示を受ける。
もう1chは配下のPICマイコンに対してポイントの転換を指示したり、現在ポイントが定位なのか、反位なのかのステータスを得る。
・・・という使い方を考えているが、1chがマスター、もう1chがスレーブとして使えることが前提。
まだ、詳しく調べていないので別々のモードで使えるか否かはわからんのだが。
ただ、I2Cに関するレジスタ類は同じものが2セットずつある感じなのでたぶん大丈夫。
PIC16F887
主制御盤と幹線用制御盤に配置し、信号のLEDなどの点灯を制御する。
この2つの制御盤はLED数が多いので、I/Oピンが多い方が使いやすそうということで、I/Oポートが最大35本のこのマイコンを選択。
PIC16F886
ローカル線駅制御盤と信号所制御盤に配置し、信号のLEDなどの点灯を制御する。
この2つのレイアウトはLED数が少ないので、I/OピンはPIC16F887ほど必要ない。
PIC32MX120F032Bでも賄えると思うが、PIC32のプログラムを単純かつバリエーションを少なくなるするためにはPIC16F887と同じくLED点灯専用のPICを配置した方が良いのかな、ということでこのマイコンを使用することにしたのだが。
実際に作るときにはやっぱ、いらないとなっているかも知れない。
PIC16F1823
ポイントマシンのモーターとなるステッピングモーターの動作を制御するもの。
PIC32MX120F032Bと通信して、ポイントが定位なのか、反位なのかを通知したり、ポイント転換の指示を受ける。
Raspberry Pi3
ポイント制御の頭脳となる・・予定。
現在は、レイアウト横のパソコンと一緒に置かれている。
本体はパソコン用のワイドモニタの上に古いスクエアのモニタを設置し、その背面にセットしている。
透明ケースに入っているのがRaspberry Pi3本体。
その右横にある茶色の基板上にある4個のシルバーの部品はLANケーブルの端子。
これにLANケーブルを指して、4個の制御盤と接続。