PICでI2Cの片通信開通
2015-11-08
今、完成を目指しているSGには幾つかの課題があります。アナログ系の課題は、自分の興味度合いを含めてまずまず進めることができるんですが、デジタル系・・・とりわけPICのソフト関連は億劫になりがち。手を付けてしまえば、昔取った杵柄よろしく案外サクサク進むんですが、きちんと動くのが当たり前という気持ちが強く、「兎に角、面倒・・・
」なんですよね
ただ、放っておいてもちっとも進みませんから、この週末は空き時間を利用してI2C関連のライブラリ関数を作成しました。
まずは、I2C接続できるLCDを相手に「マスターモードの送信」がきちんと行えるかを確認すべく、ライブラリの上に超簡単なテストプログラムを載せて実験。またしても「ついうっかり忘れて毎度引っかかるトラップ」にしっかり躓き、さらに微妙~なバグに翻弄され、昨日の午後はこれで潰れてしまいましたが何とかLCD表示は出来るように・・・ここでスナップショット

活躍したのは豆電球のように写っている白色LEDです。これで「何処まで来たか」を確認しながら進めるという原始的な方法ですが、昔のマイコンベースの製品でも、同様な方法でデバッグしたもんです
・・・って、急に爺ぃ化しても仕方ないか
LCDが保護シートを被っていて見にくいですが、思った通りに表示できました。ライブラリ関数自体の大きさも100バイトに満たないコンパクトな仕上がりに満足
・・・って、まぁI/Oを叩いているだけみたいな感じですからこんなもんでしょう。
ここまで動けば「スレーブモードの受信関数」も序でに作ってしまおうとチャチャッと組んでチャチャッとデバッグし切りました。これもスナップショット

このスナップに何の意味があるんでしょう
・・・とお思いでしょうが、その通り、自分にしか解りません
これでも「LCDの初期化に必要なI2C通信で飛んでくるデータをきちんと受信したらLEDが点灯するように組んだプログラム」で、想定したデータを受信した状態。これで、PIC-PICの組み合わせでも片方向の通信は出来るようになりました。
I2C通信は、マルチバス対応であることから「コリジョン」や「コンテンション」を考慮できるように設計されており、メーカが製品に採用する際にはこの辺りを考慮したプログラム作りが必要になりますが、PICなどの小さなマイコン、かつ趣味の世界では「どこまでプロトコルに忠実に作るか」によってプログラム規模が変わってきます。今回作ったライブラリでは、とりあえず1対1通信で困りそうな部分は「戻り値」で返すように考慮してありますが、半二重通信の範疇ではそれも必要ないかも・・・などと思いつつ、今週末のプログラム作成は当初の予定通り「完了」に漕ぎ着けました


まずは、I2C接続できるLCDを相手に「マスターモードの送信」がきちんと行えるかを確認すべく、ライブラリの上に超簡単なテストプログラムを載せて実験。またしても「ついうっかり忘れて毎度引っかかるトラップ」にしっかり躓き、さらに微妙~なバグに翻弄され、昨日の午後はこれで潰れてしまいましたが何とかLCD表示は出来るように・・・ここでスナップショット


活躍したのは豆電球のように写っている白色LEDです。これで「何処まで来たか」を確認しながら進めるという原始的な方法ですが、昔のマイコンベースの製品でも、同様な方法でデバッグしたもんです



ここまで動けば「スレーブモードの受信関数」も序でに作ってしまおうとチャチャッと組んでチャチャッとデバッグし切りました。これもスナップショット


このスナップに何の意味があるんでしょう


I2C通信は、マルチバス対応であることから「コリジョン」や「コンテンション」を考慮できるように設計されており、メーカが製品に採用する際にはこの辺りを考慮したプログラム作りが必要になりますが、PICなどの小さなマイコン、かつ趣味の世界では「どこまでプロトコルに忠実に作るか」によってプログラム規模が変わってきます。今回作ったライブラリでは、とりあえず1対1通信で困りそうな部分は「戻り値」で返すように考慮してありますが、半二重通信の範疇ではそれも必要ないかも・・・などと思いつつ、今週末のプログラム作成は当初の予定通り「完了」に漕ぎ着けました

- 関連記事
-
- XC8の"char"のディフォルト
- XC8のVer1.35でWarning現る
- PICでI2Cの片通信開通
- PICのコンパイル環境刷新!
- PIC焼きと4倍速・・・