Envío Gratis en compras mínimas de $1200 mxn Enviamos a toda la Republica Mexicana
Buscar

Ensamblador 4: Convertidor analógico a digital (Miuva)

Ahora que ya conocemos algunas cosas básicas para trabajar con ensamblador, vamos a aprender como utilizar los recursos que ofrece el microcontrolador, para esto es necesario tener a mano la hoja de datos del mismo.

El primer recurso a utilizar será el convertidor analógico a digital (ADC) que lo que hace es convertir información analógica del mundo real en algo digital que nuestro microcontrolador pueda procesar. Tanto Miuva (PIC 18F4550) como Miuva Pro (PIC 18F87J50) cuentan con un ADC que puede ser configurado para hasta 10 bits. En la práctica vamos a leer una información analógica y vamos a mostrar el valor leído en unos leds (para Miuva en el puerto B y para Miuva Pro en el puerto J).

Lo primero será declarar que el puerto B será utilizado como salidas, por lo tanto habrá que asignarle al registro TRISB el valor 0x00, posteriormente revisamos en la sección 21 de la hoja de datos todo lo relacionado al ADC, y encontraremos que los registros asociados al mismo son:

  1. ADRESH (Parte alta del resultado del ADC)
  2. ADRESL ( Parte baja del resultado del ADC)
  3. ADCON0 (Registro de control)
  4. ADCON1 (Registro de control)
  5. ADCON2 (Registro de control)

Empezaremos configurando cada uno de los registros de control según sean nuestras necesidades, para ADCON0:

Imagen1. Registro ADCON0

El canal que vamos a utilizar será el canal 0, por lo tanto de CHS3:CHS0 = “0000”, por el momento tendremos que tener desactivado el ADC, por lo tanto ADON = “0” y GO/DONE = “0”, por lo tanto el valor para ADCON0 será b’00000000′ = 0x00.

Ahora con ADCON1:

Imagen2. Registro ADCON1

Vamos a utilizar solo un pin de forma analógica (AN0), por lo tanto en PCFG3:PCFG0 = “1110”, las referencias de los voltajes del ADC serán Vss y Vdd, por lo tanto VCFG1:VCFG0 = “00”, por lo tanto el valor para ADCON1 será b’00001110′ = 0x0E.

Ahora para ADCON2:

Imagen3. Registro ADCON2

Para la velocidad utilizaremos fosc/2 por lo tanto ADCS2:ADCS0 = “000”, para el tiempo de adquisición utilizaremos 2 Tad por lo tanto ACQT2:ACQT0 = “001” y para el formato seleccionaremos justificado a la izquierda por lo tanto ADFM = “0”, por lo tanto el valor para ADCON2 será b’00001000′ = 0x08.

Y por último encenderemos el ADC poniendo en “1” el bit ADON de ADCON0.

movlw    0x00
movwf    TRISB
movlw    0x0E
movwf    ADCON1
movlw    0x00
movwf    ADCON0
movlw    0x08
movwf    ADCON2
bsf    ADCON0,ADON

Para la lectura del ADC necesitamos esperar hasta que el bit GO_DONE se ponga en 0, en ese momento significa que el ADC terminó el tiempo de conversión, para esto comenzamos lo conversión poniendo GO_DONE en 1 usando la instrucción bsf, después utilizamos la instrucción btfsc, la cual saltará la siguiente instrucción cuando el bit indicado sea “0”, en caso de que no sea “0” (lo que quiere decir que todavía no está listo el dato) regresará a la etiqueta ESPERA, cuando ya está el dato listo solamente habrá que leer los registros correspondientes a la parte alta y baja del ADC y guardarla en otras dos variables que tuvimos que haber declarado anteriormente y enviar la parte que queramos visualizar a los leds.

BUCLE
  bsf        ADCON0,GO_DONE     ;Comienza la conversión
ESPERA
  btfsc    ADCON0,GO_DONE    ;Esperamos a que esté lista la conversión
  goto    ESPERA            ;Si no está lista regresamos a ESPERA
  movff    ADRESL,valor1    ;Cargamos valor1 con el valor del ADC LSB
  movff    ADRESH,valor2    ;Cargamos valor2 con el valor del ADC MSB
  movff    valor2,PORTJ    ;Mostramos la parte más significativa en los leds
  goto BUCLE                ;Volvemos a empezar la conversión

Nos queda el siguiente código:

 

CÓDIGO FINAL

LIST    P = 18F4550    ;PIC a utilizar
INCLUDE <P18F4550.INC>
;************************************************************
;Configuración de fusibles
CONFIG  FOSC = HS   
CONFIG  PWRT = ON
CONFIG  BOR = OFF
CONFIG  WDT = OFF
CONFIG  MCLRE = ON
CONFIG  PBADEN = OFF
CONFIG  LVP = OFF
CONFIG  DEBUG = OFF
CONFIG  XINST = OFF
;***********************************************************
;Código
CBLOCK  0x000
    adclecturaH
    adclecturaL
ENDC
ORG 0x00    ;Iniciar el programa en el registro 0x00
    goto    INICIO
    INICIO
    movlw    0x00
    movwf    TRISB
    movlw    0x0E
    movwf    ADCON1
    movlw    0x00
    movwf    ADCON0
    movlw    0x08
    movwf    ADCON2
    bsf        ADCON0,ADON
    BUCLE  
    bsf        ADCON0, GO_DONE
    btfsc    ADCON0, GO_DONE
    goto    BUCLE
    movff    ADRESL,adclecturaL
    movff    ADRESH,adclecturaH
    movff    adclecturaH, PORTB
    goto    BUCLE
END

FUNCIONAMIENTO