Autor Tema: problema con Conversion A/D, pines AN0 y AN1  (Leído 1914 veces)

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

Desconectado namontoy

  • PIC10
  • *
  • Mensajes: 3
problema con Conversion A/D, pines AN0 y AN1
« en: 17 de Marzo de 2006, 11:12:00 »
Hola a todos!!

Estoy desarrollando un control simple de temperatura utilizando un sensor LM35, un PIC 16F819,  4 display 7 segmentos y un Potenciometro para modificar el nivel de temperatura deseado.

Todo lo estoy desarrollando con MPLAb 7.2.

Mi programa funciona de tal forma que hago una conversion en AN0 (o en AN1) utilizando interrupciones. Tengo debidamente definidas las entradas en el TRISA y en el ADCON1, ademas del reloj segun lo recomendado en el datasheet del PIC.
Tengo definida a AN3 como referencia de voltaje.

Cuando estaba desarrollando el programa, probe por aparte cada una de las conversion A/D y funcionaban bien (aun lo hace), pero (repito) solo si modifico el codigo para que se haga la conversion por un solo pin. Si dejo el codigo completo (para hacer las dos conversiones) me sucede algo muy extraño, un tipo de interferencia o filtración de un conversor con el otro, en fin... el caso es que los datos adquiridos ya no son los correctos (en ninguno de los dos pines).

Ya intente que cada ves que se termine la conversion se desactive el modulo de conversion (BCF     ADCON0, ADON) y sea activado cada ves que se va a realizar una conversion... pero sucede algo mucho peor, todo se distorsiona y los datos no son ni parecidos...

Bueno, eso es todo. Si a alguien le a pasado lo mismo y sabe como solucionarlo, le  agradeceria la colaboracion que me pudiera brindar.

Muchas gracias. Un feliz dia!!

namontoy

Desconectado poi5on

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 127
RE: problema con Conversion A/D, pines AN0 y AN1
« Respuesta #1 en: 17 de Marzo de 2006, 13:39:00 »
Hola amigo,
Caso raro el q presentas, me parece un problema es de voltaje de referencia, coloca la referencia directa, osea que el PIC la tome de vcc y muestreas un canal y despues el otro a ver que pasa. postea la parte del codigo donde lees los canales a ver que estas haciendo.

Salu2

Desconectado namontoy

  • PIC10
  • *
  • Mensajes: 3
RE: problema con Conversion A/D, pines AN0 y AN1
« Respuesta #2 en: 17 de Marzo de 2006, 16:22:00 »
Hola poi5on!!

En mi programa, la referencia esta asignada a AN3 no porque yo quiera, sino porque toco ya que si te fijas en la pagina 83 del datasheet de este pic, la unica forma para tener 2 pines analogos y los otros que mas pudiera como digitales es 0101 en PCFG<3:0>; sin contar los pines del cristal y el master clear (que a mi me gustan externos). Por esto me toco trabajar con la referencia en el pin 3... Pero lo tengo puesto con la alimentacion del PIC -> 5V -> Un lm7805...

Todo mi programa lo he desarrollado por modulos (intentando simular algo parecido a clases... cosas que se le quedan a uno de JAVA).

En fin, mi archivo se llama Conversion_AD.inc , he preferido adjuntarlo a pegarlo aqui completo ya que es un poco largo.

Podes fijarte en dos subrutinas en este archivo: la primera es CONFIG_CONVER_AD en la cual configuro algunas cosas necesarias y que no deben ser modificadas despues.
La segunda subrutina es DO_CONVER_AN0 la cual es la encargada de hacer la conversion en AN0. En esta se llaman a dos subrutinas de otros archivos <-> modulos que no son necesarios aqui, estas llamadas son ESPERAR_CONVER -> encargada de esperar la interrupcion debida a la conversion y la otra es ACONDICIONAR_DATO, que es la encargada de multiplicar, dividir y transformacion BCD... y todo lo necesario para presentar el el display de 7 segmentos.

La ultima llamada (que esta comentareada) es la que al activarla me esta creando el problema (;CALL   DO_CONVER_AN1), el codigo de esta subrutina como puedes ver es casi identico... asi que no se que es lo que sucede.

Muchas gracias por todo y disculpame la explicacion tan larga...

Feliz dia

namontoy


Bueno, fue imposible adjuntar el archivo asi que lo voy a pegar (solo lo necesario)
==============================================
CONFIG_CONVER_AD
   BSF      STATUS, RP0
   MOVLW   b"10000101"
   MOVWF   ADCON1
   BSF      PIE1, ADIE
   BCF      STATUS, RP0
   BCF      PIR1, ADIF
   BSF      CONFIGURACION,CONF_AD
   RETURN


;SUBRUTINA ENCARGADA DE LA CONVERSION EN EL PIN AN0
DO_CONVER_AN0      
   CLRF   CONVER_TMR0
   BCF      CONTROL_CONVER_AD,CONVER_OK
   MOVLW   b"01000001"            
   MOVWF   ADCON0               
   NOP                        
   BSF      ADCON0, GO            
   BSF      CONTROL_CONVER_AD,AD_AN0   
   CALL   ESPERAR_CONVER         
   ;BCF      ADCON0,ADON         
   MOVF   ADRESH,W
   MOVWF   CONVERSION_AN0_HIGH      
   BSF      STATUS, RP0            
   MOVF   ADRESL,W            
   BCF      STATUS, RP0            
   MOVWF   CONVERSION_AN0_LOW      
   CALL   ACONDICIONAR_DATO      
   ;CALL   DO_CONVER_AN1                                    
   RETURN
===================================================
Feliz dia

namontoy

Desconectado cbabow

  • PIC10
  • *
  • Mensajes: 16
RE: problema con Conversion A/D, pines AN0 y AN1
« Respuesta #3 en: 18 de Marzo de 2006, 06:35:00 »
namontoy ,
Tirale una demora entre conversiones para que se acomode los conversores fijate  no se en ese pic nunca lo programamos pero en el 873 funca bien de est6a manera. el pic creo que trabaja con cristal de 4mhz sino lee la pdf que esta el tiempo ahi.

MEDIR   movlw   d"1"      ;Tiempo de propagación
   call   DEMORA
   bsf   ADGO      ;Inicia la conversión A/D
   btfsc   ADGO      ;Espera que termine de convertir
   goto   $ -1
   bsf   RP0      ;Pasa a página 1 (para acceder a los ocho bits bajos del resultado)
   movf   adres, 0   ;Resultado de conversión -> W
   bcf   RP0      ;Pasa a página 1
   return

DEMORA   movwf   tiempo2      ;Demora tantos milisegundos como valor en w
TOP2   movlw   d"110"
   movwf   tiempo1
TOP1   nop
   nop
   nop
   nop
   nop
   nop
   decfsz   tiempo1, 1
   goto   TOP1
   decfsz   tiempo2, 1
   goto   TOP2
   return

Desconectado poi5on

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 127
RE: problema con Conversion A/D, pines AN0 y AN1
« Respuesta #4 en: 18 de Marzo de 2006, 07:40:00 »
Hola amigo,
Lo que veo es que tienes muchas cosas "de mas" yo hago el codigo mas simple y me funcina, para que utilizas esto?

CLRF CONVER_TMR0
BCF CONTROL_CONVER_AD,CONVER_OK
.
.
.
BSF CONTROL_CONVER_AD,AD_AN0
CALL ESPERAR_CONVER

Bueno, con respecto a la espera te recomiendo que simplemente pongas un bucle

bucle
btfsc adcon0,2
goto bucle

Asi lo coloco yo y me fuciona perfectamente, colocalo asi a ver q pasa

Saludos