XIAO RP2040を使ったArduinoでのMSP2807の表示、PICOを使ったC言語でのQY20からのDMF50202N表示データ取得は、すべてブレッドボード上で作業してきました。しかし、信号線の接触不良などで、しばしば、作業が中断されたり、接触不良に気づかず、プログラム側の問題として、時間を費やすことが増えたので、試作ボードを作りました。
単なる、ソケット端子と結線だけです。
さて、本題。MSP2807の制御プログラムは、Arduino言語で作りました。言語自体は、Cなのですが、ライブラリを使っているので、その部分を書き直しです。PICOのCライブラリ(実際にはインクルード)に1つ1つ置き換えます。PICO用のSPI仕様を調べるのに、相当苦労しました。未だに、よくわかっていない部分もありますが、なんとか動きました。
初期化部分は、こんな感じです。関数名は、MSP2807の初期化になってますが、SPI自体の初期化もしています。
---
void init_MSP2807() {
spi_init(spi0, 40 * 1000 * 1000);
gpio_set_function(SPI0_RX, GPIO_FUNC_SPI);
gpio_set_function(SPI0_CSK, GPIO_FUNC_SPI);
gpio_set_function(SPI0_TX, GPIO_FUNC_SPI);
bi_decl(bi_2pins_with_func(SPI0_TX, SPI0_CSK, GPIO_FUNC_SPI));
spi_set_format(spi0, 8, SPI_CPOL_0, SPI_CPHA_0, SPI_MSB_FIRST);
gpio_init(TFT_DC);
gpio_set_dir(TFT_DC, GPIO_OUT);
gpio_init(TFT_RST);
gpio_set_dir(TFT_RST, GPIO_OUT);
sleep_ms(1000);
// --- HARDWARE Reset
gpio_put(TFT_RST, 0);
sleep_ms(100);
gpio_put(TFT_RST, 1);
sleep_ms(100);
gpio_put(TFT_DC, DC_CMD);
spi_data[0] = 0x01;
spi_write_blocking(spi0, spi_data, 1);
sleep_ms(150);
spi_data[0] = 0x13;
spi_write_blocking(spi0, spi_data, 1);
spi_data[0] = 0x36;
spi_write_blocking(spi0, spi_data, 1);
gpio_put(TFT_DC, DC_DATA);
spi_data[0] = 0x48;
spi_write_blocking(spi0, spi_data, 1);
gpio_put(TFT_DC, DC_CMD);
spi_data[0] = 0x3a;
spi_write_blocking(spi0, spi_data, 1);
gpio_put(TFT_DC, DC_DATA);
spi_data[0] = 0x55;
spi_write_blocking(spi0, spi_data, 1);
gpio_put(TFT_DC, DC_CMD);
spi_data[0] = 0x11;
spi_write_blocking(spi0, spi_data, 1);
sleep_ms(120);
spi_data[0] = 0x29;
spi_write_blocking(spi0, spi_data, 1);
}
---
実際の表示の際は、表示領域を指定して、データを書き込みます。その時、16ビットを使うのですが、16ビット送信でトラブりました。普通に、"spi_write16_blocking"関数を使うと、エンディアンが違うのか、表示領域がずれます。MSB指定が効果していないみたい。仕方なく、8ビット指定で設定します。これでなんとか動きました。しかし、SPI通信を40Mにしても、1フレーム80ms要します。なんと12フレーム/秒の遅さ。カクカクした動きになりそうですが、もともと、速度を必要とする表示内容ではないので、大丈夫かも。
LCD換装に着手して、1か月少しですが、かなり進みました。処理速度の面で、PICやH8/3694などが使えないことがわかり、半年くらいはかかる想定でした。RP2040のPIOを使えば可能と分かりましたが、一からの習得のため、半年は見込んでいました。
年末年始で、PICOのプログラミング本を読み込み、同時にWebを探し回って、なんとかここまで来ました。使った本は、これです。
この本の2章がほとんど。あとは、raspberry pi picoのホームページのドキュメントですね。Webで紹介されている内容は、とっかかりとして大事ですが、基本を押さえるには、Webでは難しいです。わからない部分を探すには、Webのがよい。というように、使い分けつつ、進めています。
設計レベルとしては、調査・試験段階である、
- QY20からのデータ取得可能(PICO:C言語)
- QY20とPCO/RP2040の電圧変換での駆動確認(試作ボード作成)
- MSP2807の表示処理可能(XIAO RP2040:C言語)
が完了したので、これらを組み合わせた作業に移ります。今後の作業は、
- XIAO RP2040でのQY20データ取得(試作ボード使用)
- 取得データをMSP2807へ、そのまま出力(データのチェック)
- 取得データのアスペクト変換
- 表示速度改善
ですね。