Home
JAQForum Ver 24.01
Log In or Join  
Active Topics
Local Time 21:53 26 Nov 2024 Privacy Policy
Jump to

Notice. New forum software under development. It's going to miss a few functions and look a bit ugly for a while, but I'm working on it full time now as the old forum was too unstable. Couple days, all good. If you notice any issues, please contact me.

Forum Index : Microcontroller and PC projects : Silliness: PicoSpin

     Page 1 of 2    
Author Message
vegipete

Guru

Joined: 29/01/2013
Location: Canada
Posts: 1109
Posted: 09:45pm 20 Jan 2024
Copy link to clipboard 
Print this post

Just messing around with polygons and the latest (VGA) firmware:
(Might work with an LCD display, I haven't tried.)

'=============================================================================|
' PicoSpin
'
' written by Vegipete, Jan 2024
'
' needs:
' Firmware version 5.08.00 or newer
' OPTION CPUSPEED 252000 (KHz)

Option DEFAULT FLOAT 'INTEGER
Option LCDPANEL NOCONSOLE
Option angle degrees
CLS 0

Dim pln(9)=(8,5,4,16,8,8,12,4,8,12) ' length of each poly
' "PICOMITE" polygon definitions
' The "P" and the "O" require 2 parts each
Dim p0x(pln(0))=(-38,-38,-30,-28,-28,-30,-36,-36,-38)
Dim p0y(pln(0))=(5,-5,-5,-3,-1,1,1,5,5)
Dim p1x(pln(1))=(-36,-36,-31,-30,-31,-36)
Dim p1y(pln(1))=(-1,-3,-3,-2,-1,-1)
Dim p2x(pln(2))=(-27,-27,-25,-25,-27)
Dim p2y(pln(2))=(5,-5,-5,5,5)
Dim p3x(pln(3))=(2,0,0,2,8,10,8,7,3,2,2,3,7,8,10,8,2)
Math add p3x(),-23,p3x()  ' shift left into place
Dim p3y(pln(3))=(5,3,-3,-5,-5,-3,-2,-3,-3,-2,2,3,3,2,3,5,5)
Dim p4x(pln(4))=(-9,-11,-11,-9,-3,-1,-1,-3,-9)
Dim p4y(pln(4))=(5,3,-3,-5,-5,-3,3,5,5)
Dim p5x(pln(5))=(-8,-9,-9,-8,-4,-3,-3,-4,-8)
Dim p5y(pln(5))=(3,2,-2,-3,-3,-2,2,3,3)
Dim p6x(pln(6))=(1,1,3,7,11,13,13,11,11,7,3,3,1)
Dim p6y(pln(6))=(5,-5,-5,-1,-5,-5,5,5,-2,2,-2,5,5)
Dim p7x(pln(7))=(15,15,17,17,15)
Dim p7y(pln(7))=(5,-5,-5,5,5)
Dim p8x(pln(8))=(22,22,18,18,28,28,24,24,22)
Dim p8y(pln(8))=(5,-3,-3,-5,-5,-3,-3,5,5)
Dim p9x(pln(9))=(29,29,39,39,31,31,35,35,31,31,39,39,29)
Dim p9y(pln(9))=(5,-5,-5,-3,-3,-1,-1,1,1,3,3,5,5)

FRAMEBUFFER Create   ' hidden layer to draw scene
FRAMEBUFFER Write F : CLS 0

x = MM.HRes/2
y = MM.VRes/2
angl = 0
scal = 3
Do
 k = Asc(Inkey$)   ' press any key to quit
 If k Then
   FRAMEBUFFER Close
   End
 EndIf

 CLS
 For i = 0 To 9  ' draw all letter pieces
   DrawLetter(i,x,y,angl,pi*(Sin(scal)+1.1))
 Next
 FRAMEBUFFER copy F,N,B
 
 ' animate stuff
 ' could change position too, if you desire.
 Inc angl,.5
 Inc scal,.9
Loop

' polygon number,x,y,angle,scale
Sub DrawLetter(n,xc,yc,a,s)
 Local x(pln(n)),y(pln(n))
 
 Select Case n  ' scale copy polygon to working arrays
   Case 0
     Math scale p0x(),s,x() : Math scale p0y(),s,y()
   Case 1
     Math scale p1x(),s,x() : Math scale p1y(),s,y()
   Case 2
     Math scale p2x(),s,x() : Math scale p2y(),s,y()
   Case 3
     Math scale p3x(),s,x() : Math scale p3y(),s,y()
   Case 4
     Math scale p4x(),s,x() : Math scale p4y(),s,y()
   Case 5
     Math scale p5x(),s,x() : Math scale p5y(),s,y()
   Case 6
     Math scale p6x(),s,x() : Math scale p6y(),s,y()
   Case 7
     Math scale p7x(),s,x() : Math scale p7y(),s,y()
   Case 8
     Math scale p8x(),s,x() : Math scale p8y(),s,y()
   Case 9
     Math scale p9x(),s,x() : Math scale p9y(),s,y()
 End Select

 Math v_rotate 0,0,a,x(),y(),x(),y() ' spin 'em
 Math add x(),xc,x()   ' position 'em
 Math add y(),yc,y()
 Polygon pln(n),x(),y(),RGB(green) ' draw em (b/w in Mode 1)
 ' Note: fill mode bogs down above a certain size
End Sub

Visit Vegipete's *Mite Library for cool programs.
 
stanleyella

Guru

Joined: 25/06/2022
Location: United Kingdom
Posts: 2129
Posted: 10:56pm 20 Jan 2024
Copy link to clipboard 
Print this post

er... far out? how about in a galaxy far far away?
the math functions are clever.. typical basic, as is most mmb.. not!
not complaining, lots of interesting graphics to learn and no trig.. well not much.
great examples vegipete
Edited 2024-01-21 09:08 by stanleyella
 
Bleep
Guru

Joined: 09/01/2022
Location: United Kingdom
Posts: 509
Posted: 01:28pm 21 Jan 2024
Copy link to clipboard 
Print this post

Very impressive, I've tested it, at length, at 378Mhz on my VGA and I'm getting 16.4mS per screen update, I also tested it without the background copy and it still looked very smooth to me, no artefacts and now 9mS per screen update! so 61Hz or 110Hz, amazing! especially when you can use the inbuilt math and draw functions on whole arrays. :-)
Regards, Kevin.
 
stanleyella

Guru

Joined: 25/06/2022
Location: United Kingdom
Posts: 2129
Posted: 02:33pm 21 Jan 2024
Copy link to clipboard 
Print this post

Hi Kevin sir. I downloaded PicoMiteVGA_5.08.00RC3_378MHz.opt and .opt.txt but too dim to figure what to do without messin up things. I use 378 with ili glcd no prob.
 
Mixtel90

Guru

Joined: 05/10/2019
Location: United Kingdom
Posts: 6792
Posted: 03:07pm 21 Jan 2024
Copy link to clipboard 
Print this post

Remember Stan, the 378 VGA *might * be ok for you and it might just lock up y6our Pico or give strange errors. There's no guarantee that it will be ok.

You can't assume that a normal PicoMite that runs fine at 378 will also be fine as a PicoMite VGA at 378.
Mick

Zilog Inside! nascom.info for Nascom & Gemini
Preliminary MMBasic docs & my PCB designs
 
stanleyella

Guru

Joined: 25/06/2022
Location: United Kingdom
Posts: 2129
Posted: 03:16pm 21 Jan 2024
Copy link to clipboard 
Print this post

:( not moaning, vga is nice as is. will try vegipete's code on glcd non vga at 378 and spi is supposed to be slow but I'm happy with it. stan
 
Bleep
Guru

Joined: 09/01/2022
Location: United Kingdom
Posts: 509
Posted: 03:28pm 21 Jan 2024
Copy link to clipboard 
Print this post

You need to put that file on your A: then run the command
Option disk load "A:/PicoMiteVGA_5.08.00RC3_378MHz.opt"
This will give you the 378Mhz option, along with the other options Phill mentioned in his post:-
phills post you then need to set up your options as Phil says.
As Mick says there are absolutely no guarantees it will work reliably for you, it seems fine for me, I have made sure my power supply is way more than enough, with thick wires, so no power drop, & that the Pico has free air movement in case it should get warm.
Regards Kevin.
 
lizby
Guru

Joined: 17/05/2016
Location: United States
Posts: 3150
Posted: 05:59pm 21 Jan 2024
Copy link to clipboard 
Print this post

  vegipete said  (Might work with an LCD display, I haven't tried.)


Does indeed work on an LCD--ILI9341.
PicoMite, Armmite F4, SensorKits, MMBasic Hardware, Games, etc. on fruitoftheshed
 
stanleyella

Guru

Joined: 25/06/2022
Location: United Kingdom
Posts: 2129
Posted: 06:05pm 21 Jan 2024
Copy link to clipboard 
Print this post

Like picorocks it's not right with ili9341 non vga latest
https://www.youtube.com/watch?v=D2EzyXflhks
 
stanleyella

Guru

Joined: 25/06/2022
Location: United Kingdom
Posts: 2129
Posted: 06:08pm 21 Jan 2024
Copy link to clipboard 
Print this post

Thanks Kevin for the vga cpu speed advice. I'll see.
 
Mixtel90

Guru

Joined: 05/10/2019
Location: United Kingdom
Posts: 6792
Posted: 06:10pm 21 Jan 2024
Copy link to clipboard 
Print this post

Looks like it could be a timing issue if the program is converted from VGA to LCD.
Mick

Zilog Inside! nascom.info for Nascom & Gemini
Preliminary MMBasic docs & my PCB designs
 
stanleyella

Guru

Joined: 25/06/2022
Location: United Kingdom
Posts: 2129
Posted: 06:27pm 21 Jan 2024
Copy link to clipboard 
Print this post

OPTION CPUSPEED 252000 and the same
 
Mixtel90

Guru

Joined: 05/10/2019
Location: United Kingdom
Posts: 6792
Posted: 06:36pm 21 Jan 2024
Copy link to clipboard 
Print this post

No, timing within the program. The CPUSPEED is the clock, but there are other things going on such as interrupts. These can change the program flow speed.
Mick

Zilog Inside! nascom.info for Nascom & Gemini
Preliminary MMBasic docs & my PCB designs
 
stanleyella

Guru

Joined: 25/06/2022
Location: United Kingdom
Posts: 2129
Posted: 07:16pm 21 Jan 2024
Copy link to clipboard 
Print this post

doh. dunno what to look for. the display is ok and the math functions ok.
is it a spi speed thing? if there's a spi speed option.
I'll try my own polygon and math to sort it in my head and test.
stan, tries but dim.
 
lizby
Guru

Joined: 17/05/2016
Location: United States
Posts: 3150
Posted: 07:53pm 21 Jan 2024
Copy link to clipboard 
Print this post

Also works for me with ILI9488, though the speed of rotation is, uh, stately.



In some orientations, there are artifacts on the right and bottom margins. I don't exactly see what might be done in the program to fix that. Maybe pixels beyond hres-1 and vres-1 are clipped to those values.

(Note: with this firmware, this picomite locks up at CPUSPEED 378000, though it previously worked (for at least some programs) at that speed. picospin.bas was run at 252000.)
PicoMite, Armmite F4, SensorKits, MMBasic Hardware, Games, etc. on fruitoftheshed
 
stanleyella

Guru

Joined: 25/06/2022
Location: United Kingdom
Posts: 2129
Posted: 11:05pm 21 Jan 2024
Copy link to clipboard 
Print this post

Yes @lizby, ili9488 spin works like not enough volts, well slow but works.
is it slower than ili9341 or me?
 
lizby
Guru

Joined: 17/05/2016
Location: United States
Posts: 3150
Posted: 11:09pm 21 Jan 2024
Copy link to clipboard 
Print this post

  stanleyella said  is it slower than ili9341


With twice as many pixels to set with SPI, you'd expect it to be slower.
PicoMite, Armmite F4, SensorKits, MMBasic Hardware, Games, etc. on fruitoftheshed
 
phil99

Guru

Joined: 11/02/2018
Location: Australia
Posts: 2135
Posted: 11:29pm 21 Jan 2024
Copy link to clipboard 
Print this post

Added to that more colours (RGB666 vs. RGB565) requires sending 3 bytes per pixel instead of 2, slowing it further. Image quality has a cost.
 
Bleep
Guru

Joined: 09/01/2022
Location: United Kingdom
Posts: 509
Posted: 11:12am 22 Jan 2024
Copy link to clipboard 
Print this post

Have just run this on my GameMite with a ILI9341 display, clocked at 378Mhz I get an update rate of 30.6mS; at 252Mhz I get 34.5mS, so basically similar results, roughly between 32.7Hz and 30Hz, not at all bad, about half the rate compared to the VGA.

This would appear to be the upper refresh limit for an LCD, it appears that the Framebuffer copy takes about 30mS to send the frame update, so even using the 'B' option does not really speed it up, because the CLS and plotting is only taking a few mS, the rest is the screen data transfer. If I use the 'B' option, I can then place a 'Pause 22' immediately after the Framebuffer copy and it makes no difference to the update rate, so 22mS to do lots of extra screen plotting. ;-)
Edited 2024-01-22 21:35 by Bleep
 
matherp
Guru

Joined: 11/12/2012
Location: United Kingdom
Posts: 9115
Posted: 11:58am 22 Jan 2024
Copy link to clipboard 
Print this post

23mSec on an 8-bit parallel ili9341 of which 15.7mSec is the copy

Filled polygons

  Quote  
I don't exactly see what might be done in the program to fix that.


BOX 0,0,mm.hres,mm.vres,1,0


Before the copy
Edited 2024-01-22 22:26 by matherp
 
     Page 1 of 2    
Print this page
© JAQ Software 2024