Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: naele en 24 de Agosto de 2006, 12:18:15
Título: CONVERSOR A/D PIC16F786 (siempre da el mismo dato)
Publicado por: naele 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
Título: Re: CONVERSOR A/D PIC16F786 (siempre da el mismo dato)
Publicado por: Chaly29 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
LIST P = 16F84A
INCLUDE <P16F84A.INC>
ERRORLEVEL -302
Un saludo.
Atte. CARLOS.
Título: Re: CONVERSOR A/D PIC16F786 (siempre da el mismo dato)
Publicado por: BrunoF en 24 de Agosto de 2006, 18:13:19
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
MOVF ADRESH,W
MOVWF PUERTAB ;Leemos resultado de la conversion
BSF STATUS,5
MOVF ADRESL,W
BCF ESTADO,5;Cambio banco 0
MOVWF PUERTAC
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.
Título: Re: CONVERSOR A/D PIC16F786 (siempre da el mismo dato)
Publicado por: microcom 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
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
Título: Re: CONVERSOR A/D PIC16F786 (siempre da el mismo dato)
Publicado por: naele 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