Arduino周波数カウンタ:FreqCounter Libraryを使った時のカウント異常を再現
2021年5月1日:Arduino UNOで周波数カウンタ:アナデバの電力計用ICのために
にも記しましたが、Arduino Frequency Counter Library
にはちょっとまずい処理が含まれています。
2019年12月20日:Arduino UNOで周波数カウンタに記しました、
★1と★2の間:タイマー1を停止する直前にオーバーフローが入る
とカウントミスが発生するという問題です。
どうなるか再現してみました。
「Arduino Frequency Counter Library」をインクルードする
のではなく、「ino」ファイルの中に取り込んでごそごそしました。
結果、こんなカウント値が現れました。
発振器の周波数を65.536kHzの整数倍数付近で可変すると
このようなミスカウント値が出現しました。
1秒ゲートでオーバーフローが発生するかしないかの
「65.536kHz」付近の挙動です。
★印に異常値が発生しています。
Frq: 65876Hz
Frq: 65839Hz
Frq: 65673Hz OVF:1
Frq: 37Hz ★
Frq: 130999Hz ★
Frq: 65462Hz
:
Frq: 65461Hz
Frq: 65463Hz
Frq: 65455Hz OVF:2
Frq: 41Hz ★
Frq: 131161Hz ★
Frq: 65625Hz
Frq: 65623Hz
:
Frq: 65731Hz
Frq: 65685Hz
Frq: 65634Hz OVF:3
Frq: 13Hz ★
Frq: 131061Hz ★
Frq: 65519Hz
:
さらに、65536×3の196.608kHz付近の挙動です。
Frq: 197276Hz
Frq: 197171Hz
Frq: 197119Hz
Frq: 196847Hz OVF:5
Frq: 131264Hz OVF:6 ★
Frq: 196747Hz OVF:7
Frq: 196746Hz OVF:8
Frq: 196740Hz OVF:9
Frq: 196741Hz OVF:10
Frq: 196742Hz OVF:11
Frq: 196745Hz OVF:12
Frq: 196751Hz
Frq: 262343Hz OVF:13 ★
Frq: 131270Hz OVF:14 ★
Frq: 196802Hz OVF:15
Frq: 196772Hz
Frq: 261776Hz ★
Frq: 196131Hz
Frq: 196128Hz
こんなスケッチで試しました。
・ダウンロード - test_freqcounter_1.txt
(.inoファイルにリネームしてArduino IDEで読んでください)
※その後・・・
あれこれ調べてみましたら、
・https://www.arduino.cc/reference/en/libraries/freqcount/
・https://www.arduinolibraries.info/libraries/freq-count
では、ちゃんと処置されていました。
古いのが問題だったということで。
お騒がせしました。
※カウント中にシリアル通信など他の割り込みが入ると
カウント値が狂うかもというのは変わらないようです。
| 固定リンク
「Arduino」カテゴリの記事
- 1/nカウント方式とDDS方式の2相パルス発生回路(2024.10.13)
- おっと。map関数の計算桁に注意(2024.10.06)
- DDS方式の2相パルス発生回路、周波数スキャン機能を付ける(2024.10.05)
- 1クロックでも速くしたい 割込を「ISR_NAKED」で(2024.09.30)
- 1クロックでも速くしたい DDS方式の2相パルス発生器(2024.09.27)
コメント