« 【PICマイコン】PIC16F18313の初期設定 | トップページ | 【PICマイコン】反射型光センサーの動作確認 »

2017/11/04

【PICマイコン】I2C接続LCDモジュール②

PIC16F18313のPPS (ペリフェラルピンセレクト)機能を使うことで、小型のブレッドボードでもPICマイコンと同居できましたので、メモしておきます。


(参考)
PICマイコンで電子工作(その7:I2C接続LCDモジュール)
PICマイコンで電子工作(その8:PIC16F18313の初期設定)

使用するPICマイコンはPIC16F18313で、ピン設定は次のとおりです。

・RA0: I2C入出力(SDA)+Weak Pull-up設定
・RA1:I2C入出力(SCL)+Weak Pull-up設定
・RA2:LCD_nRESET(1でLCDが動作)
・RA4:LED

main()から呼ばれるSYSTEM_Initialize()の内容の一部です。使用するPICマイコンの設定内容の違いをまとめるため、関数にしています。ここには記述されていませんが、INIT_HFFRQとINIT_NDIV、INIT_OSCCONはヘッダファイルで設定しています。PIC12F1822の場合の設定内容も記述していますが、PPS機能がないので、ピン設定は異なってきます。



//--------------------------------------------------------------------------
void SYSTEM_Initialize(void){

#ifdef    _16F18313
    OSCFRQbits.HFFRQ    = INIT_HFFRQ;    // HFINTOSCの発振周波数を設定
    OSCCON1bits.NDIV    = INIT_NDIV;    // Postscalerの分周比を設定
    RA1PPS                = 0b11000;        // 11000: SCK1/SCL1 output
    RA0PPS                = 0b11001;        // 11001: SDO1/SDA1 output
    SSP1DATPPS            = 0x00;            // RA0: SD01/SDA1 input
    TRISA    = 0b00001011;                // RA1(SCL),RA0(SDA:PPS),RA3は入力モード
    WPUA    = 0b00000011;                // pull-up (RA1=SCL, RA0=SDA:PPS pull-up enable)
    PORTA    = 0b00000000;                // 出力ピンの初期化(全てLOWにする)
    ANSELA    = 0b00000000;                // すべてのピンをデジタルモード
    RA2        = 1;                        // LCD_nRESET = 1
#elif    _12F1822
    OSCCON    = INIT_OSCCON;                // INTOSCの発振周波数を設定
    OPTION_REGbits.nWPUEN = 0;            // 入力ピンのプルアップ無効化を解除
    TRISA    = 0b00001110;                // RA1(SCL),RA2(SDA:PPS),RA3は入力モード
    WPUA    = 0b00000110;                // pull-up (RA1=SCL, RA2=SDA:PPS pull-up enable)
    PORTA    = 0b00000000;                // 出力ピンの初期化(全てLOWにする)
    ANSELA    = 0b00000000;                // すべてのピンをデジタルモード
#elif
#warning    "Please check type of PIC microprocessor."
#endif

    return;
}
//--------------------------------------------------------------------------



使用できるピンが残り3本と少ないので、あまり実用的ではないかもしれませんが、PPS機能でこんなこともできました、ということで。

続く。。

(2017/12/18:SSP1DATPPSの値を訂正)
(2018/07/14:ソースコードの表記を修正)

« 【PICマイコン】PIC16F18313の初期設定 | トップページ | 【PICマイコン】反射型光センサーの動作確認 »