Autor Tema: Duda con la conversión A/D PIC16F88  (Leído 5016 veces)

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

Desconectado Acumulador13

  • PIC10
  • *
  • Mensajes: 26
Duda con la conversión A/D PIC16F88
« en: 02 de Junio de 2009, 07:52:28 »
Hola a todos, antes de nada quiero agradecer a tod@s los que haceis posible este foro, el tema que me lleva a la consulta es le siguiente: He configurado el conversor AD del PIC16f88 y me realiza la conversion si la paso a PORTB y enciendo unos led, pero cuando lo guardo en un registro (TEMP_AD) no me lo guarda y es todo ceros. mi programa es el siguiente:
;*                  **** Jordi Jover Barceló 2009 ****                              *                                 
;*  TITULO:Uso del conversor A/D                                               *
;*  FECHA:28-MAYO-2009                                                     *
;*  NOMBRE FICHERO: ConversorAD.asm               VERSION:1.0                         *                           
;*  COMENTARIO:Uso y pruebas para el conversor del PIC16F88A.En este caso apago un led *                                                                       
;*  en Rb0 si superamos la tension en el A/D                                                   
;*                                                                         *                                                                                   
;*                                                                                      *                                                            
;*                                                                                      *
;*                                                                                      *
;*                                                                       *
;*                                                                                     *
;***************************************************************************************

;               ****CONFIGURACIÓN DEL MICROCONTROLADOR****

;   list       p=16F88

 PROCESSOR   16F88
    INCLUDE     "p16f88.inc"
    RADIX       DEC

  ;    INCLUDE      "retardos.inc"
    ERRORLEVEL  -302
__CONFIG    _CONFIG1, _CP_OFF & _CCP1_RB3 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_ON & _PWRTE_OFF & _WDT_OFF & _XT_OSC
__CONFIG    _CONFIG2, _IESO_OFF & _FCMEN_OFF


ORG      0x20

;*********************************ETIQUETADO REGISTROS********************************



V12               EQU   b'00110010'
V11               EQU b'11111010'
Contador1         EQU   0Ch
Contador2         EQU 0Dh
Temp_AD            EQU 30h               ;Registro temporal para guardar dato convertido
Valor_FIJO         EQU 31h               ;Registro para introducir el valor de tensión de corte

;*********************************INICIO***************************************

inicio   

   banksel   ANSEL
   movlw   B'00000001'                     ;Configuro el registro ANSEL para que RA0 sea Analogico (1) y los otros DIGITALES (0)
   movwf   ANSEL

   banksel   TRISB
   movlw   B'00000000'                     ;Todo PORTB lo configuro a SALIDA, todo ceros
   movwf   TRISB

   banksel   TRISA
   movlw   b'000000'                     ;Todo PORTA lo configuro a SALIDA menos Ra1
   movwf   TRISA

   banksel   ADCON1
   movlw   B'00000000'                     ;Configuro ADCON1 para Justificacion Izq, divisor relog por 2 deshabilitado,tension de referencia AVDD y AVSS
   movwf   ADCON1

   banksel   ADCON0
   movlw   B'00000001'                     ;Configuro ADCON0 para Fosc/8, Selecciono canal 0 (RA0/AN0)y hago operativo el módulo convertidor con el último bit a 1
   movwf   ADCON0


;************************************PRINCIPAL***********************************

      clrw
      movwf   PORTA
      movwf   PORTB
      clrf   PORTB
      bsf      PORTB,0
      bsf      PORTB,1
      bcf      INTCON,GIE   
      bcf      INTCON,PEIE
      call   Conversion
      
      subwf   V12,w
      btfsc   STATUS,Z
      bcf      PORTB,0

STOP
      goto   STOP
      

Conversion
      bsf      ADCON0,2         ;Comienzo conversión

Espero_Conv
   
      btfsc   ADCON0,2         ;Espero a que finalice la conversión
      goto   Espero_Conv
      movf   ADRESH,w         ;Conversión efectuada, salvo ADRESH en W
      movwf   PORTB
      return   
      
                end

