Autor Tema: CONVERSOR A/D PIC16F786 (siempre da el mismo dato)  (Leído 3087 veces)

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

Desconectado naele

  • PIC10
  • *
  • Mensajes: 11
CONVERSOR A/D PIC16F786 (siempre da el mismo dato)
« en: 24 de Agosto de 2006, 12:18:15 »
Hola a todos.
Estoy programando un PIC 16F876 para que al meterle una señal entre 0 y 5V por el terminal RA0, me de a la salida su equivalente en binario. He hecho el programa, me compila bien, pero a la hora de probarlo resulta que a la salida siempre me da el mismo dato, y no consigo saber porque.
Os dejo el código que estoy utilizando a ver que me decis vale?
muchas gracias de antemano.
un saludo, Elena

CODIGO:
;===============Mapa de memorias===========================
CONTA01      equ   0x20
CONTA02      equ   0x21
CONTA03      equ   0X22
CONTA04      equ   0X23
;============== Configuración de puertos ==================
   ORG   0x0000
   GOTO   INICIO
INICIO   BSF   ESTADO,5   ;cambio al banco 1 del pic
   CLRF   TRISB      ;puerta B en salida
   CLRF   TRISC
   CLRF   ADRESH
   MOVLW   b'00001110'   ;RA0 analógica resto digitales
   MOVWF   ADCON1
   MOVLW   b'00000001'
   MOVWF   TRISA
   BCF   ESTADO,5   ;Cambio al banco 0
   CLRF   ADRESL
   BSF   PUERTAA,1
   MOVLW   b'10000001'   ;Reloj de conversion a 32Tosc
            ;canal 0 (RA)/conversor activo
   MOVWF   ADCON0
   BSF   PUERTAA,2
   CALL   RET
   BSF   ADCON0,2   ;Inicio de la conversion
   BSF   PUERTAA,3
CONVER1   BTFSC   ADCON0,2   ;Chequeo para ver fin de conversion
   GOTO   CONVER1
   BTFSS   PIR1,6      ;Chequeo del bit ADIF si es 1 salta
            ;he indica el fin de la conversion
   GOTO    CONVER1
   BSF   PUERTAA,4
   MOVLW   ADRESH
   MOVWF   PUERTAB      ;Leemos resultado de la conversion
   MOVLW   ADRESL
   MOVWF   PUERTAC
   BCF   ESTADO,5   ;Cambio banco 0
   BCF   PIR1,6      ;Ponemos a 0 ADIF (Registro PIR1)
   ;CALL   BUSY
   ;CALL   BUSY
   ;CALL   BUSY
   ;CALL   BUSY
   ;CALL   BUSY
   ;CALL   BUSY
   BCF   PUERTAA,4
;===================== RETARDO DE 12TAD=======================================
RET   MOVLW   b'01100000'   ;12TAD (1TAD=8us)
   MOVWF   CONTA02
TRES   DECFSZ   CONTA02,1   ;DECREMENTA Y SI ES CERO SALTA
   GOTO   TRES
   RETURN
;===================== RETARDO 1770 us =======================================
BUSY   MOVLW   b'00001001'   ;Ponemos el contador a 09
   MOVWF   CONTA03      ;Guardamos valor en CONTA01
UNO   MOVLW   b'10010100'   ;Ponemos el contador a 40
   MOVWF   CONTA04    ;Guardamos el valor en CONTA01
DOS   DECFSZ   CONTA04,1   ;Decrementamos CONTA01, si es cero salta
   GOTO    DOS      ;Vuelve
   DECFSZ   CONTA03,1   ;Decrementamos CONTA02, si es cero salta
   GOTO    UNO      ;Volvemos a recargar CONTA01
   RETURN         ;volver del retardo

                END

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: CONVERSOR A/D PIC16F786 (siempre da el mismo dato)
« Respuesta #1 en: 24 de Agosto de 2006, 16:55:17 »
Hola naele, aparte de no comentar la frecuencia de reloj que estas usando, tu programa esta muy incompleto, por lo tanto no hay mucho que podamos hacer.

Pero desde ya te recomendaría que usaces las funciones: LIST e INCLUDE para que se pueda comprender un poco mejor lo que intentas hacer.

Aparte de lo anterior, cuando estas escribiendo el mensaje y deseas colocar un codigo, tienes que seleccionarlo todo y luego ir a la funfion de GeSHi (arriba a la derecha) y seleccionar .asm, de esta manera el codigo será mucho más entendible todabía y quedará algo como lo siguiente:

Código: ASM
  1. LIST            P = 16F84A
  2.         INCLUDE         <P16F84A.INC>
  3.         ERRORLEVEL      -302

Un saludo.

Atte. CARLOS.
La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: CONVERSOR A/D PIC16F786 (siempre da el mismo dato)
« Respuesta #2 en: 24 de Agosto de 2006, 18:13:19 »
Hola. Rapidamente veo dos errores graves:

   MOVLW   ADRESH
   MOVWF   PUERTAB      ;Leemos resultado de la conversion
   MOVLW   ADRESL
   MOVWF   PUERTAC
   BCF   ESTADO,5   ;Cambio banco 0
   BCF   PIR1,6      ;Ponemos a 0 ADIF (Registro PIR1)

1)
MOVLW carga un valor constante en W. MOVLW ADRESH es lo mismo que decir lo siguiente:
MOVLW       0X1E
utilizando el mismo concepto, poner esto:
MOVLW   ADRESL
produce esto:
MOVLW   0x9E

Seguramente estos son los datos que ves siempre.

