2011年2月11日金曜日

PICでCAN通信(その3)

通信を行おうとすると、当然通信相手が必要となります。

CAN通信を行うにしたがい、通信相手が更に欲しくなります。

しかし、現在のブレットボードでは限界を感じずにはおれません。

従って、新しいノードをユニバーサル基盤に作りましたYO。

基本は前回作ったノード1とほぼ同じものを移植です。

ほぼとは、リセット回路を若干いじってみました。

こんな感じの構成となりました。


左からノード2、ノード1、ノード3



これが新規のノード3

オシレータを水晶振動子にしています。

また、リセット回路を教科書通りにしました。



プログラムについては、ノード1,3は同じものをインスコ。

ただ、データを送るのみ。

今回は標準IDを指定し、指定したIDのノードがレスポンスします。

ノード2はフィルタにてIDを設定。

自分宛に来たデータを受け取り、LCDに表示。

また、データが奇数の場合はLEDを点灯するようにプログラム。

モーターは五月蝿いのと、ノイズ対策が不十分なのでやめました。



で、動作を確認すると・・・

動きません。

試行錯誤して分かったのは、リセット時間の違いのようです。

PICとMCP2515には同じ容量のコンデンサと抵抗を使用していましたが、

ばらつきによりPICが先に起動してしまいMCP2515に命令が送れていなかった模様。

コンデンサの容量をPICが大きくなるように変更しとりあえず動作しました。

しかし、まだ問題がアリアリ。

新規のノード3のリセットが働きません。

電圧がリセット電圧まで下がらず、リセットが効かない模様。

これまた試行錯誤の末、使用していた抵抗10kΩ、30kΩを、

1kΩ、30kΩに変更して解決。

つまり、MCLR側を1/10にしただけ。

教科書通りだとリセットできませんでした。



今回の教訓

・PICよりも先にCANコントローラを起動させるべし。

・リセット回路の抵抗はMCLR側を1kΩ、Vpp側を30kΩ程度にするべし。