Quantcast
Channel: Raspberry Pi Forums
Viewing all articles
Browse latest Browse all 4829

MicroPython • RP2350 compatibility with RP2040 micropython code

$
0
0
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.

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



Viewing all articles
Browse latest Browse all 4829

Trending Articles