element14 Community
element14 Community
    Register Log In
  • Site
  • Search
  • Log In Register
  • Community Hub
    Community Hub
    • What's New on element14
    • Feedback and Support
    • Benefits of Membership
    • Personal Blogs
    • Members Area
    • Achievement Levels
  • Learn
    Learn
    • Ask an Expert
    • eBooks
    • element14 presents
    • Learning Center
    • Tech Spotlight
    • STEM Academy
    • Webinars, Training and Events
    • Learning Groups
  • Technologies
    Technologies
    • 3D Printing
    • FPGA
    • Industrial Automation
    • Internet of Things
    • Power & Energy
    • Sensors
    • Technology Groups
  • Challenges & Projects
    Challenges & Projects
    • Design Challenges
    • element14 presents Projects
    • Project14
    • Arduino Projects
    • Raspberry Pi Projects
    • Project Groups
  • Products
    Products
    • Arduino
    • Avnet Boards Community
    • Dev Tools
    • Manufacturers
    • Multicomp Pro
    • Product Groups
    • Raspberry Pi
    • RoadTests & Reviews
  • Store
    Store
    • Visit Your Store
    • Choose another store...
      • Europe
      •  Austria (German)
      •  Belgium (Dutch, French)
      •  Bulgaria (Bulgarian)
      •  Czech Republic (Czech)
      •  Denmark (Danish)
      •  Estonia (Estonian)
      •  Finland (Finnish)
      •  France (French)
      •  Germany (German)
      •  Hungary (Hungarian)
      •  Ireland
      •  Israel
      •  Italy (Italian)
      •  Latvia (Latvian)
      •  
      •  Lithuania (Lithuanian)
      •  Netherlands (Dutch)
      •  Norway (Norwegian)
      •  Poland (Polish)
      •  Portugal (Portuguese)
      •  Romania (Romanian)
      •  Russia (Russian)
      •  Slovakia (Slovak)
      •  Slovenia (Slovenian)
      •  Spain (Spanish)
      •  Sweden (Swedish)
      •  Switzerland(German, French)
      •  Turkey (Turkish)
      •  United Kingdom
      • Asia Pacific
      •  Australia
      •  China
      •  Hong Kong
      •  India
      •  Korea (Korean)
      •  Malaysia
      •  New Zealand
      •  Philippines
      •  Singapore
      •  Taiwan
      •  Thailand (Thai)
      • Americas
      •  Brazil (Portuguese)
      •  Canada
      •  Mexico (Spanish)
      •  United States
      Can't find the country/region you're looking for? Visit our export site or find a local distributor.
  • Translate
  • Profile
  • Settings
Raspberry Pi
  • Products
  • More
Raspberry Pi
Raspberry Pi Forum Raspberry Pi Pico 2 MicroPython problem
  • Blog
  • Forum
  • Documents
  • Quiz
  • Events
  • Polls
  • Files
  • Members
  • Mentions
  • Sub-Groups
  • Tags
  • More
  • Cancel
  • New
Join Raspberry Pi to participate - click to join for free!
Featured Articles
Announcing Pi
Technical Specifications
Raspberry Pi FAQs
Win a Pi
Raspberry Pi Wishlist
Actions
  • Share
  • More
  • Cancel
Forum Thread Details
  • State Suggested Answer
  • Replies 9 replies
  • Answers 1 answer
  • Subscribers 657 subscribers
  • Views 2338 views
  • Users 0 members are here
  • coding
  • graphics
  • pico 2
  • micropython
  • .uf2
Related

Raspberry Pi Pico 2 MicroPython problem

tonygo
tonygo 11 months ago

I've got hold of the new Pico 2 and have tried a graphics program to make use of the extra memory. I'm using a Waveshare 2" Pico display with 320 by 240 pixels and the latest available MicroPython uf2 (v1.24.0-preview.201.g269a0e0e1 (2024-08-09) .uf2) and have hit a snag. The Waveshare display driver is included in the code and works perfectly.

To get this loop to terminate I have to include an 'unnecessary' print statement.

for i in range(r, 0, -1):
    print(i) # <==================== WHY IS THIS NEEDED? ==================
    LCD.ellipse(centre_x, centre_y,i+1, i+1,colour(i*5,i*3,i*4), 1)
    LCD.show()
    time.sleep(0.1)
    

If I leave it out the Pico 2 locks up at the end of the loop and if I click on the STOP icon in Thonny I get the message:


Unable to connect to COM3: could not open port 'COM3': PermissionError(13, 'Access is denied.', None, 5)

If you have serial connection to the device from another program, then disconnect it there first.

Process ended with exit code 1.


If I include the print statement it runs through to the following code as expected.

The full code can be found here:
https://pastebin.com/Fmk5iQ18

I wonder what is going on.

