TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: guerrero.alvaro123 en 19 de Junio de 2014, 11:02:10
-
Buenos dias amigos del foro, hoy traigo una inquietud sobre un proyecto que estoy desarrollando, soy algo nuevo en este lenguaje de programacion. Estoy utilizando PIC COMPILER C, el detalle es que hago bien la conversion analogica digital pero al incluir las variables dentro de un ciclo while no hace nada, ni las incrementa ni las decrementa ni nada, alguien podria ayudarme... Yo quiero que el programa me lea los valores analogicos y los pase a digital(esto lo hace perfectamente), una vez hecho esto, los varie de acuerdo al valor leido, es decir si el valor leido es negativo(<128) incremente una variable en 1 y si es positivo (>128) la decremente, hasta que la variable tenga un valor especifico (igual a 128)... Aqui envio unas imagenes del codigo y de lo que me sale por pantalla
(http://)
while((int)conversion!=128)
{
if((int)conversion>128)
{
control=(int)(control-1);
printf("%f\t V",control);
delay_ms(20);
puerto_b=control;
}
else
{
control=(int)(control+1);
printf("%f\t V",control);
delay_ms(20);
puerto_b=control;
}
medicion();
}
donde conversion y control vienen de la conversion analogica y digital
aqui esta el codigo de conversion A/D
void medicion(void)
{
setup_adc(adc_clock_internal); // configuro el conversor análogo digital
setup_adc_ports(RA0_RA1_ANALOG_RA3_RA2_REF); // configuro los pines de la conversion
set_adc_channel(0); // escojo el canal a convertir
delay_ms(20); // esperar mientras se inicializa el módulo A/D
conversion = read_adc(); // leer el valor
delay_ms(20);
set_adc_channel(1); // escojo el canal a convertir
delay_ms(20); // esperar mientras se inicializa el módulo A/D
control = read_adc(); // leer el valor
delay_ms(20);
ref=(int)conversion;
valor=(((conversion*10)/255)-5)/1.494;
}
-
te voy a recomendar un par de cosillas que mas a delante igual te sirven para hacer mas legible tu codigo...
1-configura los ADC en el inicio del main, asi perderas menos ciclos de reloj y tu codigo generado se reducira....
2-trabaja con numeros de 8 o 16 bits para la lectura del ADC... me ha fallado muchas veces el ccs por culpa de esto...conversion = read_adc(), siendo conversion un dato de tipo float...
3-ojo con algun else...suele fallar mucho, mejor usa:
if((int)conversion>128)
...............
if((int)conversion<128)
...............
que resolucion estas usando en el ADC? estas usandolo en proboard el programa o en proteus?