TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: PabloFiscella en 30 de Diciembre de 2005, 14:37:00

Título: No puedo mostrar ADC
Publicado por: PabloFiscella en 30 de Diciembre de 2005, 14:37:00
Hola gente:

Ya no se que mas probar.
Estoy haciendo algo simple para uds.
Intento tomar los datos de AN0 que ronda en 2.5v lo multiplico por 10 y quedan 25.0 luego uso una funcion para separar cada numero y mostrarlo por un display de 7 segmentos.
En el proteus parece funcionar pero cuando lo llevo a la practica muestra cualquier cosa y cambia costantemente de valor.
Ya chequie la entrada y entran los 2.5v.
El circuito funciona bien porque si pongo a la variable sonda1 un valor fijo lo muestra.
les dejo el codigo a ver si encuentran algo.
Hay variables que las estoy usando para otra cosa.
El codigo que ven no es el codigo completo del progama.
Muchas gracias y felices fiestas.
Pablo

#include <16F874.h>

#device ADC=10
#use delay(clock=4000000)
#fuses XT, NOPROTECT, NOPUT, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NOWDT


byte Display1[] = {0b0000,0b0001,0b0010,0b0011,0b0100,0b0101,0b0110,0b0111,0b1000,0b1001};
byte Anodos[] = {0b111111,0b111110,0b111101,0b111011,0b110111,0b101111,0b011111};
byte sonda,int_count = 35;
float sonda1,sonda3;
float TempBaja1, TempAlta1,v4,v10;
char numero1[4],numero3[4], tbaja[4],talta[4];//,PHAlto[4],PHBajo[4], PH4[4],PH10[4];
byte Boton = 0,Seteo = 1; //VistaPH = 1;
byte t1,t2,t3,t4,t5,t6;

#separate
void main()
{
   setup_adc(ADC_CLOCK_INTERNAL);
   setup_adc_ports(RA0_RA1_RA3_ANALOG);
   set_adc_channel(1);

   enable_interrupts(global);
   enable_interrupts(INT_AD);

   set_tris_a(0xFF);
   set_tris_b(0x00);
   set_tris_c(0x00);
   set_tris_d(0x00);
   set_tris_e(0x3);

   while(true)
   {
         sonda1 = (read_adc() * 0.0048828125);
         delay_ms(3);
//         sonda1 = 1.23;
         t1 = (int) sonda1;
         sonda1 = (sonda1 - t1) * 10;
         t2 = (int) sonda1;
         sonda1 = (sonda1 - t2) * 10;
         t3 = (int) sonda1;

            output_b(Display1[t1]);
            output_d(Anodos[1]);
            delay_ms(3);
            output_d(Anodos[0]);
            output_b(Display1[t2]);
            output_d(Anodos[2]);
            delay_ms(3);
            output_d(Anodos[0]);
            output_b(Display1[t3]);
            output_d(Anodos[3]);
            delay_ms(3);
            output_d(Anodos[0]);
   }
}
Título: RE: No puedo mostrar ADC
Publicado por: PabloFiscella en 30 de Diciembre de 2005, 23:42:00
Hola:

Acabo de descubrir que era pero hay algo que no entiendo.
Si configuro el analogico a 10 bits no funciona pero si lo configuro a 8 anda perfecto.
No es que el 16F874 tiene 10 bits de resolucion?

Saludos.
Título: RE: No puedo mostrar ADC
Publicado por: RaDoN en 31 de Diciembre de 2005, 02:50:00
Toda la gama 16F87x tiene un ADC de 10 bits, lo unico que varia entre ellos es el nº de canales.
Título: RE: No puedo mostrar ADC
Publicado por: omibaya en 01 de Enero de 2006, 11:16:00
Mira, me parece que se qeu es lo que pasa...prueba ponerle a tu output_b(Display1[t1]); esto:
output_b(Display1[t1] + "0"); ese es un error que yo tambien cometia, lo que pasa es que el lcd esta en ascii y tu le estas mandando decimal, y por eso te aparece cualquier coas como a mi, pruebalo y me cuentas
Título: RE: No puedo mostrar ADC
Publicado por: omibaya en 01 de Enero de 2006, 11:19:00
jeje, me acabo de dar cuenta que no es lcd, es que solo lei el enunciado...lo voy a examinar mejor, y lo voy a probar y te mando el mensaje
Título: RE: No puedo mostrar ADC
Publicado por: PabloFiscella en 01 de Enero de 2006, 18:46:00
Gracias. Si podes revisalo porque ya no encuentro cual pueda ser el problema.
Con ADC=8 funciona bien. Pero con 10 bits muestra cualquier cosa.

Saludos.
Pablo