I2Cモジュール等のライブラリプログラムの作成
各種センサ等ではI2Cでマイコン等に接続する事が結構多いです。
その、制御プログラムを作成する場合は実験基板を構成して、プログラムを始めます。
PICキットの各モジュール基板の接続で試験回路を構成してたのだが・・・
それすら面倒になった・・・ (^_^;)
ので、一枚基板でPICキット3枚分を構成する事にしました。
左記画像から見ても解りますが、「南波君」の基板構成を転用しています。

↑ 実験基板回路図




↑ 実験基板結線図(秋月B2基板)
基板の上(部品面)から見た図
実線はメッキ線による裏面配線
点線はピニール線やメッキ線による表面配線で全長は記入されていない
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です。
ソフトウエア上の差異は無いと思います。

↑ AE-PCA9306
ジャンパカットし、ピンをはんだ付け
AE-PCA9306 I2Cレベル変換モジュール 補足事項

秋月電子で販売されている、安価で便利なモジュール基板です。
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ポートに接続されています。
  ポートに対して電流入力です。
  適当な名前でマクロ設定しておくと便利です。





感想

I2Cインターフェイスはライブラリさえ揃ってしまえば、使い勝手の良い便利なシリアル双方向通信規格です。
今後はこれを使って当局内I2C機器やI2Cライブラリのバージョンアップ等、色々遊んで見ようと思っています。







↑ I2Cバス 3.3V側





↑ I2Cバス 5V側

追記 2019年10月29日

ハードウエアの小変更しました。
画像の様にI2Cバスおよび電源出力を上下2列ピンに変更
これにより同時に2つのI2C機器を接続可能となりました。
PICキットのI2C分岐基板を使用すれば5ポートに拡張できますが、3つ同時接続は頻度が少ないですし面倒、デフォルトで2ポートあれば結構便利。
また、ピン接続が解り易く間違い接続防止の意味もあります。
これにより、上ピンはSCL、下ピンはSDAとなりました。
同様に電源出力も上ピンが+下ピンが-となっています。


戻る  実験・製作の記録TOPへ戻る