En fin...nunca he trabajado con los AD y siempre he utilizado el PIC16f84A , si me podeis echar una mano os lo agradeceria.
Gracias
Un hombre inteligente supera rapidamente un fracaso, pero un hombre mediocre jamás supera un exito.
"Hay cosa que para saberlas bien,no basta con haberlas aprendido". Seneca
La persona falsa es detestable para los demas y una desgracia para el mismo.
"No envidies las capacidades de los demas a causa de tu propia incompetencia"
Huanch Daoren---Retorno a los Origenes

Desconectado Acumulador13

  • PIC10
  • *
  • Mensajes: 26
Re: Duda con la conversión A/D PIC16F88
« Respuesta #1 en: 02 de Junio de 2009, 07:55:45 »
 :shock: :shock:Perdon, en el ejemplo que he puesto, lo paso al PORTB, en el que no me va es cuando lo ingreso en el registro Temp_AD y lo utilizo para comparar.
Al modificarlo haciendo pruebas lo he borrado, luego lo paso...perdon otra vez
Un hombre inteligente supera rapidamente un fracaso, pero un hombre mediocre jamás supera un exito.
"Hay cosa que para saberlas bien,no basta con haberlas aprendido". Seneca
La persona falsa es detestable para los demas y una desgracia para el mismo.
"No envidies las capacidades de los demas a causa de tu propia incompetencia"
Huanch Daoren---Retorno a los Origenes

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Duda con la conversión A/D PIC16F88
« Respuesta #2 en: 02 de Junio de 2009, 08:02:05 »
Ve por pasos.
Si muestra correctamente en el puerto B pues, lo proximo sería mover ADRESH a una variable y luego mover la variable al puerto.
Si funciona mal es que no has declarado correctamente la variable o estas fuera del rango de memoria de uso general.
Si funciona bien sigues , le haces una comparacion y lo muestras por puerto. O simplemente compara y si el dato es 0 que te encienda un led para saber que algo va mal.-
Cuando algo no funciona lo que hago es ir metiendo BSF LED hasta que encuentro en que lugar falla.
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: Duda con la conversión A/D PIC16F88
« Respuesta #3 en: 02 de Junio de 2009, 09:46:25 »
Para mi, te está haciendo confundir la última parte del código (en orden de ejecución) Al final de la conversión y después de haber restado analizas el bit Z, si es 1 (el resultado es 0)

Al principio del programa colocas clrf   PORTB por lo que todos los bit son 0 y cuando haces la comparación y el bit Z es 1, colocas en 0 (de nuevo) a bit 0 del PORTB pero si el bit Z es 0 salta y deja al bit 0 del PORTB en 0, porque así lo declaraste al principio.

Citar
subwf   V12,w
      btfsc   STATUS,Z
      bcf      PORTB,0

STOP
      goto   STOP
     

Coloca una línea mas a este programa

Citar
subwf   V12,w
      btfsc   STATUS,Z
      bcf      PORTB,0
      bsf      PORTB,0
STOP
      goto   STOP
     
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Duda con la conversión A/D PIC16F88
« Respuesta #4 en: 02 de Junio de 2009, 10:16:52 »
No lo creo , leo.

subwf   V12,w
      btfsc   STATUS,Z
      bcf      PORTB,0
      bsf      PORTB,0
STOP
      goto   STOP

De esta manera lo que hará será , si el resultado es 0 entonces apagará el led (que ya venía encendido con el bsf portb,0 mas arriba o dependiendo de lo que traiga de mover el ADRESH al puerto B) e inmediatamente y sin que él lo pueda notar lo encenderá con el bsf portb,0
Si el resultado es uno hará exactamente lo mismo, porque lo único que hará será saltearse el bcf potb,0.

Entonces sería:

subwf   V12,w
      btfsc   STATUS,Z
goto es_0
      bcf      PORTB,0
goto STOP

es_0
      bsf      PORTB,0
STOP
      goto   STOP

Lo que no entiendo y aunque no influye es:
     clrw  ; w=0
      movwf   PORTA ;porta =0
      movwf   PORTB ; portb=0
      clrf   PORTB ;portb =0
      bsf      PORTB,0 ; bit 0 del puerto b =1
      bsf      PORTB,1 ; bit 1 del puerto b =1

Yo en tu lugar si quiero encender un led para ver guiarme donde puede estar el error ,no utilizaría el mismo puerto donde estoy sacando los resultados sino que usaría RA1, por ejemplo.
« Última modificación: 02 de Junio de 2009, 10:22:26 por pibe »
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: Duda con la conversión A/D PIC16F88
« Respuesta #5 en: 02 de Junio de 2009, 10:49:34 »
 :oops: :oops: :oops: ouch, que feo me equivoqué  :( :(

Gracias por la corrección.
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado Acumulador13

  • PIC10
  • *
  • Mensajes: 26
Re: Duda con la conversión A/D PIC16F88
« Respuesta #6 en: 04 de Junio de 2009, 06:04:52 »
Muchas gracias a todos, esta noche lo pruebo a ver que tal y os paso bien el código que con las prisas y mi primer mensaje no esta como el último que hice.
Haré las pruebas que me decis. Cuando cojo la conversión y la muevo a PORTB continuamente me va de maravilla, se me van encendiendo todos los led puestos a este puerto según voy girando el potenciomentro, el problema es que cuando lo guardo en otro registro ( Temp_AD) o me desactiva a un nivel muy cercano a 5Voltios ó si cambio la variable a comparar me lo desactiva a un nivel cero, no encuentro un punto intermedio como por ejemplo 2,5V, ponga la variable que ponga.
En fin , siempre he utilizado los pic en digital y ahora que consigo la conversión es normal que me ocurra estos fallos ( cabe decir que he estudiado los pic por mi cuenta, con lo cual debo de tener errores adquiridos ) de todas formas cada fallo que tengo me hace estar mas cerca de hacerlo bien. Repito, muchas gracias por vuestras respuestas y espero poder ayudar yo tambien, que aunque de pic estoy verde en fuentes de alimentación, transformadores y baterias me defiendo bien, y... Como digo Humprey Bogart...." esto es el principio de una gran amistad.
Si puedo esta noche posteo el esquema, el código y os comento algo.
Muchas gracias :)
Un hombre inteligente supera rapidamente un fracaso, pero un hombre mediocre jamás supera un exito.
"Hay cosa que para saberlas bien,no basta con haberlas aprendido". Seneca
La persona falsa es detestable para los demas y una desgracia para el mismo.
"No envidies las capacidades de los demas a causa de tu propia incompetencia"
Huanch Daoren---Retorno a los Origenes

Desconectado Acumulador13

  • PIC10
  • *
  • Mensajes: 26
Re: Duda con la conversión A/D PIC16F88
« Respuesta #7 en: 15 de Junio de 2009, 15:46:29 »
 :-/ Apreciados compañeros, ya he solucionado el tema de mi duda con el conversor, resulta que cuando hago la resta el valor del resultado se me queda en el mismo registro, ya no tiene el valor de antes. Lo he solucionado asi:

Comparación2
      subwf   VBat
      addwf   VBat   >>>>>>>ESTO ES LA SOLUCIÓN A TODOS MIS PROBLEMAS!!!!!!!
      btfsc   STATUS,C
      goto   Programa1

Ahora si la tensión VBat está mas baja que la que tengo en W (previamente guardado) me va a Programa1  :mrgreen:  :mrgreen:
Todo el domingo probado y a última hora me fue en el MPLAB, hoy Lunes ya lo he programado y funcionando de maravilla.

Gracias a LeonPic y a Pibe ya que os leo mucho y aprendo mucho.
Un hombre inteligente supera rapidamente un fracaso, pero un hombre mediocre jamás supera un exito.
"Hay cosa que para saberlas bien,no basta con haberlas aprendido". Seneca
La persona falsa es detestable para los demas y una desgracia para el mismo.
"No envidies las capacidades de los demas a causa de tu propia incompetencia"
Huanch Daoren---Retorno a los Origenes

Desconectado Acumulador13

  • PIC10
  • *
  • Mensajes: 26
Re: Duda con la conversión A/D PIC16F88
« Respuesta #8 en: 15 de Junio de 2009, 15:57:54 »
Perdon, el programa queda así:


;***************************************************************************************
;*                              ****CREATEC****                                 *
;*                  **** Jordi Jover Barceló 2009 ****                              *                                 
;*  TITULO:Uso del conversor A/D                                               *
;*  FECHA:15-JUNIO-2009                                                     *
;*  NOMBRE FICHERO: ConversorAD.asm               VERSION:1.0                         *                           
;*  COMENTARIO:Uso y pruebas para el conversor del PIC16F88A.                          *                                                                       
;*                                                                 *                                                                                               
;*                                                                         *                                                                                   
;*                                                                                      *                                                            
;*                                                                                      *
;*                                                                                      *
;*                                                                       *
;*                                                                                     *
;***************************************************************************************

;               ****CONFIGURACIÓN DEL MICROCONTROLADOR****

;   list       p=16F88

 PROCESSOR   16F88
    INCLUDE     "p16f88.inc"
    RADIX       HEX

   ;   #INCLUDE      "retardos.inc"
    ERRORLEVEL  -302
__CONFIG    _CONFIG1, _CP_OFF & _CCP1_RB3 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_ON & _PWRTE_OFF & _WDT_OFF & _XT_OSC
__CONFIG    _CONFIG2, _IESO_OFF & _FCMEN_OFF
CBLOCK   0x20
ENDC
ORG      0x00
goto   inicio
#include Retardos.inc
;*********************************ETIQUETADO REGISTROS********************************




Contador1         EQU   0Ch
Contador2         EQU 0Dh
Lamp3            EQU b'00000100'
VBat              EQU 3Dh               
                                                   
VCorte1            EQU 4Ch     ;Registro para introducir el valor de tensión de corte

;*********************************INICIO***************************************

inicio   

      banksel   ANSEL
      movlw   B'00000001'                     ;Configuro el registro ANSEL para que RA0 sea Analogico (1) y los otros DIGITALES (0)
      movwf   ANSEL

      banksel   TRISB
      movlw   B'00000000'                     ;Todo PORTB lo configuro a SALIDA, todo ceros
      movwf   TRISB

      banksel   TRISA
      movlw   b'000000'                     ;Todo PORTA lo configuro a SALIDA, todo ceros
      movwf   TRISA

      banksel   ADCON1
      movlw   B'00000000'                     ;Configuro ADCON1 para Justificacion Izq, divisor relog por 2 deshabilitado,tension de referencia AVDD y AVSS
      movwf   ADCON1

      banksel   ADCON0
      movlw   B'01000001'                     ;Configuro ADCON0 para Fosc/8, Selecciono canal 0 (RA0/AN0)y hago operativo el módulo convertidor con el último bit a 1
      movwf   ADCON0


;************************************PRINCIPAL***********************************

      clrw
      movwf   PORTA
      movwf   PORTB
      clrf   PORTB



   
Conversión
      bsf      ADCON0,2         ;Comienzo conversión

Espero_Conv
   
      btfsc   ADCON0,2         ;Espero a que finalice la conversión
      goto   Espero_Conv
      movf   ADRESL,w         ;Conversión efectuada, salvo ADRESH en W
      movwf   VBat
   ;   movwf   PORTB            ;Esto es para comprobar en el puerto b la conversión.
      movlw   b'01111111'         ;Valor primer registro de tensión (11,5V)
      movwf   VCorte1





Comparación
      subwf   VBat
      addwf   VBat
      btfsc   STATUS,C
      goto   Lamps
      goto   Conversión






Lamps
      movlw   Lamp3
      movwf   PORTB
Un hombre inteligente supera rapidamente un fracaso, pero un hombre mediocre jamás supera un exito.
"Hay cosa que para saberlas bien,no basta con haberlas aprendido". Seneca
La persona falsa es detestable para los demas y una desgracia para el mismo.
"No envidies las capacidades de los demas a causa de tu propia incompetencia"
Huanch Daoren---Retorno a los Origenes

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: Duda con la conversión A/D PIC16F88
« Respuesta #9 en: 15 de Junio de 2009, 16:45:52 »
Felicidades Acumulador13 :-/ :-/ :-/
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.


 

anything