Autor Tema: Modulo ADC en PIC16F887  (Leído 119 veces)

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

Desconectado DKHKSH

  • PIC10
  • *
  • Mensajes: 3
Modulo ADC en PIC16F887
« en: 23 de Julio de 2020, 18:25:36 »
Buenas a todos, he tratado de usar el modulo ADC del PIC16F887 en MPLAB XC8 5.40 en ASM. Mi duda ha sido que al verificar con la simulación he obtenido que me arroja los mismos resultados en los 2 Ports de salida pero en Watch Windows de Proteus mi ADRESL es distinto al mostrado en el PORTD pero ADRESH si es correcto mostrado en PORTB. Soy totalmente nuevo y no entiendo mucho del ASM, si pudiesen indicarme mi error, gracias.

PROCESSOR   16F887
#include    <xc.inc>
///////////////////////////////////////////////////////////////////////////////
CONFIG      FOSC  = EXTRC_NOCLKOUT
CONFIG      WDTE  = OFF
CONFIG      PWRTE = OFF
CONFIG      MCLRE = ON
CONFIG      BOREN = ON
CONFIG      LVP   = OFF
CONFIG      CPD   = OFF
CONFIG      CP    = OFF
CONFIG      IESO  = OFF 
CONFIG      FCMEN = OFF
CONFIG      BOR4V = BOR40V
CONFIG      WRT   = OFF
///////////////////////////////////////////////////////////////////////////////   
    X      EQU       20H      
    Y      EQU       21H
    Z      EQU       22H
///////////////////////////////////////////////////////////////////////////////   
    resetVector:    org       0
          goto    CONF
///////////////////////////////////////////////////////////////////////////////         
    CONF:
    ;Configurar Pines de E/S como analogica RA0 y salidas digitales RC
    BANKSEL   TRISA
    BSF      TRISA,0
    BANKSEL   ANSEL
    CLRF   ANSEL
    MOVLW   11111111B
    MOVWF   ANSEL
    BANKSEL   TRISC
    CLRF   TRISC
    BANKSEL   TRISD
    CLRF   TRISD
    /////////////////////
    BANKSEL   PSTRCON
    CLRF   PSTRCON
    ;Justificar a la Izquierda
    BANKSEL   ADCON1      
    MOVLW   10000000B   
    MOVWF   ADCON1
    ;Seleccionar reloj, Ch de entrada AN/0 y activar modulo ADC
    BANKSEL   ADCON0
    MOVLW   01000001B   
    MOVWF   ADCON0
///////////////////////////////////////////////////////////////////////////////   
    MAIN:
    CALL   DELAY
    BSF      ADCON0,1
    BTFSC   ADCON0,1
    GOTO   $-1
    MOVF   ADRESH,w
    MOVWF   PORTC
    MOVF   ADRESL,w
    MOVWF   PORTD
    GOTO   CONF
///////////////////////////////////////////////////////////////////////////////
    DELAY:
    MOVLW       5
    MOVWF   Z
    TRES:
    MOVLW   80
    MOVWF   X
    DOS:
    MOVLW   250
    MOVWF   Y
    UNO:
    NOP
    NOP
    DECFSZ   Y,1
    GOTO   UNO
    DECFSZ   X,1
    GOTO   DOS
    DECFSZ   Z,1
    GOTO   TRES
    CLRF   X
    CLRF   Y
    CLRF   Z
    RETURN
///////////////////////////////////////////////////////////////////////////////
    end      resetVector

 

* Captura de pantalla (1070)-min.png
(107.27 kB, 1920x1080 - visto 29 veces)
« Última modificación: 23 de Julio de 2020, 18:30:33 por DKHKSH »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 7856
Re:Modulo ADC en PIC16F887
« Respuesta #1 en: 23 de Julio de 2020, 19:05:57 »
El PORTB es manejado por ANSELH. Por lo que tenes que poner a 0 ANSELH

Tu setup un poco mas resumido:

Código: ASM
  1. resetVector:    
  2.     org       0
  3.  
  4. CONF:
  5.     ; Banco 1
  6.     BANKSEL   TRISC
  7.     CLRF   TRISC
  8.     CLRF   TRISD
  9.     CLRF   PSTRCON
  10.     MOVLW   10000000B  
  11.     MOVWF   ADCON1
  12.     ;Banco 3
  13.     BANKSEL   ANSEL
  14.     CLRF   ANSELH
  15.     ;Banco 0
  16.     BANKSEL   ADCON0
  17.     MOVLW   01000001B  
  18.     MOVWF   ADCON0
  19.  

ADRESH y ADRESL estan en distintos bancos

Código: ASM
  1.     MOVF   ADRESH,w
  2.     MOVWF   PORTC
  3.     BANKSEL ADRESL  ;Banco 1
  4.     MOVF   ADRESL,w
  5.     BANKSEL PORTD   ; Banco 0
  6.     MOVWF   PORTD
« Última modificación: 23 de Julio de 2020, 19:24:03 por KILLERJC »

Desconectado DKHKSH

  • PIC10
  • *
  • Mensajes: 3
Re:Modulo ADC en PIC16F887
« Respuesta #2 en: 23 de Julio de 2020, 19:08:33 »
Así es, me veo obligado a hacerlo en ASM debido al plan de estudios de mi carrera, a la vez me preguntaba lo mismo, ya que hay muchisimos tutoriales y ayuda en C, pero en ASM muy poco, pero sí, debo hacerlo en ASM.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 7856
Re:Modulo ADC en PIC16F887
« Respuesta #3 en: 23 de Julio de 2020, 19:32:05 »
EDIT: Edite mi respuesta anterior

ASM permite un poco mas la mirada dentro del micro como funciona y llegar a conocerlo, pero pierde sentido rapidamente. XC8 es como un ASM con mayor simplicidad... por ejemplo hacer lo mismo que hicimos antes con ASM es hacerlo asi (en XC8):

Código: C
  1. TRISC = 0;
  2. TRISD = 0;
  3. ADCON1 = 0;
  4. ADCON1 = 0x80; (lo podes poner en binario)
  5. ANSELH = 0;
  6. ADCON0 = 0x41;

Lo unico que no te preocupas es por los bancos, pero eso te hace perder el conocimiento de como funciona el PIC por dentro.

Como consejo... Cuando necesites usar algun modulo/puerto/etc.

Anda al datasheet y al final te indica todos los registros que se usan con ese puerto.
Por ejemplo el PORTB

http://ww1.microchip.com/downloads/en/devicedoc/41291d.pdf pagina 52
Dice:

SUMMARY OF REGISTERS ASSOCIATED WITH PORTB

Entonces sabes cual necesitas mirar para que todo este en orden con el PORTB
« Última modificación: 23 de Julio de 2020, 19:35:41 por KILLERJC »

Desconectado DKHKSH

  • PIC10
  • *
  • Mensajes: 3
Re:Modulo ADC en PIC16F887
« Respuesta #4 en: 23 de Julio de 2020, 19:44:14 »
MUCHAS GRACIAS BRO, DE HECHO SI TENIA ESO PERO NUNCA CAMBIABA A BANCO DE LOS PUERTOS PARA MOVER A W A LOS PUERTOS Y POR ESO NO FUNCIONABA, MUCHISIMAS GRACIAS.