terça-feira, abril 27, 2021

Raspberry Pi Pico: Gerando Vídeo VGA Colorido

No post anterior sobre o PiPico vimos como gerar vídeo composto monocromático. Agora vamos ver algo mais útil: como gerar vídeo VGA colorido.

A foto é ruim e o monitor tem um defeito no canto superior direito, mas o importante é que funciona!


Os sinais da VGA são mais simples que o vídeo composto, pois as informações de sincronismo horizontal, sincronismo vertical e intensidade de R, G e B são passadas separadas.

A geração de vídeo VGA com o RP2040 é descrita no documento "Hardware design with RP2040" da Raspberry Foundation. Novamente vamos usar uma "escada de resistores" para implementar um DAC, no caso serão três escadas, uma para cada cor (R, G e B). São 5 bits por cor, resultando em 32 níveis. No total teremos 15 bits, resultando em 32K cores.

A figura abaixo (adaptada do documento acima), tem as informações necessárias para a montagem. Os resistores usados nos DAC devem, preferencialmente, ser de 1%, os resistores de 75 ohms nos sinais de sincronismo podem ser de 5%.

"Clique para enxergar melhor"

A minha montagem foi feita em uma protoboard, uma montagem soldada evitaria algumas pequenas interferências na imagem.


Montado o hardware, é hora de gravar um software para teste. Existem alguns exemplos no "pico playground" (em "scanvideo"), eles requerem o "pico extras". Para compilar os exemplos no Windows (já tendo instalado as ferramentas e SDK), eu baixei os repositórios do github no formato zip, expandi no mesmo diretório onde fica o "pico examples", retirei o "master" dos nomes dos diretórios e coloquei o caminho do diretório do pico extras na variável de ambiente PICO_EXTRAS_PATH. Depois é só abrir o diretório "pico playground" no VSCode, deixar o CMake atualizar o projeto e disparar um build.

Para carregar um programa, ligue o PiPico ao micro com o botão BOOTSEL apertado, ele vai ser identificado como uma unidade de disco. Copie para lá o arquivo .uf2 correspondente ao programa (estes arquivos estarão dentro do diretório build). Minha sugestão é começar com o exemplo "test-pattern" que gera as barras que estão na foto no início do post. Se não aparecer nada, provavelmente você fez alguma bagunça com os sinais de sincronismo. Se as barras não estiverem com as cores e intensidades corretas, confira as ligações dos resistores do DAC.

Os exemplos são bastante simples e tem por objetivo mostrar as potencialidades, para fazer algo útil é preciso arregaças as mangas e escrever bastante código. O meu objetivo de médio prazo é fazer um terminal de vídeo alfanumérico para usar com os meus computadores de 8 bits minimalistas. A parte mais complicada será a geração de vídeo, onde quero suportar um imagem de vídeo na memória de 25 linhas (ou mais) por 80 colunas, com 16 cores de frente e 16 cores de fundo (como se fosse uma VGA em modo alfanumérico). Os caracteres e comandos serão recebidos por uma interface serial. Inicialmente penso num teclado padrão PS/2, mas deve ser possível tratar um teclado USB.


Nenhum comentário: