PICで周波数カウンタ
PIC16F88編
PIC16F84編
なんでもない周波数カウンタが必要になった。
10年くらい前に回路作りセミナーをやったときに作った
PIC16F84A+LCDモジュール(SC1602BS)が出てきたのでこれに手を入れることにする。
当時定番の組み合わせで今さらいじりたくないが0から作るよりは簡単だろう。
元の回路は
こんな感じ
それを
こんな感じ
に作り替える。
プログラムは恐らく秋月のキットのと思われるソースコードを探し出したが、
秋月のはクロックが10MHzであり(手元のは4.19MHz)、ゲート回路が
付いているので、少し書き替える。
PASMソース
HEXファイル
ちなみにステップ数を数え直すにあたって(x*13+5)*yが105619に
近くなる自然数の組x,yを求める芸のないプログラムも書いてみた。
Cソース
(93*13+5)*87=105618らしい。
オシロが出している基準信号の1kHzを入れたところ。
MPLAB IDE v8.20
MPASM v5.30
PICプログラマV4 V6.71.3
asmファイルに十進のつもりで87と書いたら087Hと解釈された(たぶん)。
2009.09
PIC16F88編
訳あってPIC16F88用に書き直してみた。変更は次の5点。
[1] MPUの種類を宣言するところ:
LIST P=PIC16F88
INCLUDE "P16F88.INC"
[2] コンフィギュレーションビットを指定するところ:
__CONFIG _CONFIG1,_CP_OFF &_PWRTE_OFF &_WDT_OFF &_HS_OSC &_BODEN_ON &_LVP_OFF &_CPD_OFF &_DEBUG_OFF
[3] 一般用レジスタ(SRAM領域)の開始番地が0CHではなくて20Hなので変数の宣言をずらすこと:
BYTE0 EQU 20H ;Counter 0
BYTE1 EQU 21H ;Counter 1
BYTE2 EQU 22H ;Counter 2
...
[4] パワーONのときにA/D使用になっているので使用しないようにする:
BSF STATUS,RP0
CLRF ANSEL ;do not use A/D
BCF STATUS,RP0
[5] 若干のレジスタ(フラグ)名が異なるので(このプログラムの場合
INTCONのT0IF⇒TMR0IF)それを修正する。
PASMソース
HEXファイル
2009.09
2012/03/21 18:25:32
更新