PICマイコン

PICでI2C接続LCDを動かす

I2C接続LCDをPICマイコンで使用する方法

今まではArduinoを使ってI2C接続LCDを動かしました。今回はPICマイコンで同様のことを行っていきたいと思います。

PICマイコンの場合、I2C通信の開始、終了の条件や1バイトのデータを出力するプログラムを自分で作成しなければなりません。できるだけArduinoと同じような使い方ができるプログラムを作っていきたいと思います。

目次
  • 使用する部品と配線
  • I2C通信スタート条件の関数
  • 1バイトのデータを出力する関数
  • I2C通信ストップ条件の関数
  • data及びcommand送信する関数
  • サンプルプログラム

使用する部品と配線

今回のPICでI2C接続LCDを動かす実験では
・マイコン・・・PIC12F1822
・LCD・・・AE-AQM1602A(KIT)
を使用しました。ともに秋月電子で購入しました。

I2C通信スタート条件の関数

SCLが「HIGH」の時にSDAが「LOW」になると通信開始になります。もともとSCL、SDAはともにプルアップ抵抗によって「HIGH」になっています。今回作成したスタート条件の関数では「SDA = 0」にしてI2C通信スタートするとともに、「TRISA2 = 0」にしてRA2ピン(SDAピン)を出力にし、後に行うデータ送信の準備をします。

1バイトのデータを出力する関数

送信する1バイト(8bit)のデータは1bitずつ出力する必要があります。今回作成した関数では

  • for文で8回処理を繰り返す
  • if文で指定ビットの「1 or 0」を確認し、SDLに「HIGH or LOW」を出力
  • 「BitPos = BitPos >> 1」で次のビットに移動

を組み合わせて8bitの送信を行います。

for文の処理が終わるとACKの確認準備をします。この時、スタート条件の関数でTRISA2は出力に設定されているので入力へ変更します。ACK信号(受信側が「LOW」を出力)の確認を行い、問題なければ1バイト(8bit)のデータ送信は終了となります。

I2C通信ストップ条件の関数

SCLが「HIGH」の間にSDAが「HIGH」になることで通信終了となります。今回作成したストップ条件の関数では、最後のACK確認後、SCLとSDAともに「LOW」にするとともに、ACK確認用に入力の設定になっていたTRISA2を出力に戻します。その後、SCLとSDAを時間差でともに「HIGH」にすることでI2C通信を終了させます。

data及びcommand送信する関数

LCDに表示するデータを「data」、LCDの制御コマンドを「command」として関数を作成しました。AE-AQM1602A のデータシートにあったプログラムを参考にしています。I2Cの通信フォーマットの通り、スレーブアドレスバイト、制御バイト、データバイトの順番にデータを送信する関数になっています。

サンプルプログラム

1.文字を点滅させる

2.左右の行き来を3回

 

参考資料

  • 8ピンPICマイコンの使い方がよくわかる本
  • AE-AQM1602A データシート
  • PIC12F1822データシート