Saída de Vídeo Raspberry Pi Pico
TL;DR
O Raspberry Pi Pico é um pequeno microcontrolador incrível. Embora não tenha uma interface de saída de vídeo incorporada, como os seus irmãos maiores Raspberry Pi Zero / 1 / 2 / 3 / 4 / 400 (HDMI / double HDMI no caso deles), é possível adicionar uma saída de vídeo ao Pico! (Como VGA ou DVI através de um conetor HDMI, leia mais para obter detalhes)
Neste post, vamos explicar porque é que uma saída de vídeo é uma caraterística muito especial para os microcontroladores, e que tipos de saída de vídeo pode construir ou comprar para o seu Pico. Também lhe mostraremos algum código de exemplo - já pré-compilado para si, para que possa descarregá-lo diretamente, e depois falaremos sobre o que precisa de modificar para o fazer funcionar.
A nossa loja irmã, buyzero.de, vende uma variedade de acessórios para o Pico - incluindo a meia DVIe o Placa de suporte VGA para o Pico.
Nota: o Pico não tem um sistema operativo Linux como o Raspberry Pi Zero W por exemplo. Por isso, o mais provável é que tenha de se aprofundar um pouco mais na aprendizagem de como codificar e carregar as suas aplicações para o Pico. Se não for esse o seu objetivo, o Pi Zero W talvez seja a melhor opção para começar a brincar 🙂
Se conseguiu realizar o seu próprio projeto de vídeo com o Raspberry Pi Pico, diga-nos nos comentários!
Porque é que adicionar uma saída de vídeo Raspberry Pi Pico é um desafio?
O Raspberry Pi 400por exemplo, é baseado no SoC BCM2711. Este system-on-a-chip possui um hardware especializado que se encarrega da saída de vídeo, preparando-o perfeitamente no formato especificado para a(s) interface(s) de vídeo específica(s), duas portas HDMI no caso do Pi 400. Dispõe igualmente de uma enorme memória (de 4 GB), na qual são armazenados os dados de saída do vídeo.
Para compreender melhor esta questão, é necessário analisar alguns fundamentos da saída de vídeo do computador:
Visualização e transmissão de vídeo
Vemos a imagem no ecrã "ao mesmo tempo". O nosso cérebro tem uma cablagem maciçamente paralela, na qual recebe informações de todas as células da retina disponíveis ao mesmo tempo (células cone e células bastonete).
(* o mecanismo de transmissão para o cérebro integra a informação através de várias células da retina, mas o facto é que muita informação é transmitida em paralelo. Veja em células bipolares se estiver interessado em saber mais)
O cérebro, no entanto, tem latências - não é capaz de resolver alterações nos estímulos visuais mais rápidas do que 13 ms. (que é cerca de 1 em 75 fotogramas por segundo).
Para nós, isto significa que, se quisermos mostrar uma animação realmente suave, temos de mostrar cerca de 60 imagens estáticas diferentes por segundo. O nosso cérebro interpretará estas imagens estáticas como uma reprodução suave e realista.
Normalmente, queremos que estas fotografias sejam a cores.
Temos três fotorreceptores diferentes para a cor, pelo que o ecrã apresenta apenas estas três cores diferentes com brilho diferente. Mais uma vez, o nosso cérebro sintetiza as cores intermédias a partir da informação que recebe. (Numa nota à parte, púrpura não existe realmente como um comprimento de onda próprio - é uma mistura de vermelho e azul).
Existem três cores primárias:
- vermelho
- verde
- azul
Juntos, são conhecidos como RGB. Quando se juntam os três, obtém-se o branco. A adição do vermelho ao verde produz o amarelo, a adição do verde ao azul produz o ciano e a adição do azul ao vermelho produz o magenta.
Portanto, o que queremos realmente produzir é:
- três cores diferentes,
- cada um com um valor de brilho diferente
- idealmente, cerca de 60 valores diferentes por segundo (60 Hz)
- uma determinada resolução de ecrã - por exemplo, 640 x 480
Vamos calcular a quantidade de dados que isto representa por segundo:
- 3 cores
- x profundidade de cor de 8 bits
- x 60
- x 640 x 480
= 442.368.000 bits por segundo = ca. 422 MBit/s
(Considere que, por exemplo, a interface USB v1.1 no Pico tem cerca de 10 Mbit/s - cerca de 40 vezes menos débito!)
Para produzir esta informação, o ideal seria também guardar esta informação como um mapa de bits na RAM - uma parte da aplicação actualizará a imagem na RAM, enquanto outra se encarregará de entregar os dados num formato com que um monitor possa trabalhar. Isto tem de ser RAM, uma vez que estamos a funcionar a alta velocidade e precisamos de ser capazes de ler esta informação de forma fiável com pequenas latências - o que a memória Flash não proporciona.
Vamos calcular a quantidade de RAM de que necessitamos:
- 640 x 480 (resolução)
- x 3 (cores)
- x 8 bits (profundidade de cor)
= 7372800 bits = 900 kBytes (nota: 1 Byte = 8 Bits)
Enquanto 900 kBytes cabem muitas vezes na RAM de um Framboesa Pi 400, o Pico só tem 264 KB de RAM.
Como vê, teremos de reduzir alguns dos parâmetros (por exemplo, resolução, profundidade de cor, ...) se quisermos que um mapa de bits caiba na RAM, ou teremos de ter algumas ideias inteligentes para o fazer funcionar sem armazenar tudo!
O RP2040 PIO da Pico permite a saída de dados de vídeo
Finalmente, enquanto o Raspberry Pi 400 e outros modelos Raspberry Pi têm circuitos de hardware dedicados para processar toda esta informação e produzi-la de forma fiável, o Pico não tem circuitos especiais dedicados apenas à saída de vídeo.
Mas tem um truque na manga! O RP2040 suporta PIO (IO programável). O PIO é dedicado à emulação de diferentes interfaces com temporização precisa, e é muito, muito poderoso! Pode ser programado para ler a partir da RAM e produzir a altas velocidades.
Utilizaremos o PIO para enviar vídeo para alguns pinos GPIO e utilizaremos alguns circuitos adicionais (resistências) para colocar o sinal na condição desejada, dependendo da interface de saída de vídeo a que queremos ligar o Pico.
Histórico do formato de saída de vídeo
Antes de entrarmos na questão de como adicionar uma saída de vídeo ao Raspberry Pi Pico, vamos ver um pouco da história dos formatos de saída de vídeo.
Como já foi referido, o olho humano não é capaz de detetar alterações nas imagens mais rapidamente do que cerca de 13 ms. Assim, uma das primeiras abordagens para a construção de monitores de computador foi a CRT (tubo de raios catódicos) monitor.
O CRT tem três canhões de raios, que varrem pixel a pixel, linha a linha. (e depois precisam de algum tempo para regressar ao ponto de partida). O ecrã tem fósforos coloridos, que continuarão a emitir luz durante algum tempo depois de o raio ter passado por ele. Na próxima passagem do canhão de raios sobre este pixel em particular, a intensidade do raio pode ter mudado, o que veremos como um pixel mais escuro. O nosso cérebro funde os pixels de fósforo coloridos adjacentes num só pixel e não é capaz de notar as alterações de brilho entre as passagens dos raios.
Desta forma, cria-se a ilusão de uma imagem em movimento.
De facto, não precisam de ter todos os dados presentes no início da imagem - mas apenas o valor atual do brilho do pixel. A intensidade do raio será modificada de acordo com este facto. Podemos utilizar um sinal analógico para este efeito - por exemplo, aumentar a tensão aumentará o brilho.
Precisamos de três fios diferentes para as diferentes cores (para acionar cada canhão de raios individualmente) e precisamos de ter uma forma de informar o monitor quando uma nova linha precisa de ser iniciada e quando uma nova imagem precisa de ser iniciada (quando todas as linhas tiverem sido mostradas).
VGA (matriz de gráficos de vídeo)
A VGA foi concebida a pensar nestes monitores CRT. Ainda é razoavelmente comum como entrada em monitores, apesar de se estar a tornar cada vez mais obsoleta à medida que passamos para uma transmissão completamente digital (mais sobre isso adiante).
Esta é também a norma de saída de vídeo mais fácil de pôr a funcionar no Pico.
Ao lado de uma especificação (com modos de resolução predefinidos), especificava um conetor, o conetor VGA:
Tem 15 pinos:
- RED (vídeo vermelho)
- VERDE (vídeo verde)
- BLUE (vídeo azul)
- ID2/RES (reservado)
- GND (Terra HSync)
- RED_RTN (retorno vermelho, terra analógico para vermelho)
- GREEN_RTN (Retorno verde, terra analógico para verde)
- BLUE_RTN (Retorno azul, terra analógico para azul)
- KEY/PWR (+5 V DC alimenta o chip EDID EEPROM em alguns monitores)
- GND (Terra VSync, DDC)
- ID0/RES (reservado)
- ID1/SDA (dados I2C desde DDC2)
- HSync (Sincronização horizontal)
- VSync (Sincronização vertical)
- ID3/SCL (relógio I2C desde DDC2)
Nota: Os cabos VGA podem suportar diferentes resoluções, profundidades de cor e frequências de atualização, enquanto a palavra "VGA", quando se refere à resolução, significa normalmente 640 x 480.
Como vê, existem três fios que transportam os dados da imagem, um para cada cor. O sinal é transmitido com uma tensão de pico (máxima) de 0,7 V. Os sinais transmitidos para as cores são de natureza analógica - tensões mais elevadas aumentam o brilho, uma tensão de 0 significa que o pixel está escuro / desligado.
Como fazer a saída VGA funcionar no Pico
Isto significa que o Pico, com a sua saída digital de 3,3V, tem tensões suficientemente altas para poder ligar estes pinos RGB ao cabo VGA (que espera tensões de 0 - 0,7V). Na verdade, precisamos de reduzir a tensão utilizando resistências.
Podemos construir um DAC (conversor analógico digital) simples combinando várias resistências e pinos GPIO. Dependendo da combinação de pinos GPIO que estão activos num dado momento, temos diferentes níveis de tensão (= níveis de luminosidade):
Como pode ver na imagem acima, cinco GPIOs (0 -4) accionam um canal (vermelho, neste caso), o que nos dá uma profundidade de cinco bits. As resistências são ponderadas 1:2:4:8:16, por exemplo, o bit menos significativo (LSB) do vermelho tem uma resistência de 8,06K.
Ao tentar construir este circuito, deve optar por 1 resistências de tolerância % para obter uma boa imagem.
Consultar "Conceção de hardware com o RP2040" para perceber como foram calculados os valores das resistências. Resumindo, se os accionarmos todos ao mesmo tempo, teremos uma tensão de 0,74 V, o que é suficiente para os nossos objectivos.
Mais especificamente, o que este projeto de referência sugere é o suporte de um formato de dados RGB de 16 bits comummente utilizado (RGB-565), que utiliza 5 bits para o vermelho e o azul e 6 para o verde. Podemos reduzir a saída física real para o verde a 5 pinos GPIO como para as outras cores, para poupar um pino.
Para além disso, são necessários mais 2 pinos para a temporização da obturação horizontal e vertical (HSYNC e VSYNC)
Isto leva-nos a um total de 17 pinos GPIO para acionar uma saída VGA. Felizmente, o Pico tem 26 pinos GPIO disponíveis, o que nos permite acionar a saída VGA.
Como já foi referido, o Pico também é capaz de acionar estes pinos às frequências necessárias e com uma temporização precisa, graças à funcionalidade PIO (E/S programável) do RP2040.
Hardware de saída de vídeo VGA do Raspberry Pi Pico
A Raspberry Pi concebeu e disponibilizou uma placa de suporte para o Pico que apresenta diferentes funcionalidades:
- Saída VGA
- botões
- ranhura microSD
- saídas de áudio (PWM analógico, I2S digital)
Comprar a placa Pico VGA / Áudio / microSD
Nós (buyzero.de) estão atualmente a mandar construir e montar para nós esta placa de desenho de referência. Contacte-nos se quiser ser notificado quando a prancha puder ser comprada!
O A placa Pico VGA está agora disponível para compra, stock inicial limitado!
Entretanto, a Pimoroni também criou uma versão deste quadro, a que chamam Base de demonstração do Pimoroni Pico VGA.
Nota lateral: cada pino dos 15 pinos de saída rgb ainda precisará ser acionado a cerca de 17,58 Mbit/s, o que ainda é um número impressionante - mas muito mais gerenciável!
Software necessário para acionar a saída VGA
Uma vez que estamos a trabalhar com o Pico, não existem "drivers gráficos" que possamos simplesmente instalar. Temos de ser nós a escrever o código... ou não 🙂
Felizmente, as pessoas que desenharam a placa de hardware para nós já fornecem algum código que podemos utilizar, pelo que nos podemos concentrar no nosso projeto.
O código de exemplo que pode utilizar pode ser encontrado no Repositório pico-playground:
Neste repositório, existe um leitor de filmes simples chamado pipocas (que reproduz filmes num formato personalizado). A O ficheiro Big Buck Bunny, com 1,6 GB de tamanho, pode ser descarregado aqui. Note que estas são imagens de disco em bruto para serem gravadas num cartão SD - este exemplo assume que tem a placa de demonstração VGA, que tem uma ranhura SD. Instruções para conversão de filmes são também apresentados.
O código utiliza o pico_scanvideo (pico/scanvideo.h) da biblioteca pico_extras repositório. Veja também nesse repositório o código de amostra de áudio!
- pico_scanvideo - inclui uma extensa documentação!
A API produz dados RGB paralelos e sinal de sincronização em pinos para DPI VGA (usando DACs de resistência, como descrito acima).
Um ponto importante:
- O programa de linha de varrimento PIO predefinido aceita dados codificados por comprimento de execução - isto significa que pode poupar RAM para gerar áreas de cores planas (estou a pensar em jogos!)
Em geral, é preferível utilizar a opção biblioteca pico_scanvideo em vez de desenvolver código de saída VGA de raiz 🙂
boas práticas de codificação
Mais demonstrações
Verificar o diretório scanvideo do repositório pico-playground:
- mandelbrotum gerador de mandelbrot utilizando um framebuffer de 320x240x16
- demonstração de ator: cabeças de Eben a saltar (vídeo no topo da nossa página!)
- padrão_de_teste: Apresentar barras de cor
Utilizar a placa VGA
É necessário passar um parâmetro adicional ao CMake durante a compilação:
-DPICO_BOARD=vgaboard
TBD: Adicionar guias passo-a-passo
DVI: Interface Visual Digital
A tecnologia avança. A vida avança. Os CRT tornaram-se cada vez mais obsoletos, substituídos por ecrãs planos mais modernos, que têm interfaces digitais. Não há feixes móveis, apenas pixéis.
Durante algum tempo, os sinais continuaram a ser analógicos - mas isso não é muito desejável, uma vez que temos de pegar em algo digital, transformá-lo em algo analógico e depois transformá-lo novamente em algo digital. A imagem será menos precisa, e temos circuitos adicionais que poderíamos dispensar.
Entra a DVI. Oferecia inteligentemente uma opção para transmitir também sinais analógicos, pelo que podiam ser construídos adaptadores/cabos DVI para VGA simples. Naturalmente, a placa gráfica teria de transmitir dados analógicos e digitais. Mas isto ajudou a que a norma fosse aceite e se generalizasse.
Estamos aqui interessados nos sinais digitais (DVI-D), uma vez que gostaríamos de os fazer bit-bang a partir do Raspberry Pi Pico.
Com DVI-D, os dados de imagem são transmitidos de forma serial.
Uma ligação DVI de "ligação simples" (a mais básica) é constituída por quatro as chamadas ligações TMDS (sinalização diferencial minimizada por transição):
- vermelho
- verde
- azul
- relógio de píxeis
A sinalização diferencial é utilizada para minimizar as interferências (uma vez que
Temos um total de 24 bits por pixel (8 bits x 3 cores) e codificamos os dados utilizando a codificação 8b10b (8 bits são mapeados para símbolos de 10 bits na linha física atual para obter o equilíbrio DC, entre outras coisas).
A DVI trata os pixéis de forma semelhante à VGA: tudo é retransmitido sempre que a imagem "começa" de novo e os dados são cronometrados com precisão. Isto é como uma linha telefónica, em que a linha está constantemente a ser utilizada quando duas pessoas falam.
Nota: em contraste com isto, O DisplayPort trata os dados como pacotes - que apresenta várias vantagens.
Em contraste com o exemplo VGA discutido acima, uma vez que os dados são enviados digitalmente, em vez de valores de brilho analógicos, isto significa volumes de dados muito mais elevados.
Luke Wren, um engenheiro da Raspberry Pi, acreditava que o RP2040 (no coração do Pico) também seria capaz de conduzir a saída DVI, mais uma vez usando PIO.
O resultado é o Repositório PicoDVI e projectos, e o Suporte DVI para Pico.
Luke Wren calculou que cerca de Dados de série de 252 Mbps tem de ser accionada através dos pads digitais GPIO - série diferencial, que é emulada com dois pads de terminação simples.
Acima vê-se o circuito utilizado para acionar a saída DVI (utilizando um conetor HDMI, mais sobre isto abaixo) - são simplesmente vários 270 Ohm resistências.
Luke Wren foi ainda mais longe e acrescentou uma saída DVI dupla ao seu layout PicoDVI através de uma placa de ligação:
HDMI: compatível com DVI
O HDMI é a próxima evolução dos conectores (e está em concorrência com o DisplayPort). É totalmente compatível com os sinais digitais DVI - assim, é possível ter conversores DVI / HDMI simples e puramente passivos.
Suporte DVI para Pico
O Pico DVI Sock é uma solução fácil e de baixo custo para adicionar saída de vídeo digital ao seu Pi. Foi concebida por Luke Wren (ver descrição acima). É uma saída DVI com um conetor HDMI. Como o HDMI é compatível com o DVI, pode usar um cabo HDMI para ligar o Pico a ecrãs HDMI:
Programar o Pico DVI Sock
TL;DR
Pode descarregar o nosso picodvi-test.zip e começar a brincar com as compilações de exemplo .UF2 nele contidas. Inclui também um PDF que fornece um guia passo a passo.
Exemplos de código
Luke Wren fornece exemplos de código no seu repositório. No entanto, para os utilizar com o Pico DVI Sock, terá de definir a configuração correcta a utilizar. Vamos mostrar-lhe como neste mini-tutorial.
Pré-requisitos de instalação
sudo apt install cmake gcc-arm-none-eabi libnewlib-arm-none-eabi build-essential
Clonar o repositório PicoDVI de 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
Para utilizar os exemplos de código com o Pico DVI Sock, terá de definir o parâmetro configuração correcta dos pinos a utilizar. Adicione a seguinte linha a common_dvi_pin_configs.h apenas antes de o primeiro #ifndef
#define DEFAULT_DVI_SERIAL_CONFIG pico_sock_cfg
Construir os exemplos
cd PicoDVI/software/
mkdir build
cd build
export PICO_SDK_PATH=~/pico/pico-sdk
make -j$(nproc)
Instalar os exemplos no Pico
Os exemplos construídos estarão na pasta software/build/apps.
Prima e mantenha premida a tecla BOOTSEL no Pico e, em seguida, ligue a placa ao seu PC utilizando o conetor microUSB. Copie e cole o ficheiro .uf2 adequado que pretende experimentar - por exemplo, sprite_bounce.uf2 - no Pico.
O Pico reiniciará automaticamente e deverá ser possível ver a saída no conetor HDMI (lembre-se que é DVI :-)).
Descarregar
Pode descarregar o nosso picodvi-test.zip e começar a brincar com as compilações de exemplo .UF2 nele contidas. Inclui também um PDF que fornece um guia passo a passo. Se o sprite_bounce.uf2 se o exemplo não funcionar, experimente outro monitor - possivelmente nem todos os monitores são compatíveis com esta saída de vídeo.
Se já chegou até aqui, diga-nos nos comentários como funcionou para si e que ideias de projectos teve!
Comprar uma meia DVI Pico
A nossa página irmã, buyzero.de, armazena o Suporte DVI para Pico em duas variantes:
- Apenas o Pico DVI Sock (para auto-soldadura) @ 6,58 € atualmente
- Pico DVI Sock no Pico, com conectores pré-soldados @ 17,89 € atualmente
Sidenote: Ecrãs DBI e DSI
Como nota lateral, o repositório Raspberry Pi Pico Extras tem marcadores de posição para DBI (ecrãs MIPI DBI de 16 bits - com dados a serem passados em paralelo) e DSI (ecrãs MIPI série), pelo que também poderemos ver suporte para estes ecrãs no futuro.
Algum exemplo de saída composta com genlock?
Penso que a saída composta deve ser possível, mas ainda não vi nada no mercado sobre isso.
Como alternativa ao scanvideo, implementei outra biblioteca VGA/TV para o Raspberry Pico - 'PicoVGA', que penso ser mais fácil de usar: http://www.breatharian.eu/hw/picovga/index_en.html
Obrigado por partilhar a informação sobre a sua biblioteca!
Este HDMI pode ser utilizado como INPUT e processar os dados?
da forma como está programado, e uma vez que as resistências actuam para limitar o sinal de saída do Raspberry Pi - não.
possivelmente poderia usar uma adaptação do projeto, com algo que aumentasse o nível do sinal em vez de o baixar / e, claro, código adaptado para que as saídas funcionassem como entradas, para poder processar os dados de vídeo dentro do Pico.
Mas há algumas dicas práticas. Graças à lotaria do silício, a sua unidade específica pode não fazer overclock proporcionalmente à parte da gpu e da cpu. Por isso, se não precisar de gráficos mais rápidos, não faça overclock da GPU. Isto aumenta as hipóteses de fazer um overclock mais elevado e ter um sistema estável. Além disso, um menor consumo de energia e uma menor corrente de alimentação significam uma maior estabilidade. Os Raspberry Pis com 4 núcleos de CPU podem atingir um limite de fornecimento de energia quando carregados com todos os 4 núcleos activos. O PMIC (power management IC) integrado pode não fornecer a corrente necessária para todos os núcleos e desligar-se por um curto período de tempo, reiniciando assim o Pi. Arrefece também o PMIC. Não coloque a tensão no máximo se precisar de carregar todos os núcleos (compilações do kernel, processamento de números pesados, etc.). Aqui temos um RPI4 que pode funcionar a 1850MHz com todos os núcleos activos com over_voltage=2, mas com over_voltage=3, reinicia quando carregado. Uma sobretensão mais elevada significa também uma corrente mais elevada e o circuito do PMIC tem uma corrente de saída limitada. Quanto mais quente estiver o PMIC e os indutores que o rodeiam, menos corrente pode fornecer. Esta é uma limitação do chip PMIC, não do chipset BCM. Por isso, se te deparares com reinícios ocasionais sob carga pesada, pode ser o sobreaquecimento do PMIC. Se o seu Pi bloquear, não será este problema em particular, mas talvez a perda de lotaria de silício. O underclocking de uma parte da GPU pode ser uma maneira interessante de aumentar a capacidade de overclock (sistema mais estável), mas AFAIK, Raspberry Pis mais antigos tinham cache L2 amarrado à GPU, então o underclocking pode desacelerar a CPU também. Documentei como o PMIC da Raspberry Pi 4 aquece - todos os outros chips são arrefecidos diretamente para um dissipador de calor. A vista é do lado de baixo, ou seja, vê-se a PCB aquecida. O canto inferior esquerdo é o PMIC.
Muito obrigado por estas dicas práticas!
Hi,
Sou um noob aqui... Alguém pode fornecer um esquema para uma saída de ecrã cvbs. E qualquer alteração necessária ao código fonte?
Lamento, mas não faço ideia para os cvbs
Olá
Obrigado pelo belo post. Li-o desde o início até quase ao fim 😉
No entanto, tenho algumas perguntas sem sentido:
1. O RPi Pico tem PWM. É possível utilizar um único pino com PWM para emitir um sinal analógico para alimentar os pinos VGA? assim serão utilizados menos pinos. Além disso, os circuitos são mais simples e pequenos.
2. É possível obter uma saída AV analógica do RPi Pico novamente usando PWM, talvez? Penso que a maioria dos televisores suporta isso. Talvez usando um módulo como o https://thecaferobot.com/store/pub/media/catalog/product/cache/14d1897c7f1bd4f35a7de1523300314a/l/c/lcd-01-057-1.jpg disponível numa loja local a que tenho acesso. No entanto, a imagem que enviei é um módulo para Arduino, mas suponho que também deve ser possível utilizar com o Pico.
3. Se se quiser utilizar VGA ou DVI em combinação com o Pico, é possível não utilizar as placas VGA ou DVI auxiliares? É que, na minha região, não há disponibilidade para as comprar e as minhas capacidades não são suficientes para as criar eu próprio.
1. Os pinos PWM provavelmente não terão a precisão de temporização que gostaria de ter para a saída de vídeo (é por isso que usamos PIO, que tem uma temporização muito precisa). Mas porque não experimentar?
2. Presumo que deva ser possível gerar uma saída AV analógica a partir do Raspberry Pi Pico. Duvido que o PWM seja "suficiente" para isso (ficaria feliz em ouvir alguém com mais experiência sobre isso!).
note que o PWM está simplesmente a ligar e desligar o sinal, enquanto a escada de resistências utilizada na placa VGA, por exemplo, fornece níveis de sinal contínuos. Portanto, para que a solução PWM funcione, ela deve operar em frequências muito mais altas do que as necessárias para o sinal real. Também não tenho a certeza de como o hardware externo reagiria ao facto de o sinal ser PWM em vez de um sinal analógico contínuo.
É possível que possa ser suavizado utilizando um condensador muito pequeno, para o que seria necessário efetuar os cálculos adequados.
3. as placas VGA / DVI auxiliares contêm o que é necessário (maioritariamente resistências). Pode olhar para o esquema e construir a sua própria configuração numa placa de ensaio, possivelmente, já vi alguém fazê-lo para VGA.
Dito isto, efectuamos envios internacionais:
https://buyzero.de/products/raspberry-pi-pico-vga-audio-sd-expansion-board?variant=39412666335412
Pico DVI Sock @ buyzero.de shop
Óptima informação. Obrigado.
Também encontrei isto: Saída de vídeo composto no Raspberry pico
http://www.breakintoprogram.co.uk/projects/pico/composite-video-on-the-raspberry-pi-pico
Consegui construir o picoDVI do Wren6991 e integrá-lo com um ADC triplo para digitalizar RGB 15Khz (640×240).
No 320×240, que apenas utiliza um núcleo, o outro é deixado em paz para receber interrupções HSYNC/VSYNC e preparar transferências dma sem problemas, mas no 640×480 a utilização de 2 núcleos está a bloquear o funcionamento correto do sistema.
Uma vez que necessito de metade das linhas, existe alguma forma de ter uma linha preta sempre preparada para as linhas ímpares? com isso liberto um núcleo para os meus deveres.
Não creio que seja necessário enviar quaisquer linhas em branco. Envia todas as linhas ímpares, envia um sinal vsync com uma meia linha extra e envia as linhas pares. Faça uma pesquisa sobre "pulsos de sincronização de vídeo entrelaçados".
Alguém sabe como carregar vídeos feitos por mim e não os de exemplo? Desde já, obrigado!
Estou interessado em utilizá-lo para um ecrã audiovisual único. Por favor, alguém me pode dizer:
É possível alimentar o Pico através do cabo HDMI, mesmo que esteja no lado da transmissão do cabo?
É possível definir o espaço de cores Rec2100 (espaço de cores HDR rec 2020)?
É possível ligar linhas extra ao HDMI, para enviar áudio (e sinalização rec2020/HDR)?
É possível produzir vídeo através de um dos formatos de vídeo USB (vídeo do Pico inalterado através de um adaptador USB para Pico)?
Utilizando o Pico sem fios, é possível utilizar o Miracast?
É possível criar um modo de vídeo bitmap normal e manipulá-lo para gráficos de jogos com os ciclos restantes?
A Seedstudio tem uma placa mini RP2040. Será que a placa de interface HDMI e o software podem funcionar com ela? Eles também têm uma versão RiscV com wifi, por isso seria bom se pudesse recompilar para isso.
https://www.seeedstudio.com/XIAO-RP2040-v1-0-p-5026.html?queryID=31d59a67f7c148df996ba9c1bb7563e3&objectID=5026&indexName=bazaar_retailer_products
Estou interessado em aplicações de jogos, como a utilização de relógios para jogos.
Alguma plataforma de tempo de execução mínima viável em JavaScript?
Desculpe, é muita coisa para pedir, mas
O mais interessante.
Obrigado.
Posso usar a vossa placa juntamente com o interpretador MMBasic do Geoff? Há alguma limitação de hardware nos meus programas devido à vossa placa?
As grandes mentes pensam da mesma forma, também tenho andado a pensar nisso! Já construí o computador MMBASIC baseado no Raspberry Pico com saída VGA, e é fantástico! No entanto, a saída DVI-D (Pseudo HDMI) leva a capacidade gráfica a um novo nível! É claro que o MMBASIC não tem de explorar totalmente a maior profundidade de cor ou resolução, mas operar a 640×480 com, digamos, 64 cores, seria muito bom.
Dito isto, prevejo dois problemas imediatos.
1. A solução VGA também utiliza os pinos PIO, e depois um dos núcleos é utilizado para a gestão de sprite, frame buffering, etc. Creio eu. No mínimo, será necessária uma alteração de código, pelo menos para substituir a implementação VGA PIO. Como API, também ficarei surpreendido se a interface entre a PIO (VGA) e o código do núcleo do framebuffer for a mesma que a solução DVI PIO, mas posso estar enganado. De qualquer forma, terá de haver uma mudança de código.
2. RAM. Não há quantidade suficiente, por isso, uma maior resolução e maior profundidade de cor serão um problema. Mas acho que tenho uma solução. Usar PSRAM externa e talvez usar um RP2040/Pico como "GPU", com a sua própria PSRAM dedicada ligada. Depois fala com um segundo RP2040 que fornece o "CPU" ou cérebro do sistema, executando MMBASIC, e pode manipular/mover recursos gráficos dando instruções ao GPU com o mínimo de sobrecarga (digamos através de ligação I2C). Eu quero/preciso disto 😉
64 euros pela "placa de expansão Raspberry Pi Pico VGA Audio SD"? É melhor usar um zero...
A Pimoroni tem uma mais barata (30 euros), mas ainda assim muito cara. O DVI Sock custa apenas alguns euros ...