編集履歴一覧に戻る
nichiconのアイコン画像

nichicon が 2021年09月27日11時41分54秒 に編集

初版

タイトルの変更

+

カードサイズの小型オシロスコープ

タグの変更

+

Seeeduino

+

オシロスコープ

+

Arduino_IDE

メイン画像の変更

メイン画像が設定されました

本文の変更

+

超小型のマイコンボードSeeeduino XIAOを使用したクレジットカードサイズのオシロスコープを作りました。 このマイコンボードに載っているマイコンのADコンバータは350kspsで動作します。 Arduino UNOや8bit PICマイコンと比べて3倍以上高速でサンプリングできます。 今回はこのサイズと高速ADCを活かしてオシロスコープを作りました。 グラフィックLCDの制御には、[しなぷすのハード製作記](https://synapse.kyoto/lib/MGLCD/page001.html)さんのMGLCDライブラリを使用しています。 # 部品 ・マイコンボード Seeeduino XIAO x1 ・グラフィックLCD AQM1248A x1 ・抵抗10kΩ x1 ・抵抗1MΩ x1 ・2ピンL型ピンヘッダ x1 # 回路図 ![キャプションを入力できます](https://camo.elchika.com/6a0011769f97f4820acf043b037a9a3ea7b5305e/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f34343066643237322d633762332d346430322d623565372d3461633739623339636466612f39646237366338612d663062362d346666342d613462362d356561306466373834633932/) # プログラム ``` #include <MGLCD.h> #include <MGLCD_SPI.h> #include <SPI.h> #define ADCpin A1 #define CS 7 #define DI 6 #define MAX_FREQ 8000000L MGLCD_AQM1248A_SPI MGLCD(MGLCD_SpiPin2(CS, DI), MAX_FREQ); #define time_width 50 //micro seconds | time_width > 3 uint16_t buf[100] ; uint32_t t0, dt ; uint8_t n, valY, lastY ; void set_screen(void){ MGLCD.Line(0,45, 0,47) ; MGLCD.Line(10,45, 10,47) ; MGLCD.Line(20,45, 20,47) ; MGLCD.Line(30,45, 30,47) ; MGLCD.Line(40,45, 40,47) ; MGLCD.Line(50,45, 50,47) ; MGLCD.Line(60,45, 60,47) ; MGLCD.Line(70,45, 70,47) ; MGLCD.Line(80,45, 80,47) ; MGLCD.Line(90,45, 90,47) ; MGLCD.Line(100,0, 100,47) ; MGLCD.Line(99,33, 101,33) ; MGLCD.Line(99,19, 101,19) ; MGLCD.Line(99,5, 101,5) ; MGLCD.Locate(17,0) ; MGLCD.print("3.3V") ; MGLCD.Locate(17,1) ; MGLCD.print("500u") ; } void setup() { // put your setup code here, to run once: pinMode(ADCpin, INPUT) ; MGLCD.Reset() ; } void loop() { // put your main code here, to run repeatedly: for(n=0; n<100; n++){ t0 = micros() ; buf[n] = analogRead(ADCpin) ; while(dt < time_width){ dt = micros() - t0 ; } } MGLCD.ClearScreen() ; set_screen() ; lastY = 47-(buf[0]/22) ; for(n=0; n<99; n++){ valY = 47-(buf[n+1]/22) ; MGLCD.Line(n,lastY, n+1,valY) ; lastY = valY ; } delay(1000) ; } ``` # 作り方 ユニバーサル基板に回路図通りに配線して作ってください。 現状、サンプリングの間隔は50μsに固定されています。 プログラムを改造してサンプリングレートを変更できるようにすると使いやすくなります。 # 使い方 Seeeduino XIAOのType-Cコネクタにモバイルバッテリーなどで給電して、A1ピンに繋がっているL型ピンヘッダに信号を与えるとLCDに波形が表示されます。 # 今後の改良予定 LCDの下のスペースが空いているので、そこにSeeeduino XIAOを入れることでさらに小型化できると考えています。 また、SeeeduinoとLCDをプリント基板に直接つければ薄型にできるので、機会があったら基板を発注しようと思います。 現在、電圧レンジの自動調整機能を作っているので完成したら更新します。 サンプリングレートの自動調整も試してみましたが、難しいので手動で変更できる仕様にする予定です。