Como escrever onda no display gráfico com pic16f877a

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Como escrever onda no display gráfico com pic16f877a

Mensagempor Francys Reymer » 09 Set 2010 00:14

Olá pessoal,

estou desenvolvendo um projeto de um osciloscópio com funções básicas e para baixas freqüências (apenas acadêmico mesmo), to usando um display gráfico 128x64. bom minha dúvida é assim: na escala vertical é fácil eu distribuir os pontos quanto mais alto o valor mais acima eu desenharei o pixel e quanto mais baixo o valor da minha conversão AD mais em baixo eu desenharei o pixel no meu display (a cada conversão pintarei um pixel na tela, terá apenas uma escala d tempo - a + rápida possível), até aí tudo bem se isso fosse uma onda senoidal, mas e se fosse uma onda quadrada por exemplo, na transição de subida e descida do sinal ele apresenta uma linha quase reta, como eu faria pra tratar isso no display? porque se eu sempre desenhar o pixel no próximo pixel horizontal a onda será parecida com uma onda senoidal
Avatar do usuário
Francys Reymer
Byte
 
Mensagens: 102
Registrado em: 10 Dez 2009 15:21

Re: Como escrever onda no display gráfico com pic16f877a

Mensagempor jvanderleym » 09 Set 2010 14:23

Boo tarde, colega.
Segue abaixo o codigo de um osciloscopio de 06 canais, três de tensão e 03 de corrente com sensor de efeito hall, desenvolvido em mikroC.
Espero que possa ter ajudado.

/*
Projeto : Osciloscopio 240x128
PIC : 18F452
Clock : 20 MHz
configuração :
_HS_OSC_1H
_WDT_OFF_2H
_LVP_OFF_4L
*/

#include "T6963C.h"

extern const char imagem240128[];


void main(void)
{
unsigned int x0, y0, contador;
unsigned short int canal1[128];
unsigned short int canal2[128];
unsigned short int canal3[128];
unsigned short int canal4[128];
unsigned short int canal5[128];
unsigned short int canal6[128];
unsigned int conta;
int var_botao;
long var_display;


ADCON1 = 0B00101001;
//TRISB = 0;
//PORTB = 0 ;
//TRISB = 0xFF ;
TRISC = 0 ; // port C is output only
//PORTC = 0b00000000 ; // chip enable, reverse on, 8x8 font

USART_init(19200);
T6963C_Init(240, 128, 8, &PORTD, &PORTC, 3, 2, 1, 5); // T6963C_Init_240x128, see Autocomplete
T6963C_graphics(1) ;
T6963C_text(0) ;
T6963C_cursor(0);
T6963C_image(imagem240128);

conta = 0;
y0 = 0;
var_botao = 0;
do
{
if (var_botao == 0)
{
for (conta = 0; conta < 128; conta++)
{
canal1[conta] = Adc_Read(0) >>2;
canal2[conta] = Adc_Read(1) >>2;
canal3[conta] = Adc_Read(2) >>2;
canal4[conta] = Adc_Read(3) >>2;
canal5[conta] = Adc_Read(4) >>2;
canal6[conta] = Adc_Read(5) >>2;
}

conta = 0;
y0 = 0;
for (contador = 0; contador < 128; contador++)
{
canal1[conta] = canal1[conta] - 20;
var_display = (long) canal1[conta] * 85;
var_display = var_display / 255;
T6963C_dot((var_display+ 1), y0, T6963C_WHITE);
canal2[conta] = canal2[conta] - 100;
var_display = (long) canal2[conta] * 300;
var_display = var_display / 255;
T6963C_dot((var_display+ 31), y0, T6963C_WHITE);
canal3[conta] = canal3[conta] - 20;
var_display = (long) canal3[conta] * 85;
var_display = var_display / 255;
T6963C_dot((var_display+ 81), y0, T6963C_WHITE);
canal4[conta] = canal4[conta] - 100;
var_display = (long) canal4[conta] * 300;
var_display = var_display / 255;
T6963C_dot((var_display+ 111), y0, T6963C_WHITE);
canal5[conta] = canal5[conta] - 20;
var_display = (long) canal5[conta] * 85;
var_display = var_display / 255;
T6963C_dot((var_display+ 161), y0, T6963C_WHITE);
canal6[conta] = canal6[conta] - 100;
var_display = (long) canal6[conta] * 300;
var_display = var_display / 255;
T6963C_dot((var_display+ 191), y0, T6963C_WHITE);
y0++;
conta++;
}
}

if (var_botao == 0)
{
if (Button(&PORTB, 7, 20, 0)) var_botao = 1;
}


if (var_botao == 0)
{
T6963C_image(imagem240128);
}

if (var_botao && Button(&PORTB, 7, 20, 1))
{
var_botao = 0;
T6963C_image(imagem240128);
}
}
while(1);

}
jvanderleym
Bit
 
Mensagens: 43
Registrado em: 15 Mai 2007 20:51

Mensagempor Djalma Toledo Rodrigues » 09 Set 2010 20:07

Como seu Display tem baixa resoluçao não é possível traçar uma linha fina de subida ou
descida da Onda Quadrada, nem é necessário.

Fica assim:

******************************


************************************

Como os Pixeis são endereçáveis transfere o endereço do último Pixel aceso + 1 para a
outra Linha

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

Mensagempor Francys Reymer » 09 Set 2010 21:25

Djalma Toledo Rodrigues escreveu:Como seu Display tem baixa resoluçao não é possível traçar uma linha fina de subida ou
descida da Onda Quadrada, nem é necessário.

Fica assim:

******************************


************************************

Como os Pixeis são endereçáveis transfere o endereço do último Pixel aceso + 1 para a
outra Linha

DJ


legal entendi...só q ai tem um porém e se for uma onda senoidal ou triangular por exemplo como vou diferenciar uma onda quadrada das demais?....por que nos outros tipos de onda ai eu teria q traçar a linha de subida ou descida ou to errado?
Avatar do usuário
Francys Reymer
Byte
 
Mensagens: 102
Registrado em: 10 Dez 2009 15:21

Re: Como escrever onda no display gráfico com pic16f877a

Mensagempor Djalma Toledo Rodrigues » 11 Set 2010 12:23

Francys Reymer escreveu:... to usando um display gráfico 128x64...

Pegue um papel quadriculado demarque 128 x 64 quadriculas e vc tera noção de quanto isso é limitado para traçar uma Senóide.

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

Re: Como escrever onda no display gráfico com pic16f877a

Mensagempor Francys Reymer » 11 Set 2010 19:01

Djalma Toledo Rodrigues escreveu:
Francys Reymer escreveu:... to usando um display gráfico 128x64...

Pegue um papel quadriculado demarque 128 x 64 quadriculas e vc tera noção de quanto isso é limitado para traçar uma Senóide.

DJ



vc quer dizer q não da pra desenhar uma onda senoidal no display? tem um projeto parecido com o meu q tem no youtube :
http://www.youtube.com/watch?v=JXTuzc306d0

e lá tem onda quadrada, senoidal e triangular
Avatar do usuário
Francys Reymer
Byte
 
Mensagens: 102
Registrado em: 10 Dez 2009 15:21


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Bing [Bot] e 1 visitante

x