Quantcast
Channel: JH7UBCブログ
Viewing all articles
Browse latest Browse all 440

PIC16F628A 883周波数カウンタの製作その2

$
0
0
 PIC16F628A 883周波数カウンタの周波数測定部の説明をします。基本的には「電子工作etc」といいうWebサイトに掲載されエイル周波数カウンタV7のアルゴリズムを使わせていただいています。

 PIC16F628Aには、外部クロックTCXO(温度補償型水晶発振器)12.8MHzを供給します。

 ゲートタイムは、TMR2を使い1秒を作り出します。詳しくは私のホームページ「JH7UBCホームページ」のPIC16F883周波数カウンタの試作の記事を参照してください。

 PIC16F628AのTMR2は、8ビットカウンタですが、プリスケーラとポストスケーラを持っています。T2CONで、プリスケーラ1:16、ポストスケーラ1:1にセットします。

 TMR2は8ビットカウンタですので、プリスケーラと組み合わさりクロック16×256個ごとにオーバーフローが発生します。この時、TMR2オーバーフロー割り込みが発生しますので、この割り込み回数をカウントして(実際にはカウントダウンして)1秒を作ります。

 周波数カウンタ本体は、TMR1(16ビットカウンタ)を使います。TMR1だけで、65535Hzまで測定可能ですが、TMR1のオーバーフローをカウントすることにより、より高い周波数までカウントすることができます。

 オーバーフローの回数は、例えば入力周波数が65.536MHzなら1000回と1msに1回となり、割り込みを使わなくともプログラムの中で処理ができます。具体的には、

;===== 測定 =====
FREQ
  BTFSS T2CON,TMR2ON ;TMR2ON=1ならスキップ
  GOTO MSTOP   ;TMR2ON=0なら測定終了
  BTFSS PIR1,TMR1IF  ;TIMER1がオーバーフローしたらスキップ
  GOTO FREQ
  BCF  PIR1,TMR1IF  ;TMR1IFクリア
  INCFSZ BYTE2   ;BYTE2+1 0ならスキップ
  GOTO FREQ
  INCF BYTE3   ;BYTE3+1
  GOTO FREQ

という具合に測定ルーチンの中で処理しています。

 測定が終わるとバイナリーBCD変換でTMR1(BYTE0+BYTE1)+BYTE2+BYTE3の32ビット(4バイト)の2進数を4バイトのBCD(10進化2進)に変換します。

 このBCDコードを上位から4ビットずつアスキーコードにして全8バイト+CRコード(0Dh)をシリアル通信で表示部に送信しまうす。

 アスキーコードで送信するのは、周波数測定部のチェックをするときにパソコンの通信ソフト(TerraTermを使っています)で容易に確認できるからです。

 シリアル通信は、PIC16F628AのUSARTを使いボーレートは、19200bpsとしました。

 USARTの設定はTXSTAとRCSTA、SPBRGで次のように行います。

 ;=== USARTの初期化 ===
  BANKSEL TXSTA
  MOVLW 0x24  ;非同期モード、高速通信モード
  MOVWF TXSTA  ;set TX mode
  MOVLW d'41'  ;12.8MHz, 19200bps
  MOVWF SPBRG  ;ボーレートセット
  BANKSEL RCSTA
  MOVLW 90h   ;RB1,RB2をシリアルポートに
  MOVWF RCSTA

 以上、勘所のみ説明をしました。アセンブラのソースリストは後程JH7UBCブログに掲載します。

 最後に回路図です。

イメージ 1

 次回は、周波数表示部について説明します。


Viewing all articles
Browse latest Browse all 440

Trending Articles