Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Pi Pico Python speed

63 views
Skip to first unread message

john larkin

unread,
Feb 7, 2024, 3:21:20 PM2/7/24
to
Has anyone measured how fast a pico can do things running Python?
Like, to start, wiggling a port pin as fast as possible?

I think the micro Python is an interpreter.

Peter Heitzer

unread,
Feb 8, 2024, 3:10:23 AM2/8/24
to
Yes, Python is interpreted.
I found https://wellys.com/posts/board-language_speed/
I think the performance of Micropython and Circuitpython should be
almost equal.
The nice thing is that you can test your code interactively in the
Python interpreter.


--
Dipl.-Inform(FH) Peter Heitzer, peter....@rz.uni-regensburg.de

john larkin

unread,
Feb 8, 2024, 7:20:10 PM2/8/24
to
On 8 Feb 2024 08:10:20 GMT, "Peter Heitzer"
<peter....@rz.uni-regensburg.de> wrote:

>john larkin <j...@650pot.com> wrote:
>>Has anyone measured how fast a pico can do things running Python?
>>Like, to start, wiggling a port pin as fast as possible?
>
>>I think the micro Python is an interpreter.
>Yes, Python is interpreted.
>I found https://wellys.com/posts/board-language_speed/
>I think the performance of Micropython and Circuitpython should be
>almost equal.
>The nice thing is that you can test your code interactively in the
>Python interpreter.

Cool. We just did a MicroPython loop to raise and lower a port pin 4
times, brute force inline code, as fast as we could. One up/down cycle
takes about 14 microseconds on a Pico, with some jitter.

We'll repeat it in c. I'm guessing that will be 20x faster.

Bryan

unread,
Feb 9, 2024, 12:37:57 AM2/9/24
to
A little off topic, but do you have any suggestions as to good "I don't
know squat and I'm old and it doesn't make sense" learn MicroPython
resources?

Peter Heitzer

unread,
Feb 9, 2024, 3:17:30 AM2/9/24
to
I did a quick test yesterday evening using this few lines of code:

from machine import Pin
led=Pin(0,Pin.OUT)
switch=Pin(1,Pin.IN,Pin.PULL_UP)
while switch.value(): led.toggle()

GPIO0 was an output driving a LED. On GPIO1 I connected a momentary switch
to ground. On the output pin I got about 41 kHz until the switch was
pressed. With an endless loop:
while True: led.toggle()
I got 83 kHz.
I used Micropython v. 1.20; the Pico run at 125 MHz.
I also noticed some jitter. Normally one would not create a rectangle signal
this way but use a PWM channel for that task.

Andy Burns

unread,
Feb 9, 2024, 6:59:01 AM2/9/24
to
Peter Heitzer wrote:

> john larkin wrote:
>
>> Cool. We just did a MicroPython loop to raise and lower a port pin 4
>> times, brute force inline code, as fast as we could. One up/down cycle
>> takes about 14 microseconds on a Pico, with some jitter.
>
>> We'll repeat it in c. I'm guessing that will be 20x faster.
>
> I did a quick test yesterday evening using this few lines of code:
> I got 83 kHz.

I think if you want the fastest cycle time, you'd use the RP2040's PIO
state machine, and probably get 62MHz without overclocking, but then
that's not really testing MicroPython ...


Peter Heitzer

unread,
Feb 9, 2024, 7:09:09 AM2/9/24
to
Although the PIO code could be written in MicroPython with the
decorator @rp2.asm_pio().

Andy Burns

unread,
Feb 9, 2024, 7:36:32 AM2/9/24
to
Peter Heitzer wrote:

> the PIO code could be written in MicroPython with the decorator
> @rp2.asm_pio().

I should get a Pico to play with ...


The Natural Philosopher

unread,
Feb 9, 2024, 8:53:16 AM2/9/24
to
The worst part is getting a toolchain working: and understanding the
APIs. If you don't want to use Python.

Coding the little fuckers is pretty simple after that.


--
"What do you think about Gay Marriage?"
"I don't."
"Don't what?"
"Think about Gay Marriage."


0 new messages