nobchaの電子回路日記ブログまとめ

戻る  PIC12F628Aを使った簡易カウンタの実験

2010.09.13

 

 はじめに 

 LCメータをPIC16F628Aで作ろうと思っていますが、まずは基本機能で必要なカウンタを作ってみました。今回は実験としてはMPLAB+PICKIT2+HiTCH C環境でPIC16F88による試作結果から移行してきました。PIC16F628AとPIC16F88はピン割付も似通っており、大体同じような構成と仕様のマイコンと思っていたら移植には結構苦労しました。カウンタの表示はPIC12F629でも採用したTC4040Bカウンタリ経由シリアル接続するLCDです。

 初めは12.8MHzのTCXOを使うつもりでしたが、安定動作せず、簡易カウンタなので内部4MHz発振としました。

 

 

 試作機の仕様は 

 簡易カウンタの仕様は次になります。
項番 項目 詳細説明
 1 クロックは内部発振4MHzです 簡易カウンタでもあり、LCメータ用では精度が必要としないので、内部発振で行きます。
 2 16ビットカウンタからなるタイマー1(TMR1)を使用してゲートタイムを作る LCメータでは大体10kHzから3MHzぐらい計れれば良いので10m秒をゲート時間にします。(1μS*10000カウント)
 3 8ビットカウンタのタイマー0で入力周波数をカウントして256カウントでオーバーフローしたら変数をソフトで加算していく TMR0の入力の周波数応答の関係でTMR0のプリスケーラを1:2に設定して使います。早い周波数だと割込み処理時間が次のカウントアップに影響を与えるのでオーバーフロー監視する
 4 処理は割り込みで行います TMR0,TMR1の割り込みを監視してTMR0のときは変数のカウントアップ、TMR1の時はゲート時間終了でカウント値計算表示を行う
 5 MAPLAB+PICKIT2+HiTEC C MPLABV8.46 HiTECH C V9.71a
 6 表示は1602コンパチLCD(16文字2行) SL1602BSL8、500円@秋月
 7 LCDインタフェイスはTC4040B経由 TC4040Bバイナリーカウンタにパルスを送り込みRS,4ビット信号をラッチ。PICのポートからはEN信号を出す

 

 回路図 

 回路ですが、CPU+ICSPコネクタ部はデバッグ用に作ったユニバーサル基板を利用します。またTC4040B+1602インターフェイス用フラットケーブルコネクタもユニバーサル基板にハンダ付けしたものを作りました。この2枚の基板にブレッドボード用の足を生やして2SK439のプリアンプなどと一緒にブレッドボードへと差し込みます。

1. 入力インピーダンスの高いFET(2SK439)でプリアンプを付ける。アンプ出力をTMR0の入力であるGPIO2につなぐ。

2. TRISIOはデジタル設定でGPIO0がTC4040Bへのクロック出力。GPIO1はEN駆動信号。

3. GPIO0はTC4040Bのクロックと積分回路でリセット端子につながる。与えた16進のLCD4ビット出力信号を出力する。

4. 100μS以上クロックをHにすると積分回路がHになってカウンタがリセットする。クロックのH→Lでカウンタは数える。

5. LCDのDB出力数値をTC4040Bに与え、パルス出力。終わったら、EN駆動のRB1をLにしてLCDに送り出す。

6. クロックは内部4MHzとする。

    

 回路図中SC1602の接続ピン番に誤記があります。#7〜#10を#11から#14へずらし読み替えて配線お願いします。 

回路図は水魚堂さんのBSchを使いました。また関連記号類も利用させていただきます。公開された作者さん達のご努力に感謝いたします。http://www.suigyodo.com/online/schsoft.htm

   

 

 実験 

 周波数源は先日実験をしたフランクリン発振回路を再度くみ上げました。22μHのコイルと470pFで大体この程度1.4MHzです。

     

 

 

 プログラム 

 プログラムはMAIN部LCD表示部に分けて書いております。_lcd_.hを引きこみ必要です。delayは不要。

 MAINはPIC16F88プログラムからの流用ですが、タイマーの名称変更、IOポートの名称と割付変更、レジスタ変更などありました。PIC16F88とPIC12F628A比較表を作り、大体が似ていると思ったのですが、意外と色々なところでトラブリました。

 LCD表示プログラムの方はポート名称変更程度でした。ただしDELAY関数(__delay_ms()表記の関数)は内部発振4MHz、8MHzなどのクロック用に作られており、12.8MHzでは使えません。そのため従来の_delay(x)関数に切り替えました。今までクロックがINT4MHzでずっとやってきたので、今回始めて使うECの12.8MHzではタイミングがおかしくなって、初めてDELAY関数の仕組みがわかりました。とりあえずトライアンドエラーにより_delay(x)でタイミング関係を入れ込みました。

 コンフィグ設定はBORDIS & UNPROTECT & PWRTEN & WDTDIS  & MCLREN & INTIOです。ブラウンアウト無し、プログラム内容プロテクトせず、パワーオン時タイマー待ちスタート、クリア有、内部発振、ということにします。

 

 次はどうなる 

  これによりカウンタの基本的な実験が終わりました。次はいよいよLCメータの制御と計算プログラムです。

 

 

「ご注意」 このWEBに掲載された内容(文面・回路・写真・プログラムなど)には著作権があります。無断転載やコピーは法律に抵触する場合があります。何か疑義ある場合はお問い合わせください。また本WEBに掲載された実験や試作はnobcha個人の趣味で行っております。ここに示す結果の再現性や正確性は保証するものではありません。あくまでも個人の趣味の範囲で参考にしてください。
PIC16FのTOPへ戻る       WEB目次へ 戻る アイコンは「牛飼いとアイコンの部屋」から借用しました  http://www.ushikai.com/
inserted by FC2 system