M5Stack + NRF24 = LCD slow down
-
Hi!
I'm using a M5Stack Gray, with a NRF24L01 radio transmitter.#include <M5Stack.h> #include <RF24.h> //------------------------------------- Radio RF24 #define rf24CePin 16 #define rf24CsnPin 17 RF24 RF24(rf24CePin, rf24CsnPin);As soon as I invoke a RF24 function like RF24.available() or RF24.printDetails(), the LCD display of the M5Stack slows down dramatically.
At the start, the SPI BUS of the M5Stak is at 40mHz (In_eSPI_Setup.h #define SPI_FREQUENCY 40000000 // Maximum to use SPIFFS), it seems to me that it falls below 1mHz.
Why?Thanks for your help
cordially
jpbbricole -
Hi
I found the reason for the slowdown of the LCD display, it's in RF24-master library, file RF24.cpp.#elif F_CPU < 320000000 _SPI.setClockDivider(SPI_CLOCK_DIV32);As the speed of the M5Stack is 24000000, that divided the frequency of the SPI by 32.
I added#elif F_CPU == 240000000 // For M5Stack Grey _SPI.setClockDivider(SPI_CLOCK_DIV2); // For M5Stack Greyand the problem is solved.
Thanks for reading me
cordially
jpbbricole -
Glad you found the issue. I’m interested in seeing your full code once you have it done. I’m also interested in using the NRF24L01 in a project idea that I have been thinking of.
-
Hi world101
To make this modification, I determined the speed of the M5Stack by making a program with:
Serial.println (F_CPU)which gave 24000000
Then, I modified the file ..\libraries\RF24-master\RF24.cpp by adding these lines (who have // For M5Stack Gray as a remark)
#if !defined(SOFTSPI) _SPI.setBitOrder(MSBFIRST); _SPI.setDataMode(SPI_MODE0); #if !defined(F_CPU) || F_CPU < 20000000 _SPI.setClockDivider(SPI_CLOCK_DIV2); #elif F_CPU < 40000000 _SPI.setClockDivider(SPI_CLOCK_DIV4); #elif F_CPU < 80000000 _SPI.setClockDivider(SPI_CLOCK_DIV8); #elif F_CPU < 160000000 _SPI.setClockDivider(SPI_CLOCK_DIV16); #elif F_CPU == 240000000 // For M5Stack Grey _SPI.setClockDivider(SPI_CLOCK_DIV2); // For M5Stack Grey** #elif F_CPU < 320000000 _SPI.setClockDivider(SPI_CLOCK_DIV32); #elif F_CPU < 640000000 _SPI.setClockDivider(SPI_CLOCK_DIV64); #elif F_CPU < 1280000000 _SPI.setClockDivider(SPI_CLOCK_DIV128); #else #error "Unsupported CPU frequency. Please set correct SPI divider." #endif #endifRegarding the program where I use the RF24, it is very large, I can, if you want, give you an example of use, with several pipes.
cordially
jpbbricole
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login