2018年8月30日木曜日

Nucleo DCO OLED表示(u8g2)と波形出力のテスト

u8g2-mbedを使ってSSD1306 OLED(I2C)に表示しつつ、内蔵DACから波形出力しました。Nucleoボードは、F446REだとサンプリング・レート100kHzではだめで50kHzぐらいまで下げないと追いつかなかったので、F767ZIを使用しました。


Nucleo_DCO_Test04 ピンアサイン


Arduino Nucleo Description
D15 PB_8 OLED/I2C/SCL
D14 PB_9 OLED/I2C/SDA
GND GND OLED/GND
D5 PE_11 CheckPin
D4 PF_14 CheckPin
- PA_4 WaveOut

テストプログラム(mbed-cli)
https://github.com/ryood/Nucleo_DCO/tree/master/mbed/Nucleo_DCO_Test04

u8g2-mbedを使ったプログラム作成の手順


プロジェクト作成

PS D:\Users\gizmo\Documents\mbed> mbed new Nucleo_DCO_Test04
[mbed] Creating new program "Nucleo_DCO_Test04" (git)
[mbed] Adding library "mbed-os" from "https://github.com/ARMmbed/mbed-os" at branch/tag "latest"
[mbed] Updating reference "mbed-os" -> "https://github.com/ARMmbed/mbed-os/#f8b140f8d7cb226e41486c5df66ac4f3ce699219"
The following paths are ignored by one of your .gitignore files:
mbed-os.lib
Use -f if you really want to add them.

u8g2-mbedから以下のファイルをプロジェクトディレクトリにコピー
u8g2.lib
.mbedignore
src/*
src/main.cppはu8g2-mbedを使ったプログラムの雛形として使えます。

.mbedignoreの中身は

PS D:\Users\gizmo\Documents\Develop\Nucleo_DCO\mbed\Nucleo_DCO_Test04> cat .mbedignore
u8g2/cppsrc/*
u8g2/doc/*
u8g2/sys/*
u8g2/tools/*

となっていて、mbedのBUILD対象外とするファイルを指定するようです。

参考「Ignoring files from mbed build

続いてプロジェクトディレクトリに移動して、デプロイ

> mbed deploy

コンパイルです。

> mbed compile -t GCC_ARM -m NUCLEO_F767ZI

Nucleo_DCO_Test04ではOLEDに
fps | 経過時間
表示更新回数
を表示しています。fpsはおおよそ10.9になりました。OLEDの表示はメイン・ループ内で行っていて1秒間に10.9回のループです。操作子からの入力もメイン・ループ内で行うと思うので、fpsはもっと下がると思います。

出力波形

ch1:PA_4

Ticker割り込みの処理時間

ch2:D4

Hになっている時間(PW)が波形出力の割り込み処理に要した時間で、1.2マイクロ秒です。

mbedのオンラインコンパイラ(mbed OS 2)でやったときは(参考「Nucleo DCOの構想 ~ いわゆるプロダクト・アウト」)720ナノ秒だったので、処理時間が増えました。

これはOLED表示のためというよりは、OS 2 → OS 5に移行したためなんじゃなかな~と思います。

F767でもいろいろやろうと思うと48kHzのサンプリング・レートがキープできるかどうかちょっと心配です。

ToDo:

・3オシレーターの波形合成(ミキシング)
・入力系の処理のテスト

0 件のコメント:

コメントを投稿