大阪教育大学の光永さんの Arduino でオシロスコープ は古い128x64のLCDディスプレイ用に作られたものですが、それを基に128x64の1.3インチOLEDで使えるように変更して ArduinoとOLEDで2CHオシロスコープ・Pulse generator・Function Generator・周波数カウンタ を作ったので、それを基にRaspberry Pi Pico Wに移植し、320x240のタッチパネル付き2.8インチLCDで使えるように変更して、WEB表示機能を追加しました。まだ不完全ですがPCやスマートフォンの大きな画面で波形を確認できます。サンプル数は300ポイントです。
波形データの送信にはWebSocketを使いました。WebSocketの通信は手抜きでEndian処理をしていません。そのためBig EndianのCPUでは正しく波形が表示できません。いまどきそんなCPUは少ないと思いますしPentiumやARM系のAndroidであれば使えますので大丈夫でしょう。波形の描画にはHTML5のCanvasを使っています。オシロスコープ機能はマルチコアのCORE0で処理し、WiFi機能はCORE1で処理するようにしています。
周波数カウンタは1kHz単位のものを仮実装です。また、等価時間サンプリングはRaspberry Pi Picoで実装する方法が分からないのであきらめました。
開発環境は
Arduino IDE 1.8.19 + Raspberry Pi Pico/RP2040 by Earle F. Philhower, III version 3.4.0です。
この環境ではAnalogRead()が使えるのですがオーバーヘッドが多過ぎるようで遅いので、adc_read()を使うようにしました。また、単発のadc_read()では速度に限界があるので高速サンプリング時にはDMAを使って単一チャンネルで500kspsまで出来るようにしました。2チャンネルなら250kspsができるようにしました。
時間軸拡大機能を追加しました。2us/divは500kspsの10倍拡大、4us/divは5倍拡大になります。拡大にはsin(x)/xによる補間をしています。(2024.03.13 update)
Raspberry Pi PicoにはEEPROMが無いのですが、Mbed OSではESP32のようにFlash Memoryを使ってシミュレートするライブラリが無いので設定を保存する機能は外してあります。Arduino-Picoの環境ならあるようですので、そのうちにサポートされるようになるかもしれません。
Raspberry Pi Pico/RP2040 by Earle F. Philhower, IIIの開発環境ではEEPROMのシミュレーションを利用して設定を保存するようにしました。
最新版はGitHubに置いてあります
https://github.com/siliconvalley4066/RaspberryPiPicoWTFTOscilloscope
RPPicoTFTOscillo122.zip 2024.03.13 update
CPU速度は当初125MHzを想定していました。 Raspberry Pi Pico/RP2040 by Earle F. Philhower, IIIの環境ではdefaultで133MHzになっていてDDSとPWMの周波数がずれる問題が発生したので、システムクロック周波数を取得して自動的に対応するようにしました。ただし、PWMの周波数可変範囲が変動します。
TFT LCDのライブラリはTFT_eSPIを使用します。Arduino IDEのライブラリマネージャーから検索してインストールしてカスタマイズする必要があります。 GitHubのhttps://github.com/siliconvalley4066/RaspberryPiPicoWTFTOscilloscopeを参照してください。
WebTask.inoの
const char* ssid = "XXXX";
const char* pass = "YYYY";
に使用するWiFiアクセスポイントのssidとpasswordをXXXXとYYYYに記入する必要があります。ソースコードを少し変更すればAPモードにすることも可能です。
WebSocketsのライブラリはライブラリマネージャーから検索できるものではなく、以下を使いました。
Links2004/arduinoWebSockets
Pi Pico用にも変更無しでコンパイル出来るように自動的にpre-defineを見てWEB機能を外すようにしてあります。
Arduino Mbed OS RP2040 Boards 3.1.1 でもコンパイルできますが、CPUがPi PicoのみでWEB表示と設定保存は出来ません。また、何故かタッチパネルが使えません。
10:1プローブを使うために入力インピーダンスを1Mohmに近付けたいので、2Mohmの抵抗を使ってみると、Raspberry Pi PicoのADCの入力インピーダンスが低いようで、無信号時に0.4Vが観測されてしまいます。高入力インピーダンスをあきらめて100kohmの抵抗を使うことで入力インピーダンスは約50kohmになります。
(2023.11.02 update)
先ず起動する前にArduino IDEのシリアルモニターを開いておきます。プログラムが開始してWiFiアクセスポイントに接続成功したらIPアドレスを取得してシリアルモニタに表示します。そのIPアドレスをWebブラウザのアドレスバーに入力すればWEBオシロに接続できるはずです。
例えばシリアルモニタに、
WiFi Connected. IP = 192.168.1.128
と表示されたら、Webブラウザのアドレスバーに192.168.1.128と入力します。
LCDのタッチパネルで操作出来ます。また、タクトスイッチで画面上の項目を選択して操作することもできます。WEB表示では画面右側のコントロールで操作できます。ただし、タッチパネルやタクトスイッチで変更した内容はWEB表示の波形には反映されますが、設定値の表示はリロードするまで反映されません。
タクトスイッチでの操作方法は、UpボタンとDownボタンでメニュー内の項目を移動します。それぞれの項目の位置でRightボタンかLeftボタンを押すとその項目の値を変更したりOn/Offの切り替えをします。
機能 | 内容 |
---|---|
入力チャンネル数 | 2 |
入力結合 | DC and AC |
入力電圧範囲 | 0 to 3.3V |
入力インピーダンス | 不明。50kohm程度 |
電圧レンジ(volts/div) | 1V, 0.5V, 0.2V, 0.1V, 50mV |
時間レンジ(time/div) | 10s, 5s, 2s, 1s, 0.5s, 0.2s, 0.1s, 50ms, 20ms, 10ms, 5ms, 2ms, 1ms, 500us,
(DMA mode) 200us, 100us (250ksps), (1 channel) 50us, 10us, 5us (500ksps) |
トリガモード | Auto, Normal, Scan |
トリガ極性 | rise/fall edge |
トリガソース | CH1 or CH2 |
トリガレベル調整 | 画面内位置を上下に調整 |
外部トリガ | No |
波形位置調整 | 上下に調整可能 |
波形反転表示 | Yes |
電圧測定表示 | Max, Average, Min (AC入力でもDCレベルを表示) |
周波数&Duty測定 | Yes |
電圧・周波数・Duty表示 | 表示・非表示切り替え |
文字表示 | 文字サイズ固定 |
FFT | Yes |
A/D変換分解能 | 12bits |
サンプル数 | 300samples/channel 12bit/sampleを電圧レンジに応じて0から200又は400にスケーリングして表示 |
表示解像度 | LCD: 300x200 dots, 水平25dots/div 垂直25dots/div WEB: 300x400 dots, 水平25dots/div 垂直50dots/div |
等価時間サンプリング | No |
設定状態EEPROM保存 | Yes |
操作方法 | タッチパネル及び5方向スイッチ (Left, Right, Down, Up) |
プリトリガー | No |
ホールドオフ機能 | No |
時間軸拡大表示 | x5 (10us/div), x10 (5us/div) |
X-Y表示 | No |
Pulse Generator | 7.48Hz to 62.5MHz 約3.3Vpp方形波 Duty ratio可変 |
Function Generator | 8bit PWM DDS 0.01Hz to 9999.99Hz(実用は400Hzまで) 約3.3Vpp
23波形 sine, saw, revsaw, triangle, rectangle, 20% pulse, 10% pulse, 5% pulse, 1dot pulse, noise, gaussian noise, ECG, sinc5, sinc10, sinc20, sine 2 harmonic, sine 3 harmonic, chopped sine, sine abs, trapezoid, step2, step4, chainsaw |
周波数カウンタ | Yes 分解能1kHz 2kHzから125MHz程度まで |
PCへのデータ転送 | No |
SDカードへの波形保存 | No |