I know this is a 'preview' version of the UF2 but I was not expecting a problem with a counted for loop! Any ideas?

  • Sign in to reply
  • Cancel
  • tonygo
    0 tonygo 11 months ago

    Works OK with:

    for i in range(r, 1, -1):
    • Cancel
    • Vote Up +2 Vote Down
    • Sign in to reply
    • Verify Answer
    • Reject Answer
    • Cancel
  • shabaz
    0 shabaz 11 months ago

    It looks like this is the PR that implements MicroPython for Pico 2:

    https://github.com/micropython/micropython/pull/15619

    It may be worth leaving the detail there, so that the developer can check it out (otherwise it might not get resolved as quickly, until someone raises it as an issue).

    That PR is still really fresh (just three days old) so unfortunately the issues you encounter are probably not experienced by others yet.

    • Cancel
    • Vote Up +2 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • tonygo
    0 tonygo 11 months ago in reply to shabaz

    You can follow the problem discussion here:

    Raspberry Pi Pico 2 · micropython · Discussion #15621 (github.com)

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • JWx
    0 JWx 11 months ago

    maybe it is some timing issue if print can be used as workaround? I wonder if replacing print with sleep would be equally effective...

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • tonygo
    0 tonygo 11 months ago in reply to JWx

    # Colour Mixing Routine
    def colour(R,G,B): # Compact method!
    mix1 = ((R&0xF8)*256) + ((G&0xFC)*8) + ((B&0xF8)>>3)
    return (mix1 & 0xFF) *256 + int((mix1 & 0xFF00) /256) # low nibble first
    
    # ==== Main ====
    pwm = PWM(Pin(BL))
    pwm.freq(1000)
    pwm.duty_u16(32768)#max 65535
    
    LCD = LCD_1inch3()
    
    LCD.fill(LCD.WHITE)
    LCD.show()
    
    '''
    # Set up buttons
    key0 = Pin(15,Pin.IN,Pin.PULL_UP)
    key1 = Pin(17,Pin.IN,Pin.PULL_UP)
    key2 = Pin(2 ,Pin.IN,Pin.PULL_UP)
    key3 = Pin(3 ,Pin.IN,Pin.PULL_UP)
    '''
    centre_x =int(LCD.width/2)
    centre_y = int(LCD.height/2)
    R = int((LCD.width + LCD.height)/4)
    r = int((LCD.width + LCD.height)/8)
    LCD.fill(0)
    LCD.show()
    
    LCD.ellipse(centre_x, centre_y,R,r,colour(255,255,0),1)
    LCD.show()
    LCD.ellipse(centre_x, centre_y,r,r,colour(0,0,255))
    LCD.show()
    
    for i in range(r, -1, -1):
    
        LCD.ellipse(centre_x, centre_y,i+1, i+1,colour(i*5,i*3,i*4), 1)
        LCD.show()
        time.sleep(0.1)
    
    time.sleep(1)
    LCD.fill(0)
    LCD.show()
    
    gc.collect
    print()
    print(gc.mem_free())

    There is already a time.sleep(0.1) in the loop. It did not help.

    If I comment out the button/key setup lines it works properly.

    I also tried the same code, with button setup lines on a RP2040 Pico Lipo and it works correctly.

    I think it is the UF2 for the Pico 2 causing the problem

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • JWx
    0 JWx 11 months ago in reply to tonygo

    Hello! 

    if it seems to hang consistently at the end of the loop, have you tried running standalone

    LCD.ellipse(centre_x, centre_y, 2, 2,colour(2*5,2*3,2*4), 1)

    (the last value of problematic range(r, 0, -1))

    (but it will probably succeed if print in the loop remedies it).

    It is strange that it seems to be connected with certain value (when range(r, 1, -1) is ok) and timing/whatever at the same time (when print can be used as a workaround)...

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • tonygo
    0 tonygo 11 months ago in reply to JWx

    I do not think it is my loop. If I comment out the Button setup lines it works perfectly even with 

    for i in range(r, -1, -1):

    controlling the loop.

    I've run the full code, including the button setup, with a Pimoroni Pico Lipo (RP2040) and it works perfectly. You are supposed to be able to just substitute a Pico 2 for a Pico 1 and the same code should work.

    I think the new Pico 2 .UF2 is the problem.

    Once again the hardware is available ahead of the essential software as a proper release is not yet available. The current version is a preview (9th Aug 2024).

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • JWx
    0 JWx 11 months ago in reply to tonygo

    Hello! I was not suggesting it is something in the code, only wanted to identify the precise point/conditions when the hang happens Slight smile

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • tonygo
    0 tonygo 6 months ago in reply to $parentForumReply.Author.DisplayName

    Thank you, I will give it a try.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
element14 Community

element14 is the first online community specifically for engineers. Connect with your peers and get expert answers to your questions.

  • Members
  • Learn
  • Technologies
  • Challenges & Projects
  • Products
  • Store
  • About Us
  • Feedback & Support
  • FAQs
  • Terms of Use
  • Privacy Policy
  • Legal and Copyright Notices
  • Sitemap
  • Cookies

An Avnet Company © 2025 Premier Farnell Limited. All Rights Reserved.

Premier Farnell Ltd, registered in England and Wales (no 00876412), registered office: Farnell House, Forge Lane, Leeds LS12 2NE.

ICP 备案号 10220084.

Follow element14

  • X
  • Facebook
  • linkedin
  • YouTube