Buenas a todos, Pues un amigo me pidio ayuda para hacer un programa basico de algo asi como un termostato programable. Se le ingresa la temperatura un rango de error minimo 1 grado y listo se pone a calentar y si se pasa enfria, una vez enfriado vuelve a calentar, hasta que le demos salir.
Bueno el problema esta en que al pasarlo al proto el programa dura a lo mucho 1 minuto y se resetea o cuando se enciende el pin que activa la resistencia se resetea, bueno no se resetea se vuelve loco el lcd deja de mostrar los mensajes y se empiezan a ver caracteres raros algo asi //_00???/_/ osea muere el programa.
aqui les dejo el codigo es en PBP y no encuentro algo que genere ese reseteo
'****************************************************************
'* Name : TERMO_ON/OFF.PBP *
'* Author : Max Eduardo Reyes Vera Juarez *
'* Notice : Copyright (c) 2006 Protegido Por leyes de Autor *
'* : All Rights Reserved *
'* Date : 04/10/2006 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
define OSC 12
DEFINE LCD_DREG PORTD
DEFINE LCD_DBIT 4
DEFINE LCD_EREG PORTD
DEFINE LCD_EBIT 1
DEFINE LCD_RSREG PORTD
DEFINE LCD_RSBIT 0
DEFINE ADC_CLOCK 3
DEFINE ADC_BITS 10
DEFINE ADC_SAMPLEUS 50
ADCON1 = 143
OPTION_REG.7 = 0
TRISA = 255
TRISB = 127
TRISC = 0
TERMO VAR PORTA.0
HTEMP VAR PORTB.0
LTEMP VAR PORTB.1
ENTER VAR PORTB.2
EXIT VAR PORTB.3
HEAT VAR PORTC.0
SENSOR VAR WORD
MAXTEMP VAR WORD
RANGO VAR WORD
REF VAR WORD
RL VAR BYTE
TL VAR BYTE
I VAR BYTE
INICIO:
MAXTEMP=0
RANGO=0
PORTC=0
LCDOUT$FE,1," INGRESE "
LCDOUT$FE,$C0,"TEMPERATURA"
GOSUB PAUSA
GOTO INICIO
PAUSA:
FOR I=0 TO 20
IF HTEMP=0 OR LTEMP=0 THEN
GOTO MAST
ENDIF
PAUSE 100
NEXT I
RETURN
MAST:
IF EXIT=0 THEN BREAK
IF LTEMP=0 THEN
GOSUB MENOST
ENDIF
IF hTEMP=0 THEN
PAUSE 130
IF HTEMP=0 THEN
MAXTEMP=MAXTEMP+1
TL = MAXTEMP
LCDOUT$FE,1,"TEMPERATURA DE:"
LCDOUT$FE,$C0," ",DEC MAXTEMP,"ßC"
IF LTEMP=0 THEN MENOST
ENDIF
ENDIF
IF MAXTEMP>=250 THEN
MAXTEMp=0
ENDIF
IF ENTER=0 THEN
MAXTEMP=(MAXTEMP*2)
GOSUB XRANGO
ENDIF
GOTO MAST
MENOST:
IF EXIT=0 THEN BREAK
IF HTEMP=0THEN
GOTO MAST
ENDIF
IF LTEMP=0 THEN
PAUSE 130
IF LTEMP=0 THEN
MAXTEMP = MAXTEMP - 1
TL = MAXTEMP
LCDOUT$FE,1,"TEMPERATURA DE:"
LCDOUT$FE,$C0," ",DEC MAXTEMP,"ßC"
IF HTEMP=0 THEN MAST
ENDIF
ENDIF
IF MAXTEMP <=0 THEN
MAXTEMP = 250
ENDIF
IF ENTER=0 THEN
MAXTEMP=(MAXTEMP*2)
GOSUB XRANGO
ENDIF
GOTO MENOST
XRANGO:
LCDOUT$FE,1,"MARGEN DE ERROR?"
GOSUB PAUS2
GOTO XRANGO
RANGOTT:
IF EXIT=0 THEN BREAK
IF LTEMP=0 THEN
GOTO RANGOTM
ENDIF
IF HTEMP=0 THEN
PAUSE 130
IF HTEMP=0 THEN
RANGO = RANGO+1
RL = RANGO
LCDOUT$FE,1,"RANGO DE:"
LCDOUT$FE,$C0,"+/- ",DEC RANGO,"ßC"
IF LTEMP=0 THEN RANGOTM
ENDIF
ENDIF
IF RANGO>255 THEN
RANGO=0
ENDIF
IF ENTER=0 THEN
RANGO = (RANGO*2)
GOTO CALIENTA
ENDIF
GOTO RANGOTT
RANGOTM:
IF EXIT=0 THEN BREAK
IF HTEMP=0 THEN
GOTO RANGOTT
ENDIF
IF LTEMP=0 THEN
PAUSE 130
IF LTEMP=0 THEN
RANGO = RANGO-1
RL = RANGO
LCDOUT$FE,1,"RANGO DE:"
LCDOUT$FE,$C0,"+/- ",DEC RANGO,"ßC"
IF HTEMP=0 THEN RANGOTT
ENDIF
ENDIF
IF RANGO<=0 THEN
RANGO=255
ENDIF
IF ENTER=0 THEN
RANGO = (RANGO*2)
GOTO CALIENTA
ENDIF
GOTO RANGOTM
CALIENTA:
HIGH HEAT
GOSUB SENSA
LCDOUT$FE,1,"CALENTANDO A:"
LCDOUT$FE,$C0,DEC TL,"ßC ","+/- ",DEC RL,"ßC"
IF SENSOR>MAXTEMP+RANGO THEN
LCDOUT $FE,1
LCDOUT$FE,$C0
GOTO COOL
ENDIF
GOTO CALIENTA
COOL:
LOW HEAT
GOSUB MSJ2
GOSUB SENSA
IF SENSOR<MAXTEMP-RANGO THEN
GOTO CALIENTA
ENDIF
GOTO COOL
SENSA:
FOR i = 0 TO 50
ADCIN TERMO,SENSOR
REF=REF+SENSOR
IF EXIT=0 THEN BREAK
PAUSE 10
NEXT I
SENSOR =REF/50
REF=0
RETURN
PAUS2:
FOR I=0 TO 10
IF HTEMP=0 OR LTEMP=0 THEN
GOTO RANGOTT
ENDIF
PAUSE 150
NEXT I
RETURN
BREAK:
PORTC=0
MAXTEMP=0
RANGO=0
GOTO INICIO
MSJ2:
FOR I=0 TO 22
LCDOUT $FE,$C0
lcdout $fe,$1C, "...ENFRIANDO ESPERE... "
IF SENSOR<MAXTEMP-RANGO THEN
GOTO CALIENTA
ENDIF
PAUSE 300
NEXT I
RETURN
END
y la imagen de como lo conecto en el proto
Las resistencias de los botones son de 330, la del mclr de 10k por sugerencia de una amiga le coloque resistencias de 2.2K entre el pin de RS y E del lcd y el pic. Los capacitores ceramicos son de de 15pF y un crystal de 12.
Pero siempre se resetea, en la simulacion como siempre sirve. ¿Que sera alguien ve algo extrano o mal? Ya cambie de protos de hecho ya use 4