nobcha23の日記

PICマイコンやArduinoを使う電子回路遊びを紹介します

i2c液晶SCG002B接続用に使ったPIC12F1822のMSSPを使用i2cマスター

PIC12F1822のMSSPを使ったi2cマスター動作用の関数です。

/* MSSP使用マスターモード専用I2C関数  */
  void i2c_start(void){     // msspはSDAとSCL信号をスタート状態
    SEN = 1;                // SSPCON2:0 initiate I2C START condition
    while (SEN == 1);        // wait until START bit finishes
  }
  void i2c_restart( void) {   // msspはSDAとSCL信号をRESTART状態に
    RSEN = 1;               // SSP1CON2:1 Repeated Start
    while (RSEN==1);
  }
  void i2c_write( unsigned char DataByte ){  // DATAをSSP1BUFに書き 
    SSP1BUF = DataByte;     // スレーブに転送
    while (R_nW == 1);      // 転送中はR_nWが1
  }
  unsigned char i2c_read( void) {  // 受信可にしてDATAを待つ
    RCEN = 1;                  // SSP1CON2:3 Receive enable
    while (RCEN == 1);     // RSEN0になったら、
    return SSP1BUF;       // SSP1BUFのデータを読み持って返る
 }
  void i2c_stop( void) {    // msspはSDAとSCL信号をstop状態に
    PEN = 1;                 // SSP1CON2:2 initiate I2C STOP condition
    while (PEN);        // PENが0になったら、かえる
  }
  void i2c_sendack(unsigned char status) {
    ACKDT = status;         // SSPCON2:5 set to ACK:0,NACK:1
    ACKEN = 1;              // SSPCON2:4  initiate I2C ACK condition
    while ( ACKEN);          // wait until ACK sequence is over
  }
  unsigned char i2c_readack(void) {  // ACKをチェック
    if (ACKSTAT == 0) {    // ACK(ACKDT:0)かNACK(ACKDR:1)
       return 0;             // ACK detected
    } else {  return 1;  }  // ACK not detected
  }
  unsigned char i2c_writeto(unsigned char address){
 i2c_start();            // 指定アドレスに
 i2c_write(address | 0x0);   // WRITEモードでアドレス
 if(i2c_readack()) return TRUE; // ACK有ればTRUE
 return FALSE;          // 無ければFALSE
  }
  unsigned char i2c_readfrom(unsigned char address){
 i2c_start();            // 指定アドレスに
 i2c_write(address | 0x1);  // READモードでアドレス書く
 if(i2c_readack()) return TRUE; // ACK有ればTRUEで
 return FALSE;         // 無ければFALSEでかえる
  }


その後色々努力あって、2.4Vで動作する回路接続、プログラムできました。次のページです。

http://chitose6thplant.web.fc2.com/

PIC12F1822のMSSP使用i2cマスター実験(1)(2) デジットで買ったSCG002Bをつないでみた


ググッたり、リンクでこのブログへいらした方で過去書き込みを参照になりたい場合、次のホームページにまとめ情報も一部ありますので、覗いてみてください。
http://chitose6thplant.web.fc2.com/