Autor Tema: No puedo mostrar ADC  (Leído 1582 veces)

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

Desconectado PabloFiscella

  • PIC16
  • ***
  • Mensajes: 154
No puedo mostrar ADC
« 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]);
   }
}

Desconectado PabloFiscella

  • PIC16
  • ***
  • Mensajes: 154
RE: No puedo mostrar ADC
« Respuesta #1 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.

Desconectado RaDoN

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1498
RE: No puedo mostrar ADC
« Respuesta #2 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.
Si juegas contra el mejor, pierdes como los demás.

Desconectado omibaya

  • PIC12
  • **
  • Mensajes: 57
RE: No puedo mostrar ADC
« Respuesta #3 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

Desconectado omibaya

  • PIC12
  • **
  • Mensajes: 57
RE: No puedo mostrar ADC
« Respuesta #4 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

Desconectado PabloFiscella

  • PIC16
  • ***
  • Mensajes: 154
RE: No puedo mostrar ADC
« Respuesta #5 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