Autor Tema: No varia el valor del conversor al variar entrada analogica en 16f88  (Leído 4816 veces)

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

Desconectado soymoe

  • PIC18
  • ****
  • Mensajes: 456
    • El blog de Moe
Esyo traando de usar el conversor del 16f88 para un termometro, pero al variar la entrada analogica, el valor de ADRES parece no variar. Esta es mi rutina de inicializacion y conversion:
Código: [Seleccionar]
InicializeAD
clrf  ADRESH;Borro los resultados anteriores
            clrf  ADRESL;
        bsf STATUS,RP0;Selecciono banco 1
movlw b'10000000';ver
movwf ADCON1; selecciono vref y formato de resultado
clrf INTCON; DESHABILITO LAS INTERRUPCIONES
            bcf STATUS,RP0;banco 0
            movlw b'1100001'
            movwf ADCON0;seleciono frec conversion y canal
goto fin
Conversion  call  RETARDO30microS;Espera Time adquisicion
            bsf ADCON0,2; empiezo conversion
loop btfsc ADCON0,2; si done sigo
            goto loop
MOVF ADRESH,W
MOVWF binH; MUEVO LOS VALORES DEL CONVERSOR A binH
        MOVF ADRESL,W
MOVWF binL; MUEVO LOS VALORES DEL CONVERSOR A binL
call  RETARDO30microS;Retardo antes de volver a convertir
fin         return

           

La llamada seria:

CALL InizializeAD
CALL conversion

Me pueden ayudar?

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: No varia el valor del conversor al variar entrada analogica en 16f88
« Respuesta #1 en: 03 de Enero de 2011, 15:51:23 »
hola, el pedido de la rutina lo podias hacer, o mejor aun trata de hacerla tu mismo, viendo  la hoja de datos en tu rutina no veo la configuracion del registro ANSEL.
Asegurate de cargarle 8bits al ADCON0, por si las moscas
« Última modificación: 03 de Enero de 2011, 16:00:11 por jhozate »
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado soymoe

  • PIC18
  • ****
  • Mensajes: 456
    • El blog de Moe
Re: No varia el valor del conversor al variar entrada analogica en 16f88
« Respuesta #2 en: 03 de Enero de 2011, 16:27:28 »
hola, el pedido de la rutina lo podias hacer, o mejor aun trata de hacerla tu mismo, viendo  la hoja de datos en tu rutina no veo la configuracion del registro ANSEL.
Asegurate de cargarle 8bits al ADCON0, por si las moscas

La configuracion del ANSEl la hago en esta rutina de configuracion del puerto:
Código: [Seleccionar]
IniPort  
       clrf PORTA
       clrf PORTB
   bsf STATUS,RP0;seleciona banco 1
   movlw .7
   movwf CMCON ; COMPARADORES APAGADOS
       movlw b'00000001'
   movwf ANSEL;Seleciono channel AN0 como analogico
   movlw b'11111001'
       movwf TRISA; configuro bit 2-1 como salida bit 0 entrada analogica
   movlw b'00000000';salidas la display
       movwf TRISB
       bcf STATUS,RP0; vuelvo a banco 0
       return
     

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: No varia el valor del conversor al variar entrada analogica en 16f88
« Respuesta #3 en: 03 de Enero de 2011, 16:43:36 »
si, por ahora el error que veo es que tiene mal seteado el ADCON0, porque le tiene cargado tan solo 7 bits y de los cuales los bits del 5 al 3 deben ser 000 para elegir el canal AN0, asi como lo tienes has elegido el AN4
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado soymoe

  • PIC18
  • ****
  • Mensajes: 456
    • El blog de Moe
Re: No varia el valor del conversor al variar entrada analogica en 16f88
« Respuesta #4 en: 03 de Enero de 2011, 17:12:45 »
si, por ahora el error que veo es que tiene mal seteado el ADCON0, porque le tiene cargado tan solo 7 bits y de los cuales los bits del 5 al 3 deben ser 000 para elegir el canal AN0, asi como lo tienes has elegido el AN4

Gracias por marcarme el error, ahora me varia el valor, pero solo obtengo 3 valores en el conversor al variar el voltaje desde 0 a 5v. Puede ser por Vref?

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: No varia el valor del conversor al variar entrada analogica en 16f88
« Respuesta #5 en: 03 de Enero de 2011, 19:00:47 »
que resolucion necesitas 10 u 8 bits? tienes justificado a la derecha. Aparte, estas usando oscilador RC o cristal?, pon el codigo
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado soymoe

  • PIC18
  • ****
  • Mensajes: 456
    • El blog de Moe
Re: No varia el valor del conversor al variar entrada analogica en 16f88
« Respuesta #6 en: 03 de Enero de 2011, 21:03:05 »
que resolucion necesitas 10 u 8 bits? tienes justificado a la derecha. Aparte, estas usando oscilador RC o cristal?, pon el codigo
Yo necesitaria por lo menos 8 bits de resolucion, uso el oscilador interno de 4 MHz. Es para hacer un termometro. Los resultados de la conversion la muestro en un display multiplexado de 2 digitos, Muestro los 2 ultimos digitos decimales del valor del registro ADRES. Al variar la tension analogica tendrian que variar los valores que veo en el display pero solo obtengo 3 valores. Este es el programa principal:
Código: [Seleccionar]
LIST p=16F88   
binH  EQU 20H
binL  EQU 21H
bcdH  EQU 22H
bcdM  EQU 23H
bcdL  EQU 24H
counter EQU 25H
temp EQU 26H
Resultado_L EQU 27H
Resultado_H EQU 28H
CONTA1 EQU 29H
CONTA2 EQU 2AH
STATUS_TEMP EQU 2BH
binL_TEMP EQU 2CH
binH_TEMP   EQU 2EH

