terça-feira, maio 03, 2016

Geração de Vídeo com Microcontroladores AVR - Parte 1

Geração de vídeo é um assunto que me atrai há décadas, desde que comecei a me interessar por microcomputadores. O fato de ter trabalhado algum tempo como desenvolvedor de firmware para terminais de vídeo também aumentou meu interesse. Já faz alguns anos que venho colecionando projetos que envolvem a geração de vídeo usando microcontroladores AVR (ATmega principalmente) e este ano pretendo montar alguns.

Final dos anos 70 manda lembranças


Algumas Informações Arqueológicas

Quando comecei a ler sobre microcomputadores (no final da década de 70), uma das referências era Don Lancaster (site), com seus livros TV Typewriter Cookbook (disponível para download aqui) e The Cheap Video Cookbook (do qual eu tenho um exemplar).

Nesta época o objetivo era gerar vídeo composto e o Santo Graal era o vídeo gráfico mapeado em memória (você muda um bit na memória e um ponto acende ou apaga na tela!).

Obviamente estamos falando de tubos de raios catódicos (CRT). O básico do básico é que tem um feixe de elétrons controlado por bobinas para fazer um zigue-zague do canto superior esquerdo para o canto inferior direito da tela (e depois voltar rapidamente para o ponto inicial). Na verdade, são dois movimentos distintos: um horizontal e outro vertical. No horizontal o feixe vai da esquerda para a direita e depois volta rápido da direita para a esquerda (retraço horizontal). No vertical o feixe vai de cima para baixo e depois volta para cima (retraço vertical). A volta na vertical demora o tempo de algumas idas-e-vindas na horizontal. Durante os retraços (e um pouco antes e depois) o sinal de vídeo é suprimido para que ele não seja visível. O processo precisa ser repetido periodicamente ("refrescada", tipicamente 60 vezes por segundo), pois a imagem é mantida por pouco tempo pelo fósforo na tela.

Tudo isto (movimentação horizontal, vertical e refrescamento) tem tempos precisos que devem ser respeitados, sob pena da imagem aparecer errada (e em alguns casos até de danificar o monitor). Estes tempos são as restrições básicas de todo projeto de vídeo. No caso do vídeo mapeado em memória, temos o processador e o circuito de vídeo competindo pelo acesso à mesma memória, o que traz alguns problemas e soluções interessantes.

O vídeo composto coloca em um único sinal as informações de movimentação horizontal, vertical e a intensidade do ponto. Ele pode conter também informações de cor (codificada de forma diferente pelos padrões NTSC, PAL, etc).

A brincadeira de Don Lancaster era a geração do vídeo composto usando componentes TTL simples. Um dos pontos altos do Apple ][ é o circuito que Woz fez para permitir múltiplos formatos de vídeo (inclusive gráfico colorido) e o compartilhamento da memória entre o vídeo e o 6502. No ZX-81, a Sinclair gerou os sinais de vídeo diretamente pelo processador, reduzindo drasticamente o custo. A IBM não foi tão criativa quanto estes exemplos anteriores e usou um componente específico para geração dos sinais de vídeo (6845) e fez um implementação bem restritiva na CGA (por exemplo, no modo texto, se o processador acessar a memória de vídeo fora do retraço ocorre interferência na imagem).

O uso de vídeo composto facilitava a conexão de TVs, mas impunha várias restrições. Desde o começo, o PC IBM dispunha de conexões para vídeo com as várias informações separadas. A mais popular, e em uso até hoje, é o conector VGA. Nele temos pinos separados para os sinais de sincronismo horizontal e vertical e para as cores R, G e B. Os sinais das cores são analógicos, de forma a permitir uma quantidade alta de cores diferentes.

Gerando Vídeo com o AVR


A ideia básica dos projetos que pretendo examinar é gerar os sinais diretamente pelo microcontrolador, reduzindo o número de componentes externos.

A teoria e prática da geração de vídeo composto pode ser vista nos links abaixo:
 Com isto algumas pessoas empreendedoras construíram microcomputadores:
A geração de vídeo VGA também é possível, como descrito aqui.  Esta mesma pessoa fez um Apple ][ com um Arduino (não é exatamente um Apple ][, mas impressiona mesmo assim).

Por último, a mãe de todos os hacks de vídeo com AVR: Craft. Com um hardware simples e um código caprichado em assembler, Linus Akesson fez um demo de babar combinando gráficos coloridos e som polifônico:



Nenhum comentário: