I dropped a Pi Pico 2 into a project I've had sitting around now. It has a bunch of Ws2812 LEDs and a touchscreen.
I selected v1.24.0-preview.201.g269a0e0e1 (2024-08-09) .uf2 as this was what came up after clicking on the pico 2
However the code that worked on the RP2040 fails in a number of different ways on the RP2350; I had expected this device to be more or less a 'drop in' replacement.
For instance this WS2812 code which works perfectly on the RP2040 causes the LEDs to flash and flicker wildly with the Pico 2.
I selected v1.24.0-preview.201.g269a0e0e1 (2024-08-09) .uf2 as this was what came up after clicking on the pico 2
However the code that worked on the RP2040 fails in a number of different ways on the RP2350; I had expected this device to be more or less a 'drop in' replacement.
For instance this WS2812 code which works perfectly on the RP2040 causes the LEDs to flash and flicker wildly with the Pico 2.
Code:
# Example using PIO to drive a set of WS2812 LEDs.import array, timefrom machine import Pinimport rp2# Configure the number of WS2812 LEDs.NUM_LEDS = 137PIN_NUM = 2brightness = .1@rp2.asm_pio(sideset_init=rp2.PIO.OUT_LOW, out_shiftdir=rp2.PIO.SHIFT_LEFT, autopull=True, pull_thresh=24)def ws2812(): T1 = 2 T2 = 5 T3 = 3 wrap_target() label("bitloop") out(x, 1) .side(0) [T3 - 1] jmp(not_x, "do_zero") .side(1) [T1 - 1] jmp("bitloop") .side(1) [T2 - 1] label("do_zero") nop() .side(0) [T2 - 1] wrap()# Create the StateMachine with the ws2812 program, outputting on pinsm = rp2.StateMachine(0, ws2812, freq=8_000_000, sideset_base=Pin(PIN_NUM))# Start the StateMachine, it will wait for data on its FIFO.sm.active(1)# Display a pattern on the LEDs via an array of LED RGB values.ar = array.array("I", [0 for _ in range(NUM_LEDS)])##########################################################################def pixels_show(): dimmer_ar = array.array("I", [0 for _ in range(NUM_LEDS)]) for i,c in enumerate(ar): r = int(((c >> 8) & 0xFF) * brightness) g = int(((c >> 16) & 0xFF) * brightness) b = int((c & 0xFF) * brightness) dimmer_ar[i] = (g<<16) + (r<<8) + b sm.put(dimmer_ar, 8) time.sleep_ms(10)def pixels_set(i, color): ar[i] = (color[1]<<16) + (color[0]<<8) + color[2]def pixels_fill(color): for i in range(len(ar)): pixels_set(i, color)def color_chase(color, wait): for i in range(NUM_LEDS): pixels_set(i, color) time.sleep(wait) pixels_show() time.sleep(0.2) def wheel(pos): # Input a value 0 to 255 to get a color value. # The colours are a transition r - g - b - back to r. if pos < 0 or pos > 255: return (0, 0, 0) if pos < 85: return (255 - pos * 3, pos * 3, 0) if pos < 170: pos -= 85 return (0, 255 - pos * 3, pos * 3) pos -= 170 return (pos * 3, 0, 255 - pos * 3) def rainbow_cycle(wait): for j in range(255): for i in range(NUM_LEDS): rc_index = (i * 256 // NUM_LEDS) + j pixels_set(i, wheel(rc_index & 255)) pixels_show() time.sleep(wait)BLACK = (0, 0, 0)RED = (255, 0, 0)YELLOW = (255, 150, 0)GREEN = (0, 255, 0)CYAN = (0, 255, 255)BLUE = (0, 0, 255)PURPLE = (180, 0, 255)WHITE = (255, 255, 255)COLORS = (BLACK, RED, YELLOW, GREEN, CYAN, BLUE, PURPLE, WHITE)print("fills")pixels_set(0,GREEN)pixels_set(1,RED)pixels_set(2,BLUE)pixels_set(3,GREEN)pixels_set(8,GREEN)pixels_set(9,RED)pixels_set(10,BLACK)pixels_set(11,GREEN)pixels_set(16,GREEN)pixels_set(17,RED)pixels_set(18,BLUE)pixels_set(19,GREEN)pixels_fill(PURPLE)pixels_show()rainbow_cycle(0)
Statistics: Posted by ajay_m — Sun Aug 18, 2024 4:30 pm