Notice. New forum software under development. It's going to miss a few functions and look a bit ugly for a while, but I'm working on it full time now as the old forum was too unstable. Couple days, all good. If you notice any issues, please contact me.
|
Forum Index : Microcontroller and PC projects : Playing with the WS2816 in the Waveshare RP2040-Zero
Author | Message | ||||
Quazee137 Guru Joined: 07/08/2016 Location: United StatesPosts: 573 |
So how does one play with just one WS2816 not a string of them? Quazee137 |
||||
Grogster Admin Group Joined: 31/12/2012 Location: New ZealandPosts: 9308 |
I assume you mean the WS2812, WS2812B or the SK6812. AFAIK, the WS2816 is not supported unless it is backwards compatible. I have the 2812B LED on my stock of WS Zero modules. To get it to light up, I used page 41 of the PicoMite manual, and the example code there to get things working. On the SW Zero module, the 2812 is on GP16, so: DIM b%(4)=(RGB(red), Rgb(green), RGB(blue), RGB(Yellow), rgb(cyan)) SETPIN GP16, DOUT BITBANG WS2812 O, GP16, 5, b%() ...is the equivalent if you have FIVE 2812 LED's daisy chained. Modify the code: DIM b%(4)=(RGB(red), RGB(green), RGB(blue), RGB(Yellow), RGB(cyan)) SETPIN GP16, DOUT FOR X=0 to 5 'Cycle through the five colours BITBANG WS2812 O, GP16, 1, b%(X) 'Show a colour PAUSE 3000 'Appreciation time... NEXT X 'Next colour BITBANG WS2812 O, GP16, 1, RGB(Black) The last command just turns the LED off, otherwise it will glow forever in the last colour it was commanded to emit. Edited 2023-04-30 16:16 by Grogster Smoke makes things work. When the smoke gets out, it stops! |
||||
Mixtel90 Guru Joined: 05/10/2019 Location: United KingdomPosts: 6804 |
WS2816? I don't think you can from MMBasic. I suspect the timing will be different, although you can get round the extra B pin. https://datasheet.lcsc.com/szlcsc/2012110135_Worldsemi-WS2816B-2121_C965560.pdf https://datasheet.lcsc.com/szlcsc/2012110135_Worldsemi-WS2816C-2121_C965561.pdf . Mick Zilog Inside! nascom.info for Nascom & Gemini Preliminary MMBasic docs & my PCB designs |
||||
Quazee137 Guru Joined: 07/08/2016 Location: United StatesPosts: 573 |
Thanks Grogster that works. I did on mod to your code Dim b%(5)=(RGB(red), RGB(green), RGB(blue), RGB(Yellow), RGB(cyan),RGB(Black)) I didn't know there was a bitbang for it. I had looked at python code but it used a lib as did arduino. After looking at low level driver code it's so complex to light just 3 leds. Quazee137 |
||||
barewires Newbie Joined: 13/04/2015 Location: United KingdomPosts: 30 |
# from chatgpt 24022023 Waveshare RP2040-Zero works 1st time RS # too bright, added black and a pause to stop with LED off import machine import neopixel import time # Define the number of WS2812 LEDs in the chain and the pin to which they're connected num_leds = 1 pin = machine.Pin(16) # Initialize the neopixel object np = neopixel.NeoPixel(pin, num_leds) # Define the RGB colors red = (255, 0, 0) green = (0, 255, 0) blue = (0, 0, 255) black = (0, 0, 0) # Loop through the colors and blink the LED once each second while True: np[0] = red np.write() time.sleep(.105) np[0] = green np.write() time.sleep(.105) np[0] = blue np.write() time.sleep(.105) np[0] = black np.write() time.sleep(5) |
||||
barewires Newbie Joined: 13/04/2015 Location: United KingdomPosts: 30 |
# MicroPython v1.19.1 on 2022-06-18; Raspberry Pi Pico with RP2040 # zero_RGB_random_colours.py from chatgpt 24022023 RS import machine import neopixel import urandom import utime # set up neopixel LED NUM_LEDS = 1 np = neopixel.NeoPixel(machine.Pin(16), NUM_LEDS, bpp=3) #This configures a NeoPixel strip on GPI16 with 8 pixels. You can adjust the “16” (pin number) #and the “1” (number of pixel) to suit your set up. #To set the colour of pixels use: #np[0] = (255, 0, 0) # set to red, full brightness #np[1] = (0, 128, 0) # set to green, half brightness #np[2] = (0, 0, 64) # set to blue, quarter brightness print("Blank LED Stop now!") colour = (0,0,0) np[0] = colour # set LED colour np.write() # update LED utime.sleep(2) numbits = 8 print("numbits =", numbits) # main loop while True: # generate random RGB colour #numbits = urandom.getrandbits(4) colour1 = urandom.getrandbits(numbits) colour2 = urandom.getrandbits(numbits) colour3 = urandom.getrandbits(numbits) print(colour1, colour2, colour3) colour = (colour1, colour2, colour3) np[0] = colour # set LED colour np.write() # update LED # wait utime.sleep(.125) Edited 2023-04-30 19:44 by barewires |
||||
Quazee137 Guru Joined: 07/08/2016 Location: United StatesPosts: 573 |
I was originally looking at how to do it without import/libs something more bare metal bit this shift that ect... Quazee137 |
||||
Mixtel90 Guru Joined: 05/10/2019 Location: United KingdomPosts: 6804 |
As you can't "import" stuff into MMBasic that sounds like a better approach. :) I had to look up WS2816 - I didn't know such a thing existed. The weather station looked interesting too, but I figured you didn't want a string of those. :) Mick Zilog Inside! nascom.info for Nascom & Gemini Preliminary MMBasic docs & my PCB designs |
||||
Grogster Admin Group Joined: 31/12/2012 Location: New ZealandPosts: 9308 |
I'm surprised to some extent, that the 2812 bitbang in MMBASIC could drive the 2816, as that is not officially supported. I guess perhaps Mick was just lucky. The 2816 could also be backwards compatible with the 2812 commands, so..... Glad you got it working, Mick! It's very easy to drive them via the MMBASIC bitbang command. Smoke makes things work. When the smoke gets out, it stops! |
||||
IanRogers Senior Member Joined: 09/12/2022 Location: United KingdomPosts: 151 |
I have been looking at this as well the PIO code to write to these is on a youtube tutorial. I also found the Quad encoder.. Using code here on this forum, from Volholt, that you could use as a template.. Then it's kinda a hardware driver! Edited 2023-05-03 19:36 by IanRogers I'd give my left arm to be ambidextrous |
||||
Print this page |