ORG 00H
GOTO PROGRAMA
#INCLUDE "p16F88.inc"
#INCLUDE "bin2bcd16.inc"
#INCLUDE "IniPort.inc"
#INCLUDE "sad.inc"
#INCLUDE "display.inc"
#INCLUDE "retardo20micros.inc"
#INCLUDE "retardo30micros.inc"
#INCLUDE "retardo4ms.inc"
#INCLUDE "tabla.inc"
PROGRAMA
CLRF binH;
CLRF binL
CLRF bcdL
CLRF bcdM
CLRF bcdH
CLRF ADRESH
;-------------------------------------------
BSF STATUS,RP0;SELECCIONO BANCO 1
MOVLW b'10001000';OPCIONES
MOVWF OPTION_REG;
;--------------CONFIGURO OPCIONES------------
MOVLW B'01100110' ; OSCILADOR INTERNO 4 MHz
MOVWF OSCCON
CLRF   OSCTUNE
;----------CONFIGURO OSCILADOR-------------
        CLRF ADRESL
BCF STATUS,RP0;SELECCIONO BANCO 0
        CALL IniPort; configura port
    CALL InicializeAD; Inicializa A/D
LOOP    CALL Conversion; convierte
CALL _bin2bcd ; CONVIERTO A BCD LOS VALORES DEL CONVERSOR
      CALL display
GOTO LOOP
    END;

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: No varia el valor del conversor al variar entrada analogica en 16f88
« Respuesta #7 en: 04 de Enero de 2011, 14:10:53 »
si necesitas solo 8 bits usa la justificacion a la izquierda
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado soymoe

  • PIC18
  • ****
  • Mensajes: 456
    • El blog de Moe
Re: No varia el valor del conversor al variar entrada analogica en 16f88
« Respuesta #8 en: 05 de Enero de 2011, 09:48:30 »
si necesitas solo 8 bits usa la justificacion a la izquierda
Ahora que lo justifique a la isquierda, parece que varia continuamente, pero no se porque justificandolo a la derecha solo me da los numeros: 01, 02 y 03. Ahora cuando tengo 5V los ultimos digitos de ADRESH me dan 55 y para 0V me da 00. Estara bien?

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: No varia el valor del conversor al variar entrada analogica en 16f88
« Respuesta #9 en: 05 de Enero de 2011, 13:35:01 »
La justificación izq deja los 8 bits más significativos en ADRESH,  si ignoras los dos de menor peso que quedan en ADRESL. Pero si usas justificacion derecha, entonces la idea es convertir en 10 bits utilizando ADRESH como el valor MSB y ADRESL como LSB.
Sobre el conversor AD hay muchos hilos en el foro, aparte de lo que puedes encontrar en google, por citar unos valiosos hilos:
Teoria sobre ADC
Modulo de conversion analogo/digital

Ahora, la variacion debe ser 5V>>255  y con 0V>>000, te hace falta mostrar un digito, aparte, ese valor corresponde al valor de la conversion A/D pero NO a la temperatura
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado soymoe

  • PIC18
  • ****
  • Mensajes: 456
    • El blog de Moe
Re: No varia el valor del conversor al variar entrada analogica en 16f88
« Respuesta #10 en: 05 de Enero de 2011, 21:13:48 »
Gracias por tu ayuda ahora tengo que hacer los calculos para transformalo en temperatura, tengo que conseguir una rutina de multiplicacion de 16bits. Todavia no se como voy a hacer para colocar el punto decimal en numeros menores que 10 o 1, pero bueno

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: No varia el valor del conversor al variar entrada analogica en 16f88
« Respuesta #11 en: 05 de Enero de 2011, 21:40:52 »
esa rutina de multiplicacion está en el foro en ”Almacen del assembler”
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado soymoe

  • PIC18
  • ****
  • Mensajes: 456
    • El blog de Moe
Re: No varia el valor del conversor al variar entrada analogica en 16f88
« Respuesta #12 en: 06 de Enero de 2011, 12:26:13 »
Ahora una pregunta: Para calcular la temperatura, tengo que multiplicar el valor del conversor por 39 (100/255=0.392) aproximadamente. Pero como hago para saber en donde debo poner el punto decimal ? como lo calculo?

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: No varia el valor del conversor al variar entrada analogica en 16f88
« Respuesta #13 en: 06 de Enero de 2011, 20:02:53 »
sería cuestion de buscar, de pronto esas rutinas ya estan hechas, en assembler se vuelve un poco tedioso las operaciones. Cuando me topé con ese detalle y otros decidí pasarme al lenguaje C.
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado soymoe

  • PIC18
  • ****
  • Mensajes: 456
    • El blog de Moe
Re: No varia el valor del conversor al variar entrada analogica en 16f88
« Respuesta #14 en: 14 de Enero de 2011, 22:20:20 »
sería cuestion de buscar, de pronto esas rutinas ya estan hechas, en assembler se vuelve un poco tedioso las operaciones. Cuando me topé con ese detalle y otros decidí pasarme al lenguaje C.

Ya solucione la rutina en asm, me costo pensar un poco pero lo hice. Ya tengo mi termometro en la pared :-/  y hacen 33°C, que calor! Gracias por la ayuda.