Autor Tema: Ayuda con PIC16F819 y conversion A/D  (Leído 4881 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado arquito

  • PIC10
  • *
  • Mensajes: 21
Ayuda con PIC16F819 y conversion A/D
« en: 24 de Abril de 2007, 05:52:01 »
Hola a todos, necesito una ayudita con el siguiente problema:

   Usando un PIC16F819, cojo un dato analogico, y necesitaba convertirlo a digital(utilizando el propio conversor que trae el PIC), para su posterior salida por un LCD. La verdad es que estoy un poco pez en el tema y por eso os pido ayuda. Sobre todo me esta costando muchisimo ver que registros tengo que activar cuales no..... y por cierto, ¿es necesario que le conecte un cristal externo al pic??¿ No me sirve con el propio reloj interno del cacharro? Espero que alguien me pueda poner el programita que debo usar. Muchas gracias y ayudadme por favor¡¡¡¡¡ un saludo   :o

Por cierto estoy programandolo en ASM.

Desconectado microcom

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 568
Re: Ayuda con PIC16F819 y conversion A/D
« Respuesta #1 en: 24 de Abril de 2007, 14:36:46 »
amigo mira este enlace.

el programita como dices esta. ya es tu tarea de estudiarlo y comprenderlo y demas inquitudes creo que no vendran.

el pic f819 es muy compatible con el pic 16f873 solo ....
http://www.todopic.com.ar/foros/index.php?topic=16822.0

saludos
« Última modificación: 24 de Abril de 2007, 14:50:53 por microcom »

Desconectado arquito

  • PIC10
  • *
  • Mensajes: 21
Re: Ayuda con PIC16F819 y conversion A/D
« Respuesta #2 en: 25 de Abril de 2007, 12:51:23 »
Muchas gracias por tu respuesta Microcom;

se me plantean un par de cuestiones:

1. Voy a conectar la patilla Vref+ a 5V(vdd) y Vref- a 0V; los valores que voy a obtener analogicos, los puedo meter por la patilla Vref+, es decir, ¿puedo utilizar la patilla Vref+ como mi entrada analogica??

2. Si me llega por ejemplo una señal continua de 3.5V...¿ que valor binario me dara el pic?¿como lo puedo saber?
3. Es necesario el cristal externo?? Me hago un lio con eso, pense que podria usar el oscilador interno del pic, de hecho he programado algunas interrupciones de 1msg y 0.5msg, y supongo que no necesitare el cristal externo, con usar el timer0 valdra.

Espero puedas ayudarme con estas cuestiones y ya de paso decirme si la siguiente instruccion me serviria para recoger el dato y comenzar la conversion de analogico a digital:
Main
  ....
  banksel ADCON1
  movlw b'00000100'  ; Configuro los 8 bits que los leo de ADRESH y
  movwf ADCON1  ; configuro los canales 0,1 y 3 como analogicos
  banksel TRISA
  movlw b'00001011' ; Canales analogicos como entradas
  movwf TRISA
........

Conversion0
  banksel ADRESH
  clrf ADRESH   ; Limpio el registro antes de leer
  banksel ADCON0
  movlw b'01000001'  ; Configuramos la frecuencia de conversion Fosc/8 y Canal 0
  movwf ADCON0
  bsf   ADCON0, Go  ; Empieza la conversion
  btfsc ADCON0, Go ; salta si termino la conversion
  goto $-1 ; Vuelve a preguntar
  banksel ADRESH
  movf ADRESH,w   ; Cargo el valor de la conversion A/D
  movwf data0       ; data0= ADRESH

Una vez mas gracias.

Desconectado microcom

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 568
Re: Ayuda con PIC16F819 y conversion A/D
« Respuesta #3 en: 25 de Abril de 2007, 13:17:55 »
para 3.5v = 3500mv

salida del conversor analogo digital= 3500/4.88= B'1011001101'
ADRESL=B'11001101'
ADRESH=B'10'

que debes hacer con este resultado?
saludos



Desconectado arquito

  • PIC10
  • *
  • Mensajes: 21
Re: Ayuda con PIC16F819 y conversion A/D
« Respuesta #4 en: 25 de Abril de 2007, 13:59:42 »
Tengo que sacarlo por una pantalla LCD. Muchisimas gracias por toda tu ayuda. La idea es esta:

recojo un dato analogico de X voltios, y ese valor corresponde a una medida, por ejemplo 3( estoy usando un diodo LED para realizar una medida de distancia). Ese valor "3" es el que tengo que sacar por una pantalla LCD. La idea que tengo es la siguiente:

recojo el dato por la patilla RA3 que coincide con Vref+, convierto ese dato analogico a digital; ese valor digital lo tengo que convertir en un valor decimal distinto y sacarlo por el LCD.  Espero que esto que intento hacer sea posible, supongo que lo sera, pero como puedes comprobar estoy bastante pez en este tema.

Muchas gracias por todo microcom, ni te imaginas lo que me estas ayudando.

Desconectado microcom

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 568
Re: Ayuda con PIC16F819 y conversion A/D
« Respuesta #5 en: 25 de Abril de 2007, 14:06:33 »
caballero yo he utilizado el rao para entrada analogo, ese voltaje de ref es para cuando tu no has elegido 5vdc .

que opinas

Desconectado arquito

  • PIC10
  • *
  • Mensajes: 21
Re: Ayuda con PIC16F819 y conversion A/D
« Respuesta #6 en: 25 de Abril de 2007, 14:48:52 »
No entiendo muy bien lo que me quieres decir con que el votaje de ref es para cuando no he elegido 5vdc.
Queria usar esa patilla, la de vref como entrada analogica, ya que es la unica que no uso. La Ra0 la llevo conectada al enable del LCD, y por eso no la he tenido en cuenta como entrada.

Desconectado microcom

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 568
Re: Ayuda con PIC16F819 y conversion A/D
« Respuesta #7 en: 25 de Abril de 2007, 16:40:25 »
no caballero todo bien.

bueno esa salida de binario la tienes que tratar por hadware para ejemplos.

tienes en la entrada 3vdc entonces la salida digital en adresl y adresh =3000/4.88= b'1001100110'
osea 614 en decimal.
como este valor esta en adresl y adresh.
614 habria que multiplicarlo por 488=299632 el cual cogeriamos 299 por aproximacion daria tres.

saludos

Desconectado microcom

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 568
Re: Ayuda con PIC16F819 y conversion A/D
« Respuesta #8 en: 25 de Abril de 2007, 18:06:26 »
Código: ASM
  1. LIST    P=16F819
  2.         #INCLUDE<P16F819.INC>
  3.         ;DECLARACION DE VARIABLES
  4.         ;CONVERSOR ANALOGO DIGITAL A UN DIGITO. DISPLAY
  5.         ;
  6. TIMER0  EQU     01
  7. PCL     EQU     02
  8. STATUS  EQU     03
  9. PORTA   EQU     05
  10. PORTB   EQU     06
  11. ADCON0  EQU     1F
  12. ADRESL  EQU     9E
  13. ADRESH  EQU     1E
  14. INTCON  EQU     0B
  15. AVE_LOW EQU     20
  16. AVE_HIG EQU     21
  17. JAI_LOW EQU     22
  18. JAI_HIG EQU     23
  19. COS_LOW EQU     24
  20. COS_HIG EQU     25
  21. SUC_LOW EQU     26
  22. SUC_HIG EQU     27
  23. REG1    EQU     28
  24. REG2    EQU     29
  25. REG3    EQU     2A
  26. NAL     EQU     2B
  27. VALLEN  EQU     2C
  28. UNO     EQU     2D
  29. DOS     EQU     2E
  30. CERO    EQU     2F
  31. ;       EQU     30
  32. ;       EUQ     31
  33. ;       EQU     32
  34. ;BITS
  35. ADIF    EQU     6      
  36. GODONE  EQU     2
  37. ADON    EQU     0
  38. ADFM    EQU     7
  39. C       EQU     0
  40.         ORG     00
  41.         GOTO    INICIO
  42.  
  43. TABLA   ADDWF   PCL,1           ;DISPLAY DE ANODO COMUN
  44.         RETLW   B'11000000'     ;0
  45.         RETLW   B'11111001'     ;1
  46.         RETLW   B'10100100'     ;2
  47.         RETLW   B'10110000'     ;3
  48.         RETLW   B'10011001'     ;4     
  49.         RETLW   B'10010010'     ;5
  50.         RETLW   B'10000010'    
  51.         RETLW   B'11111000'
  52.         RETLW   B'10000000'
  53.         RETLW   B'10011000'     ;9
  54.  
  55. RETAR  
  56.  
  57. DEC4    MOVLW   .180
  58.         MOVWF   REG2
  59. DEC5    MOVLW   .160
  60.         MOVWF   REG3
  61. DEC6    DECFSZ  REG3,1
  62.         GOTO    DEC6
  63.         DECFSZ  REG2,1
  64.         GOTO    DEC5
  65.         RETURN
  66.  
  67.  
  68. RETARD 
  69.         MOVLW   .100    ;RETARDO PARA MENSAJE
  70.         MOVWF   REG1
  71.         nop
  72.         nop
  73.         nop
  74.         nop
  75. DEC9    DECFSZ  REG1,1
  76.         GOTO    DEC9
  77.         RETURN
  78. INICIO
  79.         BSF     STATUS,5
  80.         BCF     STATUS,6
  81.         CLRF    PORTB
  82.         MOVLW   B'00000001'
  83.         MOVWF   PORTA
  84. COROSO  CALL    CONVERSIONANALOGODIGITAL
  85.         CALL    MULTIPLICACION
  86.         CALL    B2BCD
  87.         CALL    VISUALIZACION
  88.         GOTO    COROSO
  89. CONVERSIONANALOGODIGITAL
  90.         MOVLW   B'10001110'             ;RA0 ANALOGO JUSTIFICACION LOS OCHO PRIMEROS BITS
  91. DE ADRESL Y DOS BITS DE ADRESH
  92.         MOVWF   ADCON1
  93.         BCF     STATUS,5
  94. EEE     MOVLW   B'10000001'
  95.         MOVWF   ADCON0
  96.         CALL    RETARD
  97.         BCF     PIR1,ADIF
  98.         BSF     ADCON0,GODONE
  99.         CALL    RETARD
  100. E       BTFSS   PIR1,ADIF
  101.         GOTO    E
  102.         BSF     STATUS,5
  103.         MOVF    ADRESL,0        ;LOW PARTE
  104.         BCF     STATUS,5
  105.         MOVWF   JAI_LOW
  106.         MOVF    ADRESH,0        ;HIG PARTE             
  107.         MOVWF   JAI_HIG
  108.         BCF     STATUS,0        ;RA1 Y RA2 ADRESH
  109.         MOVLW   .232
  110.         MOVWF   AVE_LOW
  111.         MOVLW   .1
  112.         MOVWF   AVE_HIG
  113.         RETURN
  114.  
  115.  
  116. MULTIPLICACION                  ;RUTINA MULTIPLICACION ENTRE DOS NUMEROS DE 16 BITS
  117.         MOVLW   .16             ;LOS NUMEROS SON AVE Y JAI .EL RESULTADO QUEDA EN COS Y SUC
  118. .
  119.         MOVWF   NAL             ;JAI PIERDE EL NUMERO QUE TRAIA Y AVE QUEDA INTACTO.
  120.         CLRF    SUC_HIG
  121.         CLRF    SUC_LOW
  122.         CLRF    COS_HIG
  123.         CLRF    COS_LOW
  124. MAR     RRF     JAI_HIG,1
  125.         RRF     JAI_LOW,1
  126.         BTFSC   STATUS,0
  127.         CALL    SUMA
  128.         RRF     COS_HIG,1
  129.         RRF     COS_LOW,1
  130.         RRF     SUC_HIG,1
  131.         RRF     SUC_LOW,1
  132.         DECFSZ  NAL,1
  133.         GOTO    MAR
  134.         RETURN
  135.  
  136.  
  137.  
  138. SUMA    MOVF    AVE_LOW,0
  139.         ADDWF   COS_LOW,1
  140.         BTFSC   STATUS,0
  141.         INCF    COS_HIG,1
  142.         MOVF    AVE_HIG,0      
  143.         ADDWF   COS_HIG,1
  144.         RETURN
  145. B2BCD   BCF     STATUS,0
  146.         MOVLW   D'24'
  147.         MOVWF   VALLEN
  148.         CLRF    CERO
  149.         CLRF    UNO
  150.         CLRF    DOS
  151. OP16    RLF     SUC_LOW,1
  152.         RLF     SUC_HIG,1
  153.         RLF     COS_LOW,1
  154.         RLF     DOS,1
  155.         RLF     UNO,1
  156.         RLF     CERO,1
  157.         DECFSZ  VALLEN,1
  158.         GOTO    A_DEC
  159.         RETURN
  160. A_DEC   MOVLW   DOS
  161.         MOVWF   FSR
  162.         CALL    A_BCD
  163.         MOVLW   UNO
  164.         MOVWF   FSR
  165.         CALL    A_BCD
  166.         MOVLW   CERO
  167.         MOVWF   FSR
  168.         CALL    A_BCD
  169.         GOTO    OP16            ;.............
  170. A_BCD   MOVLW   .3
  171.         ADDWF   INDF,0
  172.         MOVWF   NAL
  173.         BTFSC   NAL,3
  174.         MOVWF   INDF
  175.         MOVLW   30
  176.         ADDWF   INDF,0
  177.         MOVWF   NAL
  178.         BTFSC   NAL,7
  179.         MOVWF   INDF
  180.         RETURN
  181.  
  182. VISUALIZACION
  183.         BCF     STATUS,5
  184.         BCF     STATUS,6
  185.         SWAPF   CERO,W
  186.         ANDLW   0F
  187.                 MOVWF     VOLTAJE
  188.           ; AQUI VIENE LA RUTINA PARA MOSTRAR EL VALOR EN EL  LCD
  189.                 END
  190.  
  191.  
  192. caballero este programa lo realice con pic16f819 y un display para mostrar el valor del voltaje en un display por ejemplo 3v me mostraba 3.
  193.  
  194. como el tratamiemto en display en distinto tengo entendido que ya tienes configurado el lcd
  195. y la posicion en lcd del digito a mostrar.
  196. si tienes problema con el lcd me dices.


« Última modificación: 25 de Abril de 2007, 18:13:21 por microcom »

Desconectado arquito

  • PIC10
  • *
  • Mensajes: 21
Re: Ayuda con PIC16F819 y conversion A/D
« Respuesta #9 en: 25 de Abril de 2007, 18:19:19 »
Madre mia microcom, como te lo curras; de verdad no tengo palabras, voy a echarle un ojo mañana y te cuento si lo entiendo bien.

Por cierto, debo ponerle un cristal externo al pic ,¿verdad?

Un saludo y una vez mas gracias por todo.

Desconectado microcom

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 568
Re: Ayuda con PIC16F819 y conversion A/D
« Respuesta #10 en: 25 de Abril de 2007, 18:21:35 »
tambien debes tener en cuenta que tienes que  cambiar los bits del adcon1 ya que los tengo para ra0 analogo y los demas bits digitales.
ya que tienes la entrada por ra3 debes cambiar las la configuracion del adcon1.
debes cambiar las rutinas del display por lcd.


saludos



Desconectado microcom

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 568
Re: Ayuda con PIC16F819 y conversion A/D
« Respuesta #11 en: 25 de Abril de 2007, 18:37:17 »
claro de 4MZ
c=22pf

yo no utilizo oscilador externo

Desconectado microcom

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 568
Re: Ayuda con PIC16F819 y conversion A/D
« Respuesta #12 en: 26 de Abril de 2007, 17:07:26 »