PIC I2C機器プログラム開発用実験基板の製作
I2Cモジュール等のライブラリプログラムの作成
各種センサ等ではI2Cでマイコン等に接続する事が結構多いです。
その、制御プログラムを作成する場合は実験基板を構成して、プログラムを始めます。
PICキットの各モジュール基板の接続で試験回路を構成してたのだが・・・
それすら面倒になった・・・ (^_^;)
ので、一枚基板でPICキット3枚分を構成する事にしました。
左記画像から見ても解りますが、「南波君」の基板構成を転用しています。
各種センサ等ではI2Cでマイコン等に接続する事が結構多いです。
その、制御プログラムを作成する場合は実験基板を構成して、プログラムを始めます。
PICキットの各モジュール基板の接続で試験回路を構成してたのだが・・・
それすら面倒になった・・・ (^_^;)
ので、一枚基板でPICキット3枚分を構成する事にしました。
左記画像から見ても解りますが、「南波君」の基板構成を転用しています。
I2C実験基板の製作
目的は5Vと3.3VのI2Cモジュールを接続できる事にあります。
左記の回路図を秋月のB2基板に乗っけました。
14ピンPICを使用します。
RC0-1をI2C入出力ピンとしました。
RA4-5をデバッグ用LEDに接続
残りのピンでSC1602パラレル接続LCDと接続しました。
また、電圧レベル変換モジュールを使用し、2系統のI2Cバスを用意
出力電源も、5Vと3.3Vの2系統出力を用意
3.3V出力は最大100mAです。
この基板に入力する電源は5Vです。
I2Cバスラインはこの基板内でプルアップされています。
よって、接続I2Cモジュールでのプルアップは不要です。
また、レベル変換モジュール内のプルアップ抵抗は切り離しています。
抵抗値が結構低く、誤動作を避けるためです。
LCDは当局内でたくさん在庫のあるSC1602Dを使用しています。
秋月等で販売されているSC1602Bとは電源ピンの極性が違いますので要注意
また、SC1602Bにはバックライト用LED用のピンがありませんので、LCDモジュール基板上で配線します。
SC1602Dでも同じ事が可能です。
その点を注意すればSC1602BでもOKです。
ソフトウエア上の差異は無いと思います。
目的は5Vと3.3VのI2Cモジュールを接続できる事にあります。
左記の回路図を秋月のB2基板に乗っけました。
14ピンPICを使用します。
RC0-1をI2C入出力ピンとしました。
RA4-5をデバッグ用LEDに接続
残りのピンでSC1602パラレル接続LCDと接続しました。
また、電圧レベル変換モジュールを使用し、2系統のI2Cバスを用意
出力電源も、5Vと3.3Vの2系統出力を用意
3.3V出力は最大100mAです。
この基板に入力する電源は5Vです。
I2Cバスラインはこの基板内でプルアップされています。
よって、接続I2Cモジュールでのプルアップは不要です。
また、レベル変換モジュール内のプルアップ抵抗は切り離しています。
抵抗値が結構低く、誤動作を避けるためです。
LCDは当局内でたくさん在庫のあるSC1602Dを使用しています。
秋月等で販売されているSC1602Bとは電源ピンの極性が違いますので要注意
また、SC1602Bにはバックライト用LED用のピンがありませんので、LCDモジュール基板上で配線します。
SC1602Dでも同じ事が可能です。
その点を注意すればSC1602BでもOKです。
ソフトウエア上の差異は無いと思います。
AE-PCA9306 I2Cレベル変換モジュール 補足事項
秋月電子で販売されている、安価で便利なモジュール基板です。
8ピンDIPと同じ大きさ基板とピンが付属していますので、8ピン用ソケットに差し込んで使用します。
直接ピンを今回の基板にはんだ付けしても良いかとは思います。
付属のピンをはんだ付けする前に、付属のマニュアルを参考に、
J2,J3,J4,J5のジャンパをカッター等でカットします。
実装されている両側プルアップ抵抗は1KΩです。
これをジャンパーカットで切り離します。
回路図で示しているピン番号との対応は下記の通りです。
①ピン VREF1 低圧側 3.3V
②ピン SCL1 低圧側クロック
③ピン SDA1 低圧側データ
④ピン VPU 未接続
⑤ピン GND
⑥ピン SDA2 高圧側データ
⑦ピン SCL2 高圧側クロック
⑧ピン VREF2 高圧側 5V
秋月電子で販売されている、安価で便利なモジュール基板です。
8ピンDIPと同じ大きさ基板とピンが付属していますので、8ピン用ソケットに差し込んで使用します。
直接ピンを今回の基板にはんだ付けしても良いかとは思います。
付属のピンをはんだ付けする前に、付属のマニュアルを参考に、
J2,J3,J4,J5のジャンパをカッター等でカットします。
実装されている両側プルアップ抵抗は1KΩです。
これをジャンパーカットで切り離します。
回路図で示しているピン番号との対応は下記の通りです。
①ピン VREF1 低圧側 3.3V
②ピン SCL1 低圧側クロック
③ピン SDA1 低圧側データ
④ピン VPU 未接続
⑤ピン GND
⑥ピン SDA2 高圧側データ
⑦ピン SCL2 高圧側クロック
⑧ピン VREF2 高圧側 5V
基本ライブラリファイルの初期設定
ここでは、PIC16F18326及びXC8で作ります。
もちろん、他の14ピンPIC16F1でもOKです。
必要な情報はSC1602LCDに表示します。
よって、パラレルLCDとI2Cライブラリを基本装備とします。
XC8 SC1602ライブラリの詳細については別項を参照して下さい。
I2Cライブラリについても、別項を参照して下さい。
もちろん、MSSP1マスターモードを使用します。
(1)SC1602 4ビットパラレルLCDライブラリ Ver1.0
1)SC1602ヘッダーファイルのマクロによるI/Oポート設定
初期設定値でOKですが、確認します
#define DB7 LATCbits.LATC5 // DB7 書き込みポート
#define DB6 LATCbits.LATC4 // DB6 書き込みポート
#define DB5 LATCbits.LATC3 // DB5 書き込みポート
#define DB4 LATCbits.LATC2 // DB4 書き込みポート
#define DR7 PORTCbits.RC5 // DB7 読み込みポート
#define DR6 PORTCbits.RC4 // DB6 読み込みポート
#define DR5 PORTCbits.RC3 // DB5 読み込みポート
#define DR4 PORTCbits.RC2 // DB4 読み込みポート
#define ENA LATAbits.LATA0 // イネーブル(E) ポート
#define R_W LATAbits.LATA1 // R/W ポート
#define R_S LATAbits.LATA2 // R/S ポート
#define TR7 TRISCbits.TRISC5 // DB7ポートのI/O設定
#define TR6 TRISCbits.TRISC4 // DB6ポートのI/O設定
#define TR5 TRISCbits.TRISC3 // DB5ポートのI/O設定
#define TR4 TRISCbits.TRISC2 // DB4ポートのI/O設定
(2)MSSP1のポート設定
メインルーチンで設定します。
PICによって違いがありますので、ここでは16F18326用に設定
また、RC0はSCL、RC1はSDAと設定します。
PMD4 = 0x04;
SSP1CLKPPS = 0x10; // RC0の入力先はSCL
SSP1DATPPS = 0x11; // RC1の入力先はSDA
RC0PPS = 0x18; // RC0の出力源はSCL
RC1PPS = 0x19; // RC1の出力源はSDA
(3)その他
LEDがRA4およびRA5ポートに接続されています。
ポートに対して電流入力です。
適当な名前でマクロ設定しておくと便利です。
ここでは、PIC16F18326及びXC8で作ります。
もちろん、他の14ピンPIC16F1でもOKです。
必要な情報はSC1602LCDに表示します。
よって、パラレルLCDとI2Cライブラリを基本装備とします。
XC8 SC1602ライブラリの詳細については別項を参照して下さい。
I2Cライブラリについても、別項を参照して下さい。
もちろん、MSSP1マスターモードを使用します。
(1)SC1602 4ビットパラレルLCDライブラリ Ver1.0
1)SC1602ヘッダーファイルのマクロによるI/Oポート設定
初期設定値でOKですが、確認します
#define DB7 LATCbits.LATC5 // DB7 書き込みポート
#define DB6 LATCbits.LATC4 // DB6 書き込みポート
#define DB5 LATCbits.LATC3 // DB5 書き込みポート
#define DB4 LATCbits.LATC2 // DB4 書き込みポート
#define DR7 PORTCbits.RC5 // DB7 読み込みポート
#define DR6 PORTCbits.RC4 // DB6 読み込みポート
#define DR5 PORTCbits.RC3 // DB5 読み込みポート
#define DR4 PORTCbits.RC2 // DB4 読み込みポート
#define ENA LATAbits.LATA0 // イネーブル(E) ポート
#define R_W LATAbits.LATA1 // R/W ポート
#define R_S LATAbits.LATA2 // R/S ポート
#define TR7 TRISCbits.TRISC5 // DB7ポートのI/O設定
#define TR6 TRISCbits.TRISC4 // DB6ポートのI/O設定
#define TR5 TRISCbits.TRISC3 // DB5ポートのI/O設定
#define TR4 TRISCbits.TRISC2 // DB4ポートのI/O設定
(2)MSSP1のポート設定
メインルーチンで設定します。
PICによって違いがありますので、ここでは16F18326用に設定
また、RC0はSCL、RC1はSDAと設定します。
PMD4 = 0x04;
SSP1CLKPPS = 0x10; // RC0の入力先はSCL
SSP1DATPPS = 0x11; // RC1の入力先はSDA
RC0PPS = 0x18; // RC0の出力源はSCL
RC1PPS = 0x19; // RC1の出力源はSDA
(3)その他
LEDがRA4およびRA5ポートに接続されています。
ポートに対して電流入力です。
適当な名前でマクロ設定しておくと便利です。
感想
I2Cインターフェイスはライブラリさえ揃ってしまえば、使い勝手の良い便利なシリアル双方向通信規格です。
今後はこれを使って当局内I2C機器やI2Cライブラリのバージョンアップ等、色々遊んで見ようと思っています。
I2Cインターフェイスはライブラリさえ揃ってしまえば、使い勝手の良い便利なシリアル双方向通信規格です。
今後はこれを使って当局内I2C機器やI2Cライブラリのバージョンアップ等、色々遊んで見ようと思っています。
追記 2019年10月29日
ハードウエアの小変更しました。
画像の様にI2Cバスおよび電源出力を上下2列ピンに変更
これにより同時に2つのI2C機器を接続可能となりました。
PICキットのI2C分岐基板を使用すれば5ポートに拡張できますが、3つ同時接続は頻度が少ないですし面倒、デフォルトで2ポートあれば結構便利。
また、ピン接続が解り易く間違い接続防止の意味もあります。
これにより、上ピンはSCL、下ピンはSDAとなりました。
同様に電源出力も上ピンが+下ピンが-となっています。
ハードウエアの小変更しました。
画像の様にI2Cバスおよび電源出力を上下2列ピンに変更
これにより同時に2つのI2C機器を接続可能となりました。
PICキットのI2C分岐基板を使用すれば5ポートに拡張できますが、3つ同時接続は頻度が少ないですし面倒、デフォルトで2ポートあれば結構便利。
また、ピン接続が解り易く間違い接続防止の意味もあります。
これにより、上ピンはSCL、下ピンはSDAとなりました。
同様に電源出力も上ピンが+下ピンが-となっています。