Autor Tema: CONVERSION ANALOGICA DIGITAL DEL PIC 16F877 DENTRO DE UN CICLO WHILE  (Leído 1083 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado guerrero.alvaro123

  • PIC10
  • *
  • Mensajes: 1
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



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;
   }

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: CONVERSION ANALOGICA DIGITAL DEL PIC 16F877 DENTRO DE UN CICLO WHILE
« Respuesta #1 en: 19 de Junio de 2014, 19:07:37 »
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?
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...


 

anything