Autor Tema: Ayuda ADC Como seleccionar canal a mostrar AN0 y AN1  (Leído 2450 veces)

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

Desconectado Vangeluz

  • PIC12
  • **
  • Mensajes: 74
    • Vangeluzweb
Ayuda ADC Como seleccionar canal a mostrar AN0 y AN1
« en: 29 de Octubre de 2013, 18:47:38 »
Hola que tal, voy avanzando, en la modificacion de proyectos y ahora me surge dificultad en seleccionar cambio de canales a leer.
Mi objetivo seria mostrar en 3 Display 7 segmentos una lectura de un potenciometro AN0 por 1 Segundo y luego la lectura de otro Potenciometro AN1 por 1 segundo y repetir .....
Hasta ahora lo que tenia sale todo bien, Lee la entrada AN0 perfecto y toma la entrada AN3 como entrada vref+ correctamente pero no sale por el display la lectura de AN1, algo esta mal en el codigo ?  pude modificar algunas cosas y no consegui ningun cambio ...

Código: ASM
  1. LIST    p=16F876A
  2.         INCLUDE <P16F876A.INC>
  3.         __config _CP_OFF&_CPD_OFF&_LVP_OFF&_WDT_OFF&_XT_OSC
  4.  
  5. ;===========================================================
  6. ;===========================================================
  7. canal   equ     0x18 ;AGREGADO PARA SELECCIONAR CANAL
  8. cont    equ     0x19
  9. uni     equ     0x20
  10. dec     equ     0x21
  11. cen     equ     0x22
  12. pcl     equ     0x02            ;Contador de programa (Parte baja)
  13. estado  equ     0x03            ;Registro de estados
  14. ptoa    equ     0x05            ;Puertos de E/S
  15. ptob    equ     0x06
  16. ptoc    equ     0x07
  17. intcon  equ     0x0B            ;Controlador de interrupciones
  18. adres   equ     0x1E            ;Resultado de la conversión A/D (HIGH / LOW)
  19. adcon   equ     0x1F            ;Configuración del conversor A/D
  20. buffer  equ     0x28            ;Usado como registro temporal
  21.  
  22. #define CARRY   estado, 0       ;Bit de acarreo
  23. #define CERO    estado, 2       ;Flag indicador de resultado cero
  24. #define MP0     estado, 5       ;Bit 0 selector de página de memoria
  25. #define MP1     estado, 6       ;Bit 1 selector de página de memoria
  26. #define ADGO    adcon, 2        ;Bit que inicia la conversión (1) / Indica finalización (0)
  27.  
  28. Inicio
  29.         bsf     MP0             ;Pasa a página 1
  30.         bcf     MP1
  31.         movlw   b'00011111'     ;Configura puerto A
  32.         movwf   ptoa
  33.         clrf    ptob            ;Puerto B completo como salidas (bus del LCD)
  34.         clrf    ptoc            ;Puerto C completo como salidas
  35. ;       movlw   b'10001110'     ;Configura los pines del Puerto A ANTERIOR CONFIGURACION AN0
  36.         movlw   b'10000101'     ;Configura los pines del Puerto A   AN0 Y AN1 CONFIGURADO COMO ENTRADAS ADC
  37.         movwf   adcon           ;AN0 Y AN1 como entrada análoga
  38.         bcf     MP0
  39.         movlw   b'01000001'     ;Enciende y configura el convertidor A/D
  40.         movwf   adcon
  41.        
  42.         clrf    ptoa            ;Apaga todo
  43.         clrf    ptob
  44.         clrf    ptoc
  45.         clrf    uni
  46.         clrf    dec
  47.         clrf    cen
  48.        
  49. CICLO  
  50.         movlw   d'100'    ; ========== MODIFICADODO DESDE ACA ==========
  51.         movwf   cont
  52.         clrf    canal   ; AN0
  53.         call    seguir
  54.  
  55.         decfsz  cont,f
  56.         goto    $-2
  57.  
  58.         call    Retardo_1s   ;==== DEBERIA RETRASAR 1 SEGUNDO PERO NO FUNCIONA NADA =====
  59.         clrf    cont
  60.         movlw   d'100'
  61.         movwf   cont
  62.  
  63.         movlw   d'1'
  64.         movwf   canal   ; AN1
  65.         call    seguir
  66.  
  67.         decfsz  cont,f
  68.         goto    $-2
  69.  
  70.         call    Retardo_1s
  71.         clrf    cont
  72.         goto    CICLO
  73. seguir
  74.                 movlw   b'01000001'     ;repone a cero para que iorlw pueda
  75.                 movwf   ADCON0
  76.                         ;bcf    ADCON0,ADON     ;apaga el convertidor
  77.                 rlf     canal,F         ;posiciona los bits
  78.                 rlf     canal,F
  79.                 rlf     canal,W
  80.                 iorwf   ADCON0,F
  81.                         ;bsf    ADCON0,ADON     ;enciende el convertidor
  82.                 rrf     canal,F
  83.                 rrf     canal,F         ;retorna a la anterior
  84. ;               bcf     PIR1,ADIF       ;limpia flag de conversion completa
  85.                                            
  86.                                           ;============== HASTA ACA LA MODICICACION ================
  87.         bsf             ADGO            ;Inicia la conversión A/D
  88.         btfsc   ADGO            ;Espera que termine de convertir
  89.         goto    $ -1
  90.        
  91.         bsf             MP0             ;Pasa a página 1 (para acceder a los ocho bits bajos del resultado)
  92.         movf    adres, 0        ;Resultado de conversión -> W
  93.         bcf             MP0             ;Pasa a página 1
  94.  
  95.         movwf   buffer          ;Guarda el dato obtenido de ADRESL en el buffer temporal
  96.         bcf             CARRY           ;Limpia el CARRY
  97.         btfsc   adres, 0        ;Mira el bit menos significativo de ADRESH (Bit 8)
  98.         bsf             CARRY           ;Si está en 1 pone en uno el carry
  99.         rrf             buffer, 1       ;Hace desaparecer el bit 0 de ADRESL, mete el bit 0 de ADRESH por el 7 de ADRESL
  100.  
  101.         movf    buffer, 0       ;Dato digitalizado -> W
  102.  
  103. ;//////////////////////////////////////////////////////
  104.  
  105.         call    DECIMAL
  106.  
  107.  
  108. display
  109.         movf    uni,0           ;Carga W con el valor de unidad                         UNIDAD
  110.         call    tabla           ;Vuelve W con los bits para formar el digito
  111.         movwf   ptob            ;manda el digito al puerto B
  112.         bsf     ptoc,2          ;enciende el bit 2 del puerto A
  113.         call    Retardo_2ms     ;Espera para que se persiva el digito                    
  114.         bcf     ptoc,2          ;apaga el bit 2 del puerto A
  115.  
  116.         movf    dec,0           ;Carga W con el valor de decena                         DECENA
  117.         call    tabla           ;Vuelve W con los bits para formar el digito
  118.         movwf   ptob            ;Mando el digito al puerto B
  119.         bsf     ptoc,1          ;Enciende el bit 1 del puerto A
  120.         call    Retardo_2ms             ;Espera para que se persiva el digito                  
  121.         bcf     ptoc,1          ;apaga el bit 1 del puerto A
  122.  
  123.         movf    cen,0           ;Carga W con el valor de centena                        CENTENA
  124.         call    tabla           ;Vuelve W con los bits para formar el digito
  125.         movwf   ptob            ;Manda el digito al puerto B
  126.         bsf     ptoc,0          ;Enciende el bit 0 del puerto A
  127.         call    Retardo_2ms             ;Espera para que se persiva el digito                  
  128.         bcf     ptoc,0          ;apaga el bit 0 del puerto A
  129.        
  130.         return                  ;vuelve a CICLO
  131. ;       goto    CICLO
  132.  
  133.  
  134. DECIMAL movwf   uni             ;Convierte el dato presente en W en UNI, DEC y CEN
  135.         clrf    dec
  136.         clrf    cen
  137.         movlw   d'100'          ;Determina la cant. de centenas
  138. CENTENA subwf   uni, 1
  139.         btfss   CARRY           ;SI ES 100 salta a incrementar
  140.         goto    CIEN            ;NO ES 100 continua aca
  141.         incf    cen, 1
  142.         goto    CENTENA
  143. CIEN    addwf   uni, 1
  144.         movlw   d'10'           ;Determina la cant. de decenas
  145. DECENA  subwf   uni, 1
  146.         btfss   CARRY
  147.         goto    DIEZ
  148.         incf    dec, 1
  149.         goto    DECENA
  150. DIEZ    addwf   uni, 1          ;Uni queda con la cant. de unidades (sin decenas ni centenas)
  151.  
  152.         return
  153.  
  154. ;/////////////////////////////////////////////////////
  155.        
  156. tabla                           ; retlw b'gfedcba'  para display catodo comun
  157.         addwf   PCL,1           ; Se incrementa el contador del programa.-
  158.         DT 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F  ; EL ANTEULTIMO CAMBIAR DE 0XFF A 0X7F
  159. ;==========================
  160.  
  161.         INCLUDE  <RETARDOS.INC>
  162.  
  163.         end
GRACIAS POR LAS AYUDAS QUE ME PUEDAN DAR !!!
« Última modificación: 30 de Octubre de 2013, 21:15:44 por Vangeluz »
Vangeluz