TODOPIC

Microcontroladores PIC => * PROYECTOS * => Mensaje iniciado por: tararatururu en 10 de Enero de 2008, 20:48:11

Título: TERMOSTATO 16F877+LM35+LCD
Publicado 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
Título: Re: AYUDAAAAA URGENTEEEEEE TERMOSTATO 16F877+LM35+LCD
Publicado por: blackcat en 10 de Enero de 2008, 21:06:57
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]

Título: Re: AYUDAAAAA URGENTEEEEEE TERMOSTATO 16F877+LM35+LCD
Publicado por: poseidon20 en 10 de Enero de 2008, 21:54:48
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)
Título: Re: AYUDAAAAA URGENTEEEEEE TERMOSTATO 16F877+LM35+LCD
Publicado por: MGLSOFT en 10 de Enero de 2008, 23:54:14
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:
Título: Re: AYUDAAAAA URGENTEEEEEE TERMOSTATO 16F877+LM35+LCD
Publicado por: Marioguillote en 11 de Enero de 2008, 00:42:58
ayuda por favor que tengo que entregarlo cuanto antes y me he atascado en este punto¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡

 :D  :D  :D

Saludos
Mario
Título: Re: AYUDAAAAA URGENTEEEEEE TERMOSTATO 16F877+LM35+LCD
Publicado por: blackcat en 11 de Enero de 2008, 00:48:54
asi evitaras que todos te caigan encima...

Apuesto a que ese man no se vuelve aparecer por aqui ... jajajaja
Título: Re: AYUDAAAAA URGENTEEEEEE TERMOSTATO 16F877+LM35+LCD
Publicado por: poseidon20 en 11 de Enero de 2008, 01:14:33
se habre el mercado de apuestas. Quien da mas  :D :D :D :D
Apuesto 100 a 1  :mrgreen: :mrgreen: :mrgreen:
Título: Re: AYUDAAAAA URGENTEEEEEE TERMOSTATO 16F877+LM35+LCD
Publicado por: tararatururu en 11 de Enero de 2008, 09:25:30
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
Título: Re: AYUDAAAAA URGENTEEEEEE TERMOSTATO 16F877+LM35+LCD
Publicado por: tararatururu en 11 de Enero de 2008, 09:27:04
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.
Título: Re: AYUDAAAAA URGENTEEEEEE TERMOSTATO 16F877+LM35+LCD
Publicado por: MGLSOFT en 11 de Enero de 2008, 09:38:58
Para ayudarte mejor, te aconsejo lo siguiente:
Dividamos el problema en dos partes.

Para ser sincero sospecho que tu software es donde reside el problema, igual hay que revisar el esquema... :mrgreen: :mrgreen:
Título: Re: AYUDAAAAA URGENTEEEEEE TERMOSTATO 16F877+LM35+LCD
Publicado por: Marioguillote en 11 de Enero de 2008, 10:53:22
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.
Título: Re: TERMOSTATO 16F877+LM35+LCD
Publicado por: LordLafebre en 11 de Enero de 2008, 12:39:16
Hola:

Bueno, ya se ha dicho todo, yo solo he editado el título porque me desespera más a mí.
Título: Re: TERMOSTATO 16F877+LM35+LCD
Publicado por: flacoclau en 11 de Enero de 2008, 14:19:53
Hola tararatururu:
Espero que puedas aprender cosas nuevas en este foro y seas uno más del grupo.
 :)
saludos
 
 
Título: Re: TERMOSTATO 16F877+LM35+LCD
Publicado por: tararatururu en 11 de Enero de 2008, 14:55:15
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

Título: Re: TERMOSTATO 16F877+LM35+LCD
Publicado por: tararatururu en 11 de Enero de 2008, 14:56:52
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
Título: Re: TERMOSTATO 16F877+LM35+LCD
Publicado por: tararatururu en 11 de Enero de 2008, 15:03:21
ESTE ES EL ESQUEMA

(http://rapidshare.com/files/83002710/circuito2.BMP.html)

http://rapidshare.com/files/83002710/circuito2.BMP.html

Título: Re: TERMOSTATO 16F877+LM35+LCD
Publicado por: blackcat en 11 de Enero de 2008, 15:39:29
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??

 
Título: Re: TERMOSTATO 16F877+LM35+LCD
Publicado por: tararatururu en 11 de Enero de 2008, 18:36:52
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
Título: Re: TERMOSTATO 16F877+LM35+LCD
Publicado por: tararatururu en 11 de Enero de 2008, 18:39:37
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
Título: Re: TERMOSTATO 16F877+LM35+LCD
Publicado por: poseidon20 en 12 de Enero de 2008, 03:17:51
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  :-) :-)

Título: Re: TERMOSTATO 16F877+LM35+LCD
Publicado por: tararatururu en 12 de Enero de 2008, 15:58:36
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?)
Título: Re: TERMOSTATO 16F877+LM35+LCD
Publicado por: poseidon20 en 12 de Enero de 2008, 16:13:39
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.
Título: Re: TERMOSTATO 16F877+LM35+LCD
Publicado por: tararatururu en 14 de Enero de 2008, 12:21:18
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.
Título: Re: TERMOSTATO 16F877+LM35+LCD
Publicado por: poseidon20 en 14 de Enero de 2008, 13:52:29
estaremos esperando con ansias ese informe  :mrgreen: :mrgreen:

Título: Re: TERMOSTATO 16F877+LM35+LCD
Publicado por: tararatururu en 26 de Enero de 2008, 03:09:23
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
Título: Re: TERMOSTATO 16F877+LM35+LCD
Publicado por: tararatururu en 26 de Enero de 2008, 03:13:10
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)
Título: Re: TERMOSTATO 16F877+LM35+LCD
Publicado por: flacoclau en 26 de Enero de 2008, 22:42:43
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!!!
Título: Re: TERMOSTATO 16F877+LM35+LCD
Publicado por: dawaherjesus en 04 de Febrero de 2008, 07:04:21
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 :-)
Título: Re: TERMOSTATO 16F877+LM35+LCD
Publicado por: jfh900 en 04 de Febrero de 2008, 13:39:56
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
Título: Re: TERMOSTATO 16F877+LM35+LCD
Publicado por: El_Guitre en 05 de Febrero de 2008, 01:23:10
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.
Título: Re: TERMOSTATO 16F877+LM35+LCD
Publicado por: poseidon20 en 05 de Febrero de 2008, 03:30:44
El titulo es el original  :mrgreen:
Título: Re: TERMOSTATO 16F877+LM35+LCD
Publicado por: El_Guitre en 05 de Febrero de 2008, 07:52:26
Ok, pense que era un titulo con mas desesperacion. Bien, como le habra ido a tararatururu, habra aprobado?
Título: Re: TERMOSTATO 16F877+LM35+LCD
Publicado por: poseidon20 en 05 de Febrero de 2008, 15:24:51
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
Título: Re: TERMOSTATO 16F877+LM35+LCD
Publicado por: micronet3 en 07 de Septiembre de 2008, 12:32:50
mmm tanta arrogancia de las dos partes ... y mas todavia las partes se acusan de arrogancia
Título: Re: TERMOSTATO 16F877+LM35+LCD
Publicado por: korinotenshi en 24 de Octubre de 2010, 17:19:19
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
Título: TERMOSTATO 16F877+LM35+LCD
Publicado por: saialex1989 en 30 de Abril de 2011, 21:18:41
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!!!!
Título: Re: TERMOSTATO 16F877+LM35+LCD
Publicado por: banistelrroy en 11 de Mayo de 2011, 01:34:45
creo que van a tener que investigar se recomienda leer el libro Microcontroladores PIC desarrollo de proyectos......es basico par empezar los pic
Título: Re: TERMOSTATO 16F877+LM35+LCD
Publicado por: lawren en 02 de Mayo de 2012, 05:05:21
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...