Autor Tema: ayuda con adc del pic 16f876a  (Leído 4783 veces)

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

Desconectado gaaciori

  • PIC10
  • *
  • Mensajes: 3
ayuda con adc del pic 16f876a
« en: 13 de Abril de 2007, 22:42:33 »
que tal soy nuevo en esto de programacion de pic´s y estoy buscando ayuda con un proyecto

el proyecto se trata de un termometro digital
el sensor que voy a utilizar es el lm35 con salida de 0 a 5 v. esta la mando al adc del pic (16f876a) para que me de un rango de 0 a 99 grados mostrados en dos displays de 7 segmentos (uno en el puerto b y el otro para el puerto c ).

el problema es que no se como utilizar el adc y como leer los registor adresh y adresl

ya e estado buscando informacion de esto e hice un programa pero a la hora de conectarlo no me da nada en los puertos
el programa es el siguiente

   LISTP= 16F876A
   #INCLUDE "P16F876A.INC"
   __CONFIG _XT_OSC &_CP_OFF &_WDT_OFF &_BODEN_ON &_PWRTE_ON     
   count EQU 0X30
   COUNT1 EQU 0x32 ; Registros para
   COUNT2 EQU 0x33 ; la espera
   COUNT3 EQU 0x34

      ORG 0
      goto main
      ORG 4
      goto main
      

main     
      bsf STATUS,RP0
      movlw d'0'
      movwf TRISB
      movlw d'0'
      movwf TRISC
      bcf STATUS,RP0
      
      
      
conv   
      banksel ADCON1 ;assembler directive to select bank
      movlw d'255'
      movwf TRISA ;set all PORTA pins as inputs
      movlw b'10001110'
      movwf ADCON1 ;RA0 analog, VREF = VDD
      
      banksel ADCON0 ;assembler directive to select bank
      movlw b'01000001'
      movwf ADCON0 ; channel 0, FOSC/8, enable A/D
      
      ;20us delay loop with 4MHz oscillator frequency
      banksel count ;select bank
      movlw 0x06
      movwf count ;initialize count
   loop
      decfsz count,F ;dec count, store in count
      goto loop ;not finished
      
      
      banksel ADCON0 ;select bank
      bsf ADCON0,GO ;initiate conversion
      
      banksel ADCON0 ;select bank
   test
      btfsc ADCON0,GO ;conversion done?
      goto test ;not finished
      
      banksel ADRESH ;select bank
      movf ADRESH,0 ;move result into working register
      movf PORTB
      call espera
      banksel ADRESL ;select bank
      movf ADRESL,0 ;move result into working register
      movf PORTC
      call espera
      goto conv

; retardo de 1 seg.

espera 
      movlw d'100'
      movwf COUNT3
TRES   
      movlw d'250'
      movwf COUNT2
DOS     
      movlw d'5'
      movwf COUNT1
UNO      
      decfsz COUNT1,1
      goto UNO
      decfsz COUNT2,1
      goto DOS
      decfsz COUNT3,1
       return


END

agradeceria que alguien me ayudara ya que no se que mas hacer....... gracias

Desconectado microcom

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 568
Re: ayuda con adc del pic 16f876a
« Respuesta #1 en: 16 de Abril de 2007, 14:19:50 »
amigo te falta tratar la codificacion para poder eNviar la numeracion Adecuada a los display( BCD).

lo que usted esta haciendo no es lo correcto puesto que lo que usted hace es enviar a visualizar  codigos binarios.

el sensor le da 10mv por °C =en 50°C le da 500mv este voltaje entra al pic raO.
esta señal debe ser tratada para mostrar el valo adecuado

te aconsejo de tomar el adresl solamente ya que la temperatura maxima sensada no sebrepasa en el valor de convercion del  adresl y el adresh sobraria.

boy a tratar de derte mas informacion del programa y como quedaría
saludos

Desconectado gaaciori

  • PIC10
  • *
  • Mensajes: 3
Re: ayuda con adc del pic 16f876a
« Respuesta #2 en: 16 de Abril de 2007, 20:07:36 »
te lo agradeceria mucho si me ayudas con esto


gracias

Desconectado microcom

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 568
Re: ayuda con adc del pic 16f876a
« Respuesta #3 en: 16 de Abril de 2007, 20:53:02 »

 mañana te daria avances del programa.

saludos

