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

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

2010.09.06・2011.02.20
 

 はじめに 

 TC4040Bカウンタリ経由シリアル接続するLCD表示を使用した簡易周波数カウンタを実験してみました。PIC12F629は8ピンでIOが6つしかないのでIOのやりくりが大変です。今回は実験としてはMPLAB+PICKIT2+HiTEC C環境でPIC16F88による試作結果から移行してきました。大体同じような構成と仕様のマイコンと思っていたら結構苦労しました。

 8ピンのPIC12F629を目一杯使った試作実験です。

 

 試作機の仕様は 

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

 

 回路図 

 回路ですが、CPU+ICSPコネクタ部はデバッグ用に作ったユニバーサル基板を利用します。今回はTCXOからクロックを入れるので、基板の端っこに無理やり12.8MHzTCXOを乗せました。また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. クロックは外部の12.8MHzTXCOから入力する。TXCOの信号をPIC入力端子のスレッショルドにバイアスするために10kΩの分圧抵抗を入れる。

              SC1602の接続ピン番が間違っております。#7〜#10を#11〜#14にずらして接続お願いします。

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

 

   

 

 実験 

 秋月ブランド安価テスターのHz測定と比較してみました。秋月テスターは以前からちょっと低めに出るなと思ってましたので、これぐらいでいい数字なのかと思います。昔組み立てた秋月LCDカウンタキットが結構周波数が正確だったので、それをジャンク箱から探し出し後ほど確かめてみることにします。

 周波数源は先日実験をしたフランクリン発振回路を再度くみ上げました。5μHのコイルと1000pFで大体この程度2.5MHzです。この周波数を越えると表示カウント数字がおかしくなります。カウンタ変数16ビットを越えるからと思います。一方割込みサービスは30ステップぐらい(10μS)あります。速度上は25MHzぐらいまでいけそうです。カウンタ値オーバーになったらオーバーフロー表示OFがでる様に改造します。

     

 

 

 プログラム 

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

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

 LCD表示プログラムの方はポート名称変更程度でした。ただDELAY関数の効きが今ひとつで、結局は_delay(x)関数に切り替えてしまいました。クロックがINTの4MHzではずっとうまく行っていたのですが、今回始めて使うECの12.8MHzではタイミングがおかしいのかなと邪推しますが、とりあえずトライアンドエラーにより_delay(x)で解決。

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

 

 

 次はどうなる 

  これによりカウンタの基本的な実験が終わりました。次はいよいよLCメータに採用予定のPIC16F628Aへ移ります。そちらは次に開設予定のPIC12F628Aのディレクトリーをご覧ください。

 その後のPIC12F683を使用した追試ではTMR1のカウントを計算する変数の型をLONGにすると4MHzまでカウントできました。

 

 

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