JH7UBCブログ

アマチュア無線 電子工作 家庭菜園など趣味のブログです

Arduino UNO R4 WiFi SPI テスト

2024-03-03 13:39:10 | Arduino
 Arduino UNO R4 WiFiのSPIのテストをします。

 前の記事で分からなかったArduino UNO R4のSPIの記載の仕方をWeb上を検索しましたところGitHub1に「Arduino_UNO_R4_SPI_test.ino」という記事を見つけました。記事は、こちら。また、Arduinoリファレンス日本語版にSPIライブラリの説明がありました。記事は、こちら

 GitHubのスケッチを元にSPIのテストをしました。
 SPIプロトコルの設定は、次のようSPISettingオブジェクトで行います。
 パラメータは、クロック速度、bitOrder(MSBFIRST or LSBFIRST)、SPIMODE(0~3)です。
例 SPISettings spi_setting(1000000, MSBFIRST, SPI_MODE0);

 このオブジェクトをSPI.beginTransaction() に渡すことにより設定が有効になります。
例  SPI.beginTransaction(spi_setting); 

 GitHubのスケッチです。(dataは、0x55,0xAAをそれぞれ1回出力に変更しています。)クロックは、100kHz,bitOrderは、MSBFIRST,SPI_MODE0です。
-----------------------------------------------------
#include <SPI.h>

SPISettings spi_setting(1000000, MSBFIRST, SPI_MODE0);

void setup() {
Serial.begin(9600);
while (!Serial);

SPI.begin();
pinMode(10, OUTPUT); // <- this is required to make `digitalWrite(SS, LOW);` work on Arduino R4 Minima.
}

void loop() {
uint8_t data[] = { 0x55, 0xAA};

SPI.beginTransaction(spi_setting);

digitalWrite(SS, LOW);
SPI.transfer(data, sizeof(data));
digitalWrite(SS, HIGH);

SPI.endTransaction();
}
-----------------------------------------------------
 このスケッチをArduino UNO R4 に書き込んで、出力されたSPIのCLK(D13)とMOSI(D11)信号です。MOSIデータは、0x55=0b01010101,0xAA=0b10101010の順にMSBFIRSTで送信されます。
 SPI_MODE0で、CLK正パルスで、CLKの前縁(立ち上がり)でMOSIデータがラッチされます。



 SPI_MODE1の時です。CLK正パルスで、CLKの後縁(立下り)でMOSIデータがラッチされます。


 SPI_MODE2の時です。CLKは負パルスで、CLKの前縁(立下り)でMOSIデータがラッチされます。



 SPI_MODE3の時です。負クロックで、CLKの後縁(立ち上がり)でMOSIデータがラッチされます。



 MAX7219 8X7segLEDには、SPI_MODE0のタイミングが必要です。
 前の記事のスケッチでbitOrderやmodeを設定しなくても動作したのは、SPI設定のデフォルトがMSBFIRSTとMODE0になっていたためと思われます。

Arduino UNO R4 (WiFi) MAX7219 8X7segLEDテスト(SPIテスト)

2024-03-01 22:59:05 | Arduino
 Arduino UNO R4(WiFi)のSPIテストを兼ねて、MAX7219使用の8X7セグメントLEDの表示テストをします。

 SPIの接続は、Arduino UNO R3と同じです。
 回路図です。


 ライブラリマネージャでMAX7219ライブラリをインストールしてDEMOを試したのですが、エラーが出てうまくいきませんでした。

 それではと以前Arduino UNO R3用に自分で組んだスケッチを試しました。
 しかし、R3では問題なかったのですが、R4では、エラーが出てNGでした。
 エラーが出た行は、
 SPI.setBitOrder(MSBFIRST);です。
 SPIのメンバーにsetBitOrder()がないというエラーでした。これは困った。
 仕方がないので、この行を//でコメントアウトして試すと、エラーが出ず、コンパイルできました。Arduino UNO R4にスケッチを書き込んでみると、ちゃんと動きました。



 とりあえず、SPI通信でMAX7219 8X7segLEDの表示ができました。

 SPI通信では、MSBファーストとLSBファーストの2つのモードがありますが、どのように記載するのか、まだ分かっていないので、これから調べてみます。