Autor Tema: error leyendo del A/D del pic18f2520  (Leído 2359 veces)

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

Desconectado overgeoo

  • PIC10
  • *
  • Mensajes: 22
error leyendo del A/D del pic18f2520
« en: 21 de Abril de 2006, 11:12:58 »
Wenas, a veri si me podeis echar una mano con este codigo q le estoy dando vueltas y vueltas y no veo en la tonteria en la q me he tenido q equivocar:

#include <18f2520.h>
#device adc=10
#include <stdlib.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP
#use delay(clock = 4000000)

#use standard_io(A)


void lectura_pt100(void);
void main(void)

   set_tris_a(0xFF); //puerto A como entratada
 
   setup_adc_ports(AN0); //ponemos el terminal A0 como entrada analogica
   setup_adc(ADC_CLOCK_INTERNAL);   
   lectura_pt100();
}



void lectura_pt100(void)
{

   float tension;
   int valor;

   set_adc_channel(0);  //leemos del canal 0
   valor = read_adc();
   delay_us(10);
   tension = ( (valor * 5 ) / 1023 ) ;

}

Pos este es el cogido, al simularo en proteus e intentar sacar el valor de tension por la lcd me da valor 0, muchas gracias por adelantado.

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
Re: error leyendo del A/D del pic18f2520
« Respuesta #1 en: 21 de Abril de 2006, 11:23:44 »
Mirando tu programa por encima....¿donde estan las funciones de manejo de la lcd?


Suerte!!! :wink:
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado overgeoo

  • PIC10
  • *
  • Mensajes: 22
Re: error leyendo del A/D del pic18f2520
« Respuesta #2 en: 21 de Abril de 2006, 11:29:33 »
Wenas, gracias por responder tan rapido, es q he puesto el codigo resumido jejej, pq es algo largo y por no liar he puesto solo la parte q me iba mal q es lo de leer del convertidor,  lo de imprimir del lcd eso si me sale bien,  aqui lo tienes con la parte de manejo de la lcd.

#include <18f2520.h>
#device adc=10
#include <stdlib.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP
#use delay(clock = 4000000)

#use standard_io(A)


void lectura_pt100(void);
void main(void)
{
   set_tris_a(0xFF); //puerto A como entratada
 
   setup_adc_ports(AN0); //ponemos el terminal A0 como entrada analogica
   setup_adc(ADC_CLOCK_INTERNAL);   
   lectura_pt100();
}



void lectura_pt100(void)
{

   float tension, resistencia;
   int valor;

   set_adc_channel(0);
   valor = read_adc();
   delay_us(10);
   tension = ( (valor * 5 ) / 1023 ) ;
   Resistencia = -4.36321 + (514.671*tension);
   Temp_Agua = -8658.01* (-0.3908 + sqrt(0.152725 + 0.000231*(100 - Resistencia) ) );
   impresion = 1; //para imprimir la nueva temperatura
   
    lcd_putc("\f");
   for ( ; ; )
   {
     
      printf( lcd_putc, "Tension = %.5f",tension  );
      lcd_gotoxy(1,1);
   }
   

}
« Última modificación: 21 de Abril de 2006, 11:34:10 por overgeoo »

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
Re: error leyendo del A/D del pic18f2520
« Respuesta #3 en: 21 de Abril de 2006, 11:50:39 »
Bueno, en tu programa completo decirte que solamente lee el conversor una vez, deberias realizar un bucle repetitivo en el main, concretamente en la funcion que llama a la captura del conversor y su representacion, no realizar el bucle infinito en la funcion de la captura del conversor y su posterior representacion como tienes tu....
Código: [Seleccionar]
#include <18f2520.h>
#device adc=10
#include <stdlib.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP
#use delay(clock = 4000000)

#use standard_io(A)


void lectura_pt100(void);
void main(void)
{
   set_tris_a(0xFF); //puerto A como entratada
 
   setup_adc_ports(AN0); //ponemos el terminal A0 como entrada analogica
   setup_adc(ADC_CLOCK_INTERNAL); 
   set_adc_channel(0);
   
   for(;;){     ///bucle...
            lectura_pt100();
            delay_ms(200);         //cada 200ms realiza una lectura del conversor y muestra los nuevos datos por la lcd
            }    ///...infinito
}



