TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: BORIScristian en 23 de Marzo de 2016, 13:33:11
-
Estoy intentando hacer un termostato con un pic16f88 y un lm35, cuando lo simulo en proteus me tira error en el TAD, la pata que uso para tomar el voltaje analogico es la RA3, por ahora solo estoy intentando realizar la conversion y poder leer los datos, solo necesitaria ayuda con el ADC y del resto me encargaría yo, muchas gracias
;=============================este es mi código===============================
;====================================================================
; Main.asm file generated by New Project wizard
;
; Created: mar mar 17 2015
; Processor: PIC16F88
; Compiler: MPASM (MPLAB)
;====================================================================
;====================================================================
; DEFINITIONS
;====================================================================
#include p16f88.inc
; Include register definition file
__CONFIG _CONFIG1, _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_OFF & _MCLR_OFF& _LVP_OFF & _INTRC_IO
;====================================================================
; VARIABLES
;====================================================================
cblock H'70'
TEMPE
GRADOS
UNIDADES
DECENAS
CENTENAS
CounterA
CounterB
CounterC
endc
;====================================================================
; RESET and INTERRUPT VECTORS
;====================================================================
ORG 0x00
goto Start
;====================================================================
; CODE SEGMENT
;====================================================================
PGM code
Start
;---------------------puertos--------------------------------------------------
bsf STATUS, RP0
movlw b'11111111'
movwf TRISA
MOVLW B'00000000'
MOVWF TRISB ;configure entradas y salidas
movlw 0x60
movwf OSCCON ;reloj interno 4mhz
MOVLW B'00001000'
MOVWF ANSEL ;entrada analogica ra3
;-----------------------a/d----------------------------------------------------
MOVLW B'10000000'
MOVWF ADCON1 ;SIN DIVISOR DE FRECUENCIA
BANKSEL ADCON0
MOVLW B'11011001'
MOVWF ADCON0
;------------------------PROGRAMA---------------------------------------------
INICIO
;BANKSEL ADCON0
CALL DELAY
BSF ADCON0,2 ;COMENZE LA CONVERSIÓN ;ESPERO LA CONVERSIÓN
BTFSS ADCON0,2 ;PREGUNTO SI TERMINÓ
CALL CUENTA ;SI TERMINÓ VOY A CUENTA
CALL MUESTRA
GOTO INICIO
CUENTA
CALL DELAY
CLRF UNIDADES
CLRF CENTENAS
CLRF DECENAS
MOVF ADRESH,W
ADDWF ADRESH,W ;DUPLICO EL VALOR PARA OBTENER GRADOS
MOVWF TEMPE
CENTENAS1 movlw d'100' ;W=d'100'
subwf TEMPE,W ;Resto - d'100' (W)
btfss STATUS,C ;Resto menor que d'100'?
goto DECENAS1 ;SI
movwf TEMPE ;NO, Salva el resto
incf CENTENAS,1 ;Incrementa el contador de centenas BCD
goto CENTENAS1 ;Realiza otra resta
DECENAS1
movlw d'10' ;W=d'10'
subwf TEMPE,W ;Resto - d'10' (W)
btfss STATUS,C ;Resto menor que d'10'?
goto UNIDADES1 ;Si
movwf TEMPE ;No, Salva el resto
incf DECENAS,1 ;Incrementa el contador de centenas BCD
goto DECENAS1 ;Realiza otra resta
UNIDADES1
movf TEMPE,W ;El resto son la Unidades BCD
movwf UNIDADES
clrf TEMPE
RETURN
;OBTEN_ASCII ;Rutina que obtiene el equivalente en ASCII
; movlw h'30'
; iorwf UNIDADES,f
; iorwf DECENAS,f
; iorwf CENTENAS,f
; return
MUESTRA
MOVF UNIDADES,PORTB
RETURN
DELAY
movlw D'102'
movwf CounterC
movlw D'118'
movwf CounterB
movlw D'192'
movwf CounterA
loop decfsz CounterA,1
goto loop
decfsz CounterB,1
goto loop
decfsz CounterC,1
goto loop
retlw 0
END
-
cuando lo simulo en proteus me tira error en el TAD,
Lo unico que indica eso es que puede estar mal la configuracion
Es raro que lo digas, por que el ADC posee un oscilador RC interno el cual el TAD del mismo es de 2us a 6us (tipico 4us ), lo cual esta entre los valores permitidos que posee el PIC,ya que exige un TAD mínimo de 1.6us para la versión del PIC16F88. y de 3us para la versión PIC16LF88
En tu caso tenes seleccionado el ADC con el RC incorporado que trae. Pero aun asi parece que el Proteus no te toma esa frecuencia sino la de 4Mhz, Ya que para hacerlo con 4Mhz deberías usar como mínimo un Fosc/8 ( podes ver la tabla en el datasheet donde con eso tenes hasta 5Mhz ).
Eso si realmente es el TAD, el tiempo de adquisición no creo que sea problema con ese delay que tenes tampoco.
En fin, no le encuentro un por que te esta tirando ese error, lo primero que pense es que lo tenias mal configurado pero con el oscilador RC interno no deberias jamas.
-
Gracias, voy a probarlo en el protoboard, quizás sea problema de mi pc, pruebo y cuento que tal me fue