U8g2はArduinoでは使いやすいですが、mbedでは少々やっかいです。
そこで、U8g2を使うためだけにArduinoを一個用意するという贅沢なことを思いつきました。
Nucleo本体は波形生成に専念し、パラメーターに変更があった場合にOLED表示用のAruduinoにI2C経由でデーターを投げるというイメージです。
I2Cは仕様が複雑でほんとは使いたくないんですが、AVRにもSTM32にも専用のハードウェアが用意されているのでパフォーマンスを考えると使わざるを得ないと思います。なにせ信号線2本で双方向通信できますから。
SSD1306 OLEDも、やりくりすればI2Cタイプでもかまわないのですが(Nucleo - Arduino間の通信と信号線を共用)、速度と手数を減らすためにSPIタイプのものを使いました。
配線図
I2Cマスター側 Nucleo(mbed)のプログラムは前回と同じです。
https://os.mbed.com/users/ryood/code/Nucleo_i2c_master_writer/
I2Cスレーブ側 Arduino Pro mini (3.3V/8MHz駆動)
I2C経由で、マスター側が生成したデータをスレーブ側のOLEDで表示することができました。
I2Cクロック=400kHzの場合
ch1:Nucleo(D2) ch2:SCL
ch1はNucleo(マスター)側でI2C通信の開始時、終了時でH/Lしています。
I2C通信に要した時間: 220u秒~230u秒程度。
I2Cクロック=100kHzの場合
ch1:Nucleo(D2) ch2:SCL
I2C通信に要した時間: 675u秒
I2Cクロックは、Nucleo(マスター)側で変更すれば、Arduino(スレーブ)側は400kHzの設定のままで大丈夫でした。
0 件のコメント:
コメントを投稿