Desconectado microcom

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 568
Re: ayuda con adc del pic 16f876a
« Respuesta #4 en: 17 de Abril de 2007, 13:26:39 »
Código: ASM
  1. amigo mas o menos aqui tienes una ayuda para avanzar
  2. para 50°C = el lm35 da 500mv. pic da como salida en el adresl= 500/4.88mv= 102 .como el valor a mostrar es 50°C
  3. se rota este valor(102) a la  derecha rrf y me daría 50 aprox.
  4. despues tocaria sacar las decenas y unidades BCD. lo cual como puedes ver esta hecho.
  5. y............................................
  6. .........
  7. LIST    P=16F873A
  8.         #INCLUDE<P16F873A.INC>
  9.         ;DECLARACION DE VARIABLES
  10.         ;CONVERSOR ANALOGO DIGITAL DE
  11.         ;CONVERSOR DE TEMPERATURA
  12. TIMER0          EQU     01
  13. PCL             EQU     02
  14. STATUS          EQU     03
  15. PORTA           EQU     05
  16. PORTB           EQU     06
  17. ADCON0          EQU     1F
  18. ADCON1          EQU     9F
  19. ADRESL          EQU     9E
  20. ADRESH          EQU     1E
  21. INTCON          EQU     0B
  22.  
  23. UNI_GRADOS      EQU     20
  24. DEC_GRADOS      EQU     21
  25. CEN_GRADOS      EQU     22
  26. CONVERSION      EQU     23
  27. REG1            EQU     24
  28. REG2            EQU     25
  29. REG3            EQU     26
  30. PDel0           EQU     27
  31. PDel1           EQU     28
  32.         ;BITS CONVERSOR
  33. ADIF    EQU     6      
  34. GODONE  EQU     2
  35. ADON    EQU     0
  36. ADFM    EQU     7
  37. C       EQU     0
  38.        
  39.  
  40.  
  41.         ORG     00
  42.         GOTO    INICIO
  43. TEMPO   MOVLW   .30
  44.         MOVWF   REG1
  45. DEC6    MOVLW   .21
  46.         MOVWF   REG2
  47. DEC5    MOVLW   .20
  48.         MOVWF   REG3
  49. DEC4    DECFSZ  REG3,1
  50.         GOTO    DEC4
  51.         DECFSZ  REG2,1
  52.         GOTO    DEC5
  53.         DECFSZ  REG1,1
  54.         GOTO    DEC6
  55.         RETURN
  56.  
  57. TABLA   ADDWF   PCL,1
  58.         RETLW   B'11000000'
  59.         RETLW   B'11111001'
  60.         RETLW   B'10100100'
  61.         RETLW   B'10110000'
  62.         RETLW   B'10011001'
  63.         RETLW   B'10010010'
  64.         RETLW   B'10000010'
  65.         RETLW   B'11111000'
  66.         RETLW   B'10000000'
  67.         RETLW   B'10011000'
  68.         RETLW   B'10111111'
  69.         RETLW   B'11111111'
  70.  
  71. RETARDO
  72. ; Code generated by PDEL  ver 1.0  on 17/04/2007 at 12:21:18 a.m.
  73. ; Description: Waits 5000 cycles
  74. ;-------------------------------------------------------------
  75. PDelay  movlw     .6        ; 1 set number of repetitions (B)
  76.         movwf     PDel0     ; 1 |
  77. PLoop1  movlw     .207      ; 1 set number of repetitions (A)
  78.         movwf     PDel1     ; 1 |
  79. PLoop2  clrwdt              ; 1 clear watchdog
  80.         decfsz    PDel1, 1  ; 1 + (1) is the time over? (A)
  81.         goto      PLoop2    ; 2 no, loop
  82.         decfsz    PDel0,  1 ; 1 + (1) is the time over? (B)
  83.         goto      PLoop1    ; 2 no, loop
  84. PDelL1  goto PDelL2         ; 2 cycles delay
  85. PDelL2  clrwdt              ; 1 cycle delay
  86.         return              ; 2+2 Done
  87.  
  88.  
  89.  
  90. RETARD  MOVLW   .100   
  91.         MOVWF   REG1
  92.         nop
  93.         nop
  94.         nop
  95.         nop
  96. DEC9    DECFSZ  REG1,1
  97.         GOTO    DEC9
  98.         RETURN
  99.  
  100.  
  101. INICIO
  102.         BSF     STATUS,5
  103.         BCF     STATUS,6
  104.         CLRF    PORTB
  105.         MOVLW   07
  106.         MOVWF   ADCON1
  107.         MOVLW   B'00000001'
  108.         MOVWF   PORTA
  109.         BCF     STATUS,5
  110.  
  111. COROSO
  112.  
  113. CLRF    UNI_GRADOS
  114. CLRF    DEC_GRADOS
  115. CLRF    CEN_GRADOS     
  116.         BCF     STATUS,5
  117.         BSF     STATUS,5
  118.         MOVLW   B'10001110'        ;RA0 ANALOGO JUSTIFICACION LOS OCHO    
  119.                                                            ;PRIMEROS BITS DE ADRESL Y DOS BITS ADREESH
  120.         MOVWF   ADCON1              ;RA1, RA2 DIGITAL.
  121.         BCF     STATUS,5             ;FOSC/32 CANALRA0
  122. EEE     MOVLW   B'10000001'
  123.         MOVWF   ADCON0
  124.         BCF     PIR1,ADIF
  125.         BSF     ADCON0,GODONE
  126.         CALL    TEMPO
  127.         NOP
  128. EL      BTFSS   PIR1,ADIF
  129.         GOTO    EL
  130.         BSF     STATUS,5
  131.         BCF     STATUS,6
  132.         MOVF    ADRESL,0        ;LOW PARTE
  133.         BCF     STATUS,5
  134.         MOVWF   CONVERSION
  135.         RRF             CONVERSION,1
  136.         MOVLW   .100
  137. LL      SUBWF   CONVERSION,1
  138.         BTFSS   STATUS,0
  139.         GOTO    KK
  140.         INCF    CEN_GRADOS,1
  141.         GOTO    LL       
  142. KK      ADDWF   CONVERSION
  143.         MOVLW   .10
  144. MM      SUBWF   CONVERSION,1
  145.         BTFSS   STATUS,0
  146.         GOTO    NN
  147.         INCF    DEC_GRADOS,1
  148.         GOTO    MM
  149. NN      ADDWF   CONVERSION,0   
  150.         MOVWF   UNI_GRADOS
  151.        
  152.  
  153.         MOVF    UNI_GRADOS,0
  154.         CALL    TABLA
  155.         CLRF    PORTA
  156.         MOVWF   PORTB
  157.         BSF     PORTA,1
  158.         CALL    RETARDO
  159.        
  160.  
  161.         MOVF    DEC_GRADOS,0
  162.         CALL    TABLA
  163.         CLRF    PORTA
  164.         MOVWF   PORTB
  165.         BSF     PORTA,2
  166.         CALL    RETARDO
  167.         ;MOVF CEN_GRADOS,0
  168.         ;CALL   TABLA
  169.         ;CLRF   PORTA
  170.         ;MOVWF  PORTB
  171.         ;BSF    PORTA,3
  172.         ;CLRF   PORTA
  173. GOTO    COROSO
  174.         END
