• Welcome to LusoRobótica - Robótica em Português.
 

PIC_VGA

Started by nunosilvarocha, 30 de September de 2014, 11:14

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

nunosilvarocha

Preciso mostrar as corres RGB e a mistura delas num ecrã por VGA.

A ideia é ligar a ficha VGA a um Pic 18f4550 e conseguir reproduzir as cores numa resolução 800x600.
Já procurei no google, existem projetos muito parecidos, mas não é bem o que quero.

Depois quero poder mudar a cor através do USART.

Seria bom conseguir ainda mostrar as cores RGB e a sua mistura numa imagem composta por listas/barras de cores.

Alguém já fez algo semelhante?

senso

Com AVR's conheço alguns projectos desses, mas penso que nenhum é capaz de gerar VGA com uma resolução de 800x600, se é para meter um ecrã cheio de cores e pouco mais, para quê tanta resolução?
Avr fanboy

nunosilvarocha

Quote from: senso on 30 de September de 2014, 11:24
Com AVR's conheço alguns projectos desses, mas penso que nenhum é capaz de gerar VGA com uma resolução de 800x600, se é para meter um ecrã cheio de cores e pouco mais, para quê tanta resolução?

Também já vi alguns projetos com AVR, mas não estou muito à vontade com AVR
Que resolução aconselhas? Não conheces nenhum protejo do género com PIC?

senso

Em PIC provavelmente terás de saltar para um dsPIC ou PIC24, um 18f é provavelmente demasiado lento.
Avr fanboy

msr

Com AVR ou PIC é irrelevante, usas naturalmente o que te for mais familiar.
O que precisas de saber é como gerar os sinais VGA e depois implementar isso no microcontrolador:
http://lmgtfy.com/?q=generate+vga+signals

Mais fácil e educativo do que ires olhar para código já feito :)

senso

Tipicamente é tudo em assembly, dado que tens de ser cycle accurate, a imprecisão de tempo de chamada a uma interrupção é fatal, nos AVR's dependendo de onde estás saltar para uma ISR demora 3 ou 4 ciclos, basta isso para te chatear a gerar VGA ou video composto.
É simplesmente uma questão de instruções por segundo, dado que o PIC corre no máximo a 48Mhz, e que internamente divide o clock por 4 devido á sua arquitectura, diria ser lento demais.
Avr fanboy

nunosilvarocha

Quote from: msr on 30 de September de 2014, 11:41
Com AVR ou PIC é irrelevante, usas naturalmente o que te for mais familiar.
O que precisas de saber é como gerar os sinais VGA e depois implementar isso no microcontrolador:
http://lmgtfy.com/?q=generate+vga+signals

Mais fácil e educativo do que ires olhar para código já feito :)

Esse link de 'ajuda' eu já utilizei.
Neste momento estou com dificuldades do vertical front porch, pois estão a aparecer umas falhas no lado esquerdo do ecrã e a cor não aparece totalmente perfeita.

Por isso estava a tentar encontrar algum exemplo para solucionar o meu problema.

jm_araujo

Se é do lado esquerdo onde começa o varrimento, deves estar com jitter na geração do sync.
Como disse o senso, tens de ser preciso ao ciclo e só com assembly é que te safas.
Quanto às cores não estarem corretas, confirma se os níveis estão corretos nos sinais RGB.


senso

Como é que estás a gerar a as cores, dac r-2r discreta?
Não esperes muito mais que 6-7 bits de resolução efectiva.
Avr fanboy

beirao

Eu ja fiz isso mas foi numa FPGA, numa cadeira de licenciatura, ha uns tres anos...

Pelo que me lembro, o varrimento VGA é a 25MHz, certo? Se fores para um PIC, utiliza um que vá até 64MHz. Tipicamente os das séries "K" podes utilizar um cristal de 16Mhz e depois fazes PPL para os 64MHz (18F46k22 por exemplo)
"O único lugar onde o sucesso vem antes do trabalho, é no dicionário" - Albert Einstein

Tech_JA

encontrei este projecto na net, pode ser que ajude para a geração dos sincronismos:
http://tinyvga.com/pic-vga

jm_araujo

#11
Quote from: beirao on 30 de September de 2014, 20:58
Eu ja fiz isso mas foi numa FPGA, numa cadeira de licenciatura, ha uns tres anos...

Pelo que me lembro, o varrimento VGA é a 25MHz, certo? Se fores para um PIC, utiliza um que vá até 64MHz. Tipicamente os das séries "K" podes utilizar um cristal de 16Mhz e depois fazes PPL para os 64MHz (18F46k22 por exemplo)

25Mhz é o pixel clock (1/duração do pixel). Isso é um exagero se só quer gerar barras (que tem vários pixeis de largura). Se usar barras de 25 pixeis de largura , pode baixar o pixel clock para 1MHZ e ainda consegue desenhar 25 barras.
Tens exemplos de pessoal a gerar VGA com a velhinha PIC 16f84 a 4MHz (4 ciclos por instrução, 8 para  jumps): http://tinyvga.com/pic-vga, mas quase não sobram instruções para pôr um led a piscar, pelo que algo mais recente com um clock maior não é má ideia ;)

senso

E tens o outro extremo:
http://www.linusakesson.net/scene/craft/

Avr a gerar som e video VGA, demoscene porn  ;D
Avr fanboy

jm_araujo

Muito doido... mas vindo da demoscene não é de admirar. Esses gajos são gurus da otimização.
Houve uma altura que seguia e as demos de 4k(bytes) eram alucinantes (https://www.youtube.com/watch?v=G1Q9LtnnE4w , 3D todo feito em SW, as graficas 3D ainda estavam a começar) , e hoje fazem-se coisas doidas com 256bytes e tamanhos do género: https://www.youtube.com/watch?v=R35UuntQQF8
http://www.theverge.com/2013/12/1/5162414/p01-demo-fits-minecraft-flyby-into-256-bytes-of-data

E há quem comece a olhar para os 16 bytes  :o
http://countercomplex.blogspot.com/2011/06/16-byte-frontier-extreme-results-from.html?_sm_au_=i5FsvZLqLnS44SRs

dropes

Conheço o projecto Uzebox à uns anos e o atmega644 funciona a 8bits com som e imagem, de vez em quando lá aparece um jogo novo.
Também existem uns vídeos pelo youtube com essa "consola"
http://belogic.com/uzebox/index.asp