Fala galera,

Estou estudando a geração de sinais VGA colorido usando um Arduino UNO.

Para não ficar me matando tentando ajustar um código pronto (e para fazer o serviço completo), decidi construir o sinal do zero, gerando os sinais de sincronia com a frequência exata.

O primeiro passo foi gerar a maior frequência possível com o Arduino/ATMega328. Até agora consegui 4MHz usando um código tirado dessa discussão (segue abaixo tb): http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1169088394

Funciona! Imagens acima e código abaixo:

/*
PortD - Arduino pins from 0 to 7
Pin 0 = D0
*/

void setup() {

DDRD |= B11000000; // sets pins 7 and 6 as output without changing the value of pins 0 & 1, which are RX & TX
PORTD |= B11000000; // sets pins 7 (hSync) and 6 (vSync) HIGH
};

void loop () {

do {
PORTD = B11000000;
PORTD = B00000000;
} while(1);

};

 

 

Exibições: 2248

Comentar

Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!

Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)

Comentário de Vitor Morales CAmpos em 17 junho 2015 às 15:28

Marcelo,

Estou tentando utilizar o arduino UNO para ele gerar sinal, gostaria de saber se com esse programa acima eu consigo fazer com que o ARDUINO gera o sinal.

Obrigado!

Comentário de Enio Benatti em 8 março 2012 às 18:45

Marcelo , 

Dei uma pesquisada na net e sim , com certeza dá pra usar a interface SPI como gerador de video.

Obviamente o sincronismo deverá ser gerado por esta interface , portanto creio que a melhor opção é primeiro estudar a SPI ( é mamão com açucar ) e gerar os sinais de sincronismo pela SPI , isso vai abrir a cabeça com o uso da SPI , aí fai ser moleza fazer um video nota 10 , acho que dá pra fazer 60 a 80 caracteres preto e branco.

Comentário de Marcelo Rodrigues em 8 março 2012 às 9:06

Enio,

Como sempre, obrigado pela aula! Hehehe...

Cara, você me deu vários caminhos. Vou analisar a documentação e pensar nessas saídas.

O Arduino, do jeito que é, já dá para gerar imagens na tela (já fiz aqui), só não consegui uma imagem estável ainda porque estou acertando a sincronia ainda, que é a parte mais fácil, mas pela falta de tempo, a coisa é lenta.

Essa semana pretendo arredondar o sinal de sincronia e deixar uma imagem chapada na tela, mas estável. Depois vou tentar essas coisas todas e ver o que dá para fazer.

Vou postando aqui.

Abraço!!

Comentário de Enio Benatti em 7 março 2012 às 20:22

Outra alternativa que vale a pena ser pesquisada é usar o shift register da interface SPI do arduino em master mode , setando os SPCR – SPI Control Register para operarem em clock/2 , teriamos uma saida de 8Mb/s pelo pino SPI com o arduino trabalhando a 16Mhz , e ele só teria que colocar um novo dado na SPI a cada 1 uS , gerando um video de razoavel qualidade podendo fazer  facilmente um terminal de 40 - 60 caracteres.

Acho que esta ideia vale a pena ser tentada.

segue anexo

datasheet do atmega328

Comentário de Enio Benatti em 7 março 2012 às 18:39

Marcelo, 

quanto a fazer só com o Arduino , sen nenhum hardware adicional , acho dificil.

Uma TV preto e branca convencional , tem um Band Width de 3.5 MHz , ou seja 7Mpixels/s.

Portanto o Arduino teria que ter uma saida em um dos pinos de 7Mb/s , que duraria toda a linha horizontal do video , sem jitter , de onde sairia a informação do video . Adicionalmente , deveria haver a geração dos sinais de sincronismo , mas este é facil , pois a frequencia é baixa , em torno dos 16KHz , mas não pode ter jitter entre o sinal de sincronismo e o sinal de video.

Acredito ser possivel fazer um shield bem baratinho , só com uma lógica TTL minima , aí o arduino colocaria para fora 1Mbyte/s 8 bits por vez , e um shift register se encarregaria do trabalho pesado , de gerar o sinal de video. 

Comentário de Enio Benatti em 7 março 2012 às 18:17

aqui tem as explicações dos sinais gerados no ZX80 incluindo oscilogramas reais dos sinais gerados.

Comentário de Enio Benatti em 7 março 2012 às 18:13

segue o diagrama esquematico do ZX80 , de onde o TK85 foi chupado.

O sinal de video sai de IC9, que é um shift register TTL , e vem direto do barramento de dados da CPU Z80.

o Sinal de sincronismo sai de uma logica de portas TTL .

Diagrama esquematico do ZX80

O resto vc encontra aqui:

Comentário de Enio Benatti em 7 março 2012 às 17:51

Marcelo , 

Vc lembra do TK85 , ele tinha uma CPU Z80A rodando a 4Mhz e gerava o sinal de video composite que ia direto para uma TV.

Obviamente ele precisava de algum hardware externo , mas acho que era só um shift register , baratinho.

Abração

Enio.

Comentário de Marcelo Rodrigues em 7 março 2012 às 12:05

Pois é. Mas eu ainda quero ver o que dá para fazer sem mexer em nada. Pegando um Arduino do jeito que ele (ATMega328) vem.

Vamos ver no que vai dar. :)

Valeu!

Comentário de Cesar Osaka em 7 março 2012 às 9:51

Fala Marcelo! Bom, como esse ATMega não tem PLL, acho que nem mexendo nos fuses. O máximo que daria é conseguir é 20MIPS trocando o cristal para 20MHz... =T

Abraço!

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço