VGA com PIC16F877A

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

VGA com PIC16F877A

Mensagempor fagovi » 26 Ago 2015 21:01

Boa noite Senhores...

Estou fazendo um projeto por hobby de um video game tipo atari, e para isso estou utilizando o microcontrolador PIC16F877A.
Sei que não é o mais recomendado, mas como disse, é só hobby.
Fiz um firmware que gera o sincronismo HSYNC e VSYNC, o monitor reconhece quando o conecto em minha placa, porém quando ativo as saídas RGB não é gerada nenhuma cor no monitor.

A tensão nos pinos RGB estão em 0,7vcc, os de sincronismo 5vcc.

Alguém pode me dar uma dica sobre a razão de não conseguir "pintar" a tela?

Desde já, obrigado

cpp code
/////////////////////////////////////////////////////////////////////////

// DEFINIÇÕES DO MICROCONTROLADOR //

#include<16f877A.h>
#fuses HS,NOWDT,NOPROTECT,NOBROWNOUT // Configura FUSES
#use delay(clock=20000000) // Configura oscilador interno em 20Mhz


//***********************************************************************//
// Definição da Pinagem
//***********************************************************************//


#define HSYNC PIN_D0
#define VSYNC PIN_D1
#define LED PIN_A0

#define cor_1_0 output_low(PIN_C1)
#define cor_1_1 output_high(PIN_C1)


#define cor_2_0 output_low(PIN_C2)
#define cor_2_1 output_high(PIN_C2)


#define cor_3_0 output_low(PIN_C3)
#define cor_3_1 output_high(PIN_C3)

//***********************************************************************//
// DEFINIÇÃO DAS VARIÁVEIS GLOBAIS //
//***********************************************************************//


unsigned long int conta_linhas = 1;



//***********************************************************************//
// TIMER 0 - Definição do sincronismo horizontal (HSYNC)
//***********************************************************************//

#int_timer0

void trata_timer0()

{
output_low(HSYNC);
delay_us(3);
output_high(HSYNC);
conta_linhas++;
set_timer0(159);
}


//***********************************************************************//
// TIMER 1 - Definição do sincronismo vertical (VSYNC)
//***********************************************************************//

#int_timer1

void trata_timer1()

{

output_low(VSYNC);
delay_us(5);//25
output_high(VSYNC);
set_timer1(55120);
}



//***********************************************************************//
// DEFINIÇÃO DA FUNÇÃO MAIN //
//***********************************************************************//

void main()
{

//***********************************************************************//
// DEFINIÇÃO DE ESTOURO DE TIMER 0 - HSYNC 30,3KHz //
//***********************************************************************//
setup_counters(RTCC_INTERNAL,RTCC_DIV_1);
enable_interrupts(int_timer0);
enable_interrupts(GLOBAL);
SET_RTCC(159);
// Seguindo a fórmula:(1/Fosc)*4)*T0_div = intervalo de incremento
// Tendo Fosc=20MHz, temos ((1/20000000)*4)*1 = 0,0000002

// Timer overview = intervalo de incremento * 2^8 = 256
// Para um estouro a cada 0,000.028s : 256 * 0,0000002 = 0,000.0512
// 256 * 0,000.028 = 0,007168s
// Teremos: 0,007168s / 0,000.0512 = 140
// Sendo assim, nosso contador irá contar a partir de 256 - 140 = 116
// Realizando medições no Osciloscópio percebe-se melhor sincronisto
//realizando setup com 159


//***********************************************************************//
// DEFINIÇÃO DE ESTOURO DE TIMER 1 - VSYNC 60Hz //
//***********************************************************************//
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
SET_TIMER2(55120);
// Seguindo a fórmula do Timer 0 obteve-se o valor 55120 para setar Timer1


//***********************************************************************//
// DEFINIÇÃO DO LAÇO INFINITO //
//***********************************************************************//


while (true)
{
if (conta_linhas >= 640) // Se já houver varrido 513 linhas HSYNC - 1 TELA
{
conta_linhas=1; // reseta contador de linhas
enable_interrupts(int_timer1); // libera timer1 para funcionamento.
}

////////////////////////////////////////////////////////////////////////////////

if (( get_timer0() >= 159 ) && (get_timer0()<169)) ; // Ausência de Cor, Tela Preta
{
cor_1_0;
cor_2_0;
cor_3_0;
}

if (( get_timer0() >= 169 ) && (get_timer0()<179)) ; //
{
cor_1_1;
cor_2_0;
cor_3_0;
}

if (( get_timer0() >= 179 ) && (get_timer0()<189)); //
{
cor_1_0;
cor_2_1;
cor_3_0;
}

if (( get_timer0() >= 189 ) && (get_timer0()<199)) ; //
{
cor_1_1;
cor_2_1;
cor_3_0;
}

if (( get_timer0() >= 199 ) && (get_timer0()<209)) ; //
{
cor_1_0;
cor_2_0;
cor_3_1;
}

if (( get_timer0() >= 209 ) && (get_timer0()<219)) ; //
{
cor_1_1;
cor_2_0;
cor_3_1;
}

if (( get_timer0() >= 219) && (get_timer0()<229)) ; //
{
cor_1_0;
cor_2_1;
cor_3_1;
}

if ( get_timer0() >= 229 ) ; //
{
cor_1_1;
cor_2_1;
cor_3_1;

}


}// Fim do Laço

} // Fim do Main
Fagovi

"O Homem que deseja fazer algo arranja um meio, quem não quer fazer nada arranja uma desculpa" Provérbio Árabe.
fagovi
Bit
 
Mensagens: 10
Registrado em: 08 Abr 2014 11:56

Re: VGA com PIC16F877A

Mensagempor andre_luis » 27 Ago 2015 07:50

Embora tenha um pessoal aqui que mexe com isso e eu não seja o mais indicado pra dar um palpite concreto, em todo caso acho que se pudesse mostrar as formas de onda lidas no osciloscópio ajudaria.
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Re: VGA com PIC16F877A

Mensagempor vtrx » 27 Ago 2015 08:27

Mostre o esquema elétrico das ligações R.G.B ao monitor.
Faça um teste simples para saber se os sincronismos estão realmente ok,ativa uma saida das RGB continuamente e verifique a tela.
Outro detalha,suponho que esta usando um monitor RGB e não video componente,me parece que esta usando CCS,se for,terá que usar FASTIO ou provavelmente não terá os tempos corretos.
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Re: VGA com PIC16F877A

Mensagempor fagovi » 27 Ago 2015 19:16

Senhores;

Segue o Esquematico e a captura de tela do osciloscopio.
Você não está autorizado a ver ou baixar esse anexo.
Fagovi

"O Homem que deseja fazer algo arranja um meio, quem não quer fazer nada arranja uma desculpa" Provérbio Árabe.
fagovi
Bit
 
Mensagens: 10
Registrado em: 08 Abr 2014 11:56

Re: VGA com PIC16F877A

Mensagempor brasilma » 28 Ago 2015 08:20

Já experimentou conectar o monitor em uma saída de vídeo funcional, gerar padrões de imagem conhecidos (tipo carregar uma imagem da tela toda em vermelho) e medir os sinais e comparar com o que está tentando gerar?
" A Teoria orienta e a Prática decide" ;-)
Avatar do usuário
brasilma
Dword
 
Mensagens: 3621
Registrado em: 11 Out 2006 15:39
Localização: Planeta Terra

[RESOLVIDO] VGA com PIC16F877A

Mensagempor fagovi » 12 Out 2015 19:15

Realmente muito obrigado pela ajuda de todos!

De maneira especial ao nosso amigo brasilma que através da dica dele observei uma saida de video funcional e percebi aonde estava errando.

De modo a talvez ajudar quem ira se aventurar em um projeto como o meu, segue algumas informações conquistadas a duras penas kkkk

Código: Selecionar todos
/************************************************************************
//                TERORIA SISTEMA VGA MONITOR LG FLATRON IPS224                                   
//***********************************************************************
     _____________________________                              5V
     |                           |                            |
VSYNC|<--          106uS      -->|<--       16,4mS         -->|       
60,32|                           |____________________________| 0V
  Hz |                           |
                               
     |_     __     __     __     |_     __                      5V   
     | |    | |    | |    | |    | |    | |      Ton= 2,2uS
HSYNC| |    | |    | |    | |    | |    | |      Toff= 23,2uS
37,88| |____| |____| |____| |____| |____| |____ ...             0V
 KHz   |    | |

       | __ |   __     a= 2,3uS
RGB    ||  ||  |  |    b= 450nS
       ||  ||__|  |__  Ton=11,9nS
      >a< >b<          Amplitude: 0,5v
       
     
*/               
Fagovi

"O Homem que deseja fazer algo arranja um meio, quem não quer fazer nada arranja uma desculpa" Provérbio Árabe.
fagovi
Bit
 
Mensagens: 10
Registrado em: 08 Abr 2014 11:56

Re: VGA com PIC16F877A

Mensagempor vtrx » 12 Out 2015 20:34

Quando tiver alguma imagem,poste para a gente ver :)
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Re: VGA com PIC16F877A

Mensagempor andre_luis » 12 Out 2015 21:39

Parabens pelo trabalho muito bem documentado.
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Re: VGA com PIC16F877A

Mensagempor tcpipchip » 13 Out 2015 07:24

Gostei do ASCII ART!
------------------------------------------
http://www.youtube.com/tcpipchip
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 6560
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Re: VGA com PIC16F877A

Mensagempor Djalma Toledo Rodrigues » 15 Out 2015 23:18

R => Analógico
G => Analógico
B => Analógico

Dai milhões de cores.

Dj.
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x