Open
Description
CircuitPython version and board name
Adafruit CircuitPython 9.2.7 on 2025-04-01; Raspberry Pi Pico W with rp2040
Code/REPL
import array
import time
import board
import digitalio
import displayio
import rp2pio
import busio
import i2cdisplaybus
import terminalio
import adafruit_displayio_ssd1306
import adafruit_pioasm
from adafruit_display_text.bitmap_label import Label
program = adafruit_pioasm.assemble("""
pull
mov osr ~ osr
set pins 1 [8]
set x 7
loop:
out pins 1 [8]
jmp x-- loop
set pins 0 [7]
""")
displayio.release_displays()
i2c = busio.I2C(board.GP5, board.GP4)
display_bus = i2cdisplaybus.I2CDisplayBus(i2c, device_address=0x3c)
display = adafruit_displayio_ssd1306.SSD1306(display_bus, width=128, height=64)
probe = digitalio.DigitalInOut(board.GP0)
probe.switch_to_output(value=True)
output = rp2pio.StateMachine(
program,
frequency=25_000,
first_out_pin=board.GP16,
first_set_pin=board.GP16,
)
groups = []
for text in ["Hello", "World"]:
group = displayio.Group()
label = Label(terminalio.FONT, text=text, color=0xFFFFFF, x=10, y=10)
group.append(label)
groups.append(group)
def send(data):
start_time = time.monotonic()
probe.value = True
output.write(data)
probe.value = False
print((time.monotonic() - start_time) * 1000)
bytes_to_send = bytes([0] * 15)
i = 0
while True:
display.root_group = groups[i]
send(bytes_to_send)
time.sleep(5)
i = 1 - i
Behavior
Expecting write to take 60ms with these values, which it does if we remove the display update, but it intermittently reports over 100ms. Scope trace shows the transmission is finished before the delay. Setting frequency to higher numbers gives more extreme results but is harder to see the details.
With display update, frequency=200_000:
Reverting c5c7d11 gives a similar amount of delay, but in the middle instead:
Description
No response
Additional information
No response