TODOPIC
Microcontroladores PIC => * PROYECTOS * => Mensaje iniciado por: tararatururu en 10 de Enero de 2008, 20:48:11
-
Tengo que entregar un proyecto en la universidad con los componentes indicados en el titulo del post. He aprovechado un esuqema y programa que habia por el foro para adaptarlo a mis necesidades, pero no consigo hacerlo funcionar.
Me seria de gran ayuda si le echase alguno de los maestros que hay por aqui para que me comentase los fallos.
Os envío el codigo y el esquema para la simulación que yo he hecho con proteus.
ayuda por favor que tengo que entregarlo cuanto antes y me he atascado en este punto¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
cualquier duda preguntadme
-
PASO 1: Lo bajo del foro .... ( duracion 1 minuto ... escribir en el buscador y darle click a bajar )
PASO 2: Lo adapto .... ( duracion 10 minutos ... abrir, cambiarle el nombre al proyecto, simular si sirve, etc )
PASO 3: No le funciono ... osea se c#g& en el diseño del compañero que habia subido el proyecto al foro .. ( duracion 3 segundos .. darse cuenta de que la regó )
PASO 4: Llama a los maestros para que se lo revisen ... ( duracion 5 minutos ... escribiendo el mensaje y que se lea como si estuviera desesperado !! )
PASO 5: Sorry papillo muchos maestros nos rompemos el coco para ayudar pero no para hacerle los proyectos a otros!!! :5] :5] :5] :5]
-
Mi estimado tararatururu, como ya te lo mencionaron, lo que mencionaron los amigos JCC40 y blackcat en este foro se trata de fomentar la ayuda pero no el abuzo como es lo que tú tratas de hacer, en primer lugar si no te salio las modificaciones de un programa ajeno, deberias por lo menos ir en el que hizo el programa y preguntarle por que no te salio las modificaciones que le hicistes. Ahora yo ya hice las modificaciones necesarias para que el programa funciones, y solo era cuestion de configurar algunos parametros del isis, pero no pienso colocarlo ya que la forma de pedirlo no es la correcta, ademas se ve que no leistes el reglamento del foro, no por escribir,AYUDA, SOCORRO, HELP y etc se te va a tratar de ayudar mas rapido. Ahora si quieres que te ayude por lo menos di que errores te sale en el Proteus y asi ayudarte a que TU resuelvas TUS problemas, y si estas corto de tiempo, bueno ps no es culpa de nosotros sino solamente tuya. por que de esos se trata el foro, de ayudar pero no a hacerle la tarea o trabajo a otro. :5] :5] :5] :5] :5] y si deceas que se te haga el trabajo, bueno entonces esto ya tiene un costo :c)
-
No abri el archivo de Isis, pero seguramente tendras que copiar el contenido del RAR en una carpeta sola y luego una vez adentro hacer doble click sobre el PIC e indicarle la direccion correcta donde esta el archivo .hex
Si hubieras invertido en navegar el foro de ISIS verias que esto debe estar explicado unas 200 veces en varios temas...
Leete las Reglas del foro antes de postear nuevamente, asi evitaras que todos te caigan encima...
Suerte!! :mrgreen:
-
ayuda por favor que tengo que entregarlo cuanto antes y me he atascado en este punto¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
:D :D :D
Saludos
Mario
-
asi evitaras que todos te caigan encima...
Apuesto a que ese man no se vuelve aparecer por aqui ... jajajaja
-
se habre el mercado de apuestas. Quien da mas :D :D :D :D
Apuesto 100 a 1 :mrgreen: :mrgreen: :mrgreen:
-
a ver, señores, un par de cositas aclaratorias:
1.- el archivo que yo he dejado es un programa al que yo he dedicado unas 15 horas despues de descargar un codigo de esta pagina, porque soy bastante torpe, y aunque a ustedes les hubiese costado menos, a mi me ha llevado ese tiempo.(adaptar no es = 10 min como tu supones blackcat (que barato es el ataque gratuito))
.- he tenido que eliminar toda la utilizacion de la eprom porque no lo hemos estudiado y hacer que el programa grabe los datos adquiridos y modifique directamente sobre las variables ´mayor´ ´menor´ , y alguna cosilla más, he seguido paso a paso todo el programa para entender su funcionamiento, y he de reconocer que algunas cosas me ha costado bastante.
2.- también le he dedicado unas horas a aprender a utilizar proteus, del cual no conocia nada, y hacer el esquema, que aunque también se facilitaba un dibujo en el post donde tome el codigo, yo lo he pasado a proteus(tambien aqui podría haber algun error).
acordaros la primera vez que visteis isis.....pues asi estaba yo, y hasta que me entere que me hacia falta la version 7.2 para poder simular el lm35 ni te cuento, y que un error que me daba era por que tampoco podía simular una resistencia variable que habia puesto para regular la intensidad del lcd, e ir descubriendo otras muchas cosas.aun asi todavia no he conseguido que me deje ver el programa corriendo mientras se ejecuta (no me habilita la opcion source code)
(añadiria aqui la imagen del circuito que tengo en isis pero no se hacerlo, esta en el archivo)
3.- si he de pedir disculpas por saltarme alguna norma del foro por las palabras empleadas, las pido ahora mismo sin problema, pero estoy convencido de que una encuesta realista desvelaría un elevado porcentaje de foreros en mi situación(normas no leidas), y quizas alguno de vosotros caeria en ese saco.
mil disculpas por las molestias ocasionadas por el titulo de mi post, de verdad.
4.- no considero un abuso ni mucho menos el hacer una consulta sobre un programa en el que llevo invertido el tiempo que llevo (bastantes horas por mi torpeza)
y menos cuando lo que solicito, y no obligo a nadie a darme, es algun comentario o pista de donde pueden estar los fallos, o alguna orientación para resolverlos, no que devuelvan el programa corregido y funcionando ni nada parecido, asi que creo que hay se ha pasado un poco poseidon20, no creeis??, seguramente ni tan siquiera descargo el archivo para saber que es lo que preguntaba realmente.
por cierto poseidon20, quien te ha echado la culpa de que falte tiempo?
no se como se hace para que aparezcan los fragmentos de texto de otras respuestas a los que hago referencia y estoy contestando, pero todo esto es respuesta a lo que habeis dicho.por cierto poseidon, has perdido la apuesta, y espero que nadie apostase contra ti, sino te voy a caer mucho peor de lo que ya te caia, jeje.
y no me enrollo mas que vaya toston me ha quedado.
eso si, por si alguien tiene interes explico un poco mas detalladamente lo que me ocurre:(igual lo debería haber hecho asi desde el principio para evitar polemica)
.- el isis me da 3 errores al simular power suply (239mV) is outside especified range (3.5v -30v)
¿porque pasa esto si tengo configurada la entrada A0 como analogica?
.- pic16adc pc=0x0008.adc conversor clock period(5e-07)is posibly invalid for device clock period
esto no se solucionarlo, no se si podría ser por la configuracion de los bits 7-6 del adcon0 como 01
.- (spice) delmin increased to xxxdue to lack of time precision
aparece el mensaje cada cierto tiempo y no se que quiere decir
estos son los errores que aparecen y para los que no he encontrado solucion, si alguien quiere ayudar que lo haga y sino que no lo haga, pero no me gustarian mas ataques sin razon, los justificados correctamente los acepto sin replica
por cierto, otra cosilla que no se muy bien es porque en algunos esquemas que veo por ahi aparece el cristal conectado entre las salidas osc1 y osc2, cual es su utilidad?deberia usarlo yo?
aclarar que el codigo original era para 16f870 y yo empleo 16f877, aunque no creo que haya que modificar instrucciones por eso, no?
GRACIAS DE ANTEMANO A TODOS LOS QUE OS HABEIS MOLESTADO EN LEER EL POST, Y EN ESPECIAL A AQUELLOS QUE APORTEN AUNQUE SOLO SEA UNA PEQUEÑA AYUDA
UN SALUDO, Y SEGUID CON ESTA IMPAGABLE LABOR
-
por cierto, decir que me aparece la información en el lcd, pero no consigo que me modifique nada la activacion de los pulsadores ni del lm35, eso es realmente lo que no me hace bien.
-
Para ayudarte mejor, te aconsejo lo siguiente:
Dividamos el problema en dos partes.
- Pon el programa original donde empezaste a modificar para lograr el tuyo, eso servira para ayudarte a encontrar si hiciste algo mal (a veces saltas un Call o algo asi y te da dolores de cabeza, aún en los programas bien comentados).
- El esquema puedes exportarlo como jpg o bmp directo desde el ISIS, no estaria mal que lo hicieras y luego lo pegaras aqui usando el archivo subido en Rapidshare por ejemplo
Para ser sincero sospecho que tu software es donde reside el problema, igual hay que revisar el esquema... :mrgreen: :mrgreen:
-
y no obligo a nadie a darme, es algun comentario o pista de donde pueden estar los fallos, o alguna orientación para resolverlos, no que devuelvan el programa corregido y funcionando ni nada parecido, asi que creo que hay se ha pasado un poco poseidon20, no creeis??
No amiguito, .... poseidon20 no se ha pasado, ni blackcat te ha atacado gratuitamente.
Sucede que éste foro, al que le cuesta mucho mantenerse en orden, está plagado de estudiantes mediocres que caen a los gritos buscando soluciones mágicas, rápidas y efectivas, pidiendo ayuda a los maestros del foro.
Me seria de gran ayuda si le echase alguno de los maestros que hay por aqui para que me comentase los fallos.
Ésos mismos aprendices de soberbios
a ver, señores, un par de cositas aclaratorias:
que cuando obtienen su inútil título, se creen seres superiores; y de el foro que les tendió una mano y de aquellos que lo ayudaron, se olvidan a los dos días.
Sé un poquito más humilde, deja la altanería de lado y logrararás la ayuda que necesitas.
Aquí hay un orden que todos mantenemos y tratamos de que ningún
....... porque soy bastante torpe, y aunque a ustedes les hubiese costado menos, a mi me ha llevado ese tiempo.......
torpe cómo tú, venga a alterarlo a los gritos y con prepotencia.
Manejáte con calma en la vida, futuro ingenierito atropelladito. Si lo logras, todo te será más fácil y serás bien recibido en cualquier lugar.
-
Hola:
Bueno, ya se ha dicho todo, yo solo he editado el título porque me desespera más a mí.
-
Hola tararatururu:
Espero que puedas aprender cosas nuevas en este foro y seas uno más del grupo.
:)
saludos
-
CODIGO DE PARTIDA
; Control de temperatura con LM35 y pantalla de LCD
; Una salida se activa ante una temp. baja y se desactiva ante una alta ambas seteables
; Guarda los parámetros en la EEPROM
; Micro: PIC16F870 a 4MHz XT
pcl equ 0x02 ;Contador de programa (Parte baja)
estado equ 0x03 ;Registro de estados
ptoa equ 0x05 ;Puertos de E/S
ptob equ 0x06
ptoc equ 0x07
intcon equ 0x0B ;Controlador de interrupciones
eedata equ 0x0C ;Registro de datos de la EEPROM
eeaddr equ 0x0D ;Registro de direccion de la EEPROM
adres equ 0x1E ;Resultado de la conversión A/D (HIGH / LOW)
adcon equ 0x1F ;Configuración del conversor A/D
uni equ 0x20 ;Usados para manejar los datos a mostrar en display
dec equ 0x21
cen equ 0x22
tiempo1 equ 0x23 ;Usados para temporizar
tiempo2 equ 0x24
letra equ 0x25 ;Usado para apuntar la letra a colocar en el LCD
menor equ 0x26 ;Temperatura de activación
mayor equ 0x27 ;Temperatura de desactivación
buffer equ 0x28 ;Usado como registro temporal
#define CARRY estado, 0 ;Bit de acarreo
#define CERO estado, 2 ;Flag indicador de resultado cero
#define RP0 estado, 5 ;Bit 0 selector de página de memoria
#define RP1 estado, 6 ;Bit 1 selector de página de memoria
#define ADGO adcon, 2 ;Bit que inicia la conversión (1) / Indica finalización (0)
#define EEREAD eedata, 0 ;Bit que inicia la lectura de la EEPROM
#define EEWRITE eedata, 1 ;Bit que inicia la escritura de la EEPROM - Indica finalización
#define EEWREN eedata, 2 ;Bit que habilita la escritura en la EEPROM
#define EEAREA eedata, 7 ;Bit que selecciona el área de EEPROM a utilizar (0=AREA DE DATOS)
#define MINS ptoa, 1 ;Sube el punto mínimo
#define MINB ptoa, 2 ;Baja el punto mínimo
#define MAXS ptoa, 3 ;Sube el punto máximo
#define MAXB ptoa, 4 ;Baja el punto máximo
#define BUZZER ptoc, 3 ;Salida al aviso acústico
#define RELE ptoc, 4 ;Relé que maneja la carga (calefactor / enfriador)
#define LCDE ptoc, 6 ;Habilitación del LCD
#define LCDRS ptoc, 7 ;Selección de modo del LCD
bsf RP0 ;Pasa a página 1
bcf RP1
movlw b'00011111' ;Configura puerto A
movwf ptoa
clrf ptob ;Puerto B completo como salidas (bus del LCD)
clrf ptoc ;Puerto B completo como salidas
movlw b'10001110' ;Configura los pines del Puerto A
movwf adcon ;AN0 como única entrada análoga
bsf RP1 ;Pasa a página 3
bcf EEAREA ;Selecciona el banco de EEPROM de datos
bcf RP1 ;Pasa a página 0
bcf RP0
movlw b'01000001' ;Enciende y configura el convertidor A/D - Selecciona AN0 como entrada
movwf adcon
clrf ptoa ;Apaga todo
clrf ptob
clrf ptoc
bsf RP1 ;Pasa a la página 2 de memoria
clrf eeaddr ;Direcciona la primera posición de la EEPROM
bsf RP0 ;Pasa a la página 3 de memoria
bsf EEREAD ;Inicia la lectura de la EEPROM
bcf RP0 ;Vuelve a la página 3 de memoria
movf eedata, 0 ;Dato Leído de la EEPROM -> W
movwf menor ;Guarda el dato leído de la EEPROM en MENOR (punto de activación del relé)
incf eeaddr ;Direcciona a la segunda posición de la EEPROM
bsf RP0 ;Pasa a la página 3 de memoria
bsf EEREAD ;Inicia la lectura de la EEPROM
bcf RP0 ;Vuelve a la página 3 de memoria
movf eedata, 0 ;Dato Leído de la EEPROM -> W
movwf mayor ;Guarda el dato leído de la EEPROM en MAYOR (punto de desactivación del relé)
bcf RP1 ;Pasa a la página 0 de memoria
movlw b'00111000' ;Comunicación con el LCD a ocho bits - Dos líneas de texto
call CONTROL
movlw d'2'
call DEMORA ;Demora 2ms
movlw b'00000110' ;Mensaje estático, se desplaza el cursor hacia la derecha
call CONTROL
movlw d'2'
call DEMORA ;Demora 2ms
movlw b'00001100' ;Enciende el display - Oculta el cursor - Caracter fijo
call CONTROL
movlw d'2'
call DEMORA ;Demora 2ms
movlw b'00000001' ;Limpia la pantalla y pone cursor en posición inicial
call CONTROL
movlw d'2'
call DEMORA ;Demora 2ms
clrf letra ;Coloca el título en el LCD
OTRA movf letra, 0 ;Letra actual -> W
call LINEA1 ;Obtiene el caracter a colocar desde la tabla
call DATO ;Envía el caracter al LCD
incf letra, 1
movf letra, 0 ;Comprueba si ya envió los 16 caracteres del título
sublw d'16'
btfss CERO
goto OTRA ;Si no llego a la letra 16 sigue enviando
movlw 0xC0 ;Posiciona el cursor en la 2da. linea
call CONTROL
movlw d'1'
call DEMORA ;Demora 1ms
clrf letra ;Coloca el título en el LCD
OTRA2 movf letra, 0 ;Letra actual -> W
call LINEA2 ;Obtiene el caracter a colocar desde la tabla
call DATO ;Envía el caracter al LCD
incf letra, 1
movf letra, 0 ;Comprueba si ya envió los 16 caracteres del título
sublw d'16'
btfss CERO
goto OTRA2 ;Si no llego a la letra 16 sigue enviando
call VERINF ;Coloca en el LCD la temp. inferior (de activación)
call VERSUP ;Coloca en el LCD la temp. superior (de desactivación)
CICLO bsf ADGO ;Inicia la conversión A/D
btfsc ADGO ;Espera que termine de convertir
goto $ -1
bsf RP0 ;Pasa a página 1 (para acceder a los ocho bits bajos del resultado)
movf adres, 0 ;Resultado de conversión -> W
bcf RP0 ;Pasa a página 1
movwf buffer ;Guarda el dato obtenido de ADRESL en el buffer temporal
bcf CARRY ;Limpia el CARRY
btfsc adres, 0 ;Mira el bit menos significativo de ADRESH (Bit 8)
bsf CARRY ;Si está en 1 pone en uno el carry
rrf buffer, 1 ;Hace desaparecer el bit 0 de ADRESL, mete el bit 0 de ADRESH por el 7 de ADRESL
movf menor, 0 ;Punto de activación -> W
addlw d'1' ;Suma 1 a W
subwf buffer, 0 ;W = Temp. Actual - (Menor + 1)
btfss CARRY ;Si dio negativo es porque la temp. medida es igual o menor al punto de activación
bsf RELE ;Si dio negativo (si carry = 0) acciona el relé
movf mayor, 0 ;Punto de desactivación -> W
subwf buffer, 0 ;W = Temp. Actual - (Mayor)
btfsc CARRY ;Si dio negativo es porque aún no alcanzó la temp. de desactivación
bcf RELE ;Si dio positivo (si carry = 1) desactiva el relé
movf buffer, 0 ;Dato digitalizado -> W
call DECIMAL ;Obtiene UNI, DEC y CEN con el agregado de 30h para la tabla ASCII
movlw 0x8D ;Coloca el cursor en la posición 0Dh de la pantalla.
call CONTROL
movf cen, 0 ;Coloca en el LCD las centenas
call DATO
movf dec, 0 ;Coloca las decenas
call DATO
movf uni, 0 ;Coloca las unidades
call DATO
btfss MINS ;Mira el pulsador de incremento en temp. de activación
call SUBEMIN
btfss MINB ;Mira el pulsador de decremento en temp. de activación
call BAJAMIN
btfss MAXS ;Mira el pulsador de incremento en temp. de desactivación
call SUBEMAX
btfss MAXB ;Mira el pulsador de decremento en temp. de desactivación
call BAJAMAX
goto CICLO ;Vuelve a medir y mostrar
LINEA1 addwf pcl, 1 ;Suma el contenido de W al contador de programa (para explorar la tabla)
retlw "T"
retlw "E"
retlw "M"
retlw "P"
retlw "E"
retlw "R"
retlw "A"
retlw "T"
retlw "U"
retlw "R"
retlw "A"
retlw ":"
retlw " "
retlw " "
retlw " "
retlw " "
LINEA2 addwf pcl, 1 ;Suma el contenido de W al contador de programa (para explorar la tabla)
retlw " "
retlw " "
retlw " "
retlw " "
retlw " "
retlw " "
retlw b'01111111' ;Flecha izquierda
retlw "-"
retlw "-"
retlw b'01111110' ;Flecha derecha
retlw " "
retlw " "
retlw " "
retlw " "
retlw " "
retlw " "
SUBEMIN incf menor, 1 ;Suma 1 a la temp. de activación
call VERINF ;Actualiza la información en el LCD
btfss MINS ;Espera que suelte el pulsador
goto $ -1
goto SAVEMIN ;Una vez que suelta la tecla va a guardar el parámetro
BAJAMIN decf menor, 1 ;Resta 1 a la temp. de activación
call VERINF ;Actualiza la información en el LCD
btfss MINB ;Espera que suelte el pulsador
goto $ -1
SAVEMIN bsf RP1 ;Pasa a página 2
clrf eeaddr ;Direcciona el primer byte de la EEPROM
movf menor, 0
movwf eedata ;Temp. Activación -> EEPROM
call EESAVE ;Ejecuta la rutina de grabación
bcf RP1 ;Pasa a página 0
goto TIC ;Va a hacer el TIC de teclado
SUBEMAX incf mayor, 1 ;Suma 1 a la temp. de desactivación
call VERSUP ;Actualiza la información en el LCD
btfss MAXS ;Espera que suelte el pulsador
goto $ -1
goto SAVEMAX ;Una vez que suelta la tecla va a guardar el parámetro
BAJAMAX decf mayor, 1 ;Resta 1 a la temp. de desactivación
call VERSUP ;Actualiza la información en el LCD
btfss MAXB ;Espera que suelte el pulsador
goto $ -1
SAVEMAX bsf RP1 ;Pasa a página 2
movlw d'1'
movwf eeaddr ;Direcciona el 2do. byte de la EEPROM
movf mayor, 0
movwf eedata ;Temp. Activación -> EEPROM
call EESAVE ;Ejecuta la rutina de grabación
bcf RP1 ;Pasa a página 0
goto TIC ;Va a hacer el TIC de teclado
EESAVE bsf RP0 ;Pasa a página 3
bsf EEWREN ;Habilita la escritura en la EEPROM
movlw 0x55 ;Secuencia de seguridad
movwf eeaddr
movlw 0xAA
movwf eeaddr
bsf EEWRITE ;Inicia la grabación
bcf EEWREN ;Deshabilita la escritura
btfsc EEWRITE ;Espera que termine de grabar
goto $ -1
bcf RP0 ;Pasa a página 2
return
TIC bsf BUZZER ;Acciona el buzzer
movlw d'100'
call DEMORA ;Deja sonar el buzzer durante 100ms
bcf BUZZER
return
CONTROL bcf LCDRS ;Pone en bajo la línea de modo del LCD (Control)
goto ENVIAR ;Se saltea la sig. línea
DATO bsf LCDRS ;Pone en alto la línea de modo del LCD (Dato)
ENVIAR movwf ptob ;Coloca el dato o control a enviar en el bus del LCD
movlw d'1'
call DEMORA ;Demora 1ms
bsf LCDE ;Habilita el LCD
movlw d'1'
call DEMORA ;Demora 1ms
bcf LCDE ;Deshabilita el LCD
movlw d'1'
call DEMORA ;Demora 1ms
return
DECIMAL movwf uni ;Convierte el dato presente en W en UNI, DEC y CEN
clrf dec
clrf cen
movlw d'100' ;Determina la cant. de centenas
CENTENA subwf uni, 1
btfss CARRY
goto CIEN
incf cen, 1
goto CENTENA
CIEN addwf uni, 1
movlw d'10' ;Determina la cant. de decenas
DECENA subwf uni, 1
btfss CARRY
goto DIEZ
incf dec, 1
goto DECENA
DIEZ addwf uni, 1 ;Uni queda con la cant. de unidades (sin decenas ni centenas)
movlw 0x30 ;Le suma 30h a los valores de UNI, DEC y CEN para que queden en ASCII
addwf uni, 1
addwf dec, 1
addwf cen, 1
return
DEMORA movwf tiempo2 ;Demora tantos milisegundos como valor en w
TOP2 movlw d'110'
movwf tiempo1
TOP1 nop
nop
nop
nop
nop
nop
decfsz tiempo1, 1
goto TOP1
decfsz tiempo2, 1
goto TOP2
return
VERINF movf menor, 0 ;Temperatura de activación -> W
call DECIMAL ;Obtiene UNI, DEC y CEN en formato ASCII
movlw 0xC2 ;Posiciona el cursor en el tercer caracter de la 2da. línea
call CONTROL ;para escribir el punto de activación
movlw d'1'
call DEMORA ;Demora 1ms
movf cen, 0 ;Coloca en el LCD las centenas
call DATO
movf dec, 0 ;Coloca las decenas
call DATO
movf uni, 0 ;Coloca las unidades
call DATO
return
VERSUP movf mayor, 0 ;Temperatura de desactivación -> W
call DECIMAL ;Obtiene UNI, DEC y CEN en formato ASCII
movlw 0xCB ;Posiciona el cursor en el caracter 12 de la 2da. línea
call CONTROL ;para escribir el punto de desactivación
movlw d'1'
call DEMORA ;Demora 1ms
movf cen, 0 ;Coloca en el LCD las centenas
call DATO
movf dec, 0 ;Coloca las decenas
call DATO
movf uni, 0 ;Coloca las unidades
call DATO
return
org 0x2100 ;Guarda los parámetros por default en la EEPROM
data 0x28 ;Punto de activación: 40 grados
data 0x32 ;Punto de desactivación: 50 grados
end
-
CODIGO MODIFICADO
; Control de temperatura con LM35 y pantalla de LCD
; Una salida se activa ante una temp. baja y se desactiva ante una alta ambas seteables
; Micro: PIC16F877 a 4MHz XT
pcl equ 0x02 ;Contador de programa (Parte baja)
estado equ 0x03 ;Registro de estados
ptoa equ 0x05 ;Puertos de E/S
ptob equ 0x06
ptoc equ 0x07
trisa equ 0x85
trisb equ 0x86
trisc equ 0x87
intcon equ 0x0B ;Controlador de interrupciones
adres equ 0x1E ;Resultado de la conversión A/D (HIGH / LOW)
adcon equ 0x1F ;Configuración del conversor A/D
uni equ 0x20 ;Usados para manejar los datos a mostrar en display
dec equ 0x21
cen equ 0x22
tiempo1 equ 0x23 ;Usados para temporizar
tiempo2 equ 0x24
letra equ 0x25 ;Usado para apuntar la letra a colocar en el LCD
menor equ 0x26 ;Temperatura de activación
mayor equ 0x27 ;Temperatura de desactivación
buffer equ 0x28 ;Usado como registro temporal
#define CARRY estado, 0 ;Bit de acarreo
#define CERO estado, 2 ;Flag indicador de resultado cero
#define RP0 estado, 5 ;Bit 0 selector de página de memoria
#define RP1 estado, 6 ;Bit 1 selector de página de memoria
#define ADGO adcon, 2 ;Bit que inicia la conversión (1) / Indica finalización (0)
#define MINS ptoa, 1 ;Sube el punto mínimo
#define MINB ptoa, 2 ;Baja el punto mínimo
#define MAXS ptoa, 3 ;Sube el punto máximo
#define MAXB ptoa, 4 ;Baja el punto máximo
#define BUZZER ptoc, 3 ;Salida al aviso acústico
#define RELE ptoc, 4 ;Relé que maneja la carga (calefactor / enfriador)
#define LCDE ptoc, 6 ;Habilitación del LCD
#define LCDRS ptoc, 7 ;Selección de modo del LCD
bsf RP0 ;Pasa a página 1
bcf RP1
movlw b'00011111' ;Configura puerto A
movwf trisa
clrf trisb ;Puerto B completo como salidas (bus del LCD)
clrf trisc ;Puerto C completo como salidas
movlw b'10001110' ;Configura los pines del Puerto A
movwf adcon ;AN0 como única entrada análoga
bcf RP0 ;Pasa a página 0
movlw b'01000001' ;Enciende y configura el convertidor A/D - Selecciona AN0 como entrada
movwf adcon
clrf ptoa ;Apaga todo
clrf ptob
clrf ptoc
movlw d'20' ;Configura temperatura de activación inicial standar
movwf menor
movlw d'22' ;Configura temperatura de desactivación inicial standar
movwf mayor
movlw b'00111000' ;Comunicación con el LCD a ocho bits - Dos líneas de texto
call CONTROL
movlw d'2'
call DEMORA ;Demora 2ms
movlw b'00000110' ;Mensaje estático, se desplaza el cursor hacia la derecha
call CONTROL
movlw d'2'
call DEMORA ;Demora 2ms
movlw b'00001100' ;Enciende el display - Oculta el cursor - Caracter fijo
call CONTROL
movlw d'2'
call DEMORA ;Demora 2ms
movlw b'00000001' ;Limpia la pantalla y pone cursor en posición inicial
call CONTROL
movlw d'2'
call DEMORA ;Demora 2ms
clrf letra ;Coloca el título en el LCD
OTRA movf letra, 0 ;Letra actual -> W
call LINEA1 ;Obtiene el caracter a colocar desde la tabla
call DATO ;Envía el caracter al LCD
incf letra, 1
movf letra, 0 ;Comprueba si ya envió los 16 caracteres del título
sublw d'16'
btfss CERO
goto OTRA ;Si no llego a la letra 16 sigue enviando
movlw 0xC0 ;Posiciona el cursor en la 2da. linea
call CONTROL
movlw d'1'
call DEMORA ;Demora 1ms
clrf letra ;Coloca el título en el LCD
OTRA2 movf letra, 0 ;Letra actual -> W
call LINEA2 ;Obtiene el caracter a colocar desde la tabla
call DATO ;Envía el caracter al LCD
incf letra, 1
movf letra, 0 ;Comprueba si ya envió los 16 caracteres del título
sublw d'16'
btfss CERO
goto OTRA2 ;Si no llego a la letra 16 sigue enviando
call VERINF ;Coloca en el LCD la temp. inferior (de activación)
call VERSUP ;Coloca en el LCD la temp. superior (de desactivación)
CICLO bsf ADGO ;Inicia la conversión A/D
btfsc ADGO ;Espera que termine de convertir
goto $ -1
bsf RP0 ;Pasa a página 1 (para acceder a los ocho bits bajos del resultado)
movf adres, 0 ;Resultado de conversión -> W
bcf RP0 ;Pasa a página 0
movwf buffer ;Guarda el dato obtenido de ADRESL en el buffer temporal
bcf CARRY ;Limpia el CARRY
btfsc adres, 0 ;Mira el bit menos significativo de ADRESH (Bit 8)
bsf CARRY ;Si está en 1 pone en uno el carry
rrf buffer, 1 ;Hace desaparecer el bit 0 de ADRESL, mete el bit 0 de ADRESH por el 7 de ADRESL
movf menor, 0 ;Punto de activación -> W
addlw d'1' ;Suma 1 a W
subwf buffer, 0 ;W = Temp. Actual - (Menor + 1)
btfss CARRY ;Si dio negativo es porque la temp. medida es igual o menor al punto de activación
bsf RELE ;Si dio negativo (si carry = 0) acciona el relé
movf mayor, 0 ;Punto de desactivación -> W
subwf buffer, 0 ;W = Temp. Actual - (Mayor)
btfsc CARRY ;Si dio negativo es porque aún no alcanzó la temp. de desactivación
bcf RELE ;Si dio positivo (si carry = 1) desactiva el relé
movf buffer, 0 ;Dato digitalizado -> W
call DECIMAL ;Obtiene UNI, DEC y CEN con el agregado de 30h para la tabla ASCII
movlw 0x8D ;Coloca el cursor en la posición 0Dh de la pantalla.
call CONTROL
movf cen, 0 ;Coloca en el LCD las centenas
call DATO
movf dec, 0 ;Coloca las decenas
call DATO
movf uni, 0 ;Coloca las unidades
call DATO
btfss MINS ;Mira el pulsador de incremento en temp. de activación
call SUBEMIN
btfss MINB ;Mira el pulsador de decremento en temp. de activación
call BAJAMIN
btfss MAXS ;Mira el pulsador de incremento en temp. de desactivación
call SUBEMAX
btfss MAXB ;Mira el pulsador de decremento en temp. de desactivación
call BAJAMAX
goto CICLO ;Vuelve a medir y mostrar
LINEA1 addwf pcl, 1 ;Suma el contenido de W al contador de programa (para explorar la tabla)
retlw "T"
retlw "E"
retlw "M"
retlw "P"
retlw "E"
retlw "R"
retlw "A"
retlw "T"
retlw "U"
retlw "R"
retlw "A"
retlw ":"
retlw " "
retlw " "
retlw " "
retlw " "
LINEA2 addwf pcl, 1 ;Suma el contenido de W al contador de programa (para explorar la tabla)
retlw " "
retlw " "
retlw " "
retlw " "
retlw " "
retlw " "
retlw b'01111111' ;Flecha izquierda
retlw "-"
retlw "-"
retlw b'01111110' ;Flecha derecha
retlw " "
retlw " "
retlw " "
retlw " "
retlw " "
retlw " "
SUBEMIN incf menor, 1 ;Suma 1 a la temp. de activación
call VERINF ;Actualiza la información en el LCD
btfss MINS ;Espera que suelte el pulsador
goto $ -1
goto SAVEMIN ;Una vez que suelta la tecla va a guardar el parámetro
BAJAMIN decf menor, 1 ;Resta 1 a la temp. de activación
call VERINF ;Actualiza la información en el LCD
btfss MINB ;Espera que suelte el pulsador
goto $ -1
SAVEMIN movf menor, 1
goto TIC ;Va a hacer el TIC de teclado
SUBEMAX incf mayor, 1 ;Suma 1 a la temp. de desactivación
call VERSUP ;Actualiza la información en el LCD
btfss MAXS ;Espera que suelte el pulsador
goto $ -1
goto SAVEMAX ;Una vez que suelta la tecla va a guardar el parámetro
BAJAMAX decf mayor, 1 ;Resta 1 a la temp. de desactivación
call VERSUP ;Actualiza la información en el LCD
btfss MAXB ;Espera que suelte el pulsador
goto $ -1
SAVEMAX movf mayor, 1
goto TIC ;Va a hacer el TIC de teclado
TIC bsf BUZZER ;Acciona el buzzer
movlw d'100'
call DEMORA ;Deja sonar el buzzer durante 100ms
bcf BUZZER
return
CONTROL bcf LCDRS ;Pone en bajo la línea de modo del LCD (Control)
goto ENVIAR ;Se saltea la sig. línea
DATO bsf LCDRS ;Pone en alto la línea de modo del LCD (Dato)
ENVIAR movwf ptob ;Coloca el dato o control a enviar en el bus del LCD
movlw d'1'
call DEMORA ;Demora 1ms
bsf LCDE ;Habilita el LCD
movlw d'1'
call DEMORA ;Demora 1ms
bcf LCDE ;Deshabilita el LCD
movlw d'1'
call DEMORA ;Demora 1ms
return
DECIMAL movwf uni ;Convierte el dato presente en W en UNI, DEC y CEN
clrf dec
clrf cen
movlw d'100' ;Determina la cant. de centenas
CENTENA subwf uni, 1
btfss CARRY
goto CIEN
incf cen, 1
goto CENTENA
CIEN addwf uni, 1
movlw d'10' ;Determina la cant. de decenas
DECENA subwf uni, 1
btfss CARRY
goto DIEZ
incf dec, 1
goto DECENA
DIEZ addwf uni, 1 ;Uni queda con la cant. de unidades (sin decenas ni centenas)
movlw 0x30 ;Le suma 30h a los valores de UNI, DEC y CEN para que queden en ASCII
addwf uni, 1
addwf dec, 1
addwf cen, 1
return
DEMORA movwf tiempo2 ;Demora tantos milisegundos como valor en w
TOP2 movlw d'110'
movwf tiempo1
TOP1 nop
nop
nop
nop
nop
nop
decfsz tiempo1, 1
goto TOP1
decfsz tiempo2, 1
goto TOP2
return
VERINF movf menor, 0 ;Temperatura de activación -> W
call DECIMAL ;Obtiene UNI, DEC y CEN en formato ASCII
movlw 0xC2 ;Posiciona el cursor en el tercer caracter de la 2da. línea
call CONTROL ;para escribir el punto de activación
movlw d'1'
call DEMORA ;Demora 1ms
movf cen, 0 ;Coloca en el LCD las centenas
call DATO
movf dec, 0 ;Coloca las decenas
call DATO
movf uni, 0 ;Coloca las unidades
call DATO
return
VERSUP movf mayor, 0 ;Temperatura de desactivación -> W
call DECIMAL ;Obtiene UNI, DEC y CEN en formato ASCII
movlw 0xCB ;Posiciona el cursor en el caracter 12 de la 2da. línea
call CONTROL ;para escribir el punto de desactivación
movlw d'1'
call DEMORA ;Demora 1ms
movf cen, 0 ;Coloca en el LCD las centenas
call DATO
movf dec, 0 ;Coloca las decenas
call DATO
movf uni, 0 ;Coloca las unidades
call DATO
return
end
-
ESTE ES EL ESQUEMA
(http://rapidshare.com/files/83002710/circuito2.BMP.html)
http://rapidshare.com/files/83002710/circuito2.BMP.html
-
Se te olvido el cristal ... el PIC16F877 tiene las siguientes opciones de oscilador:
• LP Low-Power Crystal
• XT Crystal/Resonator
• HS High-Speed Crystal/Resonator
• RC Resistor/Capacitor
Por lo que vi en tu codigo seleccionaste un cristal XT de 4MHz ... y no lo vi en el esquema.
Ya intentaste correr el codigo en modo debugger ... ??? usas MPLAB??
-
he incluido el cristal y no he notado ninguna mejoría,la simulacion ni palante ni patras, pero lo he dejado
he hecho en MPLAB reset processor y clear all memory,sin modificar nada en el codigo, y magicamente la simulación en proteus mejora mucho, ya me cambia en el lcd cuando vario la temperatura del LM35.¿que logica tiene esto?
Ahora mismo lo unico que no reconoce bien la simulacion son los pulsadores conectados a RA1, RA2, RA3, RA4, que creo que estan bien configurados en digital, cuya utilidad es la de subir y bajar los puntos de consigna de temperatura de activacion y desactivacion.
aunque me sigue dando los errores descritos anteriormente de proteus, y no se lo que significan
-
se me olvido decir que comprobe que se me quedaba pillado
SUBEMIN incf menor, 1 ;Suma 1 a la temp. de activación
call VERINF ;Actualiza la información en el LCD
aqui ---> btfss MINS ;Espera que suelte el pulsador
goto $ -1
goto SAVEMIN ;Una vez que suelta la tecla va a guardar el parámetro
antes de hacer el reset y clear
-
Gracias amigo LordLafebre por editar el tirulo de este tema, ya que ami tambien me irrita estos tipos de titulos, ahora mi estimado tararatururu con respecto a esto:
4.- no considero un abuso ni mucho menos el hacer una consulta sobre un programa en el que llevo invertido el tiempo que llevo (bastantes horas por mi torpeza)
y menos cuando lo que solicito, y no obligo a nadie a darme, es algun comentario o pista de donde pueden estar los fallos, o alguna orientación para resolverlos, no que devuelvan el programa corregido y funcionando ni nada parecido, asi que creo que hay se ha pasado un poco poseidon20, no creeis??, seguramente ni tan siquiera descargo el archivo para saber que es lo que preguntaba realmente.
por cierto poseidon20, quien te ha echado la culpa de que falte tiempo?
no se como se hace para que aparezcan los fragmentos de texto de otras respuestas a los que hago referencia y estoy contestando, pero todo esto es respuesta a lo que habeis dicho.por cierto poseidon, has perdido la apuesta, y espero que nadie apostase contra ti, sino te voy a caer mucho peor de lo que ya te caia, jeje.
Yo te hablo con fundamentos :D, y si me baje tu archivo y vi cual era el problema :mrgreen:, ahora te paso a decir como puedes hacer para que te funcione la simulacion y asi no pienses que hablo por hablar :D:
1° Debes de deshabiltar dos opciones de animacion ya que estabas saturando la simulacion. System/Set Animation option/deshabilitar "Show wire voltage by colour" y "Show wire current with arrows".
2°Debes cambiar los terminales que usas para VCC y GND debes usar los que estan en las opciones que sale al usar "terminal Mode" de la barra de herramienta del Isis, usas el power y GND que estan ahi.
3°El relay que colocastes no es animated, por lo tanto no vas a ver cuando conmuta al ser activado por el transistor, deberias buscar en la libreria de switches & relay/realys(generic)/despues escoges la libreria que dice RELAY ACTIVE, luego que lo colocas en la hoja de pruebas le cambias el voltaje de alimentacion de 12 a 5v.
4°Creo que estas usando el mplab ide, bueno ya que no usas list P=16f877 ni el include<P16f877.inc> estas declarando todos los registros que usas en este trabajo, pero bueno es tu eleccion, pero no podras incluir las config para los fuses del pic, osea configurar que tipo oscilador vas a usar, XT, HS, RC, si el wdt esta habilitado, el POR, BOR y muchos parametros mas, es por eso que el mpasm ensambla con los valores que por defecto coloca el mplab, que es todo los parametros enable y oscilador del tipo RC, asi es que lo puedes cambiar en en MPLAB---Configure/Configuration bits/ y tienes desmarcada la opcion "Configuracion bits set in code" ya que esta solo debes marcarla si pones los config en tu programa, y luego escoges los parametros que deseas, ya que estas usando un XTal de 4 MHz y en el programa no usas wdt y demas cosas entonces deberias poner la configuracion de esta manera:Oscillator-XT/watchdog timer-off/power up timer-on/brown out detect-off/low voltage program-disabled/flash program write-disabled/Data EE read Protect-off/Code protect-off.
Como veras no hablo sin las pruebas en mano :D, probe el programa y dejame decirte que no esta mal la adaptacion que hicistes para tus necesidades, pero :mrgreen:, siempre hay un pero :D, tien un problema de linealidad, en el LCD se visualiza el valor del LM35 igual hasta el valor 24 y en el lm subes a 25 en el LCD se visualiza 26 y si subes hasta 65 en le LM en el LCD se corre dos grados y ya no uno, osea vez 67. No se si sera el programa o sera el Isis eso te lo dejo de tarea :D.
Sigues pensando que hablo por hablar :mrgreen:.
La razon de como te respondi en mi primer mensaje es por la manera como planteastes la situacion, pero espero que veas que en este foro siempre estamos dispuestos a ayudar pero no a hacerle la tarea a otro y si lees el reglamento del foro estoy seguro la ayuda se te brindara de la mejor forma posible. Espero que te sea de ayuda mis observaciones :-/ :-/ :-/. Animo y Suerte :-) :-)
-
Gracias poseidon20
Entiendo que mi exposicion del problema que tenía pudiese sonar agresiva, pero para nada era esa mi intención, y me molestaba que se insinuase que no le habia dedicado tiempo y solo queria que me lo hiciesen.
Por otro lado decir que tus correcciones han sido de gran ayuda, y ahora mismo todo funciona, a excepcion de ese salto que comentas entre los 24 y 25 grados, que se observa en el lcd, voy a analizarlo a partir de ahora junto con otra cosa que voy a comentar.
Tengo que estudiar a ver porque me hace pequeñas y constantes variaciones (guiños)de temperatura en el lcd, de las consignas minima y maxima de temperatura, variando entre la temperatura programada como deseada para esas consignas y un grado por encima.lo habias notado?voy a ver si averiguo de donde viene el error, aunque imagino que será de programa asi sin mirar.
un saludo y gracias de nuevo
(¿estaria bien o seria conveniente que colgase el informe que presentare cuando entregue el proyecto?)
-
me alegro que ya te este funcionando, :D :D, con respecto a colgar el informe que pretendes presentar , bueno depende de ti si lo deseas lo cuelagas, de repente alguien le hecha una mirada y se pueda mejorara el informe :mrgreen:, con respecto a los guiños que me menconas no los note, sera por la velocidad de mi maquina :mrgreen: (PIV dual core 2, 1GB ram), pero no olvides que estas simulando por lo tanto estas en condiciones ideales, sin ruido, sin temperatura ambiente y muchas cosa que en la realidad pasaan, te recomiendo que vayas armandolo por lo menos en un protoboard para que veas como se comporta tu programa en la vida real y haber si ahi tambien aparece esos guiños que dices, creo que ya es hora de que des el salto de lo ideal a lo real :D.
-
en breve podre colgar el informe, no con intención de que se corrija sino mas bien de que el programa quede bien claro por si a alguien le viene bien o lo puede aprovechar.
-
estaremos esperando con ansias ese informe :mrgreen: :mrgreen:
-
aqui os dejo el informe y los archivos entregados, aunque sigue habiendo algun pequeño fallo que no he sido capaz de depurar, como el salto que da en el lcd de 24 a 26 grados al modificar la temperatura proveniente del lm35
espero que alguien le sirva de ayuda, y que menos para agradecer la ayuda desinteresada recibida en este foro.
para cualquier duda sobre este montaje enviadme correo a tararatururu2@hotmail.com, estare encantado de ayudaros
intentare ayudar en vuestros posts que soliciten ayuda desde mi infinita ignorancia, aunque imagino que podre ayudar en pocas ocasiones :)
a partir de ahora me pondré con el montaje del circuito, que no formaba parte de la asigantura pero que a despertado un enorme entusiasmo en mi y veo un reto el montarlo (hacerme el programador, utilizar mi insoladora casera para hacer las placas, incluida la del programador, y ver la temperatura reflejada en un lcd gracias a todo esto, cosa que me llenara de orgullo, y a partir de ahi a experimentar y mejorar)
repito, gracias a todos por vuestra ayuda
-
aqui estan los archivos, que me emocionado escribiendo y se me ha olvidado añadirlos
http://rapidshare.com/files/86672022/termostato2.zip.html archivos
http://rapidshare.com/files/86672193/informe_termostato.doc.html informe (no muy extenso ni profundo porque no me lo exigian y no me sobra tiempo)
-
aqui os dejo el informe y los archivos entregados, aunque sigue habiendo algun pequeño fallo que no he sido capaz de depurar, como el salto que da en el lcd de 24 a 26 grados al modificar la temperatura proveniente del lm35
espero que alguien le sirva de ayuda, y que menos para agradecer la ayuda desinteresada recibida en este foro.
para cualquier duda sobre este montaje enviadme correo a tararatururu2@hotmail.com, estare encantado de ayudaros
intentare ayudar en vuestros posts que soliciten ayuda desde mi infinita ignorancia, aunque imagino que podre ayudar en pocas ocasiones :)
a partir de ahora me pondré con el montaje del circuito, que no formaba parte de la asigantura pero que a despertado un enorme entusiasmo en mi y veo un reto el montarlo (hacerme el programador, utilizar mi insoladora casera para hacer las placas, incluida la del programador, y ver la temperatura reflejada en un lcd gracias a todo esto, cosa que me llenara de orgullo, y a partir de ahi a experimentar y mejorar)
repito, gracias a todos por vuestra ayuda
Te felicito!!!!!
adelante!!!
-
como les va soy mas que novato en los pic y la programación :P, e estado practicando un poco en CCS y quiero armar un termostato o medidor de temperatura con un LM35 y que se muestre la información en una pantalla LCD de 8x2, el fin de este proyecto es aprender un poco mas sobre los pic y medir la temperatura de un disipador de calor de unos integrador y transistores, e buscado en foros y algunas web pero no e encontrado mucho mas o menos tengo noción de lo que tengo hacer pero no se como comenzar con la programación.
les agradecería mucho si me pueden ayudar :-)
-
En este post tienes los hilos más importantes y necesarios para empezar a programar:
http://www.todopic.com.ar/foros/index.php?topic=14634.msg89357#msg89357
Un saludo
-
alguien puede decirme cual era el titulo original de este post? por que recien acabo de leerlo completo y se armo una rosca interesante. Si bien, después como generalmente pasa, las aguas se calman y reina la paz, me he quedado con la intriga. Me imagino que cuando tararatururu escribio el post estaba cansado de renegar con el programa y preocupado por los tiempos... me ha pasado querer sacarse una materia de encima en dos dias. Bueno nuevamente si alguien me comenta cual era el titulo, solo por curiosidad.
-
El titulo es el original :mrgreen:
-
Ok, pense que era un titulo con mas desesperacion. Bien, como le habra ido a tararatururu, habra aprobado?
-
asi le fue:
aqui os dejo el informe y los archivos entregados, aunque sigue habiendo algun pequeño fallo que no he sido capaz de depurar, como el salto que da en el lcd de 24 a 26 grados al modificar la temperatura proveniente del lm35
espero que alguien le sirva de ayuda, y que menos para agradecer la ayuda desinteresada recibida en este foro.
para cualquier duda sobre este montaje enviadme correo a tararatururu2@hotmail.com, estare encantado de ayudaros
intentare ayudar en vuestros posts que soliciten ayuda desde mi infinita ignorancia, aunque imagino que podre ayudar en pocas ocasiones :)
a partir de ahora me pondré con el montaje del circuito, que no formaba parte de la asigantura pero que a despertado un enorme entusiasmo en mi y veo un reto el montarlo (hacerme el programador, utilizar mi insoladora casera para hacer las placas, incluida la del programador, y ver la temperatura reflejada en un lcd gracias a todo esto, cosa que me llenara de orgullo, y a partir de ahi a experimentar y mejorar)
repito, gracias a todos por vuestra ayuda
-
mmm tanta arrogancia de las dos partes ... y mas todavia las partes se acusan de arrogancia
-
hola a todos ¿me podrian ayudar con un problema que tengo con este termostato?
lo que pasa es que el lcd no muesta completa la palabra temperatura y el rango de error, muestra algo asi
(EMPERATURA: 028 )
(0 -- 022 )
cuando hacia esto en pick basic solo agregaba los espacios de las letras que faltaban y me mostraba completo pero no se como corregir este problema en assembler
nota (lo hago para aprender un poco de este tema no es para la escuela y tampoco me urge jajaja :D )
gracias hojala me puedan ayudar
-
Que tal!!!
Como puedo hacer para que me muestre decimales, es que soy novato en esto de los pics y no se muy bien que digamos!!!
Espero me pueda ayudar!!!
Saludos!!!!
-
creo que van a tener que investigar se recomienda leer el libro Microcontroladores PIC desarrollo de proyectos......es basico par empezar los pic
-
hola buen la verdad soy novato en esto,, pero gracias tu programita me esta ayudando para mi trabajo... solo quiero adicionarle un ventilador y asi cuando llegue a temp maxima mande enfriar y cunado esta en temp minima se apague el ventilador es decir que hague todo lo controario a la lampra
en la parte superio agregue esto
#define VENTILADOR ptoc, 1 ;seccion de enfriamiento
movwf buffer ;Guarda el dato obtenido de ADRESL en el buffer temporal
bcf CARRY ;Limpia el CARRY
btfsc adres, 0 ;Mira el bit menos significativo de ADRESH (Bit
bsf CARRY ;Si está en 1 pone en uno el carry
rrf buffer, 1 ;Hace desaparecer el bit 0 de ADRESL, mete el bit 0 de ADRESH por el 7 de ADRESL
movf menor, 0 ;Punto de activación -> W
addlw d'1' ;Suma 1 a W
subwf buffer, 0 ;W = Temp. Actual - (Menor + 1)
btfss CARRY ;Si dio negativo es porque la temp. medida es igual o menor al punto de activación
bcf VENTILADOR ; como la temperatura es menor apaga el ventilador
bsf RELE ;Si dio negativo (si carry = 0) acciona el relé
movf mayor, 0 ;Punto de desactivación -> W
subwf buffer, 0 ;W = Temp. Actual - (Mayor)
btfsc CARRY ;Si dio negativo es porque aún no alcanzó la temp. de desactivación
bcf RELE ;Si dio positivo (si carry = 1) desactiva el relé
bsf VENTILADOR ;como ta temperatura es maxima apaga el ventilador
movf buffer, 0 ;Dato digitalizado -> W
gracias...