« Última modificación: 17 de Abril de 2007, 14:28:15 por microcom »

Desconectado microcom

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 568
Re: ayuda con adc del pic 16f876a
« Respuesta #5 en: 17 de Abril de 2007, 15:00:53 »
si quieres te adjunto la imagen del circuito por email
esta probado solo por proteus y funciona.
debes montarlo fisicamente para probar.

saludos

Desconectado microcom

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 568
Re: ayuda con adc del pic 16f876a
« Respuesta #6 en: 18 de Abril de 2007, 21:00:37 »
en esta direccion puedes ver el circuito.
http://es.geocities.com/ben99rafael/TEMP.bmp
saludos

Desconectado gaaciori

  • PIC10
  • *
  • Mensajes: 3
Re: ayuda con adc del pic 16f876a
« Respuesta #7 en: 20 de Abril de 2007, 22:10:33 »
que tal amigo no habia checado tus mensajes porque andaba algo ocupado con otros trabajos pero

ya cheque el codigo y funciona perfectamente

te estoy muy agradecido con tu ayuda.... gracias

si despues llegaras a necesitar ayuda y yo pudiera ayudarte lo are con mucho gusto

gracias :mrgreen:

Desconectado microcom

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 568
Re: ayuda con adc del pic 16f876a
« Respuesta #8 en: 21 de Abril de 2007, 18:49:10 »
no hay de que...
se que será asi.

estos personajes
maunix
charly
nocturno
brunof......................
..............................
.............................
...............................
...............

....................................................

saludos


 

anything