Como escrever onda no display gráfico com pic16f877a

Enviado:
09 Set 2010 00:14
por Francys Reymer
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
Re: Como escrever onda no display gráfico com pic16f877a

Enviado:
09 Set 2010 14:23
por jvanderleym
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);
}

Enviado:
09 Set 2010 20:07
por Djalma Toledo Rodrigues
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

Enviado:
09 Set 2010 21:25
por Francys Reymer
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?
Re: Como escrever onda no display gráfico com pic16f877a

Enviado:
11 Set 2010 12:23
por Djalma Toledo Rodrigues
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
Re: Como escrever onda no display gráfico com pic16f877a

Enviado:
11 Set 2010 19:01
por Francys Reymer
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