連枝PIC16F88でデータの停電保持

 PIC16F88では、停電しても記憶しておくためのレジスタが存在します。
CPUの関係で、このレジスタはビット単位でアクセスするL0~L47と
なっています。

 通常のラダーでは、L0~L47はビット単位ですので、ワード値の
停電保持はできません。

 そのことから、ラダーを工夫して、ワード値の停電保持をご紹介いたします。

連枝停電保持ラダー

ポイントは以下の通りです。
1.起動時1スキャンリレーを使用し、退避していたL0~L15のデータをD0に転送する。
2.D0が変わった信号を使用し、D0と共にL0~L15にデータを格納する。

サンプルのラダーでは、X0をカウントを増やす接点とし、そのカウント値を停電保持リレーに記憶するものです。

PIC16F88停電保持

拡張機能について(IOが足りなくなったら)

連枝では、IOの点数が足りなくなった場合に、複数のCPUやExpanderICを接続して、
IOを増やすことができます。その方法は以下の通りです。
配線方法やIOの番号などについては、ページの下部のPDFファイルをご確認ください。

CPU2個を接続して拡張(マルチCPU接続)
CPUにExpanderICを接続して拡張(MCP接続)
複数のCPUをネットワーク化(I2C通信 4台までが目安)
複数のCPUをネットワーク化(CAN通信 8台までが目安)

拡張機能について

4525でI2C経由でRTCとの通信(汎用のI2Cライブラリ)

汎用のI2Cライブラリと、その他のライブラリの違いということでご質問いただくことがございます。
今回は、汎用のI2Cライブラリについて、ご紹介いたします。

汎用のI2CライブラリではI2Cのプロトコルをラダーで記載することで機器と通信が行えます。
クロックのEnableやアドレスの指定、データの指定取り込みといった手順をラダーで記載しますので、
複雑な機器の場合は、ラダーが長くなります。

一方、その手順を書けば通信ができますので、様々なセンサやIOなどと通信が可能です。
その手順や方法をご紹介いたします。

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で採用できる良い方法ですので、
ぜひご活用ください。

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

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

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

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

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

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

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

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

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

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

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

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