Autor Tema: Control de temperatura 16f877a+pt100... rarìsimo  (Leído 6747 veces)

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

Desconectado Nadiazul

  • PIC10
  • *
  • Mensajes: 11
Control de temperatura 16f877a+pt100... rarìsimo
« en: 14 de Junio de 2009, 13:21:20 »
Hola
Mi proyecto es el siguiente:
se desea diseñar un circuito de control de temperatura con el sensor pt100, que disponga de visualizacion en LCD, un teclado y salida a potencia de un cooler y un heater, de manera que se pueda establecer la temperatura a la que se kiere llegar mediante ingreso por teclado.

Bueno este es mi progreso hasta ahora:
La etapa en que se adecua la señal para ingresarla al pic està terminada y probada, el rango de temperatura es de 20 a 80 grados, que al pic le significan 0 a 5 voltios. La conversion adc de la señal està lista y e igual manera la visualización en el LCD.

Hice el còdigo en Microcode, lo compile y lo probé tanto en simulación como en la realidad con resultados satisfactorios.

Después de eso me enfoque a hacer el resto de programa del control, la lectura de teclado y para fines de prueba encender unos leds si lo que correspondia hacer dependiendo del valor ingresado por teclado era calentar o enfriar la temperatura de lo que se mide.

Bueno, estuve realizando el código en mi portátil todo el tiempo, pero al momento de cargar el .hex en el pic de la simulación se demoraba mucho en correr, me daban unos errores extraños en la simulación y cada vez que se realiaba una acción (como aumentar la temperatura, presionar una tecla del teclado, etc) se colgaba el proteus.
Al final y para mi completo horror, mi portátil colapso y no se quiso encender en un buen tiempo.
Asumí que era n virus y decidí seguir trabajando en la computadora grande.
Pero ahora, que compilo el progarma ni siquiera funciiona, al momento de corer la simulación el proteus se cuelga.
Primero probé el prgrama que tenia inicialmente, sólo la visualización de la temperatura en el lcd, con el .hex q ya tenía compilado y funcionó perfectamete.
Después, compilé el mismo programa pero en la computadora grande y no funciono, volví a hacer el programa de contro completo e igual no funciona.

No sé por que se cuelga el proteus, no se si es algún virus, o errores en el código, quisiera saber si me pueden decir de dònde surge mi problema, estoy muy preocupada y ya no sé que se puede hacer.

Adjunto mi circuito y el código del programa, en el circuito hay un montón de 741`s jeje... Lo que pasa es q la señal se debe convertir de 0-5V luego de 4-20ma y de nuevo a 0-5v... sólo por fines didácticos. De todos modos estoy segura de que ese no es el problema.



'****************************************************************
adc_rd var word
NUMERO VAR BYTE     ;variable numero para almacenar la tecla pulsada
R VAR BYTE          ;variable r para hacer repeticiones
TEMP1 VAR BYTE     
TEMP2 VAR BYTE   

HEATER VAR PORTB.0 
COOLER VAR PORTB.1 
           
A VAR PORTD.0       ;nombres para los pines de las filas
B VAR PORTD.1
C VAR PORTD.2
D VAR PORTD.3

UNO VAR PORTD.4    ;nombres para los pines de las columnas
DOS VAR PORTD.5
TRES VAR PORTD.6
CUATRO VAR PORTD.7

DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 2
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 3

define adc_bits 8
define adc_clock 3
define adc_sampleus 50

g con 223   'constante del sìmbolo de grados

ADCON1 = %00001110  'A2 como bit de entrada análoga
TRISA  = %1         'Puerto A de entrada
TRISD  = %1         'Puerto D de entrada

inicio:
INTCON = 0 'sin interrupciones
lcdout $fe, 1  'limpiar display
LCDOUT $FE, $0C  'apagar cursor
LCDOUT $FE, 2," Control  Temp. "
LCDOUT $FE, $C0,"Ochoa Palacios"
pause(1000)
lcdout $fe, 1  'limpiar display

while (1)
adcin 0,adc_rd 'leer del bit 0 del puerto A y guardar dato analogo en ADCIN
LCDOUT $FE, 2," Control  Temp. "
LCDOUT $FE, $C0,"Temp.:"
LCDOUT $FE, $CB,dec(((60*(adc_rd))/255)+20)
LCDOUT $FE, $CD,g
pause 1000
GOSUB teclado       ;ir a TECLAUNO
wend

TECLADO:
    GOSUB BARRIDO               ;ir a barrido y retornar con un valor
    GOSUB ESPACIO       ;envía a un programa antirrebote para soltar tecla
 IF NUMERO = 13 THEN GOSUB MENU   
    RETURN

MENU:
lcdout $fe, 1  'limpiar display
LCDOUT $FE, $0C  'apagar cursor
LCDOUT $FE, 2,  "Ingrese temp.:"
gosub BARRIDO
gosub espacio
TEMP1=NUMERO*10 'EL PRIMER NÚMERO INGRESADO POR TECLADO
gosub BARRIDO
gosub espacio
TEMP2=NUMERO+TEMP1 'EL SEGUNDO NÚMERO INGRESADO POR TECLADO COMPONE LA TEMPERATURA DESEADA
LCDOUT $FE, $C1,#TEMP2
LCDOUT $FE, $CD,g 'PRESENTAR EN PANTALLA
'GOSUB CONTROL
RETURN

'CONTROL:
'adcin 0,adc_rd 'leer del bit 0 del puerto A y guardar dato analogo en ADCIN
'IF (((60*(adc_rd))/255)+20)>TEMP2 GOSUB ENFRIAR 'se que esto esta mal lo puse solo por referencia
'IF (((60*(adc_rd))/255)+20)<TEMP2 GOSUB CALENTAR
'RETURN
   
BARRIDO:
   
    HIGH A                                  ;sensar la fila A
    IF UNO    = 1 THEN NUMERO =1 :RETURN   ;tecla pulsada retorne con variable cargada con 1     
    IF DOS    = 1 THEN NUMERO =2 :RETURN   ;tecla pulsada retorne con variable cargada con 2   
    IF TRES   = 1 THEN NUMERO =3 :RETURN   ;tecla pulsada retorne con variable cargada con 3 
    IF CUATRO = 1 THEN NUMERO =10:RETURN   ;tecla pulsada retorne con variable cargada con 10
    LOW A
     
    HIGH B                                  ;sensar la fila B
    IF UNO    = 1 THEN NUMERO =4 :RETURN     
    IF DOS    = 1 THEN NUMERO =5 :RETURN     
    IF TRES   = 1 THEN NUMERO =6 :RETURN     
    IF CUATRO = 1 THEN NUMERO =11:RETURN   
    LOW B
       
    HIGH C                                  ;sensar la fila C
    IF UNO    = 1 THEN NUMERO =7 :RETURN     
    IF DOS    = 1 THEN NUMERO =8 :RETURN     
    IF TRES   = 1 THEN NUMERO =9 :RETURN     
    IF CUATRO = 1 THEN NUMERO =12:RETURN   
    LOW C
   
    HIGH D                                  ;sensar la fila D
    IF UNO    = 1 THEN NUMERO =14:RETURN   
    IF DOS    = 1 THEN NUMERO =0 :RETURN   
    IF TRES   = 1 THEN NUMERO =15:RETURN   
    IF CUATRO = 1 THEN NUMERO =13:RETURN   
    LOW D
     
    pause 10
    GOTO BARRIDO
   
  ESPACIO:                     ;programa de antirrebote de teclas
    IF UNO    = 1 THEN ESPACIO  ;si la tecla sigue pulsada ir espacio 
    IF DOS    = 1 THEN ESPACIO  ;si la tecla sigue pulsada ir espacio
    IF TRES   = 1 THEN ESPACIO  ;si la tecla sigue pulsada ir espacio
    IF CUATRO = 1 THEN ESPACIO  ;si la tecla sigue pulsada ir espacio
    PAUSE 25
    RETURN 

end