4525によるI2C経由でのLCD制御

以前お問い合わせいただいたI2CのLCD制御についてご紹介いたします。
この制御は、2つのライブラリで制御が行えます。

・PIC18F4525(2525)、4520(2520)、4585(2585)PIC18F46K22(26K22)用変換ライブラリー
P18F4525-LB
・I2C液晶モジュール(SB1602B、SB1602E)(AQM0802AーRM-GBW)用変換ライブラリー
P452-LC I2C-LB

PICに搭載されているI2Cのピン(RC3(SCL)、RC4(SDA))とLCDをつないでいただき、プルアップしてください。
また、ラダーの命令としては、LCDHとLCDLの2つのコマンドを使用して表示内容を指示します。
サンプルのラダーの画像を表示します。
注意事項としては、LCDのコントラストの設定が必要になります。しなくても問題ないかもしれませんが必要に応じてライブラリのファイルの設定値を変更してください。(「¥PIC¥8F55¥LCD¥LCDI2CD2.H」内のcontrastの値を変更する)

I2CLCDのプログラム

また、動画で解説しております。下記の動画をご覧ください。

チャッタ防止のプログラムについて

お客様からのご要望でチャッタ防止のプログラムをライブラリ化するしたいのですが、なかなか実現しておりません。
CPUごとでメモリの状況やプログラムが異なるため、もう少し時間がかかりそうです。

 一方、ラダーの容量が増えますが、ラダー上でソフトウェアチャッタ防止が行えますので、そちらをご紹介いたします。
チャッタ防止の一般的な方法は入力の取り込み間隔を長くすることです。
それをタイマーを組み合わせることで実現可能です。
CPUのチャッタ防止を使用しないので、スキャンタイムがあまり伸びず、また、入力信号ごとでチャッタ防止の使用と不使用を選択できます。

スイッチなどの信号とハードウェアからのパルス信号といった信号の組み合わせの場合、パルス信号幅を測定しようとするとチャッタ防止が影響して短い時間での測定ができないことが多いと思います。

また、チャッタの継続時間もハードウェアにより異なりますので、時間調整ができた方が良いかと思います。10msタイマーをご使用いただければ、10ms区切りでチャッタ防止の時間を調整できますのでお勧めです。

サンプルでは、チャッタ防止の時間を20msごとに設定しています。
また、X0およびX1の入力をM0およびM1に転送することで、防止前の信号ならX0やX1をそのままご利用ください。
チャッタ防止を行った信号を使用したい場合は、M0(X0)、M1(X1)をご使用いただければと思います。

PIC16F84だけでなく、多くのCPUで採用できる良い方法ですので、
ぜひご活用ください。

PIC16F84のスキャンタイムとタイマーの精度

お問い合わせの中で、スキャンタイムとタイマーの精度についてがありましたので、調べた結果をアップいたします。
MPLABXのシミュレーションレベルですが、以下の通りです。
ラダーは25行程度。

チャッタ防止チェック無し・・・56マイクロs
チャッタ防止チェックあり・・・2.5ms

上記の計測値は、機能が動作していない時の計測値ですが、チャッタ防止チェック無しとしていただくと
スキャンタイムは悪くても1msと考えられます。そのため、T200およびT201の10msタイマーの
誤差はほぼないと思われます。(+-1msくらいですか)

 一方、チャッタ防止ありの場合は、チャッタ除去のため待ち時間を入れているので2.5msとなります。
こちらについては、スキャンタイムが悪くても1msと考えると、+-5msぐらいと考えます。

こちらは、あくまでも参考値としていただき、ご利用者様で実機にて検証をお願いいたします。

※EEPROMなどのLリレーをご利用いただいた場合は、この限りではございません。
 Lリレーは変更された場合、書き込むプログラムとなっているため、変化したときのスキャンタイムは20msふえることになります。
※他のCPUでスキャンタイムをMPLABXのシミュレータで検証する場合、ハードウェアや通信などにより大きくスキャンタイムが変わりますので、その点ご注意ください。

スキャンタイムのシミュレーションによる計測

お客様からのお問い合わせで、当方が行っている時間計測方法をご紹介いたします。
プログラムの実行速度や精度のお問い合わせをいただくのですが、本来で行けば実機等を使用し、検証する必要があります。

しかし、検証環境が整っていないため、PICの開発環境を使用し実行速度を検証しています。
お客様とのやり取りの中で、この方法を知りたいとのご希望をいただきましたので、資料として簡単にまとめました。

MPLABXのインストールから計測までとマイコンのプログラム開発になれない方には難しいかもしれませんが、
当方の製品をご使用いただくときの選定の参考としていただければと思います。

MPLABXのシミュレーション機能は、なかなかいろんな機能があるので、また時間があればご紹介いたします。

スキャンタイムのシミュレーション計測

18F4525のIOをI2Cで増やす方法(I2CINF-LB)

連枝を使用して、ラダーで制御プログラムを作成します。
PICマイコンでは、制御するIOポートが足りなくなってきます。
また、LCDや7セグなどを使用しだすと、さらにIOポートが足りなくなります。拡張機能を使用すれば、増やすことができますが、ラダーのROMを多く使用してしまうため、使用できるプログラム領域が少なくなります。

 そのことなら、連枝では、CPUを別々に用意し、それをI2Cで通信を行うことで、デバイスを共有します。
これにより、IOはCPU分増え、さらにそれぞれのCPUでラダーを記述することができます。
I2Cで共有するデバイスはB00やB10といった共有デバイスを使用します。数値等はW00のデバイスとなります。

詳しくは動画をご確認ください。

参考ページ
通信拡張ページ

連枝によるI2Cを使ったPICの連携

16F84のT201高速タイマについて

16F84の高速タイマがマニュアルではT200、T201の二つあります。
しかし、実機において、動作させるとT200しか動作しておりませんでした。
T201の不良動作につきましては、ライブラリのバグが原因でした。

修正したライブラリをダウンロードサイトにアップいたしました。

お手数ではございますが、差し替えをお願い申し上げます。

ダウンロードサイト

禁止回路の変換(b接点直列をa接点並列に)

禁止回路を作成する場合、条件が多くなるとb接点の直列回路が長くなります。

この場合、b接点の直列回路をa接点並列の回路でリレーに出力し、出力したリレーをb接点に置き換えると同じ動作となります。
このように回路を見やすくわかりやすく変換することもあります。

AND回路(すべての条件が成立したときに動作)

センサやスイッチなどの信号がすべて成立しているときにだけ動作させるときに用いる回路をAND回路といいます。
信号の接点を直列に接続すると、AND回路となります。

電流の流れる回路を考えていただくと、スイッチの通路が直列につながっているということは、いずれかの通路がつながっていないと電流が流れなくなるため、動作しません。

自己保持回路

制御回路で定番の回路の自己保持回路です。制御するリレーの接点を保持開始条件に並列に接点を入れます。

この接点により、通常は、動作していないリレーですが、一度、接点が閉じリレーが動き出すと自分自身の接点で
自分自身のリレーのコイルに電気を供給することになります。

これにより、停電時やプログラムから制御動作を動かしたり停止させたりすることができるようになります。
制御動作の柔軟性が高くなります。
定番の自己保持回路では、停止の条件により以下のものがあります。
自己保持の開始接点と自己保持停止接点両方を入れた時に動作するか停止するかを回路で変えることができます。

(自己保持回路 復帰優先・停止優先)

(自己保持回路 動作優先・保持優先)