Uscita video Raspberry Pi Pico

TL;DR

Il Raspberry Pi Pico è un piccolo e incredibile microcontrollore. Non dispone di un'interfaccia di uscita video integrata, come i fratelli maggiori Raspberry Pi Zero / 1 / 2 / 3 / 4 / 400 (HDMI / doppio HDMI nel loro caso), è possibile aggiungere un'uscita video al Pico! (Come VGA o DVI su un connettore HDMI, per maggiori dettagli continuare a leggere)

In questo post vi spiegheremo perché l'uscita video è una caratteristica molto speciale per i microcontrollori e quali tipi di uscita video potete costruire o acquistare per il vostro Pico. Vi mostreremo anche un esempio di codice, già precompilato per voi, in modo che possiate scaricarlo direttamente, e poi parleremo di ciò che dovete modificare per farlo funzionare.

Il nostro negozio gemello, buyzero.devende una serie di accessori per Pico, tra cui la calza DVI, e il Scheda VGA per Pico.

Nota: il Pico non è dotato di un sistema operativo Linux come il Raspberry Pi Zero W ad esempio. Quindi, molto probabilmente, dovrete approfondire le vostre conoscenze su come codificare e caricare le vostre applicazioni sul Pico. Se questo non fa per voi, il Pi Zero W potrebbe essere una soluzione più adatta per iniziare a giocare 🙂

Uscita video Pico tramite la calza DVI: è possibile realizzare animazioni selvagge. Riconoscete il volto? Fatecelo sapere nei commenti

Se siete riusciti a realizzare il vostro progetto video con Raspberry Pi Pico, fatecelo sapere nei commenti!

Perché l'aggiunta di un'uscita video Raspberry Pi Pico è una sfida?

Il Raspberry Pi 400è basato sul SoC BCM2711. Questo system-on-a-chip è dotato di un hardware specializzato che si occupa dell'uscita video, preparandola perfettamente nel formato specificato per la/e interfaccia/e video, due porte HDMI nel caso del Pi 400. Dispone inoltre di una memoria enorme (4 GB), in cui memorizzare i dati di uscita video.

Per capire meglio questo aspetto, è necessario esaminare alcuni fondamenti dell'uscita video del computer:

Visualizzazione e trasmissione video

Vediamo la visualizzazione sullo schermo "in una volta sola". Il nostro cervello è dotato di un cablaggio massicciamente parallelo, in cui ingerisce le informazioni da tutte le cellule della retina disponibili contemporaneamente (cellule a cono e cellule a bastoncello).

un gatto con una farfalla, un esempio di ciò che vogliamo mostrare ai nostri utenti.
Foto di Karina Vorozheeva su Unsplash

(* il meccanismo di trasmissione al cervello integra le informazioni attraverso diverse cellule della retina, ma resta il fatto che molte informazioni vengono trasmesse in parallelo. Guardare in cellule bipolari se siete interessati a saperne di più)

Il cervello, tuttavia, ha delle latenze - non è in grado di risolvere cambiamenti negli stimoli visivi più rapidi di 13 ms. (ovvero circa 1 su 75 fotogrammi al secondo).

Per noi questo significa che se vogliamo visualizzare un'animazione davvero fluida, dobbiamo mostrare circa 60 immagini statiche diverse al secondo. Il nostro cervello interpreterà queste immagini statiche come una riproduzione fluida e realistica.

In genere, vogliamo che queste immagini siano a colori.

Abbiamo tre diversi fotorecettori per i colori, quindi lo schermo visualizza solo questi tre diversi colori con una diversa luminosità. Anche in questo caso, il nostro cervello sintetizzerà i colori intermedi a partire dalle informazioni ricevute. (Una nota a margine, viola non esiste realmente come lunghezza d'onda propria, ma è una miscela di rosso e blu).

I colori primari sono tre:

  • rosso
  • verde
  • blu

Insieme, sono conosciuti come RGB. Quando si aggiungono tutti e tre, si ottiene il bianco. Aggiungendo il rosso al verde si ottiene il giallo, aggiungendo il verde al blu si ottiene il ciano, aggiungendo il blu al rosso si ottiene il magenta.

Quindi ciò che vogliamo veramente produrre sono:

  • tre colori diversi,
  • ciascuno con un diverso valore di luminosità
  • idealmente circa 60 valori diversi al secondo (60 Hz)
  • una determinata risoluzione dello schermo, ad esempio 640 x 480

Calcoliamo la quantità di dati al secondo:

  • 3 colori
  • profondità di colore a 8 bit
  • x 60
  • x 640 x 480

= 442.368.000 bit al secondo = ca. 422 MBit/s

(Si consideri che, ad esempio, l'interfaccia USB v1.1 del Pico ha una velocità di circa 10 Mbit/s - circa 40 volte inferiore).

Per produrre queste informazioni, l'ideale sarebbe conservarle come bitmap nella RAM: una parte dell'applicazione aggiornerà l'immagine nella RAM, mentre un'altra si occuperà di fornire i dati in un formato che possa essere utilizzato da un monitor. Questa deve essere la RAM, poiché stiamo operando ad alta velocità e dobbiamo essere in grado di leggerla in modo affidabile con piccole latenze, cosa che la memoria Flash non sarebbe in grado di fare.

Calcoliamo la quantità di RAM necessaria:

  • 640 x 480 (risoluzione)
  • x 3 (colori)
  • x 8 bit (profondità di colore)

= 7372800 bit = 900 kByte (nota: 1 Byte = 8 Bit)

Mentre 900 kByte si inseriscono molte volte nella RAM di un computer. Raspberry Pi 400, il Pico ha solo 264KB di RAM.

Come vedete, dovremo ridurre alcuni parametri (ad esempio la risoluzione, la profondità di colore, ...) se vogliamo inserire una bitmap nella RAM, oppure dovremo escogitare qualche idea intelligente su come farla funzionare senza memorizzare tutto!

Il PIO RP2040 di Pico consente l'uscita di dati video

Infine, mentre il Raspberry Pi 400 e altri modelli di Raspberry Pi dispongono di circuiti hardware dedicati per elaborare tutte queste informazioni ed emetterle in modo affidabile, il Pico non dispone di circuiti speciali dedicati solo all'uscita video.

Ma ha un asso nella manica! L'RP2040 supporta il PIO (programmable IO). Il PIO è dedicato all'emulazione di diverse interfacce con tempistiche precise ed è molto potente! Può essere programmato per leggere dalla RAM e produrre ad alta velocità.

Utilizzeremo il PIO per emettere video su alcuni pin GPIO e useremo alcuni circuiti aggiuntivi (resistenze) per portare il segnale nella condizione desiderata, a seconda dell'interfaccia di uscita video a cui vogliamo collegare il Pico.

Cronologia del formato di uscita video

Prima di entrare nel merito di come aggiungere un'uscita video al vostro Raspberry Pi Pico, diamo un'occhiata alla storia dei formati di uscita video.

Come già discusso, l'occhio umano non è in grado di rilevare cambiamenti nelle immagini più velocemente di circa 13 ms. Uno dei primi approcci alla costruzione di monitor per computer è stato quindi il CRT (tubo catodico) monitor.

Il monitor CRT utilizza diversi raggi (2) per scrivere l'immagine sullo schermo riga per riga (4), (5) mostra un primo piano dei fosfori colorati che vengono colpiti singolarmente dai diversi raggi. CC BY-SA 3.0 Peo~commonswiki 

Il CRT è dotato di tre cannoni a raggi, che spazzano pixel per pixel, linea per linea. (e poi hanno bisogno di tempo per tornare al punto di partenza). Lo schermo è dotato di fosfori colorati che continuano a emettere luce per un po' di tempo dopo che il raggio lo ha attraversato. Al passaggio successivo della pistola a raggi su questo particolare pixel, l'intensità del raggio potrebbe essere cambiata, il che si tradurrà in un pixel più scuro. Il nostro cervello fonde i pixel colorati adiacenti del fosforo in un unico pixel e non è in grado di notare le variazioni di luminosità tra un raggio e l'altro.

Primo piano del CRT, che mostra i colorati punti di fosforo. da: FreeImages.com / hubert jelen

In questo modo si crea l'illusione di un'immagine in movimento.

In effetti non è necessario che tutti i dati siano presenti all'inizio dell'immagine, ma è necessario che i dati siano presenti all'inizio dell'immagine. solo il valore di rigidità del pixel corrente. L'intensità del raggio verrà modificata in base a ciò. A tale scopo possiamo utilizzare un segnale analogico: ad esempio, aumentando la tensione si aumenterà la luminosità.

Abbiamo bisogno di tre fili diversi per i vari colori (per pilotare singolarmente ogni cannone a raggi) e dobbiamo avere un modo per far sapere al monitor quando deve essere avviata una nuova riga e quando deve essere avviata una nuova immagine (quando tutte le righe sono state visualizzate).

VGA (array grafico video)

La VGA è stata progettata per i monitor CRT. È ancora ragionevolmente comune come ingresso nei monitor, anche se sta diventando sempre più obsoleto con il passaggio alla trasmissione completamente digitale (per saperne di più, più avanti).

Questo è anche lo standard di uscita video più semplice da utilizzare sul Pico.

Accanto a una specifica (con le modalità di risoluzione predefinite), ha specificato un connettore, il connettore VGA:

Porta VGA; foto di Duncan Lithgow

Dispone di 15 pin:

  1. RED (video rosso)
  2. VERDE (video verde)
  3. BLU (video blu)
  4. ID2/RES (riservato)
  5. GND (massa HSync)
  6. RED_RTN (ritorno rosso, massa analogica per il rosso)
  7. GREEN_RTN (ritorno verde, massa analogica per il verde)
  8. BLUE_RTN (ritorno blu, massa analogica per il blu)
  9. KEY/PWR (+5 V CC alimenta il chip EEPROM EDID su alcuni monitor)
  10. GND (massa VSync, DDC)
  11. ID0/RES (riservato)
  12. ID1/SDA (dati I2C da DDC2)
  13. HSync (sincronizzazione orizzontale)
  14. VSync (sincronizzazione verticale)
  15. ID3/SCL (orologio I2C da DDC2)

Nota: i cavi VGA possono supportare diverse risoluzioni, profondità di colore e frequenze di aggiornamento, mentre la parola "VGA", quando si riferisce alla risoluzione, significa di solito 640 x 480.

Come vedete, ci sono tre fili che trasportano i dati dell'immagine, uno per ogni colore. Il segnale viene trasmesso con una tensione di picco (massima) di 0,7 V. I segnali trasmessi per i colori sono di natura analogica: tensioni più elevate aumentano la luminosità, una tensione pari a 0 significa che il pixel è scuro/spento.

Far funzionare l'uscita VGA su Pico

Ciò significa che il Pico, con la sua uscita digitale a 3,3 V, ha tensioni sufficientemente elevate per poter pilotare questi pin RGB nel cavo VGA (che si aspetta tensioni di 0 - 0,7 V). In realtà dobbiamo ridurre la tensione utilizzando delle resistenze.

Possiamo costruire un semplice DAC (convertitore analogico digitale) combinando diverse resistenze e pin GPIO. A seconda della combinazione di pin GPIO attivi in un dato momento, abbiamo diversi livelli di tensione (= livelli di luminosità):

Un semplice DAC VGA, immagine tratta da "Progettazione hardware con l'RP2040".

Come si può vedere nell'immagine qui sopra, cinque GPIO (0 -4) pilotano un canale (rosso in questo caso), il che ci dà una profondità di cinque bit. Le resistenze sono ponderate 1:2:4:8:16, ad esempio il bit meno significativo (LSB) del rosso ha una resistenza di 8,06K.

Quando si cerca di costruire questo circuito, si dovrebbe optare per 1 resistenze di tolleranza % per ottenere una buona immagine.

Fare riferimento a "Progettazione hardware con l'RP2040" per capire come sono stati calcolati i valori delle resistenze. In breve, se li pilotiamo tutti insieme, avremo una tensione di 0,74 V, che va bene per i nostri scopi.

In particolare, il progetto di riferimento suggerisce di supportare un formato di dati RGB a 16 bit comunemente utilizzato (RGB-565), che utilizza 5 bit per il rosso e il blu e 6 per il verde. Possiamo ridurre l'uscita fisica del verde a 5 pin GPIO come per gli altri colori, per risparmiare un pin.

Inoltre, sono necessari altri 2 pin per la temporizzazione del blanking orizzontale e verticale (HSYNC e VSYNC).

Questo ci porta a un totale di 17 pin GPIO per pilotare un'uscita VGA. Fortunatamente, il Pico ha 26 pin GPIO disponibili, che ci permettono di pilotare l'uscita VGA.

Come accennato in precedenza, il Pico è anche in grado di pilotare questi pin alle frequenze necessarie e con tempistiche precise, grazie alla funzione PIO (I/O programmabile) dell'RP2040.

Hardware di uscita video VGA di Raspberry Pi Pico

Scheda demo Raspberry Pi Pico VGA, scheda SD e audio - immagine tratta dal manuale Progettazione hardware con RP2040

Raspberry Pi ha progettato e reso open-source una scheda portante per il Pico che mostra diverse caratteristiche:

  • Uscita VGA
  • pulsanti
  • slot microSD
  • uscite audio (analogiche PWM, digitali I2S)

Acquista la scheda Pico VGA / Audio / microSD

Noi (buyzero.de) sono attualmente in procinto di far costruire e assemblare per noi questa scheda di progettazione di riferimento. Contattateci se volete essere avvisati, una volta che la scheda potrà essere acquistata!

Il La scheda VGA Pico è ora disponibile per l'acquisto presso di noi, con uno stock iniziale limitato.!

Nel frattempo, anche Pimoroni ha creato una versione di questa scheda, che ha chiamato Base demo Pimoroni Pico VGA.

Nota a margine: ogni pin dei 15 pin di uscita rgb dovrà comunque essere pilotato a circa 17,58 Mbit/s, che è comunque un numero impressionante, ma molto più gestibile!

Software necessario per pilotare l'uscita VGA

Poiché stiamo lavorando su Pico, non ci sono "driver grafici" che possiamo semplicemente installare. Dobbiamo scrivere il codice da soli... o no 🙂

Fortunatamente, le persone che hanno progettato la scheda hardware per noi forniscono già del codice che possiamo utilizzare, in modo da poterci concentrare sul nostro progetto.

Il codice di esempio che si può utilizzare si trova nel repository di pico-playground:

In questo repository, c'è un semplice lettore di filmati chiamato popcorn (che riproduce film in un formato personalizzato). A big buck bunny, di dimensioni pari a 1,6 GB, può essere scaricato qui. Si noti che si tratta di immagini disco grezze da scrivere su una scheda SD; questo esempio presuppone che si disponga della scheda demo VGA, che ha uno slot SD. Istruzioni per Conversione di film sono anche indicati.

Il codice utilizza il metodo pico_scanvideo (pico/scanvideo.h) dal file pico_extras repository. Date anche un'occhiata a quel repository per il codice di esempio audio!

L'API emette i dati RGB paralleli e il segnale di sincronizzazione sui pin per la VGA DPI (utilizzando i DAC a resistenza, come descritto sopra).

Un'osservazione precisa:

  • Il programma PIO scanline predefinito accetta dati codificati in base alla lunghezza di esecuzione: ciò significa che è possibile risparmiare RAM per generare aree di colore piatte (sto pensando ai giochi!).

In generale, si dovrebbe usare il metodo libreria pico_scanvideo invece di sviluppare da zero il codice per l'uscita VGA 🙂

buone pratiche di codifica

Altre demo

Controlla il directory scanvideo del repository pico-playground:

  • mandelbrot: un generatore di mandelbrot che utilizza un framebuffer 320x240x16
  • sprite_demo: teste di Eben che rimbalzano (video in cima alla nostra pagina!)
  • modello_di_prova: Visualizzazione delle barre di colore

Utilizzo della scheda VGA

È necessario passare un parametro aggiuntivo a CMake durante la compilazione:

-DPICO_BOARD=vgaboard

TBD: Aggiungere guide passo-passo

DVI: Interfaccia visiva digitale

La tecnologia va avanti. La vita va avanti. I televisori a tubo catodico sono diventati sempre più obsoleti, sostituiti da schermi piatti più moderni, dotati di interfacce digitali. Nessun raggio mobile, solo pixel.

Per un po' di tempo, i segnali hanno continuato a essere analogici, ma questo non è molto desiderabile, poiché dobbiamo prendere qualcosa di digitale, trasformarlo in qualcosa di analogico e poi ritrasformarlo in qualcosa di digitale. L'immagine sarà meno precisa e avremo circuiti aggiuntivi di cui potremmo fare a meno.

Entra in scena il DVI. Il DVI offriva un'opzione per la trasmissione di segnali analogici, per cui era possibile costruire semplici adattatori/cavi da DVI a VGA. Naturalmente, la scheda grafica doveva emettere sia dati analogici che digitali. Ma questo ha contribuito all'accettazione dello standard e alla sua diffusione.

Qui siamo interessati ai segnali digitali (DVI-D), in quanto vorremmo farli funzionare a bit-bang dal Raspberry Pi Pico.

Con DVI-D, i dati dell'immagine vengono trasmessi in modo seriale.

Una connessione DVI "single link" (la più semplice) è costituita da quattro I cosiddetti collegamenti TMDS (transition minimized differential signaling):

  • rosso
  • verde
  • blu
  • orologio a pixel

La segnalazione differenziale viene utilizzata per ridurre al minimo le interferenze (dato che

Abbiamo un totale di 24 bit per pixel (8 bit x 3 colori) e codifichiamo i dati utilizzando la codifica 8b10b (gli 8 bit sono mappati in simboli a 10 bit sulla linea fisica effettiva per ottenere, tra le altre cose, il bilanciamento della corrente continua).

Il DVI tratta i pixel in modo simile al VGA: tutto viene ritrasmesso ogni volta che l'immagine "ricomincia" e i dati vengono cronometrati con precisione. È come una linea telefonica, dove la linea è costantemente in uso quando due persone parlano.

Nota: in contrasto con questo, DisplayPort tratta i dati come pacchetti - che presenta una serie di vantaggi.

A differenza dell'esempio VGA discusso in precedenza, poiché i dati vengono inviati in formato digitale, invece che con valori di luminosità analogici, ciò significa volumi di dati molto più elevati.

Luca Scricciolo, un ingegnere di Raspberry Pi, riteneva che l'RP2040 (il cuore del Pico) fosse in grado di pilotare anche l'uscita DVI, sempre tramite PIO.

Il risultato è il Repository PicoDVI e progetti, e il Calza DVI Pico.

Luke Wren ha calcolato che circa Dati seriali a 252 Mbps deve essere pilotato attraverso i pad digitali GPIO - seriale differenziale, che viene emulato con due pad single-ended.

dc_accoppiamento.png
Fonte: Archivio di Luke Wren (licenza BSD-3)

Qui sopra vedete il circuito utilizzato per pilotare l'uscita DVI (utilizzando un connettore HDMI, di cui si parla più avanti) - sono semplicemente diversi 270 Ohm resistenze.

Luke Wren è andato oltre e ha aggiunto una doppia uscita DVI al suo layout PicoDVI con una scheda plugin:

due_display.jpg
Dimostrazione di Luke Wren uscita su due display utilizzando il proprio progetto

HDMI: compatibile verso il basso con DVI

L'HDMI è la prossima evoluzione dei connettori (in concorrenza con DisplayPort). È completamente compatibile con i segnali digitali DVI e quindi è possibile disporre di semplici convertitori DVI / HDMI puramente passivi.

Calza DVI Pico

Pico DVI Sock è una soluzione semplice ed economica per aggiungere un'uscita video digitale al vostro Pi. È stato progettato da Luke Wren (vedi descrizione sopra). Si tratta di un'uscita DVI con un connettore HDMI. Poiché l'HDMI è compatibile con il DVI, è possibile utilizzare un cavo HDMI per collegare il Pico a schermi HDMI:

saldatura_04.jpg
Foto di Luca Scricciolo, Licenza CC0-1.0

Programmazione della calza DVI Pico

TL;DR

È possibile scaricare il nostro picodvi-test.zip e iniziare a giocare con l'esempio di compilazione .UF2. Include anche un PDF che fornisce una guida passo-passo.

Esempi di codice

Luke Wren fornisce esempi di codice nel suo repository. Tuttavia, per utilizzarli con Pico DVI Sock, è necessario impostare la configurazione corretta da utilizzare. In questo mini-tutorial vi mostreremo come fare.

Prerequisiti per l'installazione

sudo apt install cmake gcc-arm-none-eabi libnewlib-arm-none-eabi build-essential

Clonare il repo PicoDVI di Luke Wren:

cd ~
mkdir pico
cd pico 
git clone https://github.com/raspberrypi/pico-sdk
cd pico-sdk
git submodule update --init
cd ~/pico
git clone https://github.com/Wren6991/PicoDVI.git

Per utilizzare gli esempi di codice con il Pico DVI Sock, è necessario impostare il parametro configurazione corretta dei pin da utilizzare. Aggiungere la seguente riga a common_dvi_pin_configs.h solo prima il primo #ifndef

#define DEFAULT_DVI_SERIAL_CONFIG pico_sock_cfg

Costruire gli esempi

cd PicoDVI/software/
mkdir build
cd build
export PICO_SDK_PATH=~/pico/pico-sdk
make -j$(nproc)

Installare gli esempi su Pico

Gli esempi costruiti si trovano nella cartella software/build/apps.

Tenere premuto il tasto BOOTSEL sul Pico, quindi collegare la scheda al PC tramite il connettore microUSB. Copiare e incollare sul Pico il file .uf2 che si desidera provare, ad esempio sprite_bounce.uf2.

Il Pico si riavvia automaticamente e dovrebbe essere possibile vedere l'uscita sul connettore HDMI (in realtà è DVI :-)).

Scaricare

È possibile scaricare il nostro picodvi-test.zip e iniziare a giocare con l'esempio di compilazione .UF2. Include anche un PDF che fornisce una guida passo-passo. Se il file sprite_bounce.uf2 Se l'esempio non funziona, provare con un altro monitor: è possibile che non tutti i monitor siano compatibili con questa uscita video.

Se siete arrivati fin qui, fateci sapere nei commenti come ha funzionato per voi e quali idee di progetto vi sono venute in mente!

Acquistare una calza DVI Pico

La nostra pagina gemella, buyzero.de, contiene i prodotti di Calza DVI Pico in due varianti:

Nota a margine: Display DBI e DSI

Come nota a margine, il repository Raspberry Pi Pico Extras contiene segnaposti per DBI (display MIPI DBI a 16 bit - con i dati che vengono passati in parallelo) e DSI (display seriali MIPI), quindi in futuro potremmo vedere il supporto anche per questi display.

21 commenti

  1. VanTa in Marzo 20, 2021 il 8:27 am

    Qualche esempio di uscita composita con genlock?

    • PiCaptain in Aprile 6, 2021 il 2:47 pm

      Penso che l'uscita composita dovrebbe essere possibile, ma non ho ancora visto nulla al riguardo.

  2. Miroslav Nemecek in Giugno 10, 2021 il 10:24 am

    In alternativa a scanvideo, ho implementato un'altra libreria VGA/TV per Raspberry Pico - 'PicoVGA', che credo sia più facile da usare: http://www.breatharian.eu/hw/picovga/index_en.html

    • raspi berry in Luglio 1, 2021 il 5:20 pm

      Grazie per aver condiviso le informazioni sulla vostra biblioteca!

  3. Ashesh Rai in Giugno 10, 2021 il 5:39 pm

    Ehi, è possibile utilizzare questa HDMI come INPUT ed elaborare i dati.

    • raspi berry in Luglio 1, 2021 il 5:20 pm

      per come è programmato e poiché le resistenze agiscono per limitare il segnale di uscita del Raspberry Pi, no.
      eventualmente si potrebbe utilizzare un adattamento del progetto, con qualcosa che aumenti il livello del segnale invece di abbassarlo / e naturalmente un codice adattato per far funzionare le uscite come ingressi, per poter elaborare i dati video all'interno del Pico.

  4. Lorencz in Giugno 25, 2021 il 2:25 pm

    Tuttavia, alcuni consigli pratici. Grazie alla lotteria del silicio, la vostra particolare unità potrebbe non overcloccare proporzionalmente anche la parte gpu e cpu. Quindi, se non avete bisogno di una grafica più veloce, non overcloccate la GPU. In questo modo si aumenta la possibilità di overcloccare più in alto e di avere un sistema stabile. Inoltre, un consumo energetico inferiore e una minore corrente di alimentazione significano una maggiore stabilità. I Raspberry Pis con 4 core di CPU possono incontrare un muro di alimentazione quando sono caricati con tutti e 4 i core attivi. Il PMIC (circuito integrato di gestione dell'alimentazione) integrato potrebbe non fornire la corrente necessaria per tutti i core e spegnersi per un breve periodo di tempo, riavviando così il Pi. Raffreddare anche il PMIC. Non eccedete con la tensione massima se avete bisogno di un carico per tutti i core (compilazione del kernel, elaborazione di numeri pesanti, ecc). Qui abbiamo un RPI4 che può funzionare a 1850MHz con tutti i core attivi con over_voltage=2, ma con un over_voltage più alto=3, si riavvia quando viene caricato. Una sovratensione più elevata significa anche una corrente più elevata e la circuiteria del PMIC ha una corrente di uscita limitata. Più il PMIC e gli induttori circostanti sono caldi, meno corrente può fornire. Si tratta di una limitazione del chip PMIC, non del chipset BCM. Pertanto, se si verificano riavvii occasionali in condizioni di carico elevato, il problema potrebbe essere il surriscaldamento del PMIC. Se il Pi si blocca, non si tratta di un problema particolare, ma forse di una perdita di lottizzazione del silicio. L'underclock di una parte della GPU può essere un modo interessante per aumentare l'overclockabilità (sistema più stabile), ma AFAIK, i vecchi Raspberry Pis avevano la cache L2 legata alla GPU, quindi l'underclock potrebbe rallentare anche la CPU. Ho documentato come si riscalda il PMIC del Raspberry Pi 4 - tutti gli altri chip sono raffreddati direttamente da un dissipatore. La vista è dal lato inferiore, cioè si vede il PCB riscaldato. Nell'angolo in basso a sinistra si trova il PMIC.

  5. Bing in Ottobre 23, 2021 il 7:20 am

    Ciao,
    Sono un noob qui... Qualcuno può fornire uno schema per l'uscita di un display cvbs. E qualsiasi modifica necessaria al codice sorgente?

    • PiCaptain in Ottobre 23, 2021 il 1:40 pm

      Spiacente, non ho idea di quali siano le caratteristiche dei cvb

  6. farooqkz in Novembre 8, 2021 il 8:30 am

    Ciao
    Grazie per il bel post. L'ho letto dall'inizio fino a quasi alla fine 😉
    Tuttavia, ho alcune domande stupide:
    1. RPi Pico è dotato di PWM. È possibile utilizzare un singolo pin con PWM per emettere un segnale analogico da inviare ai pin della VGA? In questo modo si utilizzeranno meno pin. Inoltre, i circuiti sono più semplici e piccoli.
    2. È possibile ottenere un'uscita AV analogica da RPi Pico utilizzando forse il PWM? Credo che la maggior parte dei televisori lo supporti. Forse utilizzando un modulo come https://thecaferobot.com/store/pub/media/catalog/product/cache/14d1897c7f1bd4f35a7de1523300314a/l/c/lcd-01-057-1.jpg disponibile in un negozio locale a cui ho accesso. Tuttavia, l'immagine che ho inviato è un modulo per Arduino, ma dovrebbe essere possibile utilizzarlo anche con Pico, suppongo.
    3. Se si volesse utilizzare la VGA o la DVI in combinazione con il Pico, è possibile non utilizzare le schede VGA o DVI di supporto? Perché nella mia regione non sono disponibili per l'acquisto e le mie capacità non sono sufficienti per crearne una da solo.

    • raspi berry in Novembre 9, 2021 il 10:29 am

      1. I pin PWM probabilmente non avranno la precisione di temporizzazione che si desidera per l'uscita video (per questo motivo utilizziamo PIO che ha una temporizzazione molto precisa). Ma perché non provare 🙂
      2. Presumo che dovrebbe essere possibile generare un'uscita AV analogica dal Raspberry Pi Pico. Dubito che il PWM sia "sufficiente" per questo (sarei felice di sentire qualcuno con più esperienza al riguardo!).
      Si noti che il PWM non fa altro che accendere e spegnere il segnale, mentre la scala di resistenze utilizzata ad esempio nella scheda VGA fornisce livelli di segnale continui. Quindi, per funzionare, la soluzione PWM deve funzionare a frequenze molto più elevate di quelle richieste per il segnale reale. Inoltre, non sono sicuro di come l'hardware esterno reagirebbe al fatto che il segnale è PWM invece di un segnale analogico continuo.
      Forse è possibile attenuare il fenomeno utilizzando un condensatore molto piccolo, per il quale è necessario eseguire i calcoli appropriati.
      3. le schede VGA / DVI contengono il necessario (soprattutto resistenze). È possibile guardare lo schema e costruire la propria configurazione su una breadboard; ho visto qualcuno farlo per la VGA.
      Detto questo, effettuiamo spedizioni internazionali:
      https://buyzero.de/products/raspberry-pi-pico-vga-audio-sd-expansion-board?variant=39412666335412
      Pico DVI Sock @ buyzero.de negozio

  7. Nikolay in Dicembre 18, 2021 il 1:16 pm

    Ottime informazioni. Grazie.
    Ho trovato anche questo: Uscita video composita su Raspberry pico
    http://www.breakintoprogram.co.uk/projects/pico/composite-video-on-the-raspberry-pi-pico

  8. Marcelo in Aprile 23, 2022 il 10:09 pm

    Sono riuscito a costruire il picoDVI di Wren6991 e ad integrarlo con un triplo ADC per la scansione RGB 15Khz (640×240).
    Nel 320×240 che utilizza solo un core, l'altro viene lasciato libero di ricevere gli interrupt HSYNC /VSYNC e di preparare i trasferimenti dma senza problemi, ma nel 640×480 l'utilizzo dei due core blocca il corretto funzionamento del sistema.
    Dato che ho bisogno di metà delle linee, c'è un modo per avere una linea nera sempre pronta per le linee dispari? Con questo rilascio un nucleo per i miei compiti.

    • Ed T in Febbraio 25, 2023 il 11:25 pm

      Non credo sia necessario inviare linee vuote. Si inviano tutte le linee dispari, si invia un segnale vsync con una mezza linea in più e si inviano le linee pari. Fate qualche ricerca sugli "impulsi di sincronizzazione video interlacciati".

  9. nix in Giugno 9, 2022 il 2:40 pm

    Qualcuno sa come caricare i video fatti da me piuttosto che quelli di esempio? Grazie in anticipo!

    • Wayne in Luglio 30, 2022 il 1:25 pm

      Sono interessato a utilizzarlo per un'unica visualizzazione audiovisiva. Per favore, qualcuno può dirmi:

      È possibile alimentare il Pico attraverso il cavo HDMI, anche se si trova sul lato broadcast del cavo?

      È possibile impostare lo spazio colore Rec2100 (spazio colore HDR rec 2020)?

      È possibile collegare linee aggiuntive all'HDMI per inviare l'audio (e la segnalazione rec2020/HDR)?

      È possibile emettere video attraverso uno dei formati video USB (video da Pico invariato attraverso un adattatore da USB a Pico)?

      Utilizzando il Pico wireless, è possibile utilizzare Miracast?

      È possibile realizzare una normale modalità video bitmap e manipolarla per la grafica di gioco con i cicli residui?

      Seedstudio ha una scheda mini RP2040. La scheda di interfaccia HDMI e il software possono funzionare su questa scheda. Hanno anche una versione RiscV con wifi, quindi sarebbe bene se si potesse ricompilare per questo.

      https://www.seeedstudio.com/XIAO-RP2040-v1-0-p-5026.html?queryID=31d59a67f7c148df996ba9c1bb7563e3&objectID=5026&indexName=bazaar_retailer_products

      Sono interessato alle applicazioni di gioco, come l'uso di orologi da gioco.

      C'è qualche piattaforma di run time minimamente praticabile in JavaScript da mettere lì?

      Scusa se ti chiedo molto, ma
      Il più interessante.

      Grazie.

  10. hitech444 in Luglio 17, 2022 il 4:20 pm

    Posso usare la vostra scheda insieme all'interprete MMBasic di Geoff? Ci sono limitazioni hardware sui miei programmi a causa della vostra scheda?

    • Graham in Novembre 10, 2022 il 10:00 am

      Le grandi menti pensano allo stesso modo, anch'io stavo pensando a questa linea! Ho già costruito il computer MMBASIC basato su Raspberry Pico con uscita VGA, ed è a dir poco fantastico! Tuttavia, l'uscita DVI-D (pseudo HDMI) porta la capacità grafica a un nuovo livello! Naturalmente MMBASIC non deve sfruttare appieno la profondità di colore o la risoluzione più elevata, ma operare a 640×480 con, ad esempio, 64 colori, sarebbe davvero fantastico.

      Detto questo, prevedo due problemi immediati.
      1. La soluzione VGA utilizza anche i pin PIO e uno dei core viene utilizzato per la gestione degli sprite, il frame buffering e così via. Credo. Come minimo sarà necessaria una modifica del codice, almeno per sostituire l'implementazione PIO della VGA. Come API, sarei sorpreso se l'interfaccia tra PIO (VGA) e il codice del core del framebuffer fosse la stessa della soluzione DVI PIO, ma potrei sbagliarmi. In ogni caso, sarà necessario modificare il codice.
      2. RAM. Non ce n'è abbastanza, quindi una risoluzione più elevata e una maggiore profondità di colore saranno un problema. Ma credo di avere una soluzione. Usare una PSRAM esterna e magari usare un RP2040/Pico come "GPU" con la sua PSRAM dedicata collegata. Il dispositivo parla con un secondo RP2040 che fornisce la "CPU" o il cervello del sistema, eseguendo MMBASIC, e può manipolare/spostare le risorse grafiche dando istruzioni alla GPU con un overhead minimo (ad esempio tramite collegamento I2C). Voglio/ho bisogno di questo 😉

  11. Dave in Dicembre 30, 2023 il 1:27 pm

    64 euro per la "Raspberry Pi Pico VGA Audio SD Expansion Board"? Sarebbe meglio usare uno zero...

    • Jörg in Maggio 25, 2024 il 9:31 pm

      Pimoroni ne ha uno meno costoso (30 €), ma ancora molto. Il DVI Sock costa solo pochi euro ...

Lascia un commento