2) El registro ADRESL esta en el banco 1 del PIC. Debes pasar al banco 1 antes de leerlo.

Entonces, finalmente, esa porcion de codigo deberia quedar asi:

Código: ASM
  1. MOVF    ADRESH,W
  2.         MOVWF   PUERTAB         ;Leemos resultado de la conversion
  3.                 BSF           STATUS,5
  4.         MOVF    ADRESL,W
  5.         BCF     ESTADO,5        ;Cambio banco 0
  6.         MOVWF   PUERTAC
  7.         BCF     PIR1,6          ;Ponemos a 0 ADIF (Registro PIR1)

Puede haber mas errores. Si no funciona, seguiremos intentando ayudarte.
Por favor toma en cuenta lo que te dijo Chaly29 para que podamos ayudarte mas facilmente.
Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado microcom

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 568
Re: CONVERSOR A/D PIC16F786 (siempre da el mismo dato)
« Respuesta #3 en: 24 de Agosto de 2006, 19:30:22 »
amigo como dice brunof siempre cuando es va a hacer una operacion de esas en la cuales participan varios registros de los cuales estan en diferentes bancos de trabajo; debes tener  a la mano los registros y en que bancos se encuentan estos .
mire que aqui tengo que pasarme al banco1 ya que alli es que se encuentra el adresl y despues pasar al banco0 para seguir el programa.

este es un programa para lo que dices y lo prove con pic 16f819 y creo que es compatible con pic 16f876.

disculpas por la mayuscula pero lo tengo.

LIST    P=16F819
   #INCLUDE<P16F819.INC>
   ;DECLARACION DE VARIABLES
REG1   EQU   28
REG2   EQU   29
REG3   EQU   2A
JAI_LOW   EQU   22
JAI_HIG   EQU   23
      ;BITS DE CONVERSION ANALO DIGITAL
ADIF   EQU   6   
GODONE   EQU   2
ADON   EQU   0
ADFM   EQU   7

   ORG   00
   GOTO   INICIO

RETAR   MOVLW   .180
   MOVWF   REG2
DEC5   MOVLW   .160
   MOVWF   REG3
DEC6   DECFSZ   REG3,1
   GOTO   DEC6
   DECFSZ   REG2,1
   GOTO   DEC5
   RETURN


RETARD   MOVLW   .100   
   MOVWF   REG1
   nop
   nop
   nop
   nop
DEC9   DECFSZ   REG1,1
   GOTO   DEC9
   RETURN
INICIO
   BSF   STATUS,5
   BCF   STATUS,6
   CLRF   PORTB      ;SALIDA A LOS LEDS
   MOVLW   B'00000001'   ;RA1 RA2 SALIDAS A LOS LEDS ADRESH
   MOVWF   PORTA
CONVERSIONANALOGODIGITAL
   MOVLW   B'10001110'   ;RA0 ANALOGO JUSTIFICACION LOS OCHO             ;PRIMEROS
   MOVWF   ADCON1      ;BITS DE ADRESL Y DOS BITS DE ADRESH.             ;RA0 ANALOGO
   BCF   STATUS,5   ;RA1 RA2 DIGITAL.
EEE   MOVLW   B'10000001'   ;FOSC/32 CANALRA0   
   MOVWF   ADCON0
   CALL   RETARD      ;RETARDO DE PROGRAMACION
   BCF   PIR1,ADIF   ;BORRAR INDICADOR DE FIN DE CONVERSION
   BSF   ADCON0,GODONE   ;COMIENZA CONVERSION.
   CALL   RETARD
E   BTFSS   PIR1,ADIF   ;¿TERMINÒ CONVERSION? (SI ADIF=1) (NO             ;ADIF=0)   
   GOTO   E      ;SI LA CONVERSION NO HA TERMINADO ADIF             ;=0
   BSF   STATUS,5   ;CAMBIO A BANCO1 PARA ACCEDER A ADRESL
   MOVF   ADRESL,0   ;LOW PARTE
   BCF   STATUS,5   ;ACCEDO A BANCO0 PARA MOVER RESULTADO A             ;JAI_LOW   
   MOVWF   JAI_LOW
   MOVWF   PORTB      ;MUESTRO CONVERSION EN LEDS,CADA             ;CONVERSION EQUIVALE
   CALL   RETAR      ;AL VALOR (BINARIO_DECIMAL x             ;4.88mv/bits) O SEA
   MOVF   ADRESH,0   ;SALIDA DIGITAL B'0011100101' ENTRADA             
;ANALOGA=......   
   MOVWF   JAI_HIG      ;(229X4.88=1.117VOLTIOS APROX).
   BCF   STATUS,0   ;RAO ES ENTRADA ANALOGA, RA1 Y RA2             ;VISUALIZAN 
   RLF   JAI_HIG,0   ;LA PARTE ALTA DE LA CONVERSION POR ESO             ;ROTO
   MOVWF   PORTA      ;A LA IZQUIEDA EL RESULTADO "ADRESH"
   CALL   RETAR
   GOTO   CONVERSIONANALOGODIGITAL
   END

Desconectado naele

  • PIC10
  • *
  • Mensajes: 11
Re: CONVERSOR A/D PIC16F786 (siempre da el mismo dato)
« Respuesta #4 en: 29 de Agosto de 2006, 09:14:17 »
Hola a todos.
Ya esta solucionado (gracias a vosotros) y funciona como es debido. Lo siento por mandar asi el codigo, no sabia que se podia poner de la otra manera, pero para la proxima vez lo mandare asi.
Gracias a todos.
Un saludo, Elena


 

anything