PICのICSPとI2Cは同居できるか?PICkit2でもPICkit3でもいけるぞ!

PICマイコンを使用して製作するとき、私の作る物はほとんどがICSPのDATとCLKにLCDを2線シリアルにしたものを並列接続して使っているのだが、先日、ストロベリーリナックスのI2CのLCD(SB1602B)を手に入れたので、邪道だとも思いつつ、ICSPと同時使用できるかどうか試してみた。

まずはPICkit2の回路図を眺めてみる。ふむふむ、DATとCLKには4.7kのプルダウンがついているのねん。ふむふむ。うー?

I2CラインとICSPラインを共有化して使用する場合、I2Cではプルアップ抵抗が必要であるのに、PICkit2のDAT,CLKラインにぶら下がっているこの4.7kΩのプルダウン抵抗がじゃまになってしまう。
仕方が無いので最適なプルアップ抵抗の値を求めてみることにする。あきらめないことが大事w
LCDコントローラST7032iのデータシートによると、I2CラインのVIHは、Vdd=2.7V~4.5V時には1.9V~Vdd、Vdd=4.5V~5.5V時には2.7V~Vddとなっている。
それに対してVILはVddによらず0.8V以下である。
最悪条件でプルアップを求めると、Vdd=4.5VでVIH=2.7Vを満たすためには、
プルアップ抵抗RPU=((5-2.7)/2.7)*4.7k=3.1kとなり、3.1kΩ以下の抵抗となる。
ここで、PIC側のVILmax=0.8V(Vdd=4.5V以上)であることから、Ack信号時に0.8V以下になるようにするには、ST7032iのVOL=0.8V(IOL=1mA時)より、吸い込み電流を1mA以下にする必要がある。
プルダウンが4.7kΩなので、0.8V出力時にプルダウンを流れる電流は0.17mA、プルアップを流れる電流を1+0.17=1.17(mA)以下にするためのプルアップの抵抗値は、最悪条件である5Vのとき(5-0.8)/1.17=3.59(kΩ)以上となり、上記の条件と矛盾するが、すべてを最悪条件としているので大体3.3kΩ前後のプルアップ抵抗をつけるのが良いと思われる。逆にICSPが無い場合には(5-0.8)/1=4.2(kΩ)以上のプルアップにすることが望ましい。
まぁ、ごじょごじょ計算しているが、大体3k前後でいけそうだと判断。

今回のI2Cデバイスの場合、クロックストレッチはないとのことなのでCLKには2.2k、DATには2.7kのプルアップで動かしてみたらOKだった。

ちなみにその時の波形は次のとおり。

電源電圧は5V(PICkit2経由だと4.7V程度だけど)でLCDコントローラの内部レジスタを操作して、5Vでも動作できるようにした。ちなみにス トロベリーリナックスに載っている応用例では、Bon(bit2)を0にして倍電圧回路を止めろと書いてありますが、止めると薄くて見えたもんじゃありま せんでした。注意深くデータシートを見ると、倍電圧をONにしても問題ないとの記述があるので、レジスタを調整して5Vでの動作をさせています。

以下に初期化部分をアップしておくのでご参考までに。

LcdCmd(0x39);        //    Extension mode
LcdCmd(0x14);        //     adjust OSC リセット値なので不要?
LcdCmd(0x70);        //     set contrast
LcdCmd(0x5f);        //     icon on/booster on/contrast
LcdCmd(0x69);        //    3.3V:6c 5V:69 follower on

ちなみにこの状態でPICへの書込も問題なくいけます。LCDはちょっとばたばたしますが。。。。

で、問題のPICkit3ですが、うまくいきませんw なぜなら?PICkit2とICSPまわりの回路はほぼ一緒なのですが、電源供給すると、内部のレベルコンバータでDATとCLKラインをLowに引っ張っているみたいです。(更新6/5 17:30)うまくいきました!他のPICkit3でやるとうまくいったので、PICkit3の回路図とにらめっこして、保護用のツェナーダイオードが壊れていることを突き止めました。いつ壊れたんだ???まぁなによりヨカッタヨカッタ。

もー、調子に乗ってきたのでいろいろなI2Cデバイスをぶら下げてみるか?それはまた別の機会に・・・

ちなみにPICkit2/3でデバッグしている人はこのテクニックは使えないと思われw

  1. 2012年 7月 1日

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。