TOP > MPLAB XC8編(PIC16F88) > I2CでEEPROMを使う(PIC16F88 XC8)
I2CでEEPROMを使う
− I2Cをプログラムで実装 (PIC16F88 XC8) −
作成日2012.6.10 |
ここでは、シリアルインタフェースの一つである、I2C(Inter-Integrated Circuit)でEEPROMを使ってみます。
使用するPICはPIC16F88ですが、PIC16F88はI2Cのマスターモードをサポートしていません。
そこで、プログラムでI2Cのマスターモードを実装し、EEPROMを使用します。
I2Cとは | |||||||||||||||||||||||||||||||
I2Cは、フィリップス社により開発されたシルアル通信の規格です。 シリアル通信には、RS-232、IEEE 1394、シリアルATAなど多くの規格がありますが、I2Cは主に近距離のデバイス(PICやEEPROMなどのIC)間通信に利用されています。 以降、今回のEEPROMを使用するために必要な内容を説明します。
| |||||||||||||||||||||||||||||||
実験回路 | |||||||||||||||||||||||||||||||
・ |
今回の実験回路です。 EEPROMは、AT24C1024B(128KByte)を使用しました。
| ||||||||||||||||||||||||||||||
プログラムの仕様 | |||||||||||||||||||||||||||||||
今回のプログラムは、I2CでEEPROMにアクセスする事だけを目的としました。
EEPROMへの1バイト書込みは、以下のデータフォーマットになります。
EEPROMから1バイト読み込むときのデータフォーマットは以下の通りです。
| |||||||||||||||||||||||||||||||
プログラム全体 | |||||||||||||||||||||||||||||||
プログラムはこちらです。 I2Cを実装するために、いくつかの関数を作成しました。 その関数の役割を下図に記載します。 | |||||||||||||||||||||||||||||||
終わりに | |||||||||||||||||||||||||||||||
今回はPIC16F88でEEPROMを使う目的で、I2Cをプログラムで実装しました。実装した機能は最低限にしています。 タイムアウトなどの異常系は対応していません。 また、マスタが複数存在するような場合の衝突対応も行っていません。 その他、10ビットアドレス対応など、I2Cには今回使わなかった多くの機能があります。 I2Cのマスタ機能を内蔵したPICもたくさん有りますので、いずれPICのI2Cを使ったページも作ろうかと思っています。 I2Cをプログラムで実装する事に比べると、バスの制御をPICに任せられるので考え方が容易になります。 |