Universidad Antonio Nariño

Aplicación Industrial de Micros
Código: 444405

  CAPITULO 4
Experimentos introductorios

4.6 Conversión A/D
Objetivos: Procedimiento:
Para realizar la observación práctica mencionada en los objetivos, se realiza el montaje de un voltimetro digital AC el cual utiliza el canal análogo 0 como entrada de la muestra DC tomada de un divisor de voltaje. De acuerdo a la relación del divisor de tensión conformado con el reostato Ajuste y de las resistencias, debe obtenerse un voltaje máximo de 5 voltios en el pin RA0, correspondiente a la máxima entrada de voltaje alterno colocado en VAC in .
 
Diagrama eléctrico:
FIG. 4.6.1 Hardware utilizado para el voltimetro AC
 
Listado del programa en assembler
 LIST P=16C71
INDF         EQU     H'0000'
TMR0         EQU     H'0001'
PCL          EQU     H'0002'
STATUS       EQU     H'0003'
FSR          EQU     H'0004'
PORTA        EQU     H'0005'
PORTB        EQU     H'0006'
ADCON0       EQU     H'0008'
ADRES        EQU     H'0009'
PCLATH       EQU     H'000A'
INTCON       EQU     H'000B'
;
OPTION_R     EQU     H'0081'
TRISA        EQU     H'0085'
TRISB        EQU     H'0086'
ADCON1       EQU     H'0088'
;==================================================================
W            EQU     H'0000'
F            EQU     H'0001'
#define      _z      STATUS,2
#define      _c      STATUS,0
#define      RP0     STATUS,5
#define      RP1     STATUS,6
#define      BANK1   bsf  RP0
#define      BANK0   bcf  RP0
;
H_BYTE       equ      10         ;Variable IN de la rutina B2_BCD
L_BYTE       equ      11         ;Variable IN de la rutina B2_BCD
R0           equ      12         ;MSByte DE LA RUTINA B2_BCD
R1           equ      13
R2           equ      14         ;LSByte DE LA RUTINA B2_BCD
OnDyn        equ      15
count        equ      16
temp         equ      17
DIG3         equ      18         ;MSD DE LA RUTINA DE DISPLAY
DIG2         equ      19
DIG1         equ      1A         ;LSD DE LA RUTINA DE DISPLAY
PERSIST      equ      1B
CounterDig   equ      1C
DELAY        equ      1D         ;RETARDO VISUALIZACION
DELAY2       equ      1E
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  org 0
  goto Main
;****************************************************************************
;Conversión de Binario a BCD 5 dígitos
;Entrada: Un binario de 16 Bits en H_Byte y L_Byte
;Salida: R0, R1 y R2; R0 es el MSD
;****************************************************************************
B2_BCD
    bcf      _c
    movlw    .16
    movwf    count
    clrf     R0
    clrf     R1
    clrf     R2
Loop16
    rlf      L_BYTE
    rlf      H_BYTE
    rlf      R2
    rlf      R1
    rlf      R0
;
    decfsz   count
    goto     adjDEC
    retlw    0
;
adjDEC
    movlw    R2
    movwf    FSR
    call     adjBCD
;
    movlw    R1
    movwf    FSR
    call     adjBCD
;
    movlw    R0
    movwf    FSR
    call     adjBCD
;
    goto     Loop16
;
adjBCD
    movlw    3
    addwf    0,W
    movwf    temp
    btfsc    temp,3
    movwf    0
    movlw    30
    addwf    0,W
    movwf    temp
    btfsc    temp,7
    movwf    0
    retlw    0
;##########################################################################
Main
;Inicialización de puertos
     BANK1
     CLRF    TRISB      ;Programación del puerto B como salida
     MOVLW   03
     MOVWF   TRISA      ;Programación del puerto A, RA0 y RA1 como entrada
     BANK0
     MOVLW   0FF
     MOVWF   PORTA      ;Inicialización de los puertos A y B
     MOVWF   PORTB
;Inicialización del módulo A/D Canal 0 activo
     BANK1
     MOVLW   B'000000010'
     MOVWF   ADCON1
     BANK0
     MOVLW   0C1
     MOVWF   ADCON0
;inicialización de dígitos
     clrf    DIG1
     clrf    DIG2
     clrf    DIG3
INI_AD
     MOVLW   .5
     MOVWF   DELAY2
     BSF     ADCON0,2
VISUALIZAR
     MOVLW   .255          ;RETARDO DE DISPLAY
     MOVWF   DELAY
LOOP_VISUAL
     CALL    DISPLAY
     DECFSZ  DELAY,F
     GOTO    LOOP_VISUAL
     DECFSZ  DELAY2,F
     GOTO    VISUALIZAR
TEST_FIN_AD
     BTFSC   ADCON0,1     ;SÍ ESTÁ EN 0 NO HA TERMINADO LA CONVERSION
     GOTO    HEX_BCD      ;CONVERSION Y ADECUACION DE DATOS A VER
     GOTO    VISUALIZAR   ;SEGUIR CON LOS DATOS YA PREDETERMINADOS
;
DISPLAY
     MOVLW  03
     MOVWF  CounterDig
     MOVLW  0FB
     MOVWF  OnDyn
     MOVLW  DIG1       ;Posición dígito menos significativo (LSD)
     MOVWF  FSR
Salt1
     MOVLW  10
     MOVWF  PERSIST
     MOVF   INDF,W
     DECF   FSR,F
     CALL   Tabla
     MOVWF  PORTB
     MOVF   OnDyn,W
     MOVWF  PORTA
     BSF    _c
     RLF    OnDyn,F
Decre
     DECFSZ PERSIST,F
     GOTO   Decre
     NOP
     NOP
     MOVLW  0FFh
     MOVWF  PORTA
     DECFSZ CounterDig,F
     GOTO   Salt1
     NOP
     NOP
     NOP
     RETURN
Tabla
     ADDWF  PCL,F
     RETLW  03h     ;0
     RETLW  9Fh     ;1
     RETLW  25h     ;2
     RETLW  0Dh     ;3
     RETLW  99h     ;4
     RETLW  49h     ;5
     RETLW  41h     ;6
     RETLW  1Fh     ;7
     RETLW  01h     ;8
     RETLW  19h     ;9
     RETLW  0FDh    ;SEG g
     RETURN
;****************************************************************************
HEX_BCD
     BCF    ADCON0,1 ;FIN DE CONVERSIÓN
     MOVF   ADRES,W  ;RESULTADO DE LA CONV. A/D
     SUBLW  0FBh
     BTFSS  _c  ;
     GOTO   OVERFLOW
;SITUACION NORMAL
     MOVF   ADRES,W
     MOVWF  L_BYTE   ;PARA LA CONVERSION B2_BCD
     CLRF   H_BYTE   ;PARA LA CONVERSION B2_BCD
     CALL   B2_BCD   ;CONVERTIR DATO
     MOVF   R2,W
     ANDLW  0Fh
     MOVWF  DIG1
     SWAPF  R2,W
     ANDLW  0Fh
     MOVWF  DIG2
     MOVF   R1,W
     MOVWF  DIG3
     GOTO   INI_AD
     MOVLW  0Ah      ;representa overflow en la medición
     MOVWF  DIG3
     MOVWF  DIG2
     MOVWF  DIG1
     GOTO   INI_AD
     end

El programa presentado hace uso de los recursos que posee el PIC16C71 el cual posee 4 canales análogos y un conversor A/D de 8 bits; para mayor información ver las especificaciones técnicas de este dispositivo.


  índice de capítulo