Nano 33 BLE + Neopixel strip = failure (SOLVED)

Hello,
I have my Nano 33 BLE setup according to following scheme and loaded with Adafruit RGBWstrandtest example sketch.

... and it doesn't work.. no compilation error what so ever.

When I replace Nano 33 with normal Nano, the same sketch works as expected.

What can be the issue here?

Thank you.

Nano_33_BLE+NeoPixels.png

Did you check the signal at the Neopixel? From what I read the timing seems to be critical. Maybe the clock is different between the two Nanos.

I first thought it was the voltage level but you added a level shifter. :slight_smile:

Hello,

I do not have equipment for signal checking :slightly_frowning_face: but Neopixel library was ported to Nano 33's Nordic nRF52 chip, so it should work I guess...

I compiled the RGBWstrandtest and run it on my Nano 33 BLE. I change the LED_PIN to 2 according your schematic and I did not see any signal out of that pin.

I checked the library files and it is a total mess. All the different supported platforms are in one file with many #ifdef. It is hard to see what is going on without knowing the file inside out.

There are defined(ARDUINO_NRF52_ADAFRUIT), defined(NRF52) and defined(NRF52_SERIES) statements and the Readme says Nordic nRF52 (Adafruit Feather nRF52), nRF51 (micro:bit) are supported. I am not sure if the library is generic enough so it can run on any nRF52 device. Maybe there is some more modification needed to support the Nano 33 BLE.

Thank you for your time.

In AdafruitNeoPixel.cpp file is few lines like this:

#if defined(ARDUINO_ARCH_NRF52840)

and here is link to their github where they added support for Nano 33 BLE and BLE Sense:

so Nano 33 BLE should be fine

Maybe you have an old library?

I downloaded the library from github, same result. I tried the StrandtestArduinoBLE and the Bluetooth part worked.

Then I tried the strandtest on the Arduino Nano 33 IoT (based on the SAMD and not nRF). I got a signal out of it immediately, but when I connected a Neopixelring the leds where not lit correctly. Looking at the oscilloscope you can clearly see the signal has a strong jitter from 700 to 800kHz. Which explains the behavior.

I suspect, getting the Neopixel signal jitter free is not easy with these fast processors. With BLE stacks running at the same time creating interrupts, this might be almost impossible. The library uses lots of inline assembly.

I do not believe the Nano 33 BLE was really tested. The example uses PIN 15, which can't be true.

I see three options

  • wait and hope the support for the Neopixels will improve on the Nano 33
  • use Dotstar LEDs which have a two-wire interface, making them easier to control
  • use a cheap AVR 8 bit Arduino to drive the Neopixels and use the Nano 33 for the high level stuff like smart phone connection

I am sorry, I do not have better news.

I had prepared regular Nano + HM-10 bluetooth module for this project and then I found this board... I was so happy that I can save space and integrated IMU would be handy as well... Shame ::slight_smile:

I will look at Dotstar strips... I hope I will find RGBW one.

Thank you.

(deleted)

Doesn't work for me and I already had Arduino Mbed Core updated to 1.1.3.

Thanks anyway.

There was some library update and it's working now!

1 Like

Dear all, I had a similar problem but with BigMike81's schematics I managed to have my Nano BLE 33 sense working nicely with my oled strip. I currently have one problem which I do not know how to solve. When I unplug the arduino, the OLED strip (which is powered with a 5V lipo battery) turns on (random pattern, every time different) and I have to unplug the OLED strip and plug it back from the 5 volt battery to turn it off. How can I solve this? I though of a MOSFET but I was wondering if there is another solution without using any additional component.

Thank you very much for your help in advance,

Lorenzo

You could try a pull-up/down resistor on the data line. Check which is the standby state of your LED strips data signal. Choose a large enough resistor to avoid overpowering the I/O pin. I would start with 10k. With a smaller resistor the immunity will get better but the data line will stop working at some point when the I/O pin can not overwrite the pull.

You can also try to manage the power failure. First make sure Brown-Out is enabled.

The nRF52840 datasheet states there is a Power-fail comparator that could be used to prepare the system. You will get an interrupt where you could shut down the system. This would need some experimenting. You could try to disable everything except the data pin and drive that LOW/HIGH, then put the system to sleep or System OFF. This way the power will discharge slower but in a controlled way. Right now you do not know what you sketch is doing when you pull the plug.

Dear Klaus_K,

thank you for your reply. I tried to put the resistor, but still the same problem.
Regarding your second option, I think I cannot get it... can you give me (if you have time) some more details?

ArdLorenzo:
Regarding your second option, I think I cannot get it... can you give me (if you have time) some more details?

The idea was to set the Arduino into a known state when the power goes down. The brown-out circuit will keep the Arduino in reset when the voltage is below the voltage required for safe operation.
The power-fail voltage is above the brown-out voltage but below normal operating voltage. When the voltage drops below the power fail voltage you have some time to execute a few instructions that can change the power usage of your circuit and therefore influence the noise the circuit makes.

But that was more for the case you could not add a resistor, as an attempt to keep the pin to the LED strip from creating noise. Now, that the resistor does not work the noise seems to come from somewhere else.

Do you have an oscilloscope?

Dear Klaus_K,

thank you for your answer. I got it, but no, I do not have an oscilloscope.
However, I tried (for my curiosity) to run the Neopixel using the 3.3 volt line and it work and I am considering of using it like this. Do you think this can damage it? It seems to work nicely...

ArdLorenzo:
However, I tried (for my curiosity) to run the Neopixel using the 3.3 volt line and it work and I am considering of using it like this. Do you think this can damage it? It seems to work nicely...

The general advice is, you should not use devices outside the manufacturers datasheet ratings.

On the other side manufacturer do not cover all use cases in their datasheet and allow some customers to use the device outside the datasheet ratings under very specific conditions for instance higher temperatures where some parameters are not as accurate and the devices have a shorter lifetime.

So there is some room for experimentation. Under-voltage tends make devices work less reliable. If it works and does not pose a risk other than your personal fun LED not lighting, I do not think you need to worry. For professional uses this is a question for datasheet and the manufacturer.

Ok, Thank you very much!
I will monitor it and let you know if it does weird things :wink:

Ciao,

Lorenzo