2021年05月15日

PIC32MX+Harmony3+ I2C通信

今回はPIC32MX250F128BをターゲットにMPLAB X v5.45+Harmony3を使用してI2C通信を行いました。その際にポイントとなる設定について紹介します。I2C接続の温湿度センサHS3001の読み込みを行いました。なお、ターゲットへの書き込みはPickit3を使用しまし、MPLAB Xには予め、MPLAB Harmony 3 Launcher(旧名称 MPLAB Harmony Configurator 3)をインストールしています。


@プロジェクトファイル作成
MPLAB XのFile→New ProjectからMPLAB Harmony 3のプロジェクトを作成します。

hi2c1.jpg

AHarmony 3設定
Tools→Embedded→Harmony Configurator 3を選択します。左下のAvailable ComponentsからI2C2をクリックし、I2C2を追加します。SPI1が追加されると左上(Active Components)及び中央(Project Graph)にI2C2が表示されます。
中央(Project Graph)のI2C2をクリックし、右のConfiguration Optionsの設定項目を必要に応じて変更します。通常はデフォルトで問題ありません。

また、今回はデバッグ用途にprintfを使用してuartからデバッグ情報を出力するため、UART2とSTDIOを追加しています。必要に応じてUART2のボーレートを右のConfiguration Optionsから変更してください。

hi2c2.jpg

hi2c3.jpg

Bピンアサイン設定
MHC→Tools→Pin Configurationを選択します。Pin DiagramからI2CのSDA2、SCL2を割り付けします。Pin SettingsからI2Cの外付けプルアップ抵抗を省略するためにRB2、RB3のプルアップを有効にしました。

hi2c4.jpg

Cコード生成
設定完了後にGenerate Codeでコードを生成します。

hi2c5.jpg

DI2C通信関数
I2C通信をするためのコードを追加します。I2C通信関数はSource Files/config/default/peripheral/i2c/master内のplib_i2c2_master.cで定義されています。I2C初期化関数は既にinitialization.cに追加されているため、接続するデバイスに応じてI2C読み書き関数を追加します。I2C読み書きを同時にする場合はI2C2_WriteRead関数、読み込みのみの場合はI2C2_Read、書き込みのみの場合はI2C2_Writeの関数を使用します。なお、STM32のHALライブラリでは8bitアドレス(R/Wのbitを含める)で定義しますが、Harmony3のI2Cアドレスは7bitアドレスを定義します。


#define HS300X_ADDR (0x88>>1)

void Get_HS300X_Data(volatile int16_t *tmp, volatile int16_t *hmd)
{
 uint8_t dat[4];
 int16_t tmp_dat,hmd_dat;
 float tempf;
 float humdf;
 I2C2_Read(HS300X_ADDR,dat,4);
 while(I2C2_IsBusy()==true);
 I2C2_Write(HS300X_ADDR,NULL,0);
 while(I2C2_IsBusy()==true);
 tmp_dat = (dat[2]<<8)+dat[3];
 tmp_dat = tmp_dat>>2;
 hmd_dat = ((dat[0]&0x3F)<<8)+dat[1];
 humdf=(float)hmd_dat/(16383.0f)*100.0f;
 tempf=((float)tmp_dat)/(16383.0f)*165.0f-40.0f;
 *hmd = (int16_t)(humdf*100.0f);
 *tmp = (int16_t)(tempf*100.0f);
 return;
}

温湿度センサHS3001は温湿度を読み出しする際、アドレスのみ書き込みすると測定開始される少し特殊な仕様です。そのため、 I2C2_Write ( HS300X_ADDR, NULL, 0)という空データを書き込む処理が入っています。



posted by Crescent at 00:00| Comment(0) | 組込ソフト | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。