目次
前
次
周波数カウンタB
100MHz程度までの周波数を測定する必要に迫られ
手持ちのマイコンにプリスケーラをつけて対応しました。
回路図は、以下です。
74AC161を利用しているので、150MHzまで対応できます。
100MHzまでをカウントしたいとすると、16分周するので
約6.25MHzまでを正確にカウントできるマイコンがあれば
充分です。
AT90S2313を、10.24MHzで動かすとして、5MHzまでは正確に
カウントできます。
ATtiny2313で、約6MHzまでカウントできるので、100MHzに
対応します。
プリスケーラの74AC161で、16分周するとした場合はBASICで
ファームウエアを作成すると、以下となります。
$regfile = "2313def.dat"
$crystal = 10240000
Config Lcdpin = Pin , Db7 = Portb.7 , Db6 = Portb.6
Config Lcdpin = Pin , Db5 = Portb.5 , Db4 = Portb.4
Config Lcdpin = Pin , E = Portd.3 , Rs = Portd.4
Config Lcd = 16 * 2
Config Timer0 = Timer , Prescale = 1
Config Timer1 = Counter , Edge = Rising
' trigger
Dim Flag As Bit
' x 65536
Dim Over As Word
' 1 sec timer counter
Dim Tint As Word
' frequency
Dim Freq As Long
' frequency / 1000
Dim Losc As Long
' mode
Dim Md As Byte
' set port value
Portb = $00 ' 0000 0000
Pind = $03 ' 0000 0011
' set port directions
Ddrb = $ff ' 1111 1111
Ddrd = $fc ' 1111 1100
Stop Timer0
Stop Timer1
On Timer0 Timer0_int
On Timer1 Timer1_int
Enable Interrupts
Enable Timer0
Enable Timer1
Cls : Cursor Off
Start Timer0
Start Timer1
Do
If Flag = 1 Then
' clear flag
Flag = 0
' get over flow value
Losc = Over * 65536
' add resident value
Losc = Losc + Timer1
' multiply
' 00 (0) => x2
If Md = 0 Then
Losc = 2 * Losc
End If
' 01 (1) => x4
If Md = 1 Then
Losc = 4 * Losc
End If
' 10 (2) => x8
If Md = 2 Then
Losc = 8 * Losc
End If
' 11 (3) => x16
If Md = 3 Then
Losc = 16 * Losc
End If
' get kHz value
Losc = Losc / 1000
' get IFT
Freq = Losc - 455
' LCD handling
Cls
Lcd "FREQ " ; Freq ; "kHz"
Lowerline
Lcd "LOSC " ; Losc ; "kHz"
' prepare next stage
Over = 0
Tint = 0
Timer1 = 0
'
Start Timer0
Start Timer1
End If
' get x2 x4 x8 x16
Md = Pind
Md = Md And 3
Loop
End
' 1 second interrupt happned
' 10.24MHz / 256 = 40kHz
' 40kHz / 1Hz = 40000
Timer0_int:
Incr Tint
If Tint = 40000 Then
Stop Timer0
Stop Timer1
Flag = 1
End If
Return
' overflow interrupt happned
Timer1_int:
Incr Over
Return
原理は、とても単純です。
タイマー0で1秒間を計り、その間にタイマー1が何度
オーバーフローしたかを計算します。
プリスケーラ74AC161で、元の周波数をいくつに分周した
のかをジャンパー設定で入力し、係数を乗算します。
目次
前
次