void lectura_pt100(void)
{

   float tension, resistencia;
   int valor;

   valor = read_adc();
   delay_us(10);
   tension = ( (valor * 5 ) / 1023 ) ;
   Resistencia = -4.36321 + (514.671*tension);
   Temp_Agua = -8658.01* (-0.3908 + sqrt(0.152725 + 0.000231*(100 - Resistencia) ) );
   impresion = 1; //para imprimir la nueva temperatura
   
    lcd_putc("\f");
    printf( lcd_putc, "Tension = %.5f",tension  );
}

No se si funcionara, ya que no me he metido a profundizar tu codigo...pero asi por lo menos realizas lecturas del conversor constantes...


Suerte!!! :wink:
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado overgeoo

  • PIC10
  • *
  • Mensajes: 22
Re: error leyendo del A/D del pic18f2520
« Respuesta #4 en: 21 de Abril de 2006, 12:09:40 »
Gracias por responder tan rapido de nuevo jejej,  si si tienes razon ya se que esta mal y que solo leo una vez pero lo hize asi para hacer pruebas, lo que tenog hecho es lo siguiente en proteus tengo conectada a la linea A0 una entrada de tension constante de 3 voltios, y lo que queria hacer era leer esa tension con el A/D y mostrarla por el lcd, pero no se pq me saca como valor 0.0000, en el rar te adjunto el archivo de proteus, el codigo completo y el coff, veras q hay tres botones y demas, de eso olvidate nada mas darle al play ya me pongo a leer de la entrada A0 y me saca como valor 0.00000.

Weno muchas gracias vszener.
« Última modificación: 22 de Abril de 2006, 07:02:45 por overgeoo »

Desconectado overgeoo

  • PIC10
  • *
  • Mensajes: 22
Re: error leyendo del A/D del pic18f2520
« Respuesta #5 en: 22 de Abril de 2006, 07:02:17 »
Lo primero dar las gracias a Vszener  por sus respuestas :), el problema ya esta resuelto el error estaba en que ponia la resolucion del A/D a 10 bits y declaraba la variable valor que leia del adc como tipo int y claro en un int no entran los 1023 valores necesiarios y me empezaba a fallar el codigo, la solucion fue nada mas poner la variable valor como tipo long y ya funcion :D.

Y ahora tengo otro problema no logro poner la entrada A3 como voltaje de referencia para el A/D, alguien me puede echar una mano con eso?.
El codigo que tengo es el siguiente:

setup_adc_ports(AN0 | VSS_VREF );

Con esto lo que intento es poner AN0 como entrada analogica y poner la entrada AN3 como Vref high. Para probar el funcionamiento he hecho la sigueinte simulacion en proteus, en la que en AN0 conecto una fuente de DC a la que le pongo el valor que quiero y despues muestro esa tension por el lcd, pero como veis el funcionamiento no es el correcto, espero q me podias ayudar y de nuevo muchas gracias por adelantado a todos.
« Última modificación: 22 de Abril de 2006, 07:42:38 por overgeoo »

Desconectado overgeoo

  • PIC10
  • *
  • Mensajes: 22
Re: error leyendo del A/D del pic18f2520
« Respuesta #6 en: 22 de Abril de 2006, 07:51:45 »
Me respondere a mi mismo pq acabo de arreglar el problema, como no era otra bobada como siempre jejej, el problema estaba en que no configuraba AN3 como una entrada analogica, en cuanto la he puesto como entrada analogica ya funciona a la perfeccion :D. Adjunto el codigo ya arreglado pro si a alguna os hace falta alguna vez. El circuito basicamente lo que hace es medir una tension de como maximo 0.5 voltios que le ponemos a la entrada AN0 a traves del generador de continua, el circuito es capaz de dar una precision de hasta tres decimales. Weno un saludo a todos.



 

anything