Synth Scopeは、シンセの波形を手軽に表示するモジュールです。
測定器としての精度は重要でないので(と考えて)、マイコンのソフトで実現しています。
マイコンは、AliExpressで安価に買えるSTM32搭載のMaple互換(模倣)ボードであるBluePillを使っています。このボードは日本語の情報も豊富で、ブートローダを入れるとArduinoIDEで開発できます。STM32duinoと呼ばれています。
Displayは。0.96"の128*64画素のOLEDを使います。これもAliで購入。I2Cのは遅いのでSPIを選びました。 入荷に時間がかかったので複数ショップから購入したところ、わずかに形状・寸法が異なるものが何種類もありました。要注意です。SSD1306のライブラリ<Adafruit_SSD1306.h>が使えますので便利です。
信号入力は、AC入力はごく簡単なLPFを通して単電源OPアンプで受け、DC側もOPアンプで受け別のアナログ入力につないでいます。A/Dが豊富にあるのでアナログでの切り替えが省略できす。ラインレベル(1Vpp)とシンセレベル(10Vpp)の切り替えは、ソフトでゲインをかけて切り替えます。
EXTtrig入力はバッファリングも省略しています。
また、ミニジャックは、ステレオ/モノラルの両ケーブルを繋げるようにステレオジャックを使います。
mode SWは、オーデオ(lineレベル)、オーデオ(シンセレベル)、LFO(シンセレベル)、EG(シンセレベル)の4モードを切り替えます。
Trig SWは、Trigなし、内部Trig、外部Trigを切り替えます。
ソフトウエア構成は、Timer4で 70.312KHz ( 72MHz/1024 )のタイマー割り込みを構成し、
この中でオーディオ信号を128byte表示バッファへ取り込んでいます。サンプリングレートの変換やアンチエイリアシング、トリガ処理はタイマー割り込み内で行います。
OLEDディスプレイへの表示はAdafruitのライブラリを使います。
バッファをSSD1306へ転送するのに7msほどかかりますので、表示ループは10msで回します。
ここでの注意点は、analogRead関数の実行中にタイマー割り込みがかかり、その中で別のanalogReadをすると、analogReadがフリーズするようなので、排他制御を行っています。
低速が重要なLFOモードとEGモードは、10msのループ内でサンプリングしています。
またデモ用として、回路図の左上のコネクタにVRとSWを接続した小基板をつなぐと、ソフト的に発生する正弦波と、SWでゲートを与えて発生するEG波形を表示することができるので、
信号源につながなくても、SynthScopeの動作のデモが可能です。