Hi Bert,

On 10/15/23, Bert Voldenuit <bertvolden...@gmail.com> wrote:
> Hello,
>
> I am trying use ws2812 driver with a samd21 mcu.
>
> I took example from the /boards/arm/rp2040.
>
> added to board.h:
> #define BOARD_GPIO_WS2812_PIN    5 /* verifier pin #5 = PA15 */
>
> added to sam_bringup.c:
>
> #ifdef CONFIG_WS2812
> /* Configure and initialize the WS2812 LEDs. */
> #ifdef CONFIG_WS2812_NON_SPI_DRIVER
> #pragma message ("Configure and initialize the WS2812 LEDs with non spi
> driver")
>
> if (sam_ws2812_setup("/dev/leds0",
> 5,
> 1,
> CONFIG_WS2812_LED_COUNT,
> HAS_WHITE) == NULL)
> {
> syslog(LOG_ERR, "Failed to initialize WS2812: %d\n", errno);
> return -errno;
> }
> else
> ret = OK;
>
> #else
> #pragma message ("Configure and initialize the WS2812 LEDs with spi
> driver")
>
> ret = board_ws2812_initialize(0, WS2812_SPI, CONFIG_WS2812_LED_COUNT);
> if (ret < 0)
> {
> syslog(LOG_ERR, "ERROR: board_ws2812_initialize() failed: %d\n", ret);
> }
>
> #endif
>
> #endif
>
>
>
> In arch/arm/src/samd2l2 I copied rp2040_ws2812.c and rp2040_ws2812.h and I
> replaced 'rp2040_' with 'sam_'.
>
> The problem I have is that I can not convert #include rp2040_pio.h. It
> looks like "rp2040_pio.h",  "rp2040_pio.c",  "rp2040_pio_instructions.h"
> are specifically designed for rp2040.
>
> Am I on the good path?
> Do you have any advice to use ws2812 with samd? I would like to use ws2812
> driver without spi driver as all the sercom (com ports) are used. I have 12
> leds on the strip and I only need to refresh once per 0.1s.
>

I think before you trying to do the board you need to understand what
driver to use:

1) The original drivers/leds/ws2812.c driver was created by Brennan to
work with SPI and tested initially on STM32. (So
CONFIG_WS2812_NON_SPI_DRIVER shouldn't be defined)

2) Then later a contributor called "curuvar" implemented a version
using rp2040 PIO engine to control the WS2812. This driver is only for
this chip! (In this case CONFIG_WS2812_NON_SPI_DRIVER show be y)

3) Later on, another NuttX contributor (Victor Benso) created a driver
for ESP32 that used the RMT peripheral to control the WS2812. (In this
case CONFIG_WS2812_NON_SPI_DRIVER show be y)

Since SAMD21 doesn't have a separated driver to control WS2812 you
will need use option 1. Be in mind that using SPI is not a piece of
cake. You need to fine tune the SPI to generate the right wave form.

If you don't have an oscilloscope (or doesn't have experience with
it), I suggest to use the APA102 LED Strip. It is a little bit more
expensive than WS2812, but it uses default SPI standard. So APA102
works fine with all microcontrollers.

BR,

Alan

Reply via email to