製作中のNanoVNAですが、今回はタッチパネルを実装してみました。普段はメニューが隠れているのですが、画面に触れたり、レバーを押すとメニューが現れて、各種操作を行うことができるようになってきました。
前回の状態ではレバースイッチを使った操作ができていました。必要な操作はできていたのですが、この液晶ディスプレイには抵抗膜方式(resistitive)のタッチパネルが付いているのでせっかくなので試してみます。
このタッチパネルからはX軸Y軸それぞれ2本づつの端子が出ています。専用のコントローラチップを使う場合もあるようですが、ADCがあればMCUでも制御可能です。4本の端子をMCUのGPIO兼ADC端子に接続し、GPIO端子を駆動するレベルや、ADCでの読み取り先を切り替えることで、タッチの有無、X軸Y軸の位置、押圧などを読み取ることが可能です。得られるのは電圧に応じた値ですので、これを座標に変換処理します。
タッチパネルの制御そのものはそんなに難しいものではなく、公開されているArduino等のライブラリが参考になります。少し工夫してみたところは、ADCを読み取って押下の判定を行うのに、これを常時MCUで行ってしまうと、肝心の測定や描画処理の邪魔になってしまいます。そこでSTM32のADCにあるAnalog Watchdog機能を使ってみました。常時連続的にAD変換して得られた値が、設定した閾値(HighとLow)を越えた場合に割り込みを発生させることができます。割り込みが発生するまではMCUのサイクルを消費しなくて済みます。この割り込みを受けてから、UIの各種処理を開始するようにしています。
メニュー操作だけではなく、周波数の設定等も行う必要があるので、数値を入力するためのキーパッドも作ってみました。パッドは単なる白い四角形を描画しているだけの手抜きです。
この写真ではタッチで押していますが、メニューと同様レバーでも操作することができます。
動画です。
画面右側にメニューが並ぶところや、数値ボタンの配置、そして用語や色遣いは往年のHP8753を意識してみました。いかがでしょうか。
まだ足りていない項目(ScaleやElectrical Delayなど)が残ってはいるのですが、おおむね作りたいと思っていたものはほぼ形になったかなと思います。できればもう少しスムーズに操作できるよう、ブラッシュアップしたいところです。
懸念の頒布に向けてですが、まずは人柱向けに若干数(6個予定)をキット化の予定です。ただしVNAまたはVNWAを使った経験のある方を対象とさせていただきたいと考えています。準備ができたらアナウンスしたいと思います。