segunda-feira, 11 de novembro de 2013

Gerando Video com microcontrolador ARM

Recentemente fiz alguns experimentos para gerar vídeo por software utilizando um processador ARM, no caso um LPC1111/201 da NXP

A primeira dificuldade encontrada foi que no ARM, o tempo de execução da instrução, em ciclos de CLOCK, varia conforme o endereço em que as intruções são executadas, pois a memória FLASH do dispositivo tem uma velocidade máxima de funcionamento menor do que a do processador. Com isso, alguns Wait States são inseridos e a temporização dentro de um loop também varia.

Uma solução para contornar esse problema foi inserir no código uma diretiva para que o compilador transfira para a RAM e execute a partir de lá a função que gera os  delays para os pulsos de sincronismo.

void delay_loop(int vezes) __attribute__ ((__section__(".data.ramfunc")));

Testando a geração dos sinais de sincronismo

O sinal de vídeo foi gerado utilizando-se a interface SPI do microcontrolador no modo TI, que é o único modo adequado do LPC1111 para gerar vídeo. Os outros modos inserem pausas entre os caracteres sendo enviados pela porta SPI. Um inconveniente deste modo é que quando a saída não está transmitindo, o pino MOSI fica em tristate.  

Para somar o sinal de sincronismo ao sinal de vídeo foi utilizado um circuito simples, com diodos em série com os resistores. Esse arranjo é necessário por causa do estado tristate do sinal MOSI.

                 1K                                
 Sync o-->|---/\/\/\/\/\----+--------o Video Out   
                 220R       |      75R             
 MOSI o-->|---/\/\/\/\/\----+---/\/\/\/\/\----|GND 
                                                   

O nível de pedestal, é então obtido mantendo-se o pino Sync em nível alto. Para gerar o sinal de sincronismo, coloca-se o pino em nível baixo (o resistor de 75 Ohms puxa a linha para zero). 



Pulsos de sincronismo horizontal
Pulsos de sincronismo horizontal

Sincronismo vertical (serração)
Final do pulso de sincronismo vertical e serração


Tela de 32x24. A fonte usada foi extraída da ROM do MSX Hot Bit

Caracteres em detalhe. Video sem jitter.

.

Nenhum comentário: