I2CでJLC1562を制御成功

スイカ大好き!



● JLC1562B I2C Bus I/O Expander


JLC1562の制御に成功しました。



これは8ピンのI/Oをもったチップで、マイコン等からI2C接続して制御できます。「Bus I/O Expander」の名前どおり、I/Oを拡張してくれる素敵チップです。
もちろん、USBPYDERのMC9S08QG4からも制御できますよ。


データシートはこちら。
JLC1562B I2C Bus I/O Expander (PDF)


● I2C


I2Cとは、IC同志の通信規格でフィリップス社が開発しました。
クロック、データの2本の制御線で通信を行い、通信プロトコル中に相手先のデバイスを7bitアドレスで指定できるため最大127台の機器と通信できます。最大通信速度は100kbit/s。


I2Cの通信機能はMC9S08QG4にも入っているのでハード任せで行えるのですが、レジスタの設定が複雑なのでうんうんうなっていたのですが、丁度昨日は某氏と秋葉原にいったのでいろいろ教えてもらいました。
ついでに参考ソースもらっちゃったりして、ありがとう!
それでもうまく通信できなくてはまっていたのですが、実は信号線をプルアップしないと絶対ダメなのね・・・。
手持ちの20KΩの抵抗でプルアップしたらうまくいきました。やったー
深夜までお付き合いありがとうございました>某氏


参考ページ:I2Cモジュールの使い方


● 実際の制御 (WRITE MODE1)


さて、I2Cで実際にJLC1562へ送るコマンドですが、これは大変単純で、1バイトデータを送ると、JLC1562の各I/O(8bit) がOn/Offされます。


下のような回路でLEDを8個制御しています。
アドレス端子(A0〜A2)は全部GNDに接続しているので、チップのアドレスは、0x0111000になります(上位の0x0111は固定)。


【回路図】


この回路では、bitを0にしたポートのLEDが光るという動作をします。
0xFEを送ると、P0に繋がってるLEDだけが光ります。
bitが1のときにLEDを光らせたかったのですがうまくいきませんでした。LEDの極性を逆にしたり、VCCじゃなくてGNDにつないだり一通りの組み合わせを試してみたのですが・・・


そのがちょっと不安


● 実際の制御 その2 (WRITE MODE2)


データシートをみて初めて知ったのですが、JLC1562Bには6bit DACまで載ってました。アナログ値を出力できるのです。
先ほどはデータを1バイト送るだけでしたが、2バイト送ると2バイト目の下位6bitの値に応じた電圧が、VDACのピンから出力されました。


テスターで計ると、0のときに60mA(ほぼ0と考えていいか)、最大値の0X3Fのときは、2.6Vになりました。
これはいろいろ遊べそう


● 読み込みもできるよ


I/Oなんでもちろん入力もできます。が、今回はまだ手付かず。今後の課題でやってみますね。
どうやら、入力のOn/Offの閾値をVDACの電圧に指定できるモードもあるようです。


このように、JLC1562Bは大変便利なチップなのですが、小売しているショップはいまのとことないようです。
注文しようにも、かなりまとまった数が必要なようで・・・需要はありそうなのでどこかで取り扱ってくれないかなあ。
今回は、Sexy_B様からお譲りいただいたおかげで使うことができました。この場をかりてお礼致します。
また、某氏もいろいろとアドバイスありがとうございました。