Autor Tema: Conversor A/D  (Leído 2341 veces)

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

Desconectado Skualo

  • PIC10
  • *
  • Mensajes: 42
Conversor A/D
« en: 25 de Diciembre de 2008, 11:44:19 »
Hola estoy mirando por el foro y no encuentro ningun ejermplo del uso del conversor A/D en ensamblador aunque e visto esta libreria esta pero nose como usarla.

Si alguien podria decir algun ejemplo de conversor en ensamblador o como usar la libreria

Saludos

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: Conversor A/D
« Respuesta #1 en: 25 de Diciembre de 2008, 21:58:08 »
Saludos

Yo publique en la sección de proyectos un ejemplo con el PIC16F877 se llama "Módulo A/D con un PIC16F877" buscalo

Espero que te sirva

Un saludo desde Pereira - Colombia
Un saludo desde Pereira - Colombia

Desconectado alogic.on

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 772
Re: Conversor A/D
« Respuesta #2 en: 02 de Enero de 2009, 08:46:46 »
holas
no especificas que es lo que no sabes utilizar de las rutinas

Código: ASM
  1. ;DEFINICIONES RAM
  2.                         CBLOCK  0X20
  3.                         N_POTE
  4.                         ENDC
  5.  
  6. #DEFINE         REG_POTEX       (N_POTE+.1)     ;+1 QUE EL ULTIMO REGISTRO USADO ASI SE PUEDEN HACER TANATAS CONVERSIONES DIFERENTES COMO ESPACIOS DE RAM QUEDEN
  7.  
  8. ;LA RUTINA CANAL_AD_X SE MANEJA INDICANDOLE EL CANAL DONDE SE QUIERE HACER LA CONVERSION
  9. ;DECLARACIONES DE LOS CANALAES,CH, ANALOGICOS,AN, NUMERO DE CANAL,_X
  10. ;CH_AN_X
  11. #DEFINE         CH_AN_0         B'10000101'
  12. #DEFINE         CH_AN_1         B'10001101'    
  13. #DEFINE         CH_AN_2         B'10010101'
  14. #DEFINE         CH_AN_3         B'10011101'
  15. #DEFINE         CH_AN_4         B'10100101'    
  16. #DEFINE         CH_AN_5         B'10101101'
  17. #DEFINE         CH_AN_6         B'10110101'
  18. #DEFINE         CH_AN_7         B'10111101'
  19. EJEMPLO_DE_USO
  20.         ;-----------------------------CONFIGURAMOS EL CAD
  21. CONFIG_ADCON1                                   ;000000000 TODOS LOS CANALES ANALOGICOS
  22.                 BANKSEL ADCON1         
  23.                 MOVLW   B'00000000'
  24.                 MOVWF   ADCON1
  25.         ;-----------------------------
  26. BUCLE                                                                   ;ANTES DE NADA HAY QUE LIMPIAR LOS REGISTROS N_POTE Y FSR PARA QUE GUARDE
  27.                                                                                 ;EL RESULTADO DE LA CONVERSION EN EL ARRAY DE MEMORIA RESERVADO PARA ELLO, A PARTIR DE LA POSICION DE MEMORIA, REG_POTEX
  28.                         BANKSEL N_POTE
  29.                         CLRF    N_POTE                          ;POTES Nº 0
  30.                         MOVLW   REG_POTEX                       ;DIRECCION DE LA MEMORIA RAM EN LA QUE EMPIEZA A GUARDAR LAS CONVERSIONES
  31.                         MOVWF   FSR
  32. ;0
  33.                         MOVLW   CH_AN_0                         ;A W
  34.                         CALL    CANAL_AD_X                      ;CANALx DEL CAD
  35. ;1                                                                              ;Y GUARDA EL RESULTADO DE LA CONVERSION EN INDF ((REG_POTEX +.Nº DE VECES QUE SE LLAMA A LA RUTINA CANAL_ADX))
  36.                         MOVLW   CH_AN_1                         ;A W
  37.                         CALL    CANAL_AD_X                      ;CANALx DEL CAD
  38.                        
  39.                         GOTO    BUCLE                           ;VUELVE A EMPEZAR
  40.                        
  41. CANAL_AD_X                                                              ;SELECCIONA CANAL X DEL CAD NO INICIA LA CONVERSION
  42.         BANKSEL ADCON0
  43.         MOVWF   ADCON0
  44.         CALL    DEMORA_25uS                                     ;EL TIEMPO DE ADQUISICION CORRECTO PARA CARGAR EL CONDENSADOR ANTES DE INICIAR LA CONVERSION  
  45.  
  46.         BANKSEL N_POTE
  47.         INCF    N_POTE,F                                        ;SIGUIENTE POTE
  48.         INCF    FSR,F                                           ;CADA VEZ QUE SE LLAMA A LA RUTINA QUE LEE EL
  49.                                                                                 ;VALOR DEL POTE, SE INCREMENTA EL REGISTRO FSR, PARA QUE REALICE LAS OPERACIONES
  50.                                                                                 ;EN EL REGISTRO DEL SIGUIENTE POTENCIOMETRO
  51.         BANKSEL ADCON0
  52.         BSF             ADCON0,GO                                       ;INICIA LA CONVERSION
  53. ESPERA_CAD                                                              ;TESTEA HASTA QUE TERMINA LA CONVERSIÓN
  54.         BTFSC   ADCON0,GO                                       ;HASTA QUE SE PONE A CERO EL BIT GO/DONE
  55.         GOTO    ESPERA_CAD                                      ;VUELVE ATRAS HASTA QUE TERMINE
  56.         MOVF    ADRESH,W
  57.         BANKSEL REG_DIVISOR    
  58.         MOVWF   REG_DIVISOR    
  59. RESTA
  60.         BANKSEL REG_POTEX
  61.         BCF             STATUS,Z
  62.         SUBWF   INDF,W
  63.         BTFSC   STATUS,Z
  64.         RETURN
  65. ENVIA_DATOS    
  66.         BANKSEL REG_DIVISOR    
  67.         MOVWF   INDF
  68.         ;aqui hace algo si el resultado de la conversion no es cero
  69.         RETURN                                                          ;Y VUELVE AL PROGRAMA

para utilizar la rutina solo tienes que poner n_pote en la ultima posicion de la ram que vayas a utilizar,
configuras ADCON1 segun los canales analogicos que quieras usar.(mirate el datasheet)

antes de llamar a la ruitna canal_ADX tienes que restaurar los valores de N_POTE y de FSR así por ej:
         BANKSEL   N_POTE
         CLRF   N_POTE            ;POTES Nº 0
         MOVLW   REG_POTEX         ;DIRECCION DE LA MEMORIA RAM EN LA QUE EMPIEZA A GUARDAR LAS CONVERSIONES
         MOVWF   FSR

con las definiciones CH_AN_x seleccionas el canal que quieres convertir
movlw   CH_AN_3     = B'10011101'
y entonces llamas a la rutina
call        CANAL_AD_X
esta coloca en la posicion (N_POTE + REG_POTEX) el resultado de la conversion
si haces
movlw   CH_AN_0
call       CANAL_AD_X        ;pondra el resultado en REG_POTEX+ .1 la rutina siempre incf a N_POTE para que apunte a la siguiente posicion de la ram
si quieres hacer otra conversion a continuacion es igual, le indicas el canal donde lo quieres....
movlw   CH_AN_4
....y llamas a la rutina
call       CANAL_AD_X        ;guardara el resultado del canal 4 en la posicion REG_POTEX+ .2 y asi hasta que vuelva a empezar, por eso lo de restaurar los valores de N_POTE y FSR antes de empezar a hacer conversiones. la rutina lo que hará, es si el resultado que hay en la posicion de memoria es diferente del que ha dado la conversion guarda el nuevo dato y lo que le pongas a continuacion como mostrar el resultado en la puerta x del pic, lcd, ..... nu se para que lo vas a usar  :-)

espero te ayude un saludo


 

anything