Autor Tema: PROYECTO PARA CONTROLAR TEMPERATURA CON PIC 16F877A  (Leído 20760 veces)

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

adanesne

  • Visitante
PROYECTO PARA CONTROLAR TEMPERATURA CON PIC 16F877A
« en: 15 de Junio de 2006, 18:17:04 »
   HOLA! NECESITO AYUDA PARA HACER UN PROGRAMA QUE RECIBA UNA VOLTAJE DADO POR 4 SENSORES DE TEMPERATURA LM35 POR EL PUERTO A, QUE SI DICHA TEMPERATURA ES MAYOR DE 28ºC MANDA UN BIT POR EL PUERTO B, SI ESTA ENTRE 24-26ºC MANDE CEROS POR LOS PUERTOS B Y C Y QUE SI ES MENOR A 22ºC MANDE UN BIT POR EL PUERTO C.

   PORFAVOR! GRACIAS A TODOS! ESTA MUY PADRE LA PAGINA

Desconectado LabPIC

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 143
Re: PROYECTO PARA CONTROLAR TEMPERATURA CON PIC 16F877A
« Respuesta #1 en: 15 de Junio de 2006, 18:20:01 »
¿Qué lenguaje de programación utilizas?

Saludos LabPIC
¡¡¡Viva México cabrones!!!

adanesne

  • Visitante
Re: PROYECTO PARA CONTROLAR TEMPERATURA CON PIC 16F877A
« Respuesta #2 en: 15 de Junio de 2006, 19:09:59 »
lenguaje ensamblador. Para programar estoy usando el mplab para crear un archivo .asm y que me genere el .hex

Desconectado LabPIC

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 143
Re: PROYECTO PARA CONTROLAR TEMPERATURA CON PIC 16F877A
« Respuesta #3 en: 16 de Junio de 2006, 12:14:42 »
OK, llevas algun avance?, tienes mas o menos alguna idea en mente? Que micro utilizaras?

Saludos LabPIC
¡¡¡Viva México cabrones!!!

adanesne

  • Visitante
Re: PROYECTO PARA CONTROLAR TEMPERATURA CON PIC 16F877A
« Respuesta #4 en: 16 de Junio de 2006, 14:49:06 »
    Tengo la idea de como lo quiero, pero no estoy segura de estar bien.
Esta es la etapa donde se verifica los valor a comparar, pero me falta como recoger el dato por el puerto A y como es un voltaje de entre 1.5 y 3 V acondicionarlo, para que me den los valores de temp 15ºC y 30ºC cuando mucho para que al compararlo haga lo que quiero.

verifica   
      movlw   .28      ; para comparar temp alta (en decimales)
      xorlw   PORTA      ; Resultado a W
      btfss   STATUS,Z    ; si es 1 ignora la sig. instruccion
      movwf   PORTB      ; Manda resultado a puerto B
      movlw    .21      ; para comparar temp baja
      xorlw   PORTA;
      btfss   STATUS,Z;
      movwf   PORTC;
      movlw   .24      ; temp promedio y adecuada
      xorlw   PORTA;
      btfss   STATUS,Z;
      clrf   PORTB;
      movlw   .24      ; temp promedio
      xorlw   PORTA;
      btfss   STATUS,Z;
      clrf   PORTC;
      call    inicio
end

si me puedes ayudar te lo voy a gradecer muchisimo  :)

Desconectado LabPIC

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 143
Re: PROYECTO PARA CONTROLAR TEMPERATURA CON PIC 16F877A
« Respuesta #5 en: 16 de Junio de 2006, 14:57:14 »
Para empezar una duda, los 1.5 V a cuanta temperatura corresponden de igual manera los 3 V  que temperatura corresponden?

Ademas los datos que adquerira el puerto a serian analogicos para lo cual hay que utilizar antes de todo el convertidor analógico/digital, una vez que tengas los respectivos valores digitales podras hacer comparaciones y demas cosas.

Sería bueno que pusieras todo el codigo que tienes al momento para poder ayudarte de la mejor manera.

Saludos LabPIC
« Última modificación: 16 de Junio de 2006, 15:12:07 por LabPIC »
¡¡¡Viva México cabrones!!!

adanesne

  • Visitante
Re: PROYECTO PARA CONTROLAR TEMPERATURA CON PIC 16F877A
« Respuesta #6 en: 16 de Junio de 2006, 16:14:32 »
Mira, me estoy guiando con otro programa que el circuito a la entrada teniene dos sensor lm35(sensor de temperatura y da como resultado un voltaje) que es lo que entra por el puerto A. Ya le puse en comentarios lo que yo creo que no voy a utilizar, pues no me interesa mostrar la temp. solo controlarla.


;programa para realizar una conversión analógica digital y da la temperatura en 2 digitos a un display
LIST P=16F877
include<p16f877.inc>
RDELAY    EQU 0x21
CONTA0    EQU 0x22
CONTA1    EQU 0x23
CONTA2    EQU 0x24
conta_n EQU 0x25
DIS1    EQU 0x26
DIS2    EQU 0x27
temp   EQU 0x28
contb_n EQU 0x29
conta   EQU 0x30

;TABLA ADDWF PCL,1 ; Cargamos el valor del acumulador en el registro
                ; PLC. Cuando se ejecute esta instruccion el pic
                ; saltara inmediatamente a la direccion del programa
                ; que le hayamos invocado.
                ; En esta tabla almacenaremos los valores que hay
                ; que sacar por el puerto para que se muestren en
                ; el display los numeros del 0 a 9.

DISPLAY
;   cero    RETLW h'40' ; Para mostrar el 0
;   uno    RETLW h'79' ;Para mostrar el 1
;   dos   RETLW h'24' ;Para mostrar el 2
;   tres    RETLW h'30' ;Para mostrar el 3
;   cuatro    RETLW h'19' ;Para mostrar el 4
;   cinco    RETLW h'12' ;Para mostrar el 5
;   seis    RETLW h'02' ;Para mostrar el 6
;   siete    RETLW h'78' ;Para mostrar el 7
;   ocho    RETLW h'00' ;Para mostrar el 8
;   nueve    RETLW h'10' ;Para mostrar el 9
;   diez    RETLW h'40' ;Para mostrar el 0

;*****************************************************************
inicio   
      bsf    STATUS,RP0 ; Selecciona Banco 1
      movlw    b'00011111'
      movwf    TRISA   ; Configura PA como entrada (5 bits)
      clrf   ADCON1   ; 8 entradas Analogicas, justificado izquierda (6 bits menos sig. ADDRESL cero,), Vref=Vdd, Fosc/2
      bsf      ADCON1,ADFM ; Se justifica a la derecha.
      clrf    TRISC    ; PC de salida
      clrf   TRISB     ; PB Como salida;
      bcf      STATUS,RP0 ; selecciona BANCO 0
      clrf    ADCON0   ; Seleccion del canal 0, Fosc/2,  conversion apagada, convertidor apagado
      bsf    ADCON0,0 ; Activa el convertidor A/D
convertir
      call    espera20u   ;Crea un pequeno retardo
      bsf    ADCON0,2    ;Activa bandera GO/_Done
espera
      btfsc    ADCON0,2    ;espera que termine proceso de conversion
      goto    espera

      bsf    STATUS,RP0  ;SELECCION BANCO 1
      movf   ADRESH,W    ;copia ADRESL a W
      bcf    STATUS,RP0  ;selecciona banco 0
      movwf    PORTD       ;copia ADDRESL  a PD

      movf   W,temp ;Copia w a temp
   
      clrf   DIS1 ; Inicializamos la variable DIS1
      clrf    DIS2 ; Inicializamos la variable DIS2
      clrf    conta; Inicializamos la variable conta
ciclope

      movf   temp,w ; Copia temp a w
      goto    verifica;
;      xorwf    conta,0 ; Realiza x-or con conta
;      btfsc    STATUS,Z ; Verifica el resultado es cero (son iguales)
;      goto    continua
;      bcf    STATUS,Z
;      movlw    h'0A'       ; Carga 0A en W
;      xorwf    DIS1,0    ; Realiza X-OR W con PORTB
;      btfss    STATUS,Z    ; Verifica si en resultado es cero (son iguales)
;      goto    continua1
;      incf    DIS2,1      ; Incrementa el valor de contb (2do Display)
;      clrf    DIS1

continua1
   
      incf    conta,1;
      incf    DIS1;
      goto    ciclope;

continua

desp1
      movf    DIS1,conta_n
      movf   DIS1,W       ; Guarda el resultado en conta
;      call    TABLA
      movwf    conta_n
      comf    conta_n,0
      movwf   PORTC

desp2

      movf    DIS2,contb_n
      movf    DIS2,W      ; Guarda el resultado en contb
;      call    TABLA
      movwf    contb_n
      comf    contb_n,0
      movwf    PORTB
      goto    convertir

espera20u

      movlw    0x05
      movwf   CONTA0

ret1    

      decfsz    CONTA0,1
      goto ret1
      return

verifica   
      movlw   .28      ; para comparar temp alta (en decimales)
      xorlw   PORTA      ; Resultado a W
      btfss   STATUS,Z    ; si es 1 ignora la sig. instruccion
      movwf   PORTB      ; Manda resultado a puerto B
      movlw    .21      ; para comparar temp baja
      xorlw   PORTA;
      btfss   STATUS,Z;
      movwf   PORTC;
      movlw   .24      ; temp promedio y adecuada
      xorlw   PORTA;
      btfss   STATUS,Z;
      clrf   PORTB;
      movlw   .24      ; temp promedio
      xorlw   PORTA;
      btfss   STATUS,Z;
      clrf   PORTC;
      call    inicio
end



Desconectado LabPIC

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 143
Re: PROYECTO PARA CONTROLAR TEMPERATURA CON PIC 16F877A
« Respuesta #7 en: 16 de Junio de 2006, 18:40:06 »
He encontrado un error en el programa:

Citar
movf   ADRESH,W    ;copia ADRESL a W

Debes de asegurarte que leas el ADRESL, porque de esta manera unicamente estas leyendo los 2 bits mas significativos de la conversión.

Saludos LabPIC
¡¡¡Viva México cabrones!!!

adanesne

  • Visitante
Re: PROYECTO PARA CONTROLAR TEMPERATURA CON PIC 16F877A
« Respuesta #8 en: 01 de Julio de 2006, 22:55:13 »
OK! Muchas gracias!!!

     Cambiando eso entonces si tiene que salir lo que yo quiero? :)