SPIモジュール等のライブラリプログラムの作成

SPIは結構高速かつ柔軟なシリアル通信方式で、返信不要ならばMSSPに頼らなくとも、とりあえず制御が可能です。
アクセス速度をそれ程要求しないセンサ等のインターフェイスはI2Cが多いですが、HC595等便利で面白いデジタルICを高速で制御可能です。
左記画像から見ても解りますが、「南波君」の基板そのものを改造しています。
南波君はジャンク箱でヒマそうにゴロゴロしてたので、たたき起こしました・・・


↑ 実験基板回路図





↑ 基板正面

 画像上部が4bitポート
 画像右側が2bitポート
 画像左側が電源入力ピン





↑ 基板上面

画像左側から

ICSPポートピン
 左側から
  ①ピン:VPP
  ②ピン:VDD
  ③ピン:VSS
  ④ピン:PGD
  ⑤ピン:PGC
  ⑥ピン:VLP(NC)

RC3ジャンパピン
 JPピン接続でLEDのON/OFF
  RC3=0で発光、1で消灯
 JPピン開放でRC3I/O利用可

4bitポート
 左側から
  RC0(ピン下はGND)
  RC1(ピン下はGND)
  RC2(ピン下はGND)
  RC3(排他的にLED利用)
  VDDピン
   ピン上が5V出力
   ピン下がGND




↑ 基板右側面 2bitポート


 2bitポートピン左側から
  RA4(ピン下はGND)
  RA5(ピン下はGND)
  VDDピン(ピン下はGND)




↑ 4bitロータリーDIPスイッチ



SPI実験基板の製作と言うか改造ポイント

20ピンPIC仕様なので、基板を破壊せず簡単に改造できる事を念頭に行いました。

(1)4bit連続のパラレルポートを作る
  これはRBポートかRCポートを開放する事になります。
  RBポートはロータリーDIPスイッチに接続されています。
  これはこれで、残した方が便利、RCポートを使う事に。
  で、LCDの制御ポートのみを移動、RC0-RC3が確保できました。
  RC4-RC7はそのままLCDデータポートとして使用
  制御ポートはRA0-RA2に移動させる事にしました。

(2)2bit連続のポートを作る
  これはRA4-RA5を開放する事にしました。
  ここはLEDが接続されていたので、1つはただの電源オンのPLとした。
  残りはRC3にジャンパピンで接続/切断可能として残す事に。

(3)その他
  割り込み用スイッチは撤去
  電源用の7805も撤去
  これは電源自体を3.3Vで使用する事もあるかも知れないためです。
  (1)(2)ポート傍には電源ピンを増設


既存のXC8ライブラリファイルです。
ただ、この基板用にポートを合わせています


インクルード・関数群

 搭載LCD用

 SC1602v1_SPIB.h_

 SC1602v1_SPIB.c


 ロータリーエンコーダ用

 R_ENCODERv1.h

 R_ENCODERv1.c

基本ライブラリファイルの初期設定

PIC16F18346及びXC8で作ります。
もちろん、他の20ピンPIC16F1でもOKです。
必要な情報はSC1602LCDに表示します。
よって、パラレルLCDライブラリを基本装備とします。
XC8 SC1602ライブラリの詳細については別項を参照して下さい。

(1)SC1602 4ビットパラレルLCDライブラリ Ver1.0

 1)SC1620ヘッダーファイルのマクロによるI/Oポート設定
   SC1602v1ライブラリを使用しています。
   使用ポートは下記の通りに変更しています。

    RC7:DB7
    RC6:DB6
    RC5:DB5
    RC4:DB4
    RA2:R/S
    RA1:R/W
    RA1:E


(2)4bitポートの使用について

 1)SPI
  特に制限は無いので自由にポート設定します。
  当局の好みとしては、RC0がCLK、RC1がDAT、RC2がLAT、
  と言った所でしょうか
  戻りポートとしてはRC3となりますが、LEDと排他的使用です。

 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)ロータリーエンコーダ
  2bitポートがX’TALユニットを差し込んだ等、使えない場合。
  その場合、残りポートはRC0-1の2ポートとなります。
  NCOやPWM等パルス出力制御実験に・・・
   RC2:REAポート
   RC3:REBポート
   関数名:「R_ENCORDERv1_RC23」


(3)2bitポートの使用について

 1)ロータリーエンコーダ
  左記にあるファイルは、
   RA4:REAポート
   RA5:REBポート
  と、設定されています。

 2)X’TALユニット
  RA4-5を使用したX’TALユニットNO2が使用可能です



感想

簡単改造の割にちょっとした実験には使い勝手の良い基板になったと思います。
ロータリーDIPスイッチ内蔵は実験には何かと便利です。
2bitポートはロータリーエンコーダ接続に便利

今後は各種の実験に登場してくれそうです。




追記事項がありましたら、ここに記載します



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