「アナデバ社(ADI社)のWeb記事『StudentZone』を初回からすべて読む」ついにアナデバ社の背中に追いつきました。現在2023年2月で、前回当方は2022年11月の記事を勉強、まだ3か月分遅れてるじゃん。でもターゲットはあくまで日本語翻訳版っす。翻訳版は通例、ほぼ2か月遅れで掲載。まだ昨年12月号は未です。
※「お手軽ツールで今更学ぶアナログ」投稿順 indexはこちら
まあね、よく考えると進捗追いついたからといってアナログ分かる人になったわけじゃなし、アナログ苦手の忘却力の年寄に変わりませぬ。しかし、密に期するものがあったのであります。アナデバ様の進捗においつき、とりあえず読む記事の無い回に至ったならば
AD2のスクリプトを動かし始める
と。これがお楽しみであったのです。
当方、アナデバ様のADALM2000ではなく、ハード的によく似たDigilent社のAnalog Discovery 2で実験ツールの代用をさせていただいております。Analog Discovery 2(以下AD2と縮めます)の制御ソフト WaveFormsの持つ各種ツールはいろいろ使ってきたのでありますが、唯一、今まで使ったことがなかったのが Script というタブなんであります。AD2の各種機能をJavaScriptで制御するもの。オシロスコープとか、パターンジェネレータとかの画面からクリクリやって操作してきたことをプログラムで制御できるもの。そして取得したデータに自在にアクセスして加工できる一品であります。面白そうなので、これ始めると「アナログがおろそかになる」という恐れあり、進捗が追い付くまではということで封印しておりました。これからはアナデバ様のご翻訳のスケジュールにより、たまにスクリプトを触っても良い回ができるとな。大丈夫か。
さてAD2のスクリプトでHello Worldするには?
Digilent社の制御ソフトWaveFormsには詳細なドキュメントが用意されております。
また、Tutorialsというコーナには、Using the Script Editorという単元もあります。ただ、そこ見てもScriptタブの使い方とかは分かるのですが、実際のScriptの書き方とかは結局上のリファレンス見よ、という感じです。リファレンスを見ると、一応、Exampleが載っているのですが、無いよりマシ程度っす。
しかし、つべこべ言わずにScriptタブを開けばよかったのです。開いたらばこんな感じ。
開いた Script Editor のエディタ画面には、”Welcome” サンプルスクリプトがロード済であります。そして、右上の方には、Exampleというプルダウンがあります。ここからいくつかのサンプルスクリプトを開くことができるようになってました。
よしということで、Welcomeスクリプトを走らせてみました。こんな感じ。
JavaScript処理系の場合、なにかテキストメッセージを表示しようとすると alert()とかconsole.log()とか実行環境によりけりで戸惑うことがありますが、このWaveForms内蔵のJavaScriptでは、print()でOutputウインドウに文字列を出力できます。何気に便利だな。
また上記のようにポップアップウインドウを開くことも可能。いろいろできそうですな。
とりあえず最初のスクリプトを書いてみる
まあ、初回ということで動作確認をかねて簡単なスクリプトを書いてみました。なお、AD2の端子は以下のように接続してあります。
-
- GND、1-端子は同じノードに接続
- W1、1+端子は同じノードに接続
- 上記の1,2間に1kΩの抵抗を接続
これでWevgenを動かしてW1に電圧を与え、そのときの電位を1+(オシロのC1端子)で観察できる筈。
見様見真似で書いたスクリプトが以下に。
clear() print("Before") print("Wavegen.Channel1.Mode.text:", Wavegen.Channel1.Mode.text) print("Wavegen.Channel1.Simple.Type.text:", Wavegen.Channel1.Simple.Type.text) print("Wavegen.Channel1.Simple.Offset.value:", Wavegen.Channel1.Simple.Offset.value) print("Wavegen.Channel1.Simple.Frequency.value:", Wavegen.Channel1.Simple.Frequency.value) print("Wavegen.Channel1.Simple.Amplitude.value:", Wavegen.Channel1.Simple.Amplitude.value) Wavegen.Channel1.Simple.Offset.value = 1.5 Wavegen.Channel1.Simple.Frequency.value = 500 Wavegen.Channel1.Simple.Amplitude.value = 0.5 Wavegen.run(); print("After") print("Wavegen.Channel1.Simple.Offset.value:", Wavegen.Channel1.Simple.Offset.value) print("Wavegen.Channel1.Simple.Frequency.value:", Wavegen.Channel1.Simple.Frequency.value) print("Wavegen.Channel1.Simple.Amplitude.value:", Wavegen.Channel1.Simple.Amplitude.value) Scope.Trigger.Trigger.text = "Repeated"; Scope.run(); if(!Scope.wait()) throw "Stopped"; var minC1 = Scope.Channel1.measure("Minimum"); var maxC1 = Scope.Channel1.measure("Maximum"); print("Min: ", minC1, "[V]"); print("Max: ", maxC1, "[V]");
まずスクリプトの実行前のWavegenタブの様子です。DC1Vに設定してあるのですが、それ以前にSIN波を使っていたときのFrequency、Period、Amplitude、Symmetry、Phaseなど過去の設定値が、DC出力には関係ないものどもがグレーアウトされても見えてます。
上記のスクリプトを走らせるとこんな感じ。Beforeのところで、上記の設定値が読み出せることがわかります。そして値を設定して Afterのところで再度読み出すと設定した値に更新されてます。
そのときのWavegenタブは以下のようです。値はGUI画面にもしっかり反映されておるようです。また、波形ジェネレータをrunしているので動作は赤丸状態、絶賛電圧出力中みたいっす。
その後、ScopeもRunして、Min、Max値を計測してみてます。こんな感じ。
設定のピタリ1.5Vからするとちょいと落ち気味なのは、抵抗に1mAばかり流れている分のドロップなのか、電圧出力の誤差なのか、電圧測定の誤差なのか?まあ、ともかくスクリプトは動いておるみたいです。いろいろ夢がひろがっちゃう?