• Martes 5 de Noviembre de 2024, 20:32

Autor Tema:  Cómo Controlar La Temperatura Con 16f873?  (Leído 1864 veces)

ecoes

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Cómo Controlar La Temperatura Con 16f873?
« en: Viernes 14 de Octubre de 2005, 18:15 »
0
Hola Chicos,

Se me ha presentado un conflicto con un programa para controlar la temperatura de un calentador, para mentenerlo al rededor de 100 ºC. usando un pic 16f873.

El ADC está bien configurado y me lee bien. Para probarlo, genero el codigo solo para leer el ADC y enviar  el dato a un LCD configurado a 4 bits. Hasta ahi va todo bien. Luego le agrego al código la subrutina de control de temperatura. Esta debe encender el calentador cuando esta por debajo de 95 ºC y apagarlo por encima de 105, pero encuentro que cuando está por debajo de 95 grados el LCD visualiza adecuadamente el dato y cuando llega a 95 se descontrola y muestra un valor mucho mayor que el leido por el ADC es decir visualiza 223 grados, cosa que es errónea. Hice un seguimiento al codigo simulando con el MPLAB y el error sucede con la instrucción rrl que la uso para dividir por dos el valor codificado por el ADC para luego hacer la conversión BCD.

Estas son la instruciones que uso:


CONTROL      BANK1   ;Entra al banco1
      movf   ADRESL,0      
                     BANK0      ;Vuelve al banco 0   
                                movwf       UNIDADES
                                rrf             UNIDADES
                                call            CONVERSION_ADC

                   movwf   TEMPORAL
      movlw    0x65       ;AQUI ESCRIBO HEX PARA 105ºC      subwf    TEMPORAL,W   
                                btfsc     STATUS,C      ; ¿Igual que la máxima?         goto   APAGA  ; C=1, es mayor. ; Desactiva calefactor
            ; C=0, es menor, salta
      movlw    0x63   ;AQUI ESCRIBO HEX PARA 95 ºC
      subwf    TEMPORAL,W
      btfss    STATUS,C   ; ¿Inferior a la mínima?         
      goto   PREND   ; C=0, es menor; Activa calefactor
      goto   EXPLOA4
         
APAGA      bcf    PORTB,2      ;Apaga el Horno
      goto   EXPLOA4

PREND      bsf    PORTB,2      ;Prende el Horno
      goto   EXPLOA4


Espero que me entiendan el problema y puedan ayudarme, by.... :hola:

© Jonathan ©

  • Moderador
  • ******
  • Mensajes: 1671
  • Nacionalidad: ar
    • Ver Perfil
    • http://www.einstec.com.ar
Re: Cómo Controlar La Temperatura Con 16f873?
« Respuesta #1 en: Sábado 15 de Octubre de 2005, 01:18 »
0
Bueno, tu codigo tiene un error muy particular, seguro es esto, pues me ha pasado ya..
En la instruccion "rrf UNIDADES" no especificas donde debe depositar el bit que saca la instruccion.. debes poner lo siguiente:

rrf UNIDADES,1

para que al rotar el byte, el bit entre nuevamente por la otra punta.. aver si me explique.. la instruccion rrf se define de la siguiente manera:

rrf UNIDADES,d

donde d puede ser 0 para depositar el resultado en W o 1 para depositarlo en el mismo registro UNIDADES.

Espero aver ayudado. Un Abrazo
EINSTEC Tecnología «La única fuente del conocimiento es la experiencia.»

«Lo importante es no dejar de hacerse preguntas.»

ecoes

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Re: Cómo Controlar La Temperatura Con 16f873?
« Respuesta #2 en: Sábado 15 de Octubre de 2005, 18:34 »
0
Tienes toda la razon Jonathan, Hoy mismo voy a corregir el error. Ya encuentro lo mucho que me ha servido el foro, pues trabajo sólo y me quedo corto buscando los errores.

Muchas gracias