周波数カウンタ Frequency counter with PIC18F2550 (UBW)

An experimental frequnecy counter with the UBW

<< Introduction in Japanese >>

周波数の計測には、基準時間内で信号の波数をカウントする方法と、信号の周期を計測して周波数を計算する方法がある。今回は前者の方式で、0.1秒間の波数をカウントする。

計測信号は PreAmp でPIC の規格に適合させて T0CKI (RA4) pin に入力して Timer0 でカウントする。

基準時間の生成には、1)アセンブリ命令での総ワード数から遅延関数を設計する方法(参照:たのしくできる PIC 電子工作.東京電機大学出版局)、2)誤差を認めて、コンパイラ標準の遅延関数を用いる方法、3)タイマ1の 16-bit overflow period を計測時間(gating-period)とする方法(CCP module 未実装 PIC の場合)、4)CCP module を利用する方法、などが挙げられる。

Original UBW は Fosc = 48 MHz と高速で、Timer による 0.1 秒ゲート時間の生成が困難であり、 3)、4) の方法を実験する為に Fosc = 20 MHz へ減速した(modifed UBW)。

(平成28年7月18日補足: 実際の測定では、信号を適切なレベルにまで増幅して入力する高周波増幅回路が必要で、UBW にはプリアンプは実装されていない。)

In actual measurement, it is necessary to adapt a signal to the condition of TTL by a preamplifier.

<< Modified UBW >>

The configuration of my modified bootloader is set for 20MHz CPU clock derived from a 20MHz ceramic resonator.

CPU clock の変更は、MPLAB IDE (legacy IDE) で UBW 用 bootloader の hex file を import し、configuration bits を変更して PICKit3 でプログラミングした。

Select Divice : PIC18F2550
Configuration Bits set in code のチェックを外して、
FOSC : HS oscillator (HS)
PLLDIV : Divide by 5 (20 MHz oscillator input)
USBDIV : USB clock source comes from the 96 MHz PLL divided by 2
CPUDIV :  [Primary Oscillator Scr: /1] [96 MHz PLL Scr: /2]
上記の設定で PIC18F2550 にプログラミングした。

<< UBW board >>

The test board is the same one of my page on Jan. 16, 2014.

Bootloader ( RC0 – LED, RC1 – LED, RC2 – switch2 (pull down), MCLR – switch1 (pull down) )

LCD : SC1602BBWB-XA-GB-G ( RS – RB2, R/W – GND, E – RB3, Data bus – RB4~RB7 )

<< Sample code >>

My files do not include a bootloader nor a USB driver.

To diminish error in measurement, you must improve my code and use a crystal unit.

2)  A project using a function of XC8, __delay_ms() to operate an event counter of timer0, in a condition of 48MHz CPU clock derived from 20MHz ceramic resonator using PLL circuit (with the original UBW of my page on Jan. 16, 2014)

3)  A project using a timer1 overflow interrupt of a Fosc-20MHz input in order to control an event counter of timer0 (with my modified UBW)

4)  A project using a CCP and Timer1 compare mode of a Fosc-20MHz input in order to control an event counter of timer0 (with my modified UBW)

<< A bootloader set >>