Ir ao conteúdo

Osciloscópio com PIC


Pedrolobo8

Posts recomendados

Postado

Galera, venho mais um vez pedir a ajuda de vocês, desta vez eu resolvi fazer um osciloscópio com um PIC, a princípio estou utilizando o PIC18F4520 mas, após o projeto pronto, pretendo migrar para o PIC16F877A. Bom, dei uma estuda em relação ao funcionamento de um osciloscópio e, pelo o que eu entendi, ele usa um conversor analógico/digital. Fiz um projeto para testes e consegui medir algumas ondas, porém não consegui "ligar" os pontos da leitura e acima de uns 60Hz a leitura se embaralha toda. Espero que possam me ajudar. Grande abraço.

Código



#include "__T6963C.h"


//Configurações do LCD
char T6963C_dataPort at PORTD;
sbit T6963C_ctrlwr at RC0_bit;
sbit T6963C_ctrlrd at RE0_bit;
sbit T6963C_ctrlcd at RE1_bit;
sbit T6963C_ctrlrst at RE2_bit;
sbit T6963C_ctrlwr_Direction at TRISC0_bit;
sbit T6963C_ctrlrd_Direction at TRISE0_bit;
sbit T6963C_ctrlcd_Direction at TRISE1_bit;
sbit T6963C_ctrlrst_Direction at TRISE2_bit;
//----------------------------------------//

//Configurações dos botões
sbit UP at RB1_bit;
sbit DW at RB0_bit;
//----------------------------------------//

//Variáreis
bit press;
bit AltAMP;
char txt[]="0000";
short Amplitude=0;
unsigned short X=0,Y=0,Soma=10;
int Valor=0,Cont=0,I=0;//,Ponto[240];
//----------------------------------------//

void Converter(int VR){//Converte a leitura dos volts de entrada no pino AN0
txt[0]=(((VR / 100) % 10) + 48);
txt[1]=',';
txt[2]=(((VR / 10 ) % 10) + 48);
txt[4]=(((VR / 1 ) % 10) + 48);
}
//----------------------------------------//

void Grafico_Ondas(){//Estou usando este para exibir os "pontos" da leitura
Valor=((54 * Valor) / 1024);
Y=(32 - Valor);
T6963C_dot(X, (Y + Soma), T6963C_WHITE);
X++;
if (X==240){
X=0;
T6963C_grFill(0);
T6963C_line(0, 8, 239, 8, T6963C_WHITE);
}
}
//----------------------------------------//

void botões(){//Apenas para pegar a leitura dos botões
if (!UP && !press){
press=1;
AltAMP=1;
Amplitude++;
if(Amplitude==9)Amplitude=8;
}
else if (!DW && !press){
press=1;
AltAMP=1;
Amplitude--;
if(Amplitude<0)Amplitude=0;
}
else if (UP && DW)press=0;
}
//----------------------------------------//

void main() {

ADCON0=0x08;//Configuração dos canais analógicos e comparadores
ADCON1=0x0F;
ADCON2=0x0F;
CMCON|=0x07;

TRISA0_bit=1;//Configuração das portas I/O
TRISA1_bit=1;
TRISB0_bit=1;
TRISB1_bit=1;
TRISB2_bit=1;

press=0;//Zerando vareáveis
AltAMP=1;

T6963C_init(240,64,8);//Iniciando LCD T6963C
T6963C_graphics(1);
T6963C_text(1);
T6963C_panelFill(0);

T6963C_write_text(" V",0,0,T6963C_ROM_MODE_XOR);
T6963C_line(0, 8, 239, 8, T6963C_WHITE);

while(1){

Valor=ADC_Read(0);

Grafico_Ondas();

Converter(((Valor * 4.9) / 10.24)); //Converte e exibi tensão lida
T6963C_write_text(txt,0,0,T6963C_ROM_MODE_XOR);

Valor=ADC_Read(1);//Lê AN1 e posiciona devidamente a linha a ser exibida no LCD
Soma=((Valor * 30) / 1024) + 10;

botões();

switch (Amplitude){//Seleciona Delay
case 0:Delay_us(500);break;
case 1:Delay_ms(1) ;break;
case 2:Delay_ms(2) ;break;
case 3:Delay_ms(5) ;break;
case 4:Delay_ms(10) ;break;
case 5:Delay_ms(20) ;break;
case 6:Delay_ms(50) ;break;
case 7:Delay_ms(100);break;
case 8:Delay_ms(200);break;
}

if (AltAMP){//Exibe Delay selecionado
AltAMP=0;
switch (Amplitude){
case 0: T6963C_write_text("0.5ms",11,0,T6963C_ROM_MODE_XOR);break;
case 1: T6963C_write_text("1.0ms",11,0,T6963C_ROM_MODE_XOR);break;
case 2: T6963C_write_text("2.0ms",11,0,T6963C_ROM_MODE_XOR);break;
case 3: T6963C_write_text("5.0ms",11,0,T6963C_ROM_MODE_XOR);break;
case 4: T6963C_write_text(" 10ms",11,0,T6963C_ROM_MODE_XOR);break;
case 5: T6963C_write_text(" 20ms",11,0,T6963C_ROM_MODE_XOR);break;
case 6: T6963C_write_text(" 50ms",11,0,T6963C_ROM_MODE_XOR);break;
case 7: T6963C_write_text("100ms",11,0,T6963C_ROM_MODE_XOR);break;
case 8: T6963C_write_text("200ms",11,0,T6963C_ROM_MODE_XOR);break;
}
}
}
}
//----------------------------------------//

Circuito:

post-892805-13884962687156_thumb.jpg

Postado

A parte da conversão AD precisa ser feita em assembly para que a o tempo fique certo. O tempo que o PIC demora para desenhar no display deve ser contabilizado. O correto seria fazer uma leitura de 1 quadro inteiro e ir armazenando na memória RAM, e só depois jogar para o display. Precisaria implementar também um trigger para não perder a sincronia com o sinal.

O conversor AD desse PIC consegue fazer 100mil conversões por segundo se devidamente configurado, dá para ler até uma onda de 5KHz com 20 pontos por ciclo. Não é um ocoscópio muito útil.

Postado

Frequencímetros e Ociloscópios com PIC, tenho ali na gaveta um monte de plaquinhas de projetos abandonados.... rsrs

Compre um Multimetro Minipa ET-2075B. Tem frequencimetro de até 30MHz, barra gráfica e duty Cicle, capacimetro e todo o resto.

Comprei ele por 149,00 na Hayamax (o preço do site é pra cliente final, ou seja o dobro do preço).

Mas se seu intuito é apenas didático e quer tentar mesmo, eu vou ficar no aguardo... rs

Mas uma sugestão, você tá testando no Proteus, eu acho que frequências muito altas ele não vai simular legal.

Postado

Projetos_afg, obrigado pela dica de armazenar na RAM, realmente fez uma diferença muito grande.

Chacalgbi, estou fazendo por precisar de um e por motivos didáticos também. Me interessei muito pelo multímetro, estou precisando trocar o meu, mesmo. :)

Eu fiz algumas alterações e deu uma melhorada considerável, mas ainda não está como eu quero. Se puderem me ajudar a melhorar o projeto eu ficarei muito grato. :D

Novo código:



#include "__T6963C.h"


//Configurações do LCD
char T6963C_dataPort at PORTD;
sbit T6963C_ctrlwr at RC0_bit;
sbit T6963C_ctrlrd at RE0_bit;
sbit T6963C_ctrlcd at RE1_bit;
sbit T6963C_ctrlrst at RE2_bit;
sbit T6963C_ctrlwr_Direction at TRISC0_bit;
sbit T6963C_ctrlrd_Direction at TRISE0_bit;
sbit T6963C_ctrlcd_Direction at TRISE1_bit;
sbit T6963C_ctrlrst_Direction at TRISE2_bit;
//----------------------------------------//

//Configurações dos botões
sbit UP at RB1_bit;
sbit DW at RB0_bit;
//----------------------------------------//

// ------------------------------------------------------
// GLCD Picture name: Tela_Pricipal.bmp
// GLCD Model: T6963C 240x64
// ------------------------------------------------------

const code char Tela_Pricipal[1920] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
//----------------------------------------//

//Variáreis
bit press;
bit AltAMP;
char *txt="0000";
short Amplitude=0,Repetir=1;
unsigned short X=0,XX=0,Y=0,Soma=10;
int Valor=0,Leitura=240;
unsigned short Ponto[240];
//----------------------------------------//

void Converter(int VR){//Converte a leitura dos volts de entrada no pino AN0
txt[0]=0;
txt[1]=0;
txt[2]=0;
txt[3]=0;
txt[0]=((VR / 100) % 10) + 48;
txt[1]=',';
txt[2]=((VR / 10 ) % 10) + 48;
txt[3]=((VR / 1 ) % 10) + 48;
}
//----------------------------------------//

void Exibir_Onda(){//Exibe a onda no display

short aux=0;

T6963C_image(Tela_Pricipal);
X=0;
XX=0;
while(X<Leitura){
Y=(32 - Ponto[X]);
for(aux=1;aux<=Repetir;aux++){
T6963C_dot(XX, (Y + Soma), T6963C_WHITE);
T6963C_dot(XX, ((Y + Soma) + 1), T6963C_WHITE);
XX++;
}
X++;
}
X=0;
Delay_ms(100);
}
//----------------------------------------//

void Alterar_Amplitude(){//Selecionar amplitude
switch (Amplitude){
case 0: T6963C_write_text("1/1 ",11,0,T6963C_ROM_MODE_XOR);break;
case 1: T6963C_write_text("1/2 ",11,0,T6963C_ROM_MODE_XOR);break;
case 2: T6963C_write_text("1/3 ",11,0,T6963C_ROM_MODE_XOR);break;
case 3: T6963C_write_text("1/4 ",11,0,T6963C_ROM_MODE_XOR);break;
case 4: T6963C_write_text("1/5 ",11,0,T6963C_ROM_MODE_XOR);break;
case 5: T6963C_write_text("1/6 ",11,0,T6963C_ROM_MODE_XOR);break;
case 6: T6963C_write_text("1/8 ",11,0,T6963C_ROM_MODE_XOR);break;
case 7: T6963C_write_text("1/10",11,0,T6963C_ROM_MODE_XOR);break;
case 8: T6963C_write_text("1/12",11,0,T6963C_ROM_MODE_XOR);break;
case 9: T6963C_write_text("1/15",11,0,T6963C_ROM_MODE_XOR);break;
case 10: T6963C_write_text("1/16",11,0,T6963C_ROM_MODE_XOR);break;
case 11: T6963C_write_text("1/20",11,0,T6963C_ROM_MODE_XOR);break;
}

switch (Amplitude){
case 0: {Leitura=240; Repetir= 1;}break;
case 1: {Leitura=120; Repetir= 2;}break;
case 2: {Leitura= 80; Repetir= 3;}break;
case 3: {Leitura= 60; Repetir= 4;}break;
case 4: {Leitura= 48; Repetir= 5;}break;
case 5: {Leitura= 40; Repetir= 6;}break;
case 6: {Leitura= 30; Repetir= 8;}break;
case 7: {Leitura= 24; Repetir=10;}break;
case 8: {Leitura= 20; Repetir=12;}break;
case 9: {Leitura= 16; Repetir=15;}break;
case 10: {Leitura= 15; Repetir=16;}break;
case 11: {Leitura= 12; Repetir=20;}break;
}
X=0;
}
//----------------------------------------//

void botões(){//Apenas para pegar a leitura dos botões
if (!UP && !press){
press=1;
AltAMP=1;
Amplitude++;
if(Amplitude==12)Amplitude=11;
}
else if (!DW && !press){
press=1;
AltAMP=1;
Amplitude--;
if(Amplitude<0)Amplitude=0;
}
else if (UP && DW)press=0;
}
//----------------------------------------//

void main() {

ADCON0=0x08;//Configuração dos canais analógicos e comparadores
ADCON1=0x0F;
ADCON2=0x0F;
CMCON|=0x07;

TRISA0_bit=1;//Configuração das portas I/O
TRISA1_bit=1;
TRISB0_bit=1;
TRISB1_bit=1;
TRISB2_bit=1;

press=0;//Zerando vareáveis
AltAMP=1;

T6963C_init(240,64,8);//Iniciando LCD T6963C
T6963C_graphics(1);
T6963C_text(1);
T6963C_panelFill(0);

T6963C_image(Tela_Pricipal);

T6963C_write_text(" V",0,0,T6963C_ROM_MODE_XOR);

while(1){

Valor=ADC_Read(0);

X++;
if (X==Leitura){
Exibir_Onda();
}
Ponto[X]=((54 * Valor) / 1024);

Converter(((Valor * 5) / 10.24)); //Converte e exibi tensão lida
T6963C_write_text(txt,0,0,T6963C_ROM_MODE_XOR);

Valor=ADC_Read(1);//Lê AN1 e posiciona devidamente a linha a ser exibida no LCD
Soma=((Valor * 30) / 1024) + 10;

botões();

if (AltAMP){//Exibe Amplitude selecionado
AltAMP=0;
Alterar_Amplitude();
}

Delay_us(10);

}
}
//----------------------------------------//

Postado

rafael.luc, obrigado pelo link, me tirou algumas dúvidas.

Então, fiz algumas alterações no código e no hardware e ficou exatamente como eu queria!

Ele faz leituras até 4KHz, eu queria, se possível, ampliar essa capacidade. Se puderem me ajudar mais um pouco... :)

Código 2.0:



#include "__T6963C.h"


//Configurações do LCD
char T6963C_dataPort at PORTD;
sbit T6963C_ctrlwr at RC0_bit;
sbit T6963C_ctrlrd at RE0_bit;
sbit T6963C_ctrlcd at RE1_bit;
sbit T6963C_ctrlrst at RE2_bit;
sbit T6963C_ctrlwr_Direction at TRISC0_bit;
sbit T6963C_ctrlrd_Direction at TRISE0_bit;
sbit T6963C_ctrlcd_Direction at TRISE1_bit;
sbit T6963C_ctrlrst_Direction at TRISE2_bit;
//----------------------------------------//

//Configurações dos botões
sbit UPA at RB1_bit;
sbit DWA at RB0_bit;
sbit UPV at RB3_bit;
sbit DWV at RB2_bit;
sbit STA at RB4_bit;
sbit LNH at RB5_bit;
//----------------------------------------//

// ------------------------------------------------------
// GLCD Picture name: Tela_Pricipal.bmp
// GLCD Model: T6963C 240x64
// ------------------------------------------------------

const code char Tela_Pricipal[1920] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
//----------------------------------------//

//Variáreis
bit press;
bit Start;
bit AltAMP;
bit AltStart;
bit AltLinha;
bit AltVr;
char *txt="0000";
short Amplitude=0,Repetir=1,Linha=0;
unsigned short X=0,XX=0,Y=0,Soma=10, OLDSoma=10;
int Valor=0,Leitura=240;
int Ponto[240];
float Vr=2.5;
//----------------------------------------//

void Converter(int VR){//Converte a leitura dos volts de entrada no pino AN0
txt[0]=0;
txt[1]=0;
txt[2]=0;
txt[3]=0;
txt[0]=((VR / 100) % 10) + 48;
txt[1]=',';
txt[2]=((VR / 10 ) % 10) + 48;
txt[3]=((VR / 1 ) % 10) + 48;
}
//----------------------------------------//

void Exibir_Onda(){//Exibe a onda no display

short aux=0;

T6963C_image(Tela_Pricipal);
X=0;
XX=0;
while(X<Leitura){
Y=(32 - Ponto[X]);
for(aux=1;aux<=Repetir;aux++){
T6963C_dot(XX, (Y + Soma), T6963C_WHITE);
if (Linha==1) T6963C_dot(XX, ((Y + Soma) + 1), T6963C_WHITE);
else if (Linha==2){
T6963C_dot(XX, ((Y + Soma) + 1), T6963C_WHITE);
T6963C_dot(XX, ((Y + Soma) + 2), T6963C_WHITE);
}
XX++;
}
X++;
}
X=0;
Delay_ms(100);
}
//----------------------------------------//

void Alterar_Amplitude(){//Selecionar amplitude
switch (Amplitude){
case 0: T6963C_write_text("1/1 ",6,0,T6963C_ROM_MODE_XOR);break;
case 1: T6963C_write_text("1/2 ",6,0,T6963C_ROM_MODE_XOR);break;
case 2: T6963C_write_text("1/3 ",6,0,T6963C_ROM_MODE_XOR);break;
case 3: T6963C_write_text("1/4 ",6,0,T6963C_ROM_MODE_XOR);break;
case 4: T6963C_write_text("1/5 ",6,0,T6963C_ROM_MODE_XOR);break;
case 5: T6963C_write_text("1/6 ",6,0,T6963C_ROM_MODE_XOR);break;
case 6: T6963C_write_text("1/8 ",6,0,T6963C_ROM_MODE_XOR);break;
case 7: T6963C_write_text("1/10",6,0,T6963C_ROM_MODE_XOR);break;
case 8: T6963C_write_text("1/12",6,0,T6963C_ROM_MODE_XOR);break;
case 9: T6963C_write_text("1/15",6,0,T6963C_ROM_MODE_XOR);break;
case 10: T6963C_write_text("1/16",6,0,T6963C_ROM_MODE_XOR);break;
case 11: T6963C_write_text("1/20",6,0,T6963C_ROM_MODE_XOR);break;
}

switch (Amplitude){
case 0: {Leitura=240; Repetir= 1;}break;
case 1: {Leitura=120; Repetir= 2;}break;
case 2: {Leitura= 80; Repetir= 3;}break;
case 3: {Leitura= 60; Repetir= 4;}break;
case 4: {Leitura= 48; Repetir= 5;}break;
case 5: {Leitura= 40; Repetir= 6;}break;
case 6: {Leitura= 30; Repetir= 8;}break;
case 7: {Leitura= 24; Repetir=10;}break;
case 8: {Leitura= 20; Repetir=12;}break;
case 9: {Leitura= 16; Repetir=15;}break;
case 10: {Leitura= 15; Repetir=16;}break;
case 11: {Leitura= 12; Repetir=20;}break;
}
X=0;
}
//----------------------------------------//

void botões(){//Apenas para pegar a leitura dos botões
if (!UPA && !press){
press=1;
AltAMP=1;
Amplitude++;
if(Amplitude==12)Amplitude=11;
}
else if (!DWA && !press){
press=1;
AltAMP=1;
Amplitude--;
if(Amplitude<0)Amplitude=0;
}
else if (!UPV && !press){
press=1;
AltVr=1;
Vr = (Vr + 0.5);
if(Vr>4.5)Vr=4.5;
}
else if (!DWV && !press){
press=1;
AltVr=1;
Vr = (Vr - 0.5);
if(Vr<0.5)Vr=0.5;
}
else if (!STA && !press){
press=1;
AltStart=1;
Start=~Start;
}
else if (!LNH && !press){
press=1;
AltLinha=1;
Linha++;
if(Linha==3)Linha=0;
}
else if (UPA && DWA && UPV && DWV && STA && LNH)press=0;
}
//----------------------------------------//

void Exibe_Valor_linha(){
if (Linha==0)T6963C_write_text("L:1",11,0,T6963C_ROM_MODE_XOR);
else if (Linha==1)T6963C_write_text("L:2",11,0,T6963C_ROM_MODE_XOR);
else if (Linha==2)T6963C_write_text("L:3",11,0,T6963C_ROM_MODE_XOR);
}
//----------------------------------------//

void Exibe_Start(){
if (Start)T6963C_write_text("Start",25,0,T6963C_ROM_MODE_XOR);
else T6963C_write_text("Stop ",25,0,T6963C_ROM_MODE_XOR);
}
//----------------------------------------//

void Converter_Exibir_Vr(){

short Vrf=0;
char *txtVr="000";

txtVr[0]=0;
txtVr[1]=0;
txtVr[2]=0;

Vrf=(Vr * 10);

txtVr[0]=((Vrf / 10) % 10) + 48;
txtVr[1]=',';
txtVr[2]=((Vrf / 1 ) % 10) + 48;

T6963C_write_text(txtVr,19,0,T6963C_ROM_MODE_XOR);
}
//----------------------------------------//

void main() {

ADCON0=0x08;//Configuração dos canais analógicos e comparadores
ADCON1=0x0B;
ADCON2=0x0F;
CMCON|=0x07;

TRISA0_bit=1;//Configuração das portas I/O
TRISA1_bit=1;
TRISB = 0x3F;

press=0;//Zerando vareáveis
Start=1;
AltAMP=1;
AltStart=1;
AltLinha=1;
AltVr=1;

T6963C_init(240,64,8);//Iniciando LCD T6963C
T6963C_graphics(1);
T6963C_text(1);
T6963C_panelFill(0);

T6963C_image(Tela_Pricipal);

T6963C_write_text(" V",0,0,T6963C_ROM_MODE_XOR);
T6963C_write_text("Vr: V",16,0,T6963C_ROM_MODE_XOR);

while(1){

Valor=ADC_Read(0);

Converter(((Valor * 5) / 10.24)); //Converte e exibi tensão lida
T6963C_write_text(txt,0,0,T6963C_ROM_MODE_XOR);

Valor=(Valor * (5 - Vr)) / 10.23;

if (Start){
X++;
if (X==Leitura){
Exibir_Onda();
}
Ponto[X]=((54 * Valor) / 500);
}
else{
X=0;
Delay_ms(150);
}

Valor=ADC_Read(1);//Lê AN1 e posiciona devidamente a linha a ser exibida no LCD
Soma=((Valor * 30) / 1024);

if (!Start){
if (OLDSoma!=Soma){
Exibir_Onda();
}
}
OLDSoma=Soma;

botões();

if (AltAMP){//Exibe Amplitude selecionado
AltAMP=0;
Alterar_Amplitude();
if (!Start)Exibir_Onda();
}

if (AltLinha){
AltLinha=0;
Exibe_Valor_linha();
if (!Start)Exibir_Onda();
}

if (AltStart){
AltStart=0;
Exibe_Start();
}

if (AltVr){
AltVr=0;
Converter_Exibir_Vr();
if (!Start)Exibir_Onda();
}

Delay_us(10);

}
}
//----------------------------------------//

Hardware 2.0:

post-892805-13884962813821_thumb.png

Postado

Até que frequência você quer chegar? Com o conversor AD você só consegue ler ondas de até 5KHz com 20 pontos por ciclo, ou 10KHz com 10 pontos por ciclo, e assim vai.

Acredito que não consegue uma velocidade muito maior que essa, já que estamos atingindo o limite da velocidade do conversor AD e do processamento do PIC. Você faz outras operações dentro da parte da leitura de um quadro. Para frequências altas, você não vai conseguir desenhar a onda em tempo real.

Para melhorar um pouco mais a velocidade, use uma rotina para ler os valores do conversor ad, e armazenar em um array sem nenhum processamento matemático ou lógico. Armazene os 240 bytes direto do conversor ad, e só depois converta esse valor para tensão e mostre a onda no display (leia apenas os 8 bits mais signifiicativos).

  • Coordenador
Postado

Caso o autor do tópico necessite, o mesmo será reaberto, para isso deverá entrar em contato com a moderação solicitando o desbloqueio.

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...