| Menu | JAQForum Ver 19.10.27 |
Forum Index : Microcontroller and PC projects : PicoMite Firmware Release Version 6.02.00
I said, after retirement, I don't know how I ever had time to work. |
||||||
In the Black Forest, we say in dialect, "If you retire, you automatically become a member of the Dädschmer e.V. association!" - "Dädschmer" is dialect and can best be translated as "wouldyouplease". ![]() |
||||||
The sprite(b,...) command did not handle mirrored sprites. It is corrected here together with the demo. Bye. spriteb_for_6.0.2.zip |
||||||
Just stumbled over a problem with framebuffers. Don't know if this is a restriction because of the display used. If I enter the following commands > option list PicoMite MMBasic RP2350B V6.02.00 OPTION SYSTEM SPI GP2,GP3,GP4 OPTION FLASH SIZE 16777216 OPTION COLOURCODE ON OPTION PICO OFF OPTION CPUSPEED (KHz) 200000 OPTION DISPLAY 40, 145 OPTION LCDPANEL ST7789_320, RLANDSCAPE,GP6,GP5,GP7,GP8 OPTION PLATFORM 2450B-test > framebuffer create > framebuffer layer > framebuffer merge the pico enters a locked state, only reset or power-cycle resumes operation. I've used the same command sequence on a Webmite 2040 with the display configured as OPTION LCDPANEL ILI9341, RLANDSCAPE,GP5,GP6,GP7,GP8,INVERT and that works ok. Note: the display ST7789_320 on the 2350B is physicall not a full 320x240 but 320x170. All graphics commands (line, arc) work though, except the layerbuffer merge. Gerald |
||||||
Just checked Petscii robots on a st7789_320 (waveshare pico-restouch-lcd-2.8) on a rp2350A and it works perfectly. It uses framebufffer merge to work so I can't see why it wouldn't work on your display. |
||||||
could it be that it does hang in my setup because the ST7789 display I use is only connected to the MOSI (SPI0 TX) from the pico, meaning that no display data can be read back? |
||||||
I have a PicoCalc with an RPi Pico 2W. RP2350 Every release after V6.00.02RC23. causes the system to boot, show the spash screen with the version number and a > prompt, then after about 5-10 seconds the screen just goes black. V6.00.02RC23. is the only release that seems to work correctly. I've tried every beta, every RC and every release. I've replaced my RP2350 with a brand new one ordered directly from PiShop twice. I've tried the pico_2 and the pico_2w versions for each. The behavior is the same. What can I submit to help identify why it's completely failing on my board? I ran the softest uf2 and it said the SD card was OK. |
||||||
I assume you are using the modified PicoCalc firmware? If so, it is difficult to help. Load RC23. Does LIST OPTIONS show you the configuration settings? If so, copy these down. Load the standard 6.02.00 WEBMITERP2350 firmware. You can access the firmware though a computer connected to the USB port on the Pico. You will have a blank screen but you can then apply the options you have noted EXCEPT the keyboard. Start with SYSTEM SPI. Try both the ILI9488SP and ST7796SP LCD drivers. Nobody is sure what LCD the PicoCalc is using. It may be neither of those but they are all very similar. The ILI9488SP driver runs the slowest and is probably the most general. Assuming that all works then you will have to follow up on the PicoCalc forum as there is nothing I can do - I don't have one. |
||||||
> option list PicoMite MMBasic RP2350B V6.02.00 OPTION SYSTEM SPI GP2,GP3,GP4 OPTION FLASH SIZE 16777216 OPTION COLOURCODE ON OPTION PICO OFF OPTION CPUSPEED (KHz) 200000 OPTION DISPLAY 40, 145 OPTION LCDPANEL ST7789_320, RLANDSCAPE,GP6,GP5,GP7,GP8 OPTION PLATFORM 2450B-test > framebuffer create > framebuffer layer > framebuffer merge the pico enters a locked state, only reset or power-cycle resumes operation. I've used the same command sequence on a Webmite 2040 with the display configured as OPTION LCDPANEL ILI9341, RLANDSCAPE,GP5,GP6,GP7,GP8,INVERT and that works ok. Note: the display ST7789_320 on the 2350B is physicall not a full 320x240 but 320x170. All graphics commands (line, arc) work though, except the layerbuffer merge. Gerald Here's my setup and it seems to work fine: PicoMite MMBasic RP2350B V6.02.00 Copyright 2011-2025 Geoff Graham Copyright 2016-2025 Peter Mather BETA Revision C Total of 6 Mbytes PSRAM available >framebuffer create >framebuffer layer >framebuffer merge >? "It seems OK to me." It seems OK to me. > Here are my options: PicoMite MMBasic RP2350B V6.02.00 OPTION SERIAL CONSOLE COM1,GP0,GP1,BOTH OPTION SYSTEM SPI GP10,GP11,GP12 OPTION SYSTEM I2C GP6,GP7, SLOW OPTION FLASH SIZE 16777216 OPTION LIBRARY_FLASH_SIZE 52000 OPTION COLOURCODE ON OPTION CONTINUATION LINES ON OPTION CASE UPPER OPTION DEFAULT COLOURS GREEN, BLACK OPTION KEYBOARD I2C OPTION PICO OFF OPTION CPUSPEED (KHz) 396000 OPTION LCDPANEL CONSOLE ,, FF00 OPTION DISPLAY 26, 40 OPTION LCDPANEL ST7796SP, PORTRAIT,GP14,GP15,GP13,,INVERT OPTION BACKLIGHT LCD 32 OPTION SDCARD GP17, GP18, GP19, GP16 OPTION AUDIO GP26,GP27', ON PWM CHANNEL 5 OPTION RTC AUTO ENABLE OPTION PSRAM PIN GP47 |
||||||
I'm having trouble measuring the DS18B20 sensor with the latest firmware version. The first measurement is measured at 0.25 resolution, as per the settings. If I connect multiple sensors (three in total) and start logging, the first sensor produces an error of 1000, and the second is measured at 0.25 resolution, and the third at 0.5 resolution. If I swap sensors one and two, the first sensor remains at 1000. If I set: TEMPR START GP2, 3, 800 TEMPR START GP3, 3, 800 TEMPR START GP4, 3, 800 Then the first measurement is again 1000, the second at resolution 3, and the third at resolution 1 in the first round. The second round is the first measurement at 1000, the second at resolution 1, and the third at resolution 0. If I swap sensors one and two, the error doesn't migrate. I did the same with three other sensors on the GP6, GP7, and GP8. The GP7 gives an error reading, but the resolution is the same as described above. Do I happen to have the wrong sensors (fake), or am I possibly doing something wrong? The first series is wired, and the second series is without. Has anyone else seen this? Some time ago, I made a selection of all my DS18B20 sensors using an earlier firmware version and kept the fake sensors separate. On a different platform, the readings are correct. So I'm a bit confused. > list TEMPR START GP2,3,800 TEMPR START GP3,3,800 TEMPR START GP4,3,800 Print "Stoppen is Ctrl+C" Do Print "Temperatuur GP2 .. :" Str$(TEMPR(GP2,800), 4, 6); " C" Print "Temperatuur GP3 .. :" Str$(TEMPR(GP3,800), 4, 6); " C" Print "Temperatuur GP4 .. :" Str$(TEMPR(GP4,800), 4, 6); " C" Pause 10000 Loop > run Stoppen is Ctrl+C Temperatuur GP2 .. :1000.000000 C Temperatuur GP3 .. : 16.937500 C Temperatuur GP4 .. : 17.000000 C Temperatuur GP2 .. :1000.000000 C Temperatuur GP3 .. : 17.000000 C Temperatuur GP4 .. : 17.000000 C Temperatuur GP2 .. :1000.000000 C Temperatuur GP3 .. : 17.000000 C Temperatuur GP4 .. : 17.000000 C > option list PicoMite MMBasic RP2040 V6.02.00 OPTION SYSTEM I2C GP20,GP21 OPTION COLOURCODE ON OPTION HEARTBEAT OFF OPTION PICO OFF OPTION CPUSPEED (KHz) 200000 OPTION DISPLAY 50, 100 OPTION SDCARD GP19, GP10, GP11, GP12 OPTION PLATFORM PicoMite RP2040-SD:32G Kind regards, Jan. |
||||||
A test with two DS18B20 sensors. The one on GP6 is genuine and the one on GP7 is a fake and requires TEMPR START before every read or it reads 1000. There seems to be an interaction between the two TEMPR START commands. The one with the shorter read time appears to set the read time for both sensors. The result is the one set to the higher precision doesn't get time to perform its read. > TEMPR START GP6,3 :TEMPR START GP7,3 : ? tempr(GP6), tempr(GP7) 13.25 12.0625 > TEMPR START GP6,3 :TEMPR START GP7,2 : ? tempr(GP6), tempr(GP7) 13.1875 12.125 > TEMPR START GP6,3 :TEMPR START GP7,1 : ? tempr(GP6), tempr(GP7) 13.25 12 > TEMPR START GP6,3 :TEMPR START GP7,0 : ? tempr(GP6), tempr(GP7) 13.1875 12 > > TEMPR START GP6,2 :TEMPR START GP7,3 : ? tempr(GP6), tempr(GP7) 13.25 12.0625 > TEMPR START GP6,2 :TEMPR START GP7,2 : ? tempr(GP6), tempr(GP7) 13.25 1000 > TEMPR START GP6,2 :TEMPR START GP7,1 : ? tempr(GP6), tempr(GP7) 13.25 1000 > TEMPR START GP6,2 :TEMPR START GP7,0 : ? tempr(GP6), tempr(GP7) 13.3125 1000 > > TEMPR START GP6,1 :TEMPR START GP7,3 : ? tempr(GP6), tempr(GP7) 13.3125 12.125 > TEMPR START GP6,1 :TEMPR START GP7,2 : ? tempr(GP6), tempr(GP7) 13.3125 1000 > TEMPR START GP6,1 :TEMPR START GP7,1 : ? tempr(GP6), tempr(GP7) 13.3125 1000 > TEMPR START GP6,1 :TEMPR START GP7,0 : ? tempr(GP6), tempr(GP7) 13.3125 1000 > > TEMPR START GP6,0 :TEMPR START GP7,3 : ? tempr(GP6), tempr(GP7) 13.3125 12.125 > TEMPR START GP6,0 :TEMPR START GP7,2 : ? tempr(GP6), tempr(GP7) 13.3125 1000 > TEMPR START GP6,0 :TEMPR START GP7,1 : ? tempr(GP6), tempr(GP7) 13.3125 1000 > TEMPR START GP6,0 :TEMPR START GP7,0 : ? tempr(GP6), tempr(GP7) 13.3125 1000 > Edit. Adding an explicit timeout to the TEMPR START command of the fake unit is a workaround that restores function. > TEMPR START gp7,2 :TEMPR START gp6,3 : ? tempr(gp7), tempr(gp6) 1000 13.375 > TEMPR START gp7,2,500 :TEMPR START gp6,3 : ? tempr(gp7), tempr(gp6) 12.25 13.5625 > Edited 2026-02-02 09:57 by phil99 |
||||||
I found my problem. The TEMPR START command must be present within the loop; otherwise, it won't work properly. Sorry for interrupting your valuable time. I still have a lot to learn. Kind regards, Jan. |
||||||
Sorry for interrupting Glad its working. What I was going to point out is the timeout parameter in the TEMPR command between 0 and 3 meaning: 0 = 0.5ºC resolution, 100 ms conversion time. 1 = 0.25ºC resolution, 200 ms conversion time (this is the default). 2 = 0.125ºC resolution, 400 ms conversion time. 3 = 0.0625ºC resolution, 800 ms conversion time. The optional timeout parameter overrides the conversion times above to allow for slow devices. |
||||||
I don't know if this is the intention, but I need to record the same TEMPR START twice in the same loop to get the same data, otherwise the default accuracy of 1 in the data file would be lost. Could this also be included in the manual? Open "TemperatureLog.xls" For Output As #1 Do While Inkey$ = "" TEMPR START GP3,3 TEMPR START GP4,3 TEMPR START GP5,3 Print Date$;" ";Left$(Time$,5);": GP3:";Str$(TEMPR(GP3),2,3);" GP4:";Str$(TEMPR(GP4),2,3);" GP5:";Str$(TEMPR(GP5),2,3) TEMPR START GP3,3 TEMPR START GP4,3 TEMPR START GP5,3 Print #1, Date$ " " Left$(Time$,5) ", " Str$(TEMPR(GP3),2,3) ", " Str$(TEMPR(GP4),2,3) ", " Str$(TEMPR(GP5),2,3) Pause 10000 Loop Close #1 Kind regards, Jan. |
||||||
Peter, I have an issue with the WS2812 command. It seems to have problems with the heap as it locks up the whole MMbasic system in certain cases. I've attached a test program to see what I mean. The program creates BLIT buffers, where the number, width and heigth can be specified. If I specify 10 Buffers, w=105 and h=105, all is well with 10 buffers, w=105 and h=106, I get [22] Print "write blit ";b_idx+1 Error : Not enough Heap memory with 10 buffers, w=106 and h=106, MMbasic locks up without any message. If the WS2812 statement is commented out, all runs well, no matter how big the BLITs are. Other statements do no harm ... my environment is: PicoMite MMBasic RP2350B V6.02.00 OPTION SYSTEM SPI GP2,GP3,GP4 OPTION FLASH SIZE 16777216 OPTION COLOURCODE ON OPTION PICO OFF OPTION CPUSPEED (KHz) 200000 OPTION DISPLAY 40, 145 OPTION LCDPANEL ST7789_320, PORTRAIT,GP6,GP5,GP7,GP8 OPTION PSRAM PIN GP0 It is independent of the display used, btw. The program is: ' option explicit option default none Dim integer b_idx, max_blit, blit_w, blit_h SetPin gp9,dout input "max BLIT [10] ";max_blit if max_blit = 0 then max_blit = 10 input "BLIT width [110] ";blit_w if blit_w = 0 then blit_w = 110 input "BLIT heigth [110] ";blit_h if blit_h = 0 then blit_h = 110 load_blit 'fill BLIT buffers Do For b_idx = 0 To max_blit-1 Print "write blit ";b_idx+1 Blit write(b_idx+1),35,0 print "write WS2812" '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 'this line locks the pico WS2812 B, gp9, 1, Rnd()*&hffffff 'write to LEDs 'the following statements do no harm at all line 0,0,200,200,10,rgb(red) pin(gp9) = 1 : pin(gp9) = 0 print "abcdefghijk" text 35,35,"abcdefghijk" Pause 1000 cls Next b_idx Loop End Sub load_blit Local integer idx For idx = 1 To max_blit Print "loading BLIT buffer "idx Blit read idx,0,0, blit_w,blit_h Next idx End Sub Gerald |
||||||
@Peter, PicoCalc is on GitHub, and it uses the ST7365 LCD driver. From their website: ST7365P_SPEC_V1.0.zip Their current MMBasic release is based on 6.00.02 (says GitHub). Volhout Edited 2026-02-03 18:55 by Volhout |
||||||
@JanVolk, maybe read the DS18B20s just once like this:- Open "TemperatureLog.xls" For Output As #1 Do While Inkey$ = "" TEMPR START GP3,3 TEMPR START GP4,3 TEMPR START GP5,3 output$ = Date$+" "+Left$(Time$,5)+": GP3:"+Str$(TEMPR(GP3),2,3)+" GP4:"+Str$(TEMPR(GP4),2,3)+" GP5:"+Str$(TEMPR(GP5),2,3) Print output$ Print #1, output$ Pause 10000 Loop Close #1 If TemperatureLog.xls is intended to accumulate readings perhaps use:- Open "TemperatureLog.xls" For Append As #1 . Edited 2026-02-03 22:08 by phil99 |
||||||
Thanks Peter and phil99, Sorry for my late reply. Thanks for your reply. I did indeed use Geoffg's example on his website. This raised the above-mentioned issues for me. Phil99's comments are very helpful, and I will explore them further. I do indeed want to start recording data and have already looked at the various I2C codes for the EEPROM and VAR. Kind regards, Jan. |
||||||
Dear and Geoffg, Where can I find the description of the new I2CLCD commands in the latest manual? I looked at the latest version 4 of V6.02.00 on Geoffg's website but couldn't find anything in the command list or anywhere on a page? Peter describes it excellently on the PicoMite V6.02.00 Release Candidates - Structured Types V6.02.00RC6 forum, page 8. Could this also be included in the manual? Or did I miss something? Kind regards, Jan. |
||||||
To make it easier to import into a spreadsheet program perhaps use .CSV format with comas as column separators. It may be difficult to fit the long output$ in the editor window so you could do it in two parts as below or use "Option Continuation Lines On". The time taken to read the sensors and save the results will add an unknown amount to the 10S Pause. Using the Timer can improve the accuracy of the reading interval. Open "TemperatureLog.csv" For Append As #1 Do t = timer TEMPR START GP3,3 TEMPR START GP4,3 TEMPR START GP5,3 output$ = Date$+", " + Left$(Time$,5) + ", GP3, " + Str$(TEMPR(GP3),2,3) Inc output$, ", GP4," + Str$(TEMPR(GP4),2,3) + ", GP5," + Str$(TEMPR(GP5),2,3) Print output$ Print #1, output$ do : loop until timer - t > 9999.95 'adjust to get exact time if that is needed. Loop Until Inkey$ Close #1 |
||||||
| The Back Shed's forum code is written, and hosted, in Australia. |