PIC16F1827を使ってi2cスレーブキーを試作する nobcha@2012 20120927 |
||||||||||||||||||||||||
1.始めに
PIC16F1827を使い、ICSPコネクタや4ビットLCD接続やi2c接続などが構成できるように配線したプリント基板を作りました。この基板を使って、i2c式のキーパッドスレーブを試作します。AVRを使用してi2cキーを作られたばんとさんの試作を参考にしてスタートしました。使用するキーはプッシュホン電話器からはずしたらしいジャンクパーツの再利用です。 主な部品は次のとおり
|
||||||||||||||||||||||||
2.仕様・コマンド 次のような仕様とi2cコマンドを用意します。
|
||||||||||||||||||||||||
3.回路図
回路図はBSchを使用して書きました。不要な周波数カウンタ用アンプ部分なども記載されています。
ピン接続表
|
||||||||||||||||||||||||
4.ソフトウェア
プログラムはHI−TECH C V9.83を用い、MBPLAB IDE V8.85でコンパイルリンクしました。ICSPにPICKIT3経由でフラッシュ書き込みを行い、デバッグしました。 MAIN関数、LCD関数、LCD関数ヘッダファイルの3種を使います。 (注)MAIN関数のOSCCON記述が間違っております。OSCCON=0b0111000が正しい記述です。現在のままだと8MHzになっています。2013.06.09
|
||||||||||||||||||||||||
5.組み立て・デバッグ 水魚堂のMBEを使ってパタン設計を行い、中国FUSION社でプリント基板を作りました。この基板にキーパッド部を追加して試作回路を作ります。 まずはキースキャン部分が動くかどうか心配だったので、ソフトデバッグ途中でキー入力だけ実験しました。キースキャンして、キーコードを計算し、LCDにその結果を表示します。またスキャンは50ms単位で行い、2回続けて同じならキー入力受付、100回続けて同じなら長押しフラグを立てるようにしました。ここではキーコードとしてヘキサデシマル2桁、次はキー押し時間カウンタの2桁になります。key v4とでているのはデバッグモードタイトル表示の一部です。 同じプリント基板でマスター側も試作しました。マスター側はi2c接続LCDのデバッグにいつも使っているプログラム(タイトルを出して2行目に6桁カウンタをカウントアップ表示するものです)を改造準備しました。MAIN関数、直接つないでいる4ビットIFのLCD制御関数、今回試作のi2c接続LCD+KEY制御関数、MSSPを使用したi2cプロトコル関数を使います。またヘッダファイルもLCD制御関数用、i2c接続LCD+KEY制御関数用、i2cプロトコル関数用をひきこみます。
このマスター/スレーブ接続実験では マスター側が自分のLCDとスレーブ側のLCDにタイトルおよびカウント値を表示します。次にSW2の押下があると、スレーブ側にキースキャンスタートを掛けキー値をリードします。帰ってきたキー値ASCIIコードを自分のLCDとフレーブのLCDに表示するというものです。
|
||||||||||||||||||||||||
6.謝辞
i2c接続のキーパッド試作実験はばんとさんによるAVRでの試作を参考にしました。またキーの対チャタリングについてはnoriさんからアイデアいただきました。回路図ソフトは水魚堂のBSchを使いました。コンパイラとデバッグはMPLAB IDE、HI-TECH Cコンパイラ、PICKIT3を用いました。フリーソフトやアイデアや情報の提供者の皆様に感謝します。
|
||||||||||||||||||||||||
7.参考資料(マイクロチップ社の主に英文のドキュメント以外に次の資料を使いました)
@マイクロチップ社AP-734「MSSPを使用したi2cスレーブについて」の一部和訳 |