TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: pegasso en 04 de Junio de 2010, 02:43:25

Título: problema con lm35 y adc pic16f877
Publicado por: pegasso en 04 de Junio de 2010, 02:43:25
hola miren tengo un proyecto con el pic16f877 estoy controlando el encendido y apagado de un motor por medio de un determinado rango de temperatura, es decir, tengo cierta temperatura y mi motor se apaga, despues si el motor se enfria vuelve a encender, el problema esta en que estoy adquiriendo los datos via puerto serial a travez de labview, pero al muestrearlos en labview, al llegar como a los 50 grados, el sensor, me muestra ciertos picos, indeseados, al igual que muestro los bits de conversion del adc, a travez del puerto B con 8 leds, estoy usando 8 bits para el adc, de aqui es importante notar que estoy usando un oscilador RC, con 100 picofaradios y una resistencia de 756khz, esto es para controlar la velocidad del motor, y llegar a un pulso de 16 ms, no se a que se deba que mi sensor me de esos picos, estoy usando el lm35, ya probe colocando un opamp y sigue igual, con un capacitor, de 100 picos entre el pin de entrada y masa y tampoco, probe colocando una resistencia, de 10kohm a la entrada y tampoco, por lo que no se si se deba al oscilador el problema?  y de los tiempos para espera de conversion los respeto les adjunto la parte de la conversion a ver si alguien me podria ayudar saludos.

no se si el problema este en la transmision del dato, pero pues probando el adc con un potenciometro no tengo los brincos indeseados. asi que dudo sea eso.

inicio_ADC
       call  retardo           ;TIEMPO DE ESPERA PARA LA ADQUISICION
      bsf    ADCON0,2          ;Inicia conversion

espera
      btfss    ADCON0,2
      goto    lectura
      goto    espera
   

lectura                  ;Lectura del Dato analogico
                     ;Convertido

LEO   ;CALL    retardo   ;OJO PUSE UN RETARDO INECESARIO
   movf    ADRESH, w
   movwf    datoA_H

   bsf      STATUS,   RP0         ;Banco 1
   movf    ADRESL,w
   bcf    STATUS, RP0         ;Banco 0
   movwf    datoA_L

Transmitir
    bcf     STATUS,RP0
    BCF     STATUS,RP1
   movfw   datoA_H      ;Leer dato en dato h
   movwf   datoA      ;Guarda el dato en variable datoA
   MOVFW   datoA
   ;movWF   PORTB
   
   btfss   PIR1,TXIF   ;Verifica que el transmisor no este ocupado
   goto   $-1         ;espera hasta que se desocupa
   movfw   datoA
   movwf   TXREG      ;transmite el dato
   ;call    retardo       ; TIEMPO PARA TRANSMITIR EL DATO
   bsf      STATUS,   RP0         ;Banco 1
J   btfss  TXSTA,TRMT ; espera a que se desocupe. ( checar si el dato se ha enviado)
   GOTO  J
   bcf      STATUS,   RP0        
    bcf T2CON, TMR2ON   ;apaga tmr2
   movfw datoA
   movwf  CCPR1L            ;carga valor del adc para ancho del pulso
   bsf T2CON, TMR2ON       ;<- enciende tmr2