Darkside(リンクエラー修正しました)

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)]

この記事へのトラックバックPingURL

Comments

TrackBacks

Darkside(リンクエラー修正しました)

Generated by MySketch GE 1.4.1

Remodelling origin is MySketch 2.7.4