とある案件の検討中で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なら
((8MHz/0.1MHz)/4)-1 = (80/4)-1 = 20-1 = 19
8MHzで400KHzなら
((8MHz/0.4MHz)/4)-1 = (20/4)-1 = 5-1 = 4
ということだ。
使用するI2Cデバイスは、EEPROMと少しちがうアクセスなので、その辺を変更していくことにしよう。
今回参考にしたサイト
コメントをどうぞ
※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。
※投稿には管理者が設定した質問に答える必要があります。