Ola Pessoal , tenho um programa aqui em CCS , e quando eu coloco ele para funcionar , ele teria que mostrar no LCD , o valos “tensão “ até 1023(valor do AD mesmo ) . só que quando vou variando a tensão , quando ela chega em 512 , passa para 0 e começa de novo do zero e vai subindo ...
Não estou conseguindo ver onde tá o erro , até porque tava funcionando antes ... obs. Esse programa ainda não esta acabado , mas essa parte do LCD e do Ad não está funcionando , e eu não to conseguindo enxergar onde esta o erro no código ... aqui vai o código inteiro : só pode ser os printf lá embaixo , mas não estou enxergando mesmo ... pode ser o sono ...
#include <16F876.h>
#device adc=10
#use delay (clock=4000000)
#fuses HS,NOWDT,PUT,BROWNOUT,NOLVP
#use fast_io(a)
#use fast_io(B)
#use fast_io(C)
#include <regs_16F87x.h>
#include <mod_lcd_pic16f876a.c>
#bit rs_lcd=portc.1 // pino do pic onde esta ligado o pino RS do lcd para ser colocado em terra
#bit botao0=portb.0
int16 tensao,tensao_total;
int16 corrente,corrente_total;
void le_ad (void)
{
int t;
t=3;
while(t)
{
set_adc_channel(0);
delay_us(70);
tensao=read_adc();
set_adc_channel(1);
delay_us(70);
corrente=read_adc();
tensao_total=tensao_total+tensao;
corrente_total=corrente_total+corrente;
t--; }
tensao_total=tensao_total/3;
corrente_total=corrente_total/3;
}
}
void main(void)
{
cmcon=07; // comparadores desligados
rbpu=0; // pull ups do port b ativados
set_tris_a (255);
set_tris_b(255);
set_tris_c(0);
porta=0;
portb=0;
portc=0; // inicia o ports a,b,c em 0
rs_lcd=0; // coloca pino RS do display para terra
lcd_ini() ;
lcd_escreve('\f'); // apaga lcd
lcd_envia_byte(0,0x0c); // apaga cursor do lcd
setup_adc_ports(ra0_ra1_analog_ra3_ref); // faz pino ra0 entrada do ad ..
setup_adc (adc_clock_internal); // adc ligado ao clock interno
while (true)
{
le_ad();
lcd_pos_xy(1,1);
printf(lcd_escreve,"Tensao: %Lu V \r\n",tensao_total );
printf(lcd_escreve, "Amps: %Lu mA \r", corrente_total);
if (tensao>950)
{ lcd_escreve('\f');
while (tensao>950)
{ printf(lcd_escreve, " Warning !! \r\n ");
printf(lcd_escreve, " Voltar Knob !! ");
le_ad();
}
lcd_escreve('\f'); }
}}
Abs
Geraldo