OldComp.cz

Komunitní diskuzní fórum pro fanoušky historických počítačů


Právě je 27.04.2024, 12:08

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 336 ]  Přejít na stránku Předchozí  1 ... 4, 5, 6, 7, 8, 9, 10 ... 23  Další
Autor Zpráva
 Předmět příspěvku: Re: Paspberry Pico
PříspěvekNapsal: 28.03.2021, 14:43 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 24.05.2018, 22:32
Příspěvky: 1980
Bydliště: Most, Praha
Has thanked: 874 times
Been thanked: 699 times
Měřil jsem spotřebu Pi Pico v závislosti na sys_clk a na vco. Jednak při minimálním vco=408 MHz (fbdiv=34) a jednak při maximálním vco=1596 MHz (fbdiv=133). Měřeno bez aktivních periferií. Nejnižší nastavitelný sys_clk je 8,3 MHz (fbdiv=34, pd1=7, pd2=7), kdy má spotřebu 4,2 mA. Při standardní sys_clk=125 MHz je spotřeba 18 mA. Při 266 MHz je spotřeba 34 mA.

Spotřebu lze aproximovat na výrazy:
I [mA] = 3,3 + 0,11 * sys_clk [MHz] ... pro nejnižší vco=408 MHz
I [mA] = 4,6 + 0,11 * sys_clk [MHz] ... pro nejvyšší vco=1596 MHz

Rozdíl 1,3 mA je závislost na frekvenci vco. První prvek rovnice 'a' lze zobecnit na závislost na frekvenci vco: a = vco [GHz] + 2,9.

Příloha:
power.png
power.png [ 16.68 KiB | Zobrazeno 3892 krát ]

_________________
i++ (INC) increment
i-- (DEC) decrement
i@@ (EXC) excrement


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Paspberry Pico
PříspěvekNapsal: 29.03.2021, 22:15 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 24.05.2018, 22:32
Příspěvky: 1980
Bydliště: Most, Praha
Has thanked: 874 times
Been thanked: 699 times
Měřil jsem rychlost kopie bloku paměti v Pi Pico. Velikost bloku 100KB, aby se neuplatnily cache. Standardní sys_clk=125 MHz. Softwarová smyčka 'for' je stejně rychlá jako memcpy, protože ji překladač nahradí vestavěnou funkcí aeabi_memcpy z BOOTROM.

Kopie 100KB bloku z RAM do RAM:

blok zarovnaný na 32bit: 670 us
nezarovnaný blok: 5790 us
DMA 8bit: 1350 us
DMA 32bit: 205 us (tj. přenos 1x u32 na 1 systick)
memset: 410 us

Přístup k nezarovnaným datům se děje po bajtech a je skoro 10x pomalejší. Vestavěný memcpy správně rozliší typ přístupu - tj. např. memcpy(buf+1, buf2+1, num) je rychlý po 32-bitech, ovšem memcpy(buf+1, buf2+3, num) se musí provést celý nezarovnaně a je proto velmi pomalý. Přímý přístup programu 32-bitů na nezarovnanou adresu vyvolá (správně) výjimku. DMA přenos po bajtech je 2x pomalejší než softwarový přenos po 32bit. DMA přenos 32bit je 3x rychlejší než softwarový přenos.

Kopie 100KB bloku z Flash do RAM:

blok zarovnaný na 32bit: 11900 us
nezarovnaný blok: 16900 us
DMA 8bit: 12650 us
DMA 32bit: 11400 us

Flash paměť (externí sériová přes QSPI) je skoro 20x pomalejší než interní RAM a ani DMA ji neurychlí. Časově kritický program by proto měl být krátký, aby využil cache, nebo zkopírovat do RAM (označit funkci __not_in_flash_func).

_________________
i++ (INC) increment
i-- (DEC) decrement
i@@ (EXC) excrement


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Paspberry Pico
PříspěvekNapsal: 31.03.2021, 19:17 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 24.05.2018, 22:32
Příspěvky: 1980
Bydliště: Most, Praha
Has thanked: 874 times
Been thanked: 699 times
Tak zřejmě Pico vzdávám. :-( Chtěl jsem ho použít jako emulátor oldcomp počítačů, což znamená funkční výstup na displej. Sice jsem si zprovoznil vlastní driver displeje (protože původní ScanLine je pro praxi nepoužitelný), ale - stačí zatížení sběrnice, jako intenzivnější přístup k externí Flash, a obraz se rozsýpá, protože DMA to nestíhá. :-(

Celkově mi Pico přijde víc jako reklamní poutač pro amatéry - věci jsou tam řešené dost na doraz, aby se mohly uvádět v reklamě a přilákat neznalé amatéry, ale při praktickém použití se naráží na zádrhele kdy ty věci spolu moc nejedou, nestíhají. Na pohled to vypadá hezky, hezky zpracované i zdokumentované, škoda že takhle to není i jiných procesorů, ale praktické využití se zastaví na tom povrchu, v hloubce to už vypadá amatérsky.

Ještě zvážím zda mě nenapadne přijatelná cesta k využití, ale spíš to u mě vypadá na STM32. I do toho plnějšího Raspberry se mi už moc nechce, když si vzpomenu jaké jsem s tím měl problémy.

_________________
i++ (INC) increment
i-- (DEC) decrement
i@@ (EXC) excrement


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Paspberry Pico
PříspěvekNapsal: 01.04.2021, 16:13 
Offline
Radil

Registrován: 24.12.2014, 16:11
Příspěvky: 428
Has thanked: 32 times
Been thanked: 101 times
Neoficiální podpora Pico do Arduino IDE

https://github.com/earlephilhower/arduino-pico

Dají se používat existující knihovny pro různá udělátka přes I2C, SPI, PWM atd. Zároveň se dají používat funkce z původního SDK, pro věci, které Arduino zatím neumí, např PIO, start stop Core1 atd...


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Paspberry Pico
PříspěvekNapsal: 01.04.2021, 16:16 
Offline
Radil

Registrován: 24.12.2014, 16:11
Příspěvky: 428
Has thanked: 32 times
Been thanked: 101 times
Napadlo mě, že by Pico bylo ideální třeba na emulaci věcí, jako je ZX Microdrive - udělat dvoukanálovou Manchester modulaci na jeho PIO by neměl být problém.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Paspberry Pico
PříspěvekNapsal: 01.04.2021, 17:18 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 24.05.2018, 22:32
Příspěvky: 1980
Bydliště: Most, Praha
Has thanked: 874 times
Been thanked: 699 times
Jo na tyto jednodušší věci je to určitě dostatečně dobré (jestli nevadí že není +5V tolerantní?), na Manchester s PIO mají v SDK 2 příklady.

_________________
i++ (INC) increment
i-- (DEC) decrement
i@@ (EXC) excrement


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Paspberry Pico
PříspěvekNapsal: 05.04.2021, 17:31 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 24.05.2018, 22:32
Příspěvky: 1980
Bydliště: Most, Praha
Has thanked: 874 times
Been thanked: 699 times
Nakonec se Pico přece jen podařilo zkrotit a myslím že to bude stát za to a bude k dispozici dobře funkční VGA+TV displej, s jednoduchým použitím (framebuffery). Na displeji je možné současně kombinovat různé formáty videopaměti - pixelová grafika, textový mód, dlaždice, k tomu 3 překryvné grafické roviny s průhledností s klíčovou barvou. Ještě na tom čeká dost práce než to bude obecně použitelné (teď to musím zoptimalizovat v assembleru, render v C má celkem problémy to stíhat), ale už zas věřím že to bude dobrý krok vpřed.
Příloha:
rasppico.jpg
rasppico.jpg [ 132.73 KiB | Zobrazeno 3708 krát ]

_________________
i++ (INC) increment
i-- (DEC) decrement
i@@ (EXC) excrement


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Paspberry Pico
PříspěvekNapsal: 05.04.2021, 19:25 
Offline
Pan Generální
Uživatelský avatar

Registrován: 23.03.2014, 20:13
Příspěvky: 2788
Has thanked: 230 times
Been thanked: 608 times
Paráda, a pojede Vlak na holém železe, nebo budeš s Petrem konkurovat Scratchi? :D

_________________
Plesnivý sýr z Tesca, zatuchlé kuřecí řízky z Albertu, oslizlé hovězí a myší trus z Lidlu.
Nákup potravinářské inspekce v ČR, říjen 2023.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Paspberry Pico
PříspěvekNapsal: 05.04.2021, 19:32 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 24.05.2018, 22:32
Příspěvky: 1980
Bydliště: Most, Praha
Has thanked: 874 times
Been thanked: 699 times
Dokonce mě napadla možnost programovat MCU v Petrovi když tam jdou dělat dlaždice a sprajty :D , ale ... no kdoví :-)

_________________
i++ (INC) increment
i-- (DEC) decrement
i@@ (EXC) excrement


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Paspberry Pico
PříspěvekNapsal: 05.04.2021, 20:37 
Offline
Óm Nejvyšší

Registrován: 16.06.2014, 12:23
Příspěvky: 3677
Bydliště: Jesenice u Prahy
Has thanked: 28 times
Been thanked: 280 times
Ty PIO bloky jsou na generování obrazu bezvadný :D

_________________
Diagnóza: Touretteův syndrom, Koprolálie, Dyslexie, Obsedantně kompulzivní porucha.
Kalkulačky: Privileg PR56, TI51-III, TI57, TI58, TI59, TI83, TI-83 Premium CE, TI89
Počítadla: BOBO64, ZX48 plus, DG-88, Didaktik-M, C16, C64C, Amiga 500+, MZ800, MUPID C2A2


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Paspberry Pico
PříspěvekNapsal: 05.04.2021, 20:47 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 24.05.2018, 22:32
Příspěvky: 1980
Bydliště: Most, Praha
Has thanked: 874 times
Been thanked: 699 times
Jen by mohli dát větší paměť na instrukce, dost jsem bojoval a předělával abych se vešel do 32 instrukcí.
Kód:
; Control word:
;  - bit 0..4 (5 bits) jump address
;  - bit 5..23 (19 bits) loop counter N
;  - bit 24..31 (8 bits) output color (set to 0 if not used)

; ============================================================================
;                    VGA output (total 28 instructions)
; ============================================================================

; Clock per pixel 'CPP':
;  VGA 640x480 ... 6
;  TV 640x480 ... 9
;  SVGA 800x600 ... 3

.program vga
.side_set 1   ; SYNC output (no opt, wait can be max. 15)
.origin 0   ; must load at zero (offsets are hardcoded in instruction stream)
.define bpp 8   ; 8 bits per pixel (number of pixels must be multiple of 4)

; ===== [3 instructions] SYNC pulse, N=delay in clock cycles - 3

public sync:
   out   x,27      side 1      ; [1] get length of SYNC pulse - 3, start of SYNC pulse
sync_loop:
   jmp   x--,sync_loop   side 1       ; [N+1] loop
public entry:
   out   pc,5      side 1      ; [1] get next control word and jump to function

; ===== [4 instructions] DARK (or color) pulse, N=delay in clock cycles - 4
; Sets dark output at time +1

public dark:
   out   x,19      side 0      ; [1] get length of delay pulse - 4, start of delay pulse
   out   pins,bpp   side 0      ; [1] dark output (or color)
dark_loop:
   jmp   x--,dark_loop   side 0      ; [N+1] loop
   out   pc,5      side 0      ; [1] get next control word and jump to function

; ===== [4 instructions] layer synchronisation (delay 8 clock cycles)
; Output first pixel at time +8 after IRQ

public irqset:
   irq   clear 4      side 0       ; [1] clear IRQ4 flag
   out   null,27      side 0      ; [1] destroy command parameter
   irq   set 4      side 0   [4]   ; [5] set IRQ flag
   out   pc,5      side 0      ; [1] get next control word and jump to function

; ===== [5 instructions] output pixels at CPP clock, N=number of pixels-2 (number of pixels must be multiple of 4)
; Output first pixel at time +1
; Missing 1 clock cycle after last pixel

public output:
   out   x,27      side 0      ; [1] get number of pixels-2
output_loop:
public extra_wait1:
   out   pins,bpp   side 0   [0]   ; [1+CPP-2] output pixels (set extra wait CPP-2)
   jmp   x--,output_loop   side 0      ; [1] loop
public extra_wait2:
   out   pins,bpp   side 0   [0]   ; [1+CPP-3] output pixels (set extra wait CPP-3)
   out   pc,5      side 0      ; [1] get next control word and jump to function

; ===== [12 instructions] layer output pixels at CPP clock (requires CPP=6 or more)
; Control word: bit 0..12 (13 bits) start delay D = clock cycles - 7 between irq and first pixel
;      bit 13..20 (8 bits) key color
;               bot 21..31 (11 bits) number of pixels - 1 (number of pixels must be multiple of 4)

.wrap_target
public layer:
   wait   0 irq 4      side 0      ; [1] wait for IRQ sync goes 0
   out   x,13      side 0      ; [1] get length of delay - 7
layer_wait:
   jmp   x--,layer_wait   side 0      ; [1] delay loop
   out   y,bpp      side 0      ; [1] get key color
   out   x,11      side 0      ; [1] get number of pixels-1
layer_loop:
   mov   isr,x      side 0      ; [1] save pixel counter into ISR
   out   x,bpp      side 0      ; [1] get output pixel
   jmp   x!=y,layer_2   side 0      ; [1] jump if pixel is not transparent
   jmp   layer_3      side 0      ; [1] jump to end of loop
layer_2:
   mov   pins,x      side 0      ; [1] output pixel to pins
layer_3:
public extra_wait3:
   mov   x,isr      side 0   [0]   ; [1+CPP-6] return pixel counter (set extra wait CPP-6)
   jmp   x--,layer_loop   side 0      ; [1] loop next pixel
.wrap

_________________
i++ (INC) increment
i-- (DEC) decrement
i@@ (EXC) excrement


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Paspberry Pico
PříspěvekNapsal: 06.04.2021, 08:27 
Offline
Óm Nejvyšší

Registrován: 16.06.2014, 12:23
Příspěvky: 3677
Bydliště: Jesenice u Prahy
Has thanked: 28 times
Been thanked: 280 times
Myslel jsem, že by se sync a zatemnění počítalo na vlastních pinech a zobrazení by bylo řízené podle toho.
Je to tak, že každý ten PIO má vlastní program a je jich tam celkem 32 ?
Tím by se daly ty řídící "programy" délkou trochu sčítat.

Jestli padal obraz při jiném zatížení CPU, není tam na to ten FIFO buffer na vstupu ?

_________________
Diagnóza: Touretteův syndrom, Koprolálie, Dyslexie, Obsedantně kompulzivní porucha.
Kalkulačky: Privileg PR56, TI51-III, TI57, TI58, TI59, TI83, TI-83 Premium CE, TI89
Počítadla: BOBO64, ZX48 plus, DG-88, Didaktik-M, C16, C64C, Amiga 500+, MZ800, MUPID C2A2


Naposledy upravil danhard dne 06.04.2021, 08:39, celkově upraveno 1

Nahoru
 Profil  
 
 Předmět příspěvku: Re: Paspberry Pico
PříspěvekNapsal: 06.04.2021, 08:38 
Offline
Pan Generální

Registrován: 19.07.2013, 15:54
Příspěvky: 2735
Has thanked: 147 times
Been thanked: 423 times
danhard píše:
Myslel jsem, že by se sync a zatemnění počítalo na vlastních pinech a zobrazení by bylo řízené podle toho.
Je to tak, že každý ten PIO má vlastní program a je jich tam celkem 32 ?
Tím by se daly ty řídící "programy" délkou trochu sčítat.


Jsou tam dva PIO. Kazdy muze mit max 32 kroku. V jednom PIO jsou vzdy 4 SM. Protoze jsou dva PIO, tak jsou celkem 8 SM. SM muze vyuzivat pouze programovou pamet ze sveho PIO. Takze 4 SM muzou mit stejny program ale kdyz maji mit kazdy jiny, tak celkova pamet pro 4 SM je tech 32 kroku.

Takze ti nich nebrani udelat jeden program a ten pouzit pro 4 SM. Pripadne v druhem udelat program pro dalsi 4 SM. Kdyz ale pro kazdy SM budes mit chtit jiny program tak jsi limitovan temi 32 kroky.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Paspberry Pico
PříspěvekNapsal: 06.04.2021, 08:47 
Offline
Óm Nejvyšší

Registrován: 16.06.2014, 12:23
Příspěvky: 3677
Bydliště: Jesenice u Prahy
Has thanked: 28 times
Been thanked: 280 times
Aha, to jsem se přepočítal, takže 8 PIO kanálů a 2 řídící programy.
Pro 8 výstupních bitů se to musí vejít do jednoho společného programu.
Pro 4 bity to jde udělat každý zvlášt a udělat dvě obrazovky :D

Jen mi nejde do hlavy, že když má každý kanál vlastní PC, tak všechny 4 lezou do společné paměti programu ?
A jak můžou být ty programy společné, když každý kanál dělá něco jiného ?

_________________
Diagnóza: Touretteův syndrom, Koprolálie, Dyslexie, Obsedantně kompulzivní porucha.
Kalkulačky: Privileg PR56, TI51-III, TI57, TI58, TI59, TI83, TI-83 Premium CE, TI89
Počítadla: BOBO64, ZX48 plus, DG-88, Didaktik-M, C16, C64C, Amiga 500+, MZ800, MUPID C2A2


Naposledy upravil danhard dne 06.04.2021, 09:06, celkově upraveno 1

Nahoru
 Profil  
 
 Předmět příspěvku: Re: Paspberry Pico
PříspěvekNapsal: 06.04.2021, 09:04 
Offline
Pan Generální

Registrován: 19.07.2013, 15:54
Příspěvky: 2735
Has thanked: 147 times
Been thanked: 423 times
danhard píše:
Jen mi nejde do hlavy, že když má každý kanál vlastní PC, tak všechny 4 lezou do společné paměti programu ?


On si kazdy program pamatuje kde zacina a kde konci. Kdyz skonci, okamzite jde na zacatek (neni zadny jmp). Takze neni problem aby treba SM0 mel program 1 az 6. SM1 program 7 az 15. Nasledne SM2 15 az 32. SM3 dejme tomu se nevyuzije.

SM4 muze mit identicky program jako SM0 ale je ulozen v jinem PIO a tak zabere dalsi misto - uvnitr stroje je to 2x.

Nic ale nebrani jako v tom prikladu pro UART, kde 8 SM maji stejny program. V realu to jsou dva programy. Jeden pro PIO0 (SM0-3) a druhy pro PIO1 (SM4-7) .


Nahoru
 Profil  
 
Zobrazit příspěvky za předchozí:  Seřadit podle  
Odeslat nové téma Odpovědět na téma  [ Příspěvků: 336 ]  Přejít na stránku Předchozí  1 ... 4, 5, 6, 7, 8, 9, 10 ... 23  Další

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 9 návštevníků


Nemůžete zakládat nová témata v tomto fóru
Nemůžete odpovídat v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete přikládat soubory v tomto fóru

Hledat:
Přejít na:  
Založeno na phpBB® Forum Software © phpBB Group
Český překlad – phpBB.cz