Aruduinoで作るオシロスコープ(4)
これまでにトリガーについてわかったことは↓です。
- TRIG mode = normal は、TRIG level、TRIG slope の条件を満たすと画面左から描画し、その後も描画し続け、また、条件に合致すると画面左から再描画するということを繰り返しているらしい。
- TRIG mode = single は、TRIG level、TRIG slope の条件を満たすと一画面分だけサンプルを取り、画面左から描画して停止する。次に条件を満たす波形が来ても再描画することはない。最初に条件を満たした波形だけを表示しているらしい。
- TRIG mode = auto は、 トリガーと関係なくひたすらAD変換した値を描画し続けているらしい。
- Arduino のアナログ入力はプラスの電圧のみなのでマイナスに振れる場合は工夫が必要。
- 簡易オシロスコープ Kyutech Arduino Scopeのページにある「トリガ用機能回路」 って何?何してるの?
- トリガの外部入力はちゃんと機能するの?
- delayは、トリガーイベントから実際に掃引開始するまでの遅れらしいけど、確かめていない。
チャンネル2で、外部トリガーをモニタしています。外部トリガが立ち上がったところでチャンネル1のWaveGeneからの正弦波の掃引が始まっています。そして、波形上部の赤い部分に表示されているとおり一画面分描画したところで掃引が停止しています。
ここで、横軸の目盛を変えてみます。一目盛200マイクロ秒にしてみます。
チャンネル2(CH2)の外部トリガの波形を見てみると、横軸の一目盛は200マイクロ秒なので、900マイクロ秒分しか描画されていないことがわかります。矩形波は、1ミリ秒(1000マイクロ秒)Highになるように作っていますので、どうやらdelayで指定されているとおりトリガ検知から100マイクロ秒後から掃引されていりうようです。試しに、delay を 200マイクロ秒に変えてみました↓。
チャンネル2(CH2)の外部トリガの波形を見てみると800マイクロ秒分しか描画されていません。delay は定義のとおりに機能しているようです。
- 簡易オシロスコープ Kyutech Arduino Scopeのページにある「トリガ用機能回路」 って何?何してるの?
ということで、チャンネル2(CH2)でCとRの中間点(D6、A0もつながっている)をモニタしながらTRIG level を変えてみました。
TRIG level は、3Vです。Kyutech Arduino Scope のチャンネル2、つまり、「トリガ用機能回路」のCRの中間点も3Vになりました(一目盛が1Vで最下段が0Vです)。TRIG levelに設定した電圧がここに現れることから予想が正しいことが確認できました。ところで、なぜこんなことをしているのでしょうか?推測ですがArduinoの機能(AnalogRead())でトリガ波形をモニタしてトリガ電圧を超えたら(fallingのときは下回ったら)何かをするという処理は時間が掛かり過ぎるのでトリガ電圧が印加されているA0ピンとトリガ波形が入ってくるA1、A2ピン(外部トリガならA3ピン)の電圧をAtmega328P-PUの「高速な」何らかの機能で比較してトリガ条件を満たすことを高速に検知しているのではないでしょうか。いずれ確かめてみたいと。
わかったことを改めてまとめるとこうなります。
- TRIG mode = auto は、 トリガーと関係なくひたすらAD変換した値を描画し続ける
- TRIG mode = normal は、TRIG level、TRIG slope の条件を満たすと画面左から描画し、その後も描画し続け、また、条件に合致すると画面左から再描画するということを繰り返している
- TRIG mode = single は、TRIG level、TRIG slope の条件を満たすと一画面分だけサンプルを取り、画面左から描画して停止する。次に条件を満たす波形が来ても再描画することはない。最初に条件を満たした波形だけを表示している。スペースキーを押すと次のトリガイベントを待つ。
- 「トリガ用機能回路」は、TRIG levelに指定したトリガ電圧を作っている。
- トリガの外部入力を使うことで測定対象のCH1、CH2以外の信号源をトリガにできる
- delayは、トリガーイベントから実際に掃引開始するまでの遅れ
- Arduino のアナログ入力はプラスの電圧のみなのでマイナスに振れる場合は、グランドを持ち上げる工夫が必要