とある案件の検討中でI2Cを使って動かす事になった。
暫くI2Cから離れていて、何をどうしたらいいかも忘れていた。何か進めていかねばと思い色々調べる。I2Cスレーブについては、前回I2C LCD互換を作ったが、今回はI2Cマスターの方。
Hitech PICC時代には、サンプルソースコードにI2Cが入っていたがXC8になってからはそれが見つけられなかった。Microchipのサイトを眺めても見つけられなかったので、グーグルで調べて見る。
探したら、一番私がやりたいものに近いサイトが見つかった。
SSP1STATなどSSP1とシンボル名が付いたレジスターはPIC16F1939はSSPにすべて置き換える。そしてこれをインクルードに追加。
外付けI2CのEEPROM(24C256)デバイスを使ってまずはテスト。
これをmain.cの先頭で書いてアクセスを確認。あっさりと動作した。これを一から作る労力は結構なもの。使わせて頂きます。作者さんに感謝。
I2C動作クロックを400KHzにするため、PIC動作が8MHzなので、
SSPADD = 4; // I2Cバス Baud rate, 8MHz/((SSPADD + 1)*4) = 400kHz
に変更。波形で400KHzになっている事を確認。式を変形すると、SSPADDを求める公式は、
SSPADD=((freq/I2Cfreq)/4)-1
8MHzで100KHzなら
セコメントをする