TODOPIC
Microcontroladores PIC => * PROYECTOS * => Mensaje iniciado por: adanesne 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
-
¿Qué lenguaje de programación utilizas?
Saludos LabPIC
-
lenguaje ensamblador. Para programar estoy usando el mplab para crear un archivo .asm y que me genere el .hex
-
OK, llevas algun avance?, tienes mas o menos alguna idea en mente? Que micro utilizaras?
Saludos LabPIC
-
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 :)
-
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
-
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
-
He encontrado un error en el programa:
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
-
OK! Muchas gracias!!!
Cambiando eso entonces si tiene que salir lo que yo quiero? :)