ロジックアナライザーを持ち出す。マイクロスイッチのチャタリングは1ms以内でそのあと全く起きていない。フラグは暫くして(20msほど)、元に戻る。なんだ、なんだ、これは。考えて、原因がわかった。スイッチは10数回チャタリングを起こしていて割込み要求を上げ続けるが、割込みルーチンに入ったところで処理されるのは最初の割り込みのときだけで、残りはペンディングになったままだ。割込みルーチンを出たところでまた割り込みがかかる。やれやれ、この前もこんなことがあった。ルーチンを出る前に割込み要求フラグをクリアすることで解決した。このコードは散々他のプログラムで使っている。今まで起きなかったのだろう。今までのプログラムは2回以上割込みルーチンを通過しても問題のないことしかやっていなかった(クリアなどを何回やっても変わらない)からだと思う。こんどはトグルスイッチの機能を持たせたので埋もれていたバグが顔をだしたというわけだ。いやいやプログラムの世界も奥が深い。オシロで波形が見えるのも考え物(10/7/08)パルス判定ロジックの問題が解決した。全ての音響パルスの姿が見えたためにアナログ的な判定ロジックをあれこれ考えていたが、そんな難しく考えることは不要だった。オシロの波形を見ながら、何故人間はこれはパルスだとすぐわかるのに、機械ではうまくいかないのかと考えていた。人間はパルスが起きた後の全体の波形を見られるから、パルスと認識できるが、機械は次から次に発生してくる音の大きさだけで判断しなければならない。非常にせまい視野で、これがパルスだと判断する必要がある。判定ロジックをWebに相談しようにも検索キーワードの見当がつかない。学問のどの分野に入るのかもわからない。2点(前後)の比較だけでは無理なのだろうか。3点なら間違いなく判定できるかは保証の限りではない。この方法(相対差で判断する)では3点でも完全ではないような気がする。最初、パルスの大きさの絶対値でうまくいかず、相対差でやってうまくいったため、これにこだわっていたが、もういちど絶対値比較の方法を考えてみることにした。ADコンバータでなくコンパレーターでこのデータを考えてみたのである。デジタル化したチャートを手書きで描いてみて、頭に電灯が点った。なんだ、こいつはスイッチのチャタリングと同じだ。デジタルパルスが出ているが、パルスグループの次の間隔は短くても300ms以上ある(拍数で200以上)、パルスのブロックは精々50ms。オシロのアナログ波形にこだわりすぎていた。閾値を越えるパルスを観測したら、そのあとのパルスは無視し、パルスのおさまる時間(50ms)から観測を再開すれば、次のパルスを間違いなく捉えられる。してこれに気がつかなかったのだろう。ADCの値を比較するのは1ms単位なので、カウンターを入れて、パルスを観測した後50回までは、パルスが来ても無視するようにする。3つのメトロノームとも百発百中。エラーを出さずに間隔を表示する。いやそれにしてもここまでの道のりは長かった。オシロでそれぞれのメトロノームの音響波形がそれこそマイクロセカンドのオーダーで観測できるものだから、ついこれにこだわっていたが、あまり細部が見えるのも良し悪しであることを学んだ。半年ぶりのブログ更新に漕ぎつけた(2019.09.19)研究所活動は停滞したままでCCDカメラ顕微鏡導入など(2019.02.08)ドングルのHFコンバーターでJJY標準電波は見えたか(2018.12.12)JJY電波を見るため、RF(高周波)の世界に踏み込む(2018.10.31)ESP8266のJJY電波時計のスケッチ公開(2018.10.02)コメントADCの想像があたってよかったです。UARTなどの機能のを使う場合、ポート設定に関わらずPIN機能が強制設定されるCHIPが多いですよね。ADのポートが出力に設定できると、外部に接続した積分用のコンデンサを強制放電させたり、面白い応用もできそうです。17時27分コメントを書く名前:メールアドレス:(ウェブ上には掲載しません)アドレス(URL):この情報を登録するコメントは記事投稿者が公開するまで表示されません。リズムキャプチャー試作版完成。