連枝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台までが目安)

拡張機能について

CAN通信を使用する場合

CAN通信を使用する場合、以下の点に注意してください。

・機器のCPUに注意してください。
 458・258 シリーズ同士、4585・4680シリーズ同士での
接続しかできません。458と4680の接続はプロトコルが異なるため
通信できませんのでご注意ください。

 PIC18F458(PIC18F258) – PIC18F458(PIC18F258)

PIC18F4585,PIC18F4680 – PIC18F4585,PIC18F4680

・クロックは必ず外部発振をご使用ください。
CPU設定で、「XTL外部」にチェックを入れ、
CPUクロックをCPUのデフォルト値を指定してください。
その他のクロックを指定した場合、I2Cなどの不良動作と
なることがあります。
※内部クロックでは、不安定動作の原因となります。

・MCLRは必ず外部入力をご使用ください
CPU設定で、「リセット外部」にチェックを入れ、
10kオーム程度でプルアップしてください。
 また、リセットICなどで対応してください。
※MCLRを内部で使用した場合、正常動作しないことがあります。
・・・MCLRを内部のとき、CANに接続された機器が
 途中で、電源が入ったり、電源を入れなおした場合、
再投入後、タイマーが正常動作しなかったり
処理が停止したりします。外部入力によるMCLR(プルアップのみ)で
不具合が解消いたしました。外部

・CANを使用する場合は、シリアル通信が正常動作していません。

 不具合情報をご確認ください。今後、改善に努めたいと思います。

PICへのプログラム書込みについて

PICへのプログラムの書き込みは以下の方法があります。

・PICライタによる書き込み
・PICKITによる書き込み
・ICDによる書き込み
・その他

・PICKIT3によるプログラムの書き込みについて

 チップごとの配線を図で記載いたしました。ご参考にしてください。
チップごとで配線する場所が異なりますので、ご注意ください。

PICKIT3の配線

・その他

 オンボード書き込み対応CPUにつきましては、事前にオンボード用に変換した
HEXファイルをPICに書き込んでいただくと、シリアル通信(UART)により
プログラムが書き込めます。
 シリアルポートをレベル変換し接続するか、USBシリアル変換器で接続するか、
Wifiシリアル変換器で接続し、連枝よりプログラムの書き込みをお願いいたします。

連枝のCPUごとでの機能対応表(参考)

連枝における機能や仕様などが分かりづらいため、一覧表にしました。
ヘルプやデータシートから起こしたものです。

実際の動作につきましては、順次検証したいと思っております。
間違い等お気づきの際はお知らせいただけると幸いです。

皆様にとって、ご利用いただきやすいように
ライブラリのバージョンアップ等を検討中です。
ご要望などございましたら、お知らせください。

連枝の機能表

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

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

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

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

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

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

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

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