Amazonで廉価で購入したロジックアナライザーを動作させてみました。結構面倒なのでその記録です。 ついでにシリアル通信でMIDIを送信した時の波形を見てみました。今Amazonを検索してみると、沢山表示されます。 少しずつパッケージの印刷が違いますが、たぶん中身は同じなんだと思います。
とりあえずPCにUSBをつないで、デバイスマネジャーで見てみると、「不明なデバイス」と認識されます。
ソフトウェアをインストールします。sigrok.orgのダウンロードのページから、母艦となるPCの種類に応じてソフトウェアとダウンロードします。私はWindows 10, 32bit ですので、pulseview-NIGHTLY-32bit-static-release-installer.exeをダウンロードしました。ただし、クリックしてもダウンロードできません。右クリックで「名前を付けてリンク先を保存」でダウンロードします。
しかし、「このファイルは安全にダウンロードできません」とブラウザに怒られます。ですので、継続を選択する場合は自己責任で進めて下さい。
インストールすると、"Program Files\sigrok\PulseView"にファイルが展開されます。スタートメニューには3つのアプリ、PulseViewer(Debug), Zading(PulseViewer,XP), Zading(PulseViewer)がインストールされました。
Logic Analyzerをもう一度PCにつないで見ましたか、ドライバーは未だに認識されていません。こちらのサイト、格安ロジックアナライザのインストールと使い方を参考にさせていただきました。
Zading(PulseViewer)でドライバーを差し替えます。Zading を立ち上げると私の場合は以下のような画面でした。
"Reinstall Driver"を押すとドライバーが指し変わります。画面は以下のようになりました。
表示されている、"fx2lafw"を検索してみると、EZ-USBロジックアナライザーに行き着きます。 この製品に使われているボードがEZ-USB FX2LPであることがわかりました。 この状態でLogic Analyzerをもう一度PCにつないで見ると、ドライバーは以下のように認識されていました。
相変わらず"Unknown Device #1"と表示されますが、良しとします。PulseViewer(Debug)を立ち上げます。すると、msvcr100.dll見つからないのでプログラムが起動できない、と表示が出てPulseViewerが起動できません。
Microsoft Visual C++ 2010 Service Pack 1 再頒布可能パッケージをインストールします。vcredist_x86.exeがダウンロードできますのでこれを実行します。
PulseViewerが立ち上がります。
PulseViewerの動作を確認するために、Arduinoを使います。Logic AnalyzerとArduinoを以下のように接続します。Arduinoに以下プログラムを書き込みます。このプログラムは0番ピンから7番のピンを2msecごとに順番に、1msecの間Lowとするプログラムです。1周期は16msecとなるはずです。
void setup() { for(int i=0; i<8; i++){ pinMode(i, OUTPUT); digitalWrite(i, HIGH); } } static int i=0; void loop() { digitalWrite(i, LOW); delay(1); digitalWrite(i, HIGH); delay(1); i++; i=i&0x07; }
PulseViewerの左上の"Run"を押すと以下のようにデータを取得することができます。
MIDIのシリアル通信のBaud Rateは31,250bpsです。MIDIのイベントメッセージ(例えばNote ON)は3バイトデータです。これをLogic Analyzerで見てみます。ArduinoのUART、TXは1番ピンですので上の接続でD1で見ることができます。3バイトのデータを0x9C 0x55 0x7C とします。その結果得られる波形は次の通りです。
このデータを分析してみます。データは左から右へ時間が流れています。1番左でLowに下がっているのはシリアルデータのスタートビット(SB)です。その後に8ビットのデータがLSBから並んでいます。これを並べ替えてみると、送っている0x9C 0x55 0x7Cと一致しています。
MIDIの1つのイベントメッセージは、イベントとイベントの間に32usec(1/31250)のマージンを含めて、だいたい1msecで送信されていることがわかります。