PICとPICでECAN通信の実験

〔マイコンのトップに戻る〕

CAN通信の基礎概要
PIC18F26K80のECANレジスタ内容
MCC操作でECAN 2.0Bプログラムを生成する
MCP2515モジュールでCAN通信の実験1(Arduino)
MCP2515モジュールでCAN通信の実験2(PIC)

このページでは実際にECAN通信の実験を行います。
(尚、このページでは車に接続しての実験等は行いません)
通信フレームは”データフレーム”、”リモートフレーム”を使います。
下図の様に18F26K8018F26K80の構成で行いたいと思いますので先ずは配線図を眺めましょう。

ECAN通信実験の配線図1
電源は5.0Vを使います。
ICの方向に注意しましょう。

PIC18F26K80のピン構成図
PICピン構成図

MCLRピンは、今回のソースをコンパイルすると "Disable"出来ない様なのでリセットピンとして設定し
 利用するので、VDDに配線しましょう。(10KΩ抵抗を介してVDDに接続した方が良いでしょう)
 (PICkit3等を接続する場合は、VDDの配線は外して接続しましょう。)
VCAPピンには内蔵レギュレータ用に10uF (16V)のセラミック(タンタル)コンデンサーを取り付け
 ましょう。
CANRX/CANTXピンはデフォルトのRB3/RB2を使います。
SCK/SDAのI2CピンはPORTCなので内部プルアップ抵抗が有りま せん、外部で行いましょう。

MCP2561ピン構成図MCP2561/2の詳しい内容は日本語データシートを見ましょう。
5V以下のマイコンと接続する場合は、MCP2562の方を使いましょう。
MCP2561のデータシートでは終端抵抗が60Ωの分割回路となっているが、
E系列にはないので51Ωで実験を行っていますので、終端は102Ωです。
(そう言う意味ではMCP2562を使った方が良かったかも?)
SPLITピンに300Ω抵抗を追加するとバス障害中 でも通信出来る様にする為の物らしぃ。
STBYピンは、LOWで通常動作モードで、HIGHで消費電力を抑える為の スタンバイモード。
 バスのアクティビティで復帰する様です。

何らかの回路に組み込む場合は、PICとMCP2561には 0.1uFのパスコンを取り付けましょう

《プログラムのインストール》

ここでの記事は、MPLAB X IDE v4.10での説明となっ ています。

@↓ここからサンプルプログラムソースファイルをダウンロードして下さい。
 [PICtoPIC.zip]

Aプログラムソースをダウンロードしたら解凍して下さい。
 解凍すると下の様に展開されます。
  [PICtoPIC]─┬─[mcc_generated_files]
├ node1.c ├─ interrupt_manager.c
├ node2.c ├─ interrupt_manager.h
├ node1Rc ├─ ecan.c
├ node2R.c └─ ecan.h
├ skI2CLCDlib.c
├ skI2CLCDlib.h
├ skI2Clib.c
└skI2Clib.h
BMPLAB Xにてプロジェクトを作成し、 解凍ファイルをプロジェクトディレクトリにコピーして
 プロジェクトに取込んで下さい。

"mcc_generated_files" の取り込み方法

C先ず、[Header Files] に”mcc_generated_files”のヘッダファイルを取 り込みます。

IDEのプロジェクトファイル図Header Files」をマウスの右ボタンでク リックし、サブメニューから
  "Add Existing Items from Folders..."を選びます。

SourceFile取り込み1


「Add Files」の ウインドウ画面が表示されるので、右上に有る[Add Folder...]ボタンをクリックします
するとぉ、下図の画面が表示されます。

SouceFile取り込み2
ファイルのタイプ(T):を”Header Files”にします。
"test.X"フォルダーの"mcc_generated_files" を選択します。
[Select]ボタンをクリックします。
(ここでは"test.X"でプロジェクトを作成しています。)

SouceFile取り込み3
とぉこの様になるので後は[Add]ボタンをクリックしま す。


D次に、[Source Files] に”mcc_generated_files”のソースファイルを取 り込みます。

 上のC、[Header Files] と同じ様な操作ですが、ファイルのタイプ(T):を”C Source Files”にします。

SouceFile取り込み4この様にファイ ルを取り込みましょう。
左図は"node1.c"の場合の取り込み例です。
"node2.c"や"node1R.c/node2R.c"の場合は其々、
"node1.c"と入れ替えてコンパイルしましょう。

次にコンパイルPIC書き込みを実行して下さい。
MPLAB(R) XC8 C Compiler Version 1.40コンパイラ
使用しています。


《プログラムについて》

ダウンロードファイル
 node1.c・・・・・・・CANバスに接続されるノード1機器のサンプルプログラム1(データフレーム版)
 node2.c・・・・・・・CANバスに接続されるノード2機器のサンプルプログラム1(データフレーム版)
 node1R.c・・・・・・CANバスに接続されるノード1機器のサンプルプログラム2(リモートフレーム版)
 node2R.c・・・・・・CANバスに接続されるノード2機器のサンプルプログラム2(リモートフレーム版)
 ecan.c・・・・・・・・・MCCで生成したECANドライバのソースファ イル
 ecan.h・・・・・・・・・ECANドライバファイルのヘッダファイル
 interrupt_manager.c・・・MCCで生成した割り込みマネージャのソースファイル
 interrupt_manager.h・・・割り込みマネージャのヘッダファイル
 skI2CLCDlib.c・・・・・・・・・・I2C接続LCD関数ライブラリの ソースファイル
 skI2CLCDlib.h・・・・・・・・・・I2C接続LCD関数ライブラリの ヘッダファイル
 skI2Clib.c・・・・・・・・・・・・・・I2C関数ライブラリの ソースファイル
 skI2Clib.h・・・・・・・・・・・・・・I2C関数ライブラリの ヘッダファイル

 尚、CPUのクロックは16MHzを想定しています。
 なので通信速度等(I2C/ECAN)はシステムクロック16MHzで計算されています。

"ecan.c/ecan.h"と"interrupt_manager.c/interrupt_manager.h"のファイルは、
前ページで説明したMCC機能で生成されたファイルに、日本語コメントを追記して利用しています。
"interrupt_manager.c/interrupt_manager.h"についてはI2C受信割り込み関連を追加しています。
ECANドライバ 関数の説明は、"AN2714"を参考にして下さい。

"node1.c/node2.c"と "node1R.c/node2R.c"のファイルは何れか一つでコンパイルしましょう

skI2CLCDlib.c
skI2CLCDlib.h
skI2Clib.c
skI2Clib.h

この内容は”秋月電子I2C接続小型LCDモジュールに表 示を行う”を参照下さい。
但し、今回の添付ファイルはPIC18F26K80に対応しているのでこのファイルを使います。

《データフレーム》

データフレームの実験は標準データフレームで行います。
ノード2から半固定抵抗の値をデータフレーム(ID=0x123)で500ms毎に送信します、
ノード1はそれを受信しLCDに値を表示させる実験です。
"node1.c"をコンパイルしノード1のPICに書き込みを行い、"node2.c"をコンパイルしノード2のPICに
書き込みましょう。

起動させるとLCDに、
[ECAN    ]
[      TEST]
と表示された後、3秒後に送信が始まります、
[ECAN    ]
[     ????]
とLCDの2行目に表示されるので半固定抵抗を回して見ましょう。
尚、PIC18F26K80のアナログは12ビット(0-4095)となります。

《リモートフレーム》

ECAN通信実験の配線図2左図の如く、ノード1にスイッチを追加配線します。
スイッチは、RB0のピンに接続し、プルアップ抵抗はPIC内蔵を
利用します。



リモートフレームの実験は、
ノード1接続のスイッチを押せばリモートフレーム(ID=0x123)が送信されます。
ノード2は、リモートフレームを受信したら半固定抵抗の値をデータフレーム(ID=0x123)で送信します。
それを受信したノード1は、LCDに値を表示させる実験です。
"node1R.c"をコンパイルしノード1のPICに書き込みを行い、
"node2R.c"をコンパイルしノード2のPICに書き込みましょう。

起動させるとLCDに、
[ECAN    ]
[      TEST]
と表示されます、後はスイッチをポチッとな、
[ECAN    ]
[     ????]
と1秒後、LCDの2行目に半固定抵抗の値が表示されます。
(1秒後は、スイッチのチャタリング防止で入れています)

《その他》

実験の風景
実験時の風景です。
CANバストランシーバはMCP2562の方が扱いやすそうです。
今回の様な実験ならCANバスはツイストペアケーブルでなくても動作するでしょう。
又、今回は実験だけなので何かに組み込む場合は、
PICのクロックは外部水晶振動子にした方が良いでしょう。





【きむ茶工房ガ レージハウス】
Copyright (C) 2006-2018 Shigehiro Kimura All Rights Reserved.