Darkside(https対応しました) |
2018年10月4日(木) 21:16
MPLAB X IDE が Ver 5.05 になり、MCCでI2C対応するようになった。さすがは純正環境であり、DUTY50で綺麗なクロック波形が出力された。
だが、肝心の液晶表示が成功しない。何も表示されない。良く見ると、クロックが無い部分がLになっている。ここは、Hになっていなければならない。何か設定がおかしいのだろうが、何がおかしいのか分からない。
MCCでI2Cというのは、恐ろしくネットの情報量が少ない。検索しても、日本語ヒット0で全世界ヒットが数件とか、それほど悲惨な状態である。どうしようもない。
それ以上に致命的なのが、I2Cが sprintf 並にメモリーを食うこと。
純正I2C処理ルーチンは、バスの衝突とかタイムアウト処理とか、あらゆる例外ケースに対応可能な構造になった「市販品スタンダード」である。
しかしそれは、プログラムメモリーわずか4Kワードしかない8ビットマイコン用として、余りに過剰品質だ。
ここから更に TWE LITE との通信も必要なのだから、物理的に実装できない。
それよりは、もう一度ソフトウェアI2Cに立ち返るべきだ。PIC16F88 で動作したものが PIC16F1827 で動作しないのは、どう考えてもおかしい。見落としている何かがあって、それを解決できればあっさり成功してしかるべきだ。
そう考えて。リトライ。
ヒントは、DUTY50に近付けるようにウエイトを入れたのにDUTYを調整できなかったこと。
あっさり成功した。感動。PIC16F1827 で、ちゃんとI2C液晶にバッテリー電圧が表示できている。前回からバッテリー消費が進んだため、2カウントほど小さな値になっている。
これで、2.552Vに相当する。
動作しなかった理由は、PIC16F1827 はLAT時代に突入したデバイスだったということだ。
PIC16F88 は、ポートの値を書き換えるのに PORT に出力する。これに対し、PIC16F1827 は、LAT に出力する。
そこさえ書き換えれば、OKだった(あとクロック周波数の差を吸収)。
これで、PIC16F1827 への乗り換え成功だ。
シンプルなソフトウェアI2Cは、リソースの消費も小さい。
MCCのI2Cを使用する場合に比べて、プログラムエリアが40カウント以上減っている。
sprintf を使用しなければ、更に40カウントぐらい減る。しかし、液晶表示で楽ができるので、メモリーが足りる限りは sprintf を使いたいところ。
written by higashino [バトルタンク改造Tiger1] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]
Generated by MySketch GE 1.4.1
Remodelling origin is MySketch 2.7.4