Estoy trabajando con adc, midiendo la reicistencia de un potenciometro, pero con 8 bits ay un error de mas menos 2 con 10 bits ay un error de mas menos 10, esto para manejar el posicionamiento de un motor, les dejo el codigo por si les interesa.
#include\r <16f876a.h>
#device ADC=10
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT
#use delay(clock=4000000)
#use standard_io(b)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
char Keypress =0x00;
int valor=0x00;
long int valor2=0x00;
float valor3=0x00;
void toma_adc(void){
set_adc_channel(0);
valor=read_adc();
valor2=read_adc();
valor3=read_adc();
}
void ajusta_servo(void){
switch(Keypress){
case '1': toma_adc();printf("Valor = %u\r\n",valor);
break;
case '2': toma_adc();printf("Valor = %lu\r\n",valor2);
break;
case '3': toma_adc();printf("Valor = %f\r\n",valor3);
break;
}
}
#int_rda
void rda_isr() {
Keypress=0x00;
if(kbhit()){
Keypress=getc();
}
}
void main() {
setup_adc(ADC_CLOCK_INTERNAL); //configura el converso
setup_adc_ports(RA0_analog); //entrada 0 como analogica
enable_interrupts(int_rda);
enable_interrupts(global);
printf("\r\n\Nasin Potenciometro.\r\n\r\n" );
printf("\r\n\Estable...\r\n\r\n" );
do {
if(Keypress!=0x00){
ajusta_servo();
Keypress=0x00;
}
} while (TRUE);
}
el progrma es con la interfas serial, par saber el valor de potenciometro, si alguien me puede ayudar, bueno de antemano gracias....