SlideShare una empresa de Scribd logo
1 de 56
Descargar para leer sin conexión
 
 
 
 
 
 
 
 
 
  + La comunicación por el puerto Serie permite ver los valores en el 
ORDENADOR si así lo deseamos al accionar el conmutador.  
  + Se pueden modificar los valores de temperatura mínima y 
máxima de cada sensor desde el PC, para así mantener una histérisis de 
accionamiento de la salida  correspondiente y poder adaptarlo a 
cualquier condición de trabajo  que necesitemos. 
  +  Los  sensores  “DS1621”  leen  desde  (‐55ºC  a  +  125ºC)  con  una 
apreciación de 0,5 ºC. 
                El programa está preparado también para aceptar los sensores 
“DS1624”, cuya apreciación es de 0,1ºC. (Estos no se usan por ser muy 
caros) 
 
ESQUEMA ELECTRÓNICO : en 
PROTEUS y en EAGLE.  
 Diseño placa 
Control de 8 sensores de 
temperatura “DS1621” por bus I2C  
(Joaquín Berrocal Piris) 
 
 
PLACA DE LOS SENSORES DE TEMPERATURA “DS1621” SOBRE EL MACH3 
 
REALIZACIÓN de la  PLACA DE LOS SENSORES con la Máquina de Control Numérico (CNC) 
 
CONSTRUCCIÓN DE LA PLACA DEL CONTROL DE TEMPERATURA CON 8 SENSORES “ DS 1621” 
Proyecto realizado por : JOAQUÍN BERROCAL PIRIS ( Nov 2010 a Marzo 2011) 
RESULTADO FINAL DE FRESADO CON LA (CNC) 
 
IMÁGENES VARIAS DE LA PLACA CONTROLADORA 
 
 
 
 
 
 
MONTAJE DE COMPONENTES 
 
PRIMERAS PRUEBAS 
 
 
PLACA CON EL TRANSFORMADOR DE 220V/ 9V. y los 8 sensores 
 
 
 
 
 
SCL
SDA
SCL
SDA
SCL
SDA
GND
SCL
SDA
GND
SCL
SDA
SCL
SDA
SCL
SDA
GND
GND
GND
GND
SDA
SCL
GND
RB4
RB5
RB6
RB7
RA0
RA2
SCL
SDA
SCL
SDA
RA1_TX_PIC
RA5_RD_PIC
RB0 RB0
RB1
RB1
RA1_TX_PIC
RA5_RD_PIC
RA0
RA2
RB7
RB6
RB5
RB4
9.5
SCL
2
SDA
1
A0
7
TOUT
3
A1
6
A2
5
U1
DS1621
20.0
SCL
2
SDA
1
A0
7
TOUT
3
A1
6
A2
5
U2
DS1621
29.0
SCL
2
SDA
1
A0
7
TOUT
3
A1
6
A2
5
U3
DS1621
40.0
SCL
2
SDA
1
A0
7
TOUT
3
A1
6
A2
5
U4
DS1621
49.0
SCL
2
SDA
1
A0
7
TOUT
3
A1
6
A2
5
U5
DS1621
60.0
SCL
2
SDA
1
A0
7
TOUT
3
A1
6
A2
5
U6
DS1621
69.0
SCL
2
SDA
1
A0
7
TOUT
3
A1
6
A2
5
U7
DS1621
80.0
SCL
2
SDA
1
A0
7
TOUT
3
A1
6
A2
5
U8
DS1621
R3
4k7
R4
4k7
Diseñado por : Joaquín Berrocal Piris
Control de 8 Sensores de Temperatura DS1624 ó DS1621 por Bus I2C
Marzo 2011 www.iesccp.comze.com/index.php
Empiezan a aparecer las Temperaturas a los 13 sgs.
RA0/AN0
2
RA1/AN1
3
RA2/AN2/VREF-/CVREF
4
RA4/T0CKI/C1OUT
6
RA5/AN4/SS/C2OUT
7
OSC1/CLKIN
9
OSC2/CLKOUT
10
RC1/T1OSI/CCP2
12
RC2/CCP1
13
RC3/SCK/SCL
14
RB7/PGD
28
RB6/PGC
27
RB5
26
RB4
25
RB3/PGM
24
RB2
23
RB1
22
RB0/INT
21
RC7/RX/DT
18
RC6/TX/CK
17
RC5/SDO
16
RC4/SDI/SDA
15
RA3/AN3/VREF+
5
RC0/T1OSO/T1CKI
11
MCLR/Vpp/THV
1
U10
PIC16F876A
1
2
3
4
5
6
7
8
20
19
18
17
16
15
14
13
9
10
12
11
U11
LED-BARGRAPH-GRN
R2
350
350
350
350
350
350
350
350
R11
10k
(+) valores al PC para configurar
(-) sólo al LCD no hay comunicación con el PC
100
10k
R14
10k
Mantener pulsado para
desde el PC configurar
las TempMin , TempMax y el Tiempo de Muestreo
RXD
RTS
TXD
CTS
NOTA:
El "DS1621" tienen una apreciación de SÓLO 0.5º
por ello, le pongo a su propiedad "granularity" 0.5
Los "DS1624" SÍ tienen una apreciación de 0.03125º
PERO el "PROTEUS" SÓLO tiene el "DS1621"
Ver NOTA en "Desing>Edit Desing Notes..."
SENSOR "DS1621" Apreciación -> 0.5º
PUERTO SERIE
( HIPERTERMINAL )
D7
14
D6
13
D5
12
D4
11
D3
10
D2
9
D1
8
D0
7
E
6
RW
5
RS
4
VSS
1
VDD
2
VEE
3
LCD1
LM044L LCD 4X20 (4 LÍNEAS x 20 CARACTERES)
R15
10k
PONGO RB3/PGM a PULL-UP. Para evitar se reinicie
al acercar el dedo a RB3/PGM
Reset
11/01/2012 10:08:16 f=0.71 C:MIS PROYECTOSPROYECTOS TEMPERATURA OKARCHIVOS CNC Y EAGLE SENSORES DS1621 PARA LCDCNC 3 PASADAS 100X108para 0,4
RESET
RA0
RA2
RB4
RB5
RB6
RB7
+LED
VSS
VDD
VEE
RS
RW
E
D0
D1
D2
D3
D4
D5
D6
D7
RB7
RB6
RB5
RB4
RC7
RC6
RC5
RC4
RC3
RC2
RC1
RC0
LCD 4X16 ó LCD 4X20
Comandos para situar el cursor en el Inicio de Línea
LCD 4X16
Línea1; 0x 80 b'1000 0000'
Línea 2; 0x C0 b'1100 0000'
Línea3; 0x 90 b'1001 0000'
Línea4; 0x D0 b'1101 0000'
Línea 1 0x 80 b'1000 0000'
Línea 2; 0x C0 b'1100 0000'
Línea 3; 0x 94 b'1001 0100'
Línea 4; 0x D4 b'1101 0100'
LCD 4X20
CONEXIÓN SENSORES TEMPERATURA
"DS1621 ó DS1624"
SDA-RA4
SCL-RA3
SDA-RA4
SDA-RA4
SDA-RA4
SCL-RA3
SCL-RA3
SCL-RA3
SDA-RA4
Mantener Pulsado para
desde el PC configurar
las TempMin,TempMax
RC0
RC7
SDA-RA4
SCL-RA3
SDA-RA4
SDA-RA4
SDA-RA4
SCL-RA3
SCL-RA3
RB1y el Tiempo de Muestreo
RB0
RB1
RB0
RB1
(+) Valores al PC para configurar
(-) Solo al LCD NO Comunica con PC
RA5_RD_PIC
RA1_TX_PIC
RS232
EnelEAGLE:Con-subdF09HP
Patilla3:TxD
Patilla2:RxD
RxD
TxD
(+ 16) y (- 15)
SDA-RA4
SCL-RA3
RA0
RA1_TX_PIC
RA5_RD_PIC
RA2
BUS I2C
BUSI2C
RB0
RB1
Realizado con "Invoque"
ON +
OFF (-)
Salidas; Activadas si los Sensores 1 al 8
superan la temperatura establecida
Led1 se activa si Sensor 1 está entre su
TempMin y TempMax establecida.
La histérisis de activación es de Abajo arriba, es decir,
Led1 estará activo si la temperatura a ascendido
desde la TempMi a la TempMax
pero no se activará si estaba por encima de la TempMax
hasta que baje de la TempMin y vuelva a ascender
Y así con todos los demás Sensores y Leds.
EAGLE;(EI42-1)-->TRANSF ENCAPSULADO :(TR9V6VA)
220 VOLT ALTERNA
9VOLCC6VA
Puentes para utilizar o no
el transformador como alimentación
>=9 Vcc
Tx el Pic Transmite "Rojo"
Rx el Pic Recibe "Verde"
LEDS de 3 mm
(SDA)
(SCL)
(-)
(+)
Pull Up RB3.
Evita se reinicia
tocar patilla RB3
MCLR-RESET
MCLR-RESET
PIC16876P
>= 9 VCC
400
220 uF 220 uF
GND
+5V
+12V
4MHZ
15pF15pF
400
400
400
400
400
400
400
GND
10010K+5V
GND
GND
470 k
+5V
GND
GND
+5V
+5V
4K7
4K7
+5V
GND
GND
+5V
GND
10K
10K
+5V
GND
GND
MAX232
1uF1uF
1uF
1uF
100n
GND
+5V
GND
+5V
GND
TL36PO
1K
220 VAC
470
470
+5V
10K+5V
MCLR/THV1
RA0/AN02
RA1/AN13
RA2/AN24
RA3/AN35
RA4/T0CKI6
RA5/AN47
OSC1/CLKIN9
OSC2/CLKOUT10
RC0/T1OSO11
RC1/T1OSI12
RC2/CCP113
RC3/SCK14
SDI/RC4 15
SDO/RC5 16
RC6 17
RC7 18
8
20
INT/RB0 21
RB1 22
RB2 23
PGM/RB3 24
RB4 25
RB5 26
PGC/RB6 27
PGD/RB7 28
19
IC1
VDD
VSS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
JP1
3 1
24
S1
3 1
24
S4
X1-1
X1-2
IC2
GND
IN OUT
LED1
R1
C1 C2
Q1
C3C4
LED2
LED3
LED4
LED5
LED6
LED7
LED8
R2
R3
R4
R5
R6
R7
R8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
JP2
R9R10
C5
1
2
3
4
5
6
7
8
JP3
R11
R12
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
JP4
R13
R14
1
6 2
7 3
8 4
9 5
X2
C1+1
C1-3
C2+4
C2-5
T1IN11
T2IN10
R1OUT12
R2OUT9
V+ 2
V- 6
T1OUT 14
T2OUT 7
R1IN 13
R2IN 8
IC4
1615
GNDVCC
IC4P
C7C8
C9
C10
C11
2
3
1
S3
LED9
1
5
7
9
TR1
1
2
JP5
1
2
JP6
X3-1
X3-2
LED10 R16
LED11 R17
R18
Autor: Joaquín Berrocal Piris
+
+
+
+
+
+
PRI
SEC
In 0
I/O 0
I/O 0
I/O 0
I/O 0
I/O 0
I/O 0
In 0
Out 0
I/O 0
I/O 0
I/O 0
I/O 0
I/O 0
I/O 0
I/O 0
I/O 0
Pwr0
Pwr0
I/O 0
I/O 0
I/O 0
I/O 0
I/O 0
I/O 0
I/O 0
I/O 0
Pwr0
Pas0
Pas0
Pas0
Pas0
Pas0
Pas0
Pas0
Pas0
Pas0
Pas0
Pas0
Pas0
Pas0
Pas0
Pas0
Pas0
Pas 2 Pas 1
Pas 1Pas 2
Pas 2 Pas 1
Pas 1Pas 2
Pas 0
Pas 0
In 0
In0
Pas 0
Pas0Pas0Pas1Pas1
Pas0Pas0
Pas0Pas0
Sup0
Sup0
Sup0
Pas1Pas112
Pas 1 Pas 1
Pas 1 Pas 1
Pas0Pas0
Pas0Pas0
Pas0Pas0
Pas0Pas0
Pas0Pas0
Pas0Pas0
Pas0Pas0
Pas1Pas1
Pas1Pas1
Pas1Pas1
Pas1Pas1
Pas1Pas1
Pas1Pas1
Pas1Pas1
Sup0
Pas 0
Pas 0
Pas 0
Pas 0
Pas 0
Pas 0
Pas 0
Pas 0
Pas 0
Pas 0
Pas 0
Pas 0
Pas 0
Pas 0
Pas 0
Pas 0
Pas1Pas1Pas1Pas1Sup0
Sup0
Sup0
Pas1Pas1
Sup0
Sup0
Sup0
Sup0
Pas0
Pas0
Pas0
Pas0
Pas0
Pas0
Pas0
Pas0
Sup0
Pas1Pas1
Pas1Pas1
Sup0
Pas 0
Pas 0
Pas 0
Pas 0
Pas 0
Pas 0
Pas 0
Pas 0
Pas 0
Pas 0
Pas 0
Pas 0
Pas 0
Pas 0
Pas 0
Pas 0
Sup0
Sup0Sup0
Sup0
Pas1Pas1
Pas1Pas1
Sup0
Sup0
Pas 0
Pas 0 Pas 0
Pas 0 Pas 0
Pas 0 Pas 0
Pas 0 Pas 0
Sup0
I/O 0
I/O 0
I/O 0
I/O 0
In 0
In 0
Out 0
Out 0
I/O 0
I/O 0
Out 0
Out 0
In 0
In 0 Pwr0Pwr0
Pas 0 Pas 0
Pas 0 Pas 0
Pas 0Pas 0
Pas 0 Pas 0
Pas 1Pas 1
Sup0
Sup0
Sup 0
Sup0Sup0
Pas 0
Pas 0
Pas 0
Pas0Pas0Pas1Pas1
Pas 1
Pas 1
Pas 2
Pas 2
Pas0
Pas0Pas0
Pas0
Pas 0
Pas 0
Pas 0Pas 0 Pas 1Pas 1
Pas 0Pas 0 Pas 1Pas 1
Sup0
Pas1Pas1Sup0
11/01/2012 9:21:50 C:MIS PROYECTOSPROYECTOS TEMPERATURA OKARCHIVOS CNC Y EAGLE SENSORES DS1621
SDA
SCL
-
+
FaltapuentearconSCL
12
1 5
96
2,54
F09
P1
S1
EI42-1
1 2
12
34
12
34
-I O
- +
IC1
JP1
S1
S4
X1
IC2
LED1
R1
C1
C2
Q1
C3
C4
LED2
LED3
LED4
LED5
LED6
LED7
LED8
R2
R3
R4
R5
R6
R7
R8
JP2
R9
R10
C5
JP3
R11
R12
JP4
R13R14
X2
IC4
C7
C8
C9
C10
C11
S3
LED9
R15
TR1JP5JP6
X3
LED10
R16
LED11
R17
R18
PIC16876P
>= 9 VCC
7805
400
220 uF
220 uF
4MHZ
15pF
15pF
400
400
400
400
400
400
400
100
10K
470 k
4K7
4K7
10K
10K
MAX232
1 uF
1 uF
1 uF
1 uF
100n
TL36PO
1K
220 VAC
470
470
10K
11/01/2012 9:10:33 C:MIS PROYECTOSPROYECTOS TEMPERATURA OKARCHIVOS CNC Y EAGLE SENSORES DS1621
SDA
SCL
-
+
FaltapuentearconSCL
12
1 5
96
2,54
F09
P1
S1
EI42-1
1 2
12
34
12
34
-I O
- +
IC1
JP1
S1
S4
X1
IC2
LED1
R1
C1
C2
Q1
C3
C4
LED2
LED3
LED4
LED5
LED6
LED7
LED8
R2
R3
R4
R5
R6
R7
R8
JP2
R9
R10
C5
JP3
R11
R12
JP4
R13R14
X2
IC4
C7
C8
C9
C10
C11
S3
LED9
R15
TR1JP5JP6
X3
LED10
R16
LED11
R17
R18
PIC16876P
>= 9 VCC
7805
400
220 uF
220 uF
4MHZ
15pF
15pF
400
400
400
400
400
400
400
100
10K
470 k
4K7
4K7
10K
10K
MAX232
1 uF
1 uF
1 uF
1 uF
100n
TL36PO
1K
220 VAC
470
470
10K
11/01/2012 9:20:24 C:MIS PROYECTOSPROYECTOS TEMPERATURA OKARCHIVOS CNC Y EAGLE SENSORES DS1621
SDA
SCL
-
+
FaltapuentearconSCL
12
1 5
96
2,54
F09
P1
S1
EI42-1
1 2
12
34
12
34
-I O
- +
IC1
JP1
S1
S4
X1
IC2
LED1
R1
C1
C2
Q1
C3
C4
LED2
LED3
LED4
LED5
LED6
LED7
LED8
R2
R3
R4
R5
R6
R7
R8
JP2
R9
R10
C5
JP3
R11
R12
JP4
R13R14
X2
IC4
C7
C8
C9
C10
C11
S3
LED9
R15
TR1JP5JP6
X3
LED10
R16
LED11
R17
R18
PIC16876P
>= 9 VCC
7805
400
220 uF
220 uF
4MHZ
15pF
15pF
400
400
400
400
400
400
400
100
10K
470 k
4K7
4K7
10K
10K
MAX232
1 uF
1 uF
1 uF
1 uF
100n
TL36PO
1K
220 VAC
470
470
10K
11/01/2012 9:19:38 C:MIS PROYECTOSPROYECTOS TEMPERATURA OKARCHIVOS CNC Y EAGLE SENSORES DS1621
SDA
SCL
-
+
FaltapuentearconSCL
12
1 5
96
2,54
F09
P1
S1
EI42-1
1 2
12
34
12
34
-I O
- +
IC1
JP1
S1
S4
X1
IC2
LED1
R1
C1
C2
Q1
C3
C4
LED2
LED3
LED4
LED5
LED6
LED7
LED8
R2
R3
R4
R5
R6
R7
R8
JP2
R9
R10
C5
JP3
R11
R12
JP4
R13R14
X2
IC4
C7
C8
C9
C10
C11
S3
LED9
R15
TR1JP5JP6
X3
LED10
R16
LED11
R17
R18
PIC16876P
>= 9 VCC
7805
400
220 uF
220 uF
4MHZ
15pF
15pF
400
400
400
400
400
400
400
100
10K
470 k
4K7
4K7
10K
10K
MAX232
1 uF
1 uF
1 uF
1 uF
100n
TL36PO
1K
220 VAC
470
470
10K
OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera
;******************************* Control_I2C_8_Sensores_Temperatura.asm ************************
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; Realizado por JOAQUÍN BERROCAL PIRIS en marzo de 2011
;+++++++++++++++++++++++ ¡¡ PARA EL LCD 20X4 !!+++++++++++++++++++++++++++
;-------LE HE AÑADIDO LA LIBRERÍA LCD 4X20.INC-------
; ESTOY UTILIZANDO EL PIC16F876A
;+Programa de control DE 8 SENSORES DE TEMPERATURA DS1624 ó el DS1621
;+VISUALIZACIÓN SOBRE LCD 4X16 LÍNEAS Y TAMBIÉN SI QUEREMOS SOBRE PC A TRAVÉS DE PUERTO SERIE
RS232.
;+DESDE EL PC (hiperterminal) se pueden configurar las TempMín y TempMax de cada sensor
;+Si la temperatura del sensor es inferior a la TempMáx configurada para él, se activará la
salida correspondiente.
;OBSERVACIÓN:
;LO TENGO PREPARADA CON UNA HISTÉRISIS PARA EVITAR CONSTANTE ACTIVACIONES Y DESACTIVACIONES.
; PARA ELLO POR EJEMPLO SI CONFIGURO EL SENSOR 1 con una TempMi---> 10ºC y la TempMax a 12ºC.
;su salida estará activa (RC0), SI ES INFERIOR A < 12ºC "PERO TIENE QUE EMPEZAR A ACTIVARSE POR
DEBAJO DE LA TempMin establecida en este caso 10ºC
;de lo contrario hasta que no descienda de la temperatura TempMin 10º no se volverá a activar
;Conclusión; mantiene activa la salida si la temperatura del sensor es < TempMin y < TempMax y
para poder estar activa debe encontrarse inicialmente
;por debajo de la TempMin o bien descender por debajo de dicha temperatura. De esta manera se
consigue una correcta HISTÉRISIS DE ACTIVACIÓN.
;
;
;PARA SIMULARLO EN PROTEUS USAR EL DS1621 funciona igual,SOLO QUE ÉSTE LA APRECIACION ES DE
0.5ºC.
;(CON EL "DS1624" SE CONSIGUIRÍA UNA APRECIACIÓN DE 0.1º SEGÚN LA TABLA DE CONVERSIÓN QUE TENGO
EN el comienzo del programa **.asm)
;visualizarlo sobre LCD una LCD 4X16 .También se podría hacer sobre LCD 2x16 ligeros cambios
;++++++++++++++++++++++++++++++OBSERVACIÓN FINAL+++++++++++++++++++++++++++++++++++++
;TENGO MUCHAS INSTRUCCIONES ANULADAS CON ";" PERO LAS DEJO POR POSIBLES REFORMAS A FUTURO
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;
; ZONA DE DATOS **********************************************************************
LIST P=16F876A
INCLUDE <P16F876A.INC>
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
CBLOCK 0x20
;para guardar temporalmente la temperatura de los sensores y poder reflejarlas en la pantalla
todas a la vez
TempSensor_0
TempSensor_1
TempSensor_2
TempSensor_3
TempSensor_4
TempSensor_5
TempSensor_6
TempSensor_7
TempSigno_0
TempSigno_1
TempSigno_2
TempSigno_3
TempSigno_4
TempSigno_5
TempSigno_6
TempSigno_7
; para guardar el valor decimal redondeado a un sólo dígito.
DS1624_Decimal_0
DS1624_Decimal_1
DS1624_Decimal_2
1
OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera
DS1624_Decimal_3
DS1624_Decimal_4
DS1624_Decimal_5
DS1624_Decimal_6
DS1624_Decimal_7
; FlagSaltarElReturn ;Para poder hacer el parpadeo de "Leyendo Sensores": LO SUPRIMO
POR NO UTILIZARLO
;para recoger las Temperaturas mínimas y máximas de cada Sensor entre las que estará
;activa la salida a relé indicadO.
TempMin_0
TempMax_0
TempMin_1
TempMax_1
TempMin_2
TempMax_2
TempMin_3
TempMax_3
TempMin_4
TempMax_4
TempMin_5
TempMax_5
TempMin_6
TempMax_6
TempMin_7
TempMax_7
ENDC
;------------------------------------------
RetornoCarro EQU .13 ; Código de tecla "Enter" o "Retorno de Carro".
CambioLinea EQU .10 ; Código para el cambio de línea.
;;TabuladorH EQU .9 ;Código para un salto de tabulador horizontal
;;TabuladorV EQU .11 ;Código para tabulador Vertical y poder así borrar lo escrito en
el PC
;;InicioCabecera EQU .1
;;BorrarPC EQU .127 ;DEL borrar
;ESTOS SOBRAN PERO LOS DEJO DE MOMENTO
;;#DEFINE Entrada0 PORTB,4 ; Define dónde se sitúan las entradas.
;;#DEFINE Entrada1 PORTB,5
;;#DEFINE Entrada2 PORTB,6
;;#DEFINE Entrada3 PORTB,7
;-----------------------------------------
; *******************************ZONA DE CÓDIGOS *************************************
ORG 0
goto Inicio ;Pone la línea 1 y 2 con las iniciales de T1: T2: T3: t4:
Mensajes ; Los mensajes no deben sobrepasar las 256
addwf PCL,F ; primeras posiciones de memoria de programa.
MensajeEnBlanco
DT " ", 0x00 ;Lo utilizo por si falla un Sensor aparezca en blanco su valor en lugar de
:-0º
MensajeGradoCentigrado
DT "º", 0x00 ; En la pantalla: "ºC" "C" Se puede suprimir para que quepa un
2
OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera
decimal
;PARA REFLEJAR EN LCD T1: a T8:
T1
DT "T1:",0x00
T2
DT "T2:",0x00
T3
DT "T3:",0x00
T4
DT "T4:",0x00
T5
DT "T5:",0x00
T6
DT "T6:",0x00
T7
DT "T7:",0x00
T8
DT "T8:",0x00
Espere
DT " ESPERE", 0x00 ;LE AÑADO DOS ESPACIOS PARA EL LCD 20X4.Para poner en la línea 1 DT "
ESPERE ", 0x00
Leyendo_Sensores ;Mensaje de Espera a leer los 8 sensores aprox 9 sgs
DT " Leyendo Sensores", 0x00 ;LE AÑADO DOS ESPACIOS PARA EL LCD 20X4
;UTILIZO ESTOS MENSAJES PARA VERLOS UNO DEBAJO DEL OTRO YA QUE EN EL HIPERTERMINAL DEL "PROTEUS"
No actúa el Tabulador y
;se ven todas las temperaturas una detrás de la otra sin tabulación
MensajesAlPC_PROGRAMAR ;Lo primero que sale si tengo comunicación con el PC
interruptor RB0 = 1
DT CambioLinea,RetornoCarro
DT "PROGRAMAR:",0x00
;------PARA REDUCIR POSICIONES DE LAS 256 POSIBLES---
MensajesAlPC_SENSOR ;VALOR "SENSOR " global para todos los sensores AÑADIRLE después el número
DT CambioLinea,RetornoCarro,RetornoCarro
DT "SENSOR ",0x00
MensajesAlPC_Sensor1
DT "1: ",0x00
MensajesAlPC_Sensor2
DT "2: ",0x00
MensajesAlPC_Sensor3
DT "3: ",0x00
MensajesAlPC_Sensor4
DT "4: ",0x00
MensajesAlPC_Sensor5
DT "5: ",0x00
MensajesAlPC_Sensor6
DT "6: ",0x00
MensajesAlPC_Sensor7
DT "7: ",0x00
MensajesAlPC_Sensor8
DT "8: ",0x00
;-------------------------------------------------------------------------------------------------
--
MensajeAlPC_Tmin
DT CambioLinea,RetornoCarro,RetornoCarro ;DT RetornoCarro
DT "Tmin: ",0x00
MensajeAlPC_Tmax
DT CambioLinea,RetornoCarro,RetornoCarro ;DT RetornoCarro
DT "Tmax: ",0x00
3
OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera
SELECCION_1 ;Para indicar en el PC "SELECCIONADO: 1 = 10 Sg"
DT " 10 Sg",0x00
SELECCION_2 ;Para indicar en el PC "SELECCIONADO: 1 = 10 Sg"
; DT RetornoCarro
DT " 20 Sg",0x00; DT "SELECCIONADO: 2 = 20 Sg",0x00
SELECCION_3 ;Para indicar en el PC "SELECCIONADO: 1 = 10 Sg"
; DT RetornoCarro
DT " 1 Min",0x00 ;DT "SELECCIONADO: 3 = 1 Min",0x00
MensajesAlPC_Tiempo_Muestreo ;SELECCIONAR TIEMPO DE MUESTREO: 1 = 10 Sg 2 = 20 Sg 3 = 30 Sg
DT CambioLinea, RetornoCarro,RetornoCarro
DT "SELECCIONAR TIEMPO DE MUESTREO : "
DT CambioLinea, RetornoCarro,RetornoCarro
DT "1 = 10 Sg"
DT CambioLinea, RetornoCarro
DT "2 = 20 Sg"
DT CambioLinea,RetornoCarro
DT "3 = 1 Min"
DT CambioLinea,RetornoCarro,0x00 ;para dejar una separación en el PC
Elegido
DT "ELEGIDO", 0x00 ;Para poner en la línea 1 DT " ESPERE ", 0x00
;Subrutina "DS1624_RedondeaDecimal" ----------------------------------------------------
;Esta rutina NO LA PUEDO DEJAR en "DS1624_Modificado_0.INC" por tener problemas en su lectura
probablemente por la
;distancia. Aquí no da problemas
; Esta subrutina redondea el valor del contenido del registro de trabajo W al valor más cercano
; con un decimal indicado en una tabla.
;
;ESTA TABLA ESTÁ PENSADA PARA EL SENSOR "DS1624" Que tiene una apreciación de 0,03125º
;NO PARA EL SENSOR "DS1621" el cual su apreciación es de 0,5º
;no obstante la dejo integra por posible uso a futuro con un DS1624
DS1624_RedondeoDecimal
addwf PCL,F ;LO MISMO ES PONER "F" QUE "1"
retlw d'0' ;0; (DS1624_Decimal)=b'0000'. Mide 0,0000ºC. Redondeado a 0,0ºC.
retlw d'1' ;1; (DS1624_Decimal)=b'0001'. Mide 0,0625ºC. Redondeado a 0,1ºC.
retlw d'1' ;2; (DS1624_Decimal)=b'0010'. Mide 0,1250ºC. Redondeado a 0,1ºC.
retlw d'2' ;3; (DS1624_Decimal)=b'0011'. Mide 0,1875ºC. Redondeado a 0,2ºC.
retlw d'3' ;4; (DS1624_Decimal)=b'0100'. Mide 0,2500ºC. Redondeado a 0,3ºC.
retlw d'3' ;5; (DS1624_Decimal)=b'0101'. Mide 0,3125ºC. Redondeado a 0,3ºC.
retlw d'4' ;6; (DS1624_Decimal)=b'0110'. Mide 0,3750ºC. Redondeado a 0,4ºC.
retlw d'4' ;7; (DS1624_Decimal)=b'0111'. Mide 0,4375ºC. Redondeado a 0,4ºC.
retlw d'5' ;8; (DS1624_Decimal)=b'1000'. Mide 0,5000ºC. Redondeado a 0,5ºC.;Este es el
único valor utilizado para el DS1621
retlw d'6' ;9; (DS1624_Decimal)=b'1001'. Mide 0,5625ºC. Redondeado a 0,6ºC.
retlw d'6' ;10 (DS1624_Decimal)=b'1010'. Mide 0,6250ºC. Redondeado a 0,6ºC.
retlw d'7' ;11 (DS1624_Decimal)=b'1011'. Mide 0,6875ºC. Redondeado a 0,7ºC.
retlw d'8' ;12 (DS1624_Decimal)=b'1100'. Mide 0,7500ºC. Redondeado a 0,8ºC.
retlw d'8' ;13 (DS1624_Decimal)=b'1101'. Mide 0,8125ºC. Redondeado a 0,8ºC.
retlw d'9' ;14 (DS1624_Decimal)=b'1110'. Mide 0,8750ºC. Redondeado a 0,9ºC.
retlw d'9' ;15 (DS1624_Decimal)=b'1111'. Mide 0,9375ºC. Redondeado a 0,9ºC.
DS1624_FinTablaRedondeo
IF (DS1624_FinTablaRedondeo > 0xFF)
; ERROR "¡CUIDADO!" ;;;"¡CUIDADO!: La tabla ha superado el tamaño de la página de los"
; MESSG "Error";;;"primeros 256 bytes de memoria ROM. NO funcionará correctamente."
4
OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera
bsf PORTC,6 ;ACTIVOLA SALIDA 7
ENDIF
; ---------Subrutina "Inicio" --------------------------
Inicio
;-----Para el pic16f876a puerta A E/S digitales--------
bsf STATUS,RP0 ;Selección Banco 1
movlw b'00000011' ;PUERTA B como Salida PERO
movwf TRISB ;RBO Y RB1 COMO ENTRADA. Una para no tener comunicación con el PC y
la otra para obligar a PROGRAMAR
;;; clrf TRISB ;PUERTA B como Salida PERO
;;; bsf TRISB,0 ;RB0 lo configuro como ENTRADA para tener o no comunicación con el
PC a través del interruptor conectado al RB0
;comunicación con el PC y LCD ->RB0 = 1. SÓLO LCD -> RB0 = 0
;; bsf TRISB,1
clrf TRISC ;PUERTA C como Salida
movlw b'00000110' ;PUERTAA E/S Digitales
movwf ADCON1
; movlw b'00011111' ;La PUERTAA se configura como Entrada
; movwf TRISA ;NO ES NECESARIO. configurarlo
bcf STATUS,RP0 ;Vuelta al BANCO 0
;INICIA LOS PUERTOS APAGANDO TODAS SUS SALIDAS
clrf PORTB
clrf PORTC
clrf Flag_No_Repetir_Programar
clrf FlagValorNegativo ;reseteo el flag
;PARA PONER A CERO TODOS ESTOS REGISTROS
clrf TempSensor_0
clrf TempSensor_1
clrf TempSensor_2
clrf TempSensor_3
clrf TempSensor_4
clrf TempSensor_5
clrf TempSensor_6
clrf TempSensor_7
;---------------------------------
clrf Flag_Es_Negativo ;reiniciar aquí el flag lo utilizo para suprimir el '.' y la 'º'
si la parte entera tiene
;3 Caracteres incluido del signo (-) y la decimal es .0º
;----------------------------------------------------
;-----------INICIA LA PANTALLA LCD-------------------
;----------------------------------------------------
call LCD_Inicializa ;PARA INICIAR LA LCD
call RS232_Inicializa ;Inicializa la comunicación con el puerto Serie. RA1=TX y
RA5 = RD (en lugar de RA3 y RA4
;----------------------------------------------------
;++++++POR SI SE VA LA LUZ LEER LAS POSICIONES DE 0 A 17 DE LA EEPROM++++++
;++++++++++++para así trabajar con los valores PROGRAMADOS ++++++++++++
;LAS POSICIONES 0 a 17 están recogidas el flag de no reptir programar. Las TempMin y TempMax de
cada SENSOR Y el valor del "TiempoMuestreo"
call EEPROM_Lectura_De_0_a_17 ;;;Rutina en EEPROM_16F87XX.INC;EEPROM_Lectura_De_0_a_17
EEPROM_Lectura_TempMin_a_TempMax ;EEPROM_Lectura_TempMin_a_TempMax Rutina en
5
OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera
EEPROM_16F87XX.INC
Parpadeo ;Fijo el mensaje "ESPERE" y Parpadeante el "Leyendo Sensores"
movlw .5
call LCD_PosicionLinea1 ; primera línea más el valor del registro W
movlw Espere ;Mensaje "ESPERE"
call LCD_Mensaje ;Visualiza el Mensaje
; En la primera línea de la pantalla aparece un mensaje fijo.
call LCD_Linea2 ; Pasa a la segunda línea.
movlw Leyendo_Sensores ; Apunta al mensaje parpadeante. "Leyendo Sensores"
call LCD_Mensaje ; Lo visualiza.
;------ANULO EL PARPADEO-----
;; call Retardo_500ms ; Durante este tiempo.
;; call LCD_Linea2 ; Vuelve a situarse al principio de la línea 2.
;; call LCD_LineaEnBlanco ; Visualiza línea en blanco.Para no ver nada en esa línea y así
producir efecto intermitente
; call Retardo_500ms ; Durante este tiempo, produciendo un efecto de Parpadeo LO
SUPRIMO por
;tener en cada sensor un Call Retardo_1s que se va a mantener
apagado
;++++++SI QUITO LAS DOS INSTRUCCIONES DE ABAJO SE QUEDA PARPADEANDO PERMANENTEMENTE+++++
; btfsc FlagSaltarElReturn,0 ;Si está cargado con valor (0) saltar el Return ya que es la
primera vez
; return ;retorna de cada Sensor_1 al Sensor_7 Si está cargado con valor
1 hacer el return para poder seguir con el parpadeo
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;---------------------------------------------------------------------------
;LECTURA DE LOS SENSORES DE TEMPERATURA
;
Sensor_0
;; bsf FlagSaltarElReturn,0 ;para activar el flag
call DS1624_Inicializa_0 ; Configura el DS1624 e inicia la conversión.
call Retardo_1s ;retardo de 1 segundos
call DS1624_LeeTemperatura ; Lee la temperatura.
; call DS1624_IniciaConversion ;Comienza conversión para la siguiente lectura SI LO
PONGO NO FUNCIONAN NI LOS ENTEROS -8
movwf TempSensor_0 ;lo guardo temporalmente para reflejarlo en la LCD todas las
temperaturas juntas
movf DS1624_Signo,W
movwf TempSigno_0 ;Para guardar temporalmente el signo del sensor 1
;---Para guardar temporalmente el DECIMAL del Sensor_0---
movf DS1624_Decimal,W
movwf DS1624_Decimal_0
;--------------------------------------------------------
;++++INSTRUCCIONES PARA PODER PROGRAMAR LAS TempMin y TempMax y el TiempoMuestreo++++++
btfsc PORTB,1 ;VERIFICA si está PULSADO .No pongo RB1 por no reconocerlo
goto Sensor_1 ;NO ESTÁ PULSADO continuar en "Sensor_0"
call Retardo_20ms ;Espera que se estabilicen los niveles de tensión
btfsc PORTB,1 ;Comprueba si es un Rebote
goto Sensor_1 ;NO ESTÁ PULSADO "Sensor_0"
goto VisualizaTermometro_LCD_0 ;Sí está pulsado
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Sensor_1
;; call Parpadeo
6
OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera
call DS1624_Inicializa_1 ; Configura el DS1624 e inicia la conversión.
call Retardo_1s ;retardo de 1 segundos
call DS1624_LeeTemperatura_1 ; Lee la temperatura.
; call DS1624_IniciaConversion_1 ;Comienza conversión para la siguiente lectura
movwf TempSensor_1 ;lo guardo temporalmente para reflejarlo en la LCD todas las
temperaturas juntas
movf DS1624_Signo,W
movwf TempSigno_1 ;Para guardar temporalmente el signo del sensor 1
;---Para guardar temporalmente el DECIMAL del Sensor_1---
movf DS1624_Decimal,W
movwf DS1624_Decimal_1
;--------------------------------------------------------
Sensor_2
;; call Parpadeo
call DS1624_Inicializa_2 ; Configura el DS1624 e inicia la conversión.
call Retardo_1s ;retardo de 1 segundos
call DS1624_LeeTemperatura_2 ; Lee la temperatura.
; call DS1624_IniciaConversion_2 ;Comienza conversión para la siguiente lectura
movwf TempSensor_2 ;lo guardo temporalmente para reflejarlo en la LCD todas las
temperaturas juntas
movf DS1624_Signo,W
movwf TempSigno_2 ;Para guardar temporalmente el signo del sensor 2
;---Para guardar temporalmente el DECIMAL del Sensor_2---
movf DS1624_Decimal,W
movwf DS1624_Decimal_2
;--------------------------------------------------------
Sensor_3
;; call Parpadeo
call DS1624_Inicializa_3 ; Configura el DS1624 e inicia la conversión.
call Retardo_1s ;retardo de 1 segundos
call DS1624_LeeTemperatura_3 ; Lee la temperatura.
; call DS1624_IniciaConversion_1 ;Comienza conversión para la siguiente lectura
movwf TempSensor_3 ;lo guardo temporalmente para reflejarlo en la LCD todas las
temperaturas juntas
movf DS1624_Signo,W
movwf TempSigno_3 ;Para guardar temporalmente el signo del sensor 3
;---Para guardar temporalmente el DECIMAL del Sensor_0---
movf DS1624_Decimal,W
movwf DS1624_Decimal_3
;--------------------------------------------------------
Sensor_4
;; bsf FlagSaltarElReturn,0 ;para activar el flag
call DS1624_Inicializa_4 ; Configura el DS1624 e inicia la conversión.
call Retardo_1s ;retardo de 1 segundos
call DS1624_LeeTemperatura_4 ; Lee la temperatura.
; call DS1624_IniciaConversion ;Comienza conversión para la siguiente lectura SI LO
PONGO NO FUNCIONAN NI LOS ENTEROS -8
movwf TempSensor_4 ;lo guardo temporalmente para reflejarlo en la LCD todas las
temperaturas juntas
movf DS1624_Signo,W
movwf TempSigno_4 ;Para guardar temporalmente el signo del sensor 4
7
OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera
;---Para guardar temporalmente el DECIMAL del Sensor_0---
movf DS1624_Decimal,W
movwf DS1624_Decimal_4
;--------------------------------------------------------
Sensor_5
;; call Parpadeo
call DS1624_Inicializa_5 ; Configura el DS1624 e inicia la conversión.
call Retardo_1s ;retardo de 1 segundos
call DS1624_LeeTemperatura_5 ; Lee la temperatura.
; call DS1624_IniciaConversion_1 ;Comienza conversión para la siguiente lectura
movwf TempSensor_5 ;lo guardo temporalmente para reflejarlo en la LCD todas las
temperaturas juntas
movf DS1624_Signo,W
movwf TempSigno_5 ;Para guardar temporalmente el signo del sensor 5
;---Para guardar temporalmente el DECIMAL del Sensor_5---
movf DS1624_Decimal,W
movwf DS1624_Decimal_5
;--------------------------------------------------------
;++++INSTRUCCIONES PARA PODER PROGRAMAR LAS TempMin y TempMax y el TiempoMuestreo++++++
btfsc PORTB,1 ;VERIFICA si está PULSADO .No pongo RB1 por no reconocerlo
goto Sensor_6 ;NO ESTÁ PULSADO continuar en "Sensor_0"
call Retardo_20ms ;Espera que se estabilicen los niveles de tensión
btfsc PORTB,1 ;Comprueba si es un Rebote
goto Sensor_6 ;NO ESTÁ PULSADO "Sensor_6"
goto VisualizaTermometro_LCD_0 ;Sí está pulsado
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Sensor_6
;; call Parpadeo
call DS1624_Inicializa_6 ; Configura el DS1624 e inicia la conversión.
call Retardo_1s ;retardo de 1 segundos
call DS1624_LeeTemperatura_6 ; Lee la temperatura.
; call DS1624_IniciaConversion_2 ;Comienza conversión para la siguiente lectura
movwf TempSensor_6 ;lo guardo temporalmente para reflejarlo en la LCD todas las
temperaturas juntas
movf DS1624_Signo,W
movwf TempSigno_6 ;Para guardar temporalmente el signo del sensor 6
;---Para guardar temporalmente el DECIMAL del Sensor_6---
movf DS1624_Decimal,W
movwf DS1624_Decimal_6
;--------------------------------------------------------
Sensor_7
;; call Parpadeo
call DS1624_Inicializa_7 ; Configura el DS1624 e inicia la conversión.
call Retardo_1s ;retardo de 1 segundos
call DS1624_LeeTemperatura_7 ; Lee la temperatura.
; call DS1624_IniciaConversion_1 ;Comienza conversión para la siguiente lectura
movwf TempSensor_7 ;lo guardo temporalmente para reflejarlo en la LCD todas las
temperaturas juntas
movf DS1624_Signo,W
movwf TempSigno_7 ;Para guardar temporalmente el signo del sensor 7
;---Para guardar temporalmente el DECIMAL del Sensor_7---
8
OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera
movf DS1624_Decimal,W
movwf DS1624_Decimal_7
;--------------------------------------------------------
;++++++Primero visualiza todos los sensores desde el 0 al 7 en la LCD+++++
goto VisualizaTermometro_LCD_0 ;EN PANTALLA LCD *ESTE SÍ ESTABA la de arriba y abajo NO
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;*****PARA EVITAR SI ALGÚN SENSOR DEJA DE FUNCIONAR QUE APAREZCA
;*****EN LA PANTALLA EL VALOR -0º. con estas rutinas de más abajo
;*****se consigue que aparezca en blanco el valor.
EliminarMenosCero_0
movlw MensajeEnBlanco ;;Lo utilizo por si falla un Sensor aparezca en blanco su valor en
lugar de :-0º
call LCD_Caracter ;LCD_Mensaje
goto Histerisis_0 ;para que active o desactive la salida en función del valor de
histerisis establecido
;con la TempMini y TempMax
EliminarMenosCero_1
movlw MensajeEnBlanco ;;Lo utilizo por si falla un Sensor aparezca en blanco su valor en
lugar de :-0º
call LCD_Caracter ;LCD_Mensaje
goto Histerisis_1 ;para que active o desactive la salida en función del valor de
histerisis establecido
;con la TempMini y TempMax
EliminarMenosCero_2
movlw MensajeEnBlanco ;;Lo utilizo por si falla un Sensor aparezca en blanco su valor en
lugar de :-0º
call LCD_Caracter ;LCD_Mensaje
goto Histerisis_2 ;para que active o desactive la salida en función del valor de
histerisis establecido
;con la TempMini y TempMax
EliminarMenosCero_3
movlw MensajeEnBlanco ;;Lo utilizo por si falla un Sensor aparezca en blanco su valor en
lugar de :-0º
call LCD_Caracter ;LCD_Mensaje
goto Histerisis_3 ;para que active o desactive la salida en función del valor de
histerisis establecido
;con la TempMini y TempMax
EliminarMenosCero_4
movlw MensajeEnBlanco ;;Lo utilizo por si falla un Sensor aparezca en blanco su valor en
lugar de :-0º
call LCD_Caracter ;LCD_Mensaje
goto Histerisis_4 ;para que active o desactive la salida en función del valor de
histerisis establecido
;con la TempMini y TempMax
EliminarMenosCero_5
movlw MensajeEnBlanco ;;Lo utilizo por si falla un Sensor aparezca en blanco su valor en
lugar de :-0º
call LCD_Caracter ;LCD_Mensaje
goto Histerisis_5 ;para que active o desactive la salida en función del valor de
histerisis establecido
;con la TempMini y TempMax
EliminarMenosCero_6
movlw MensajeEnBlanco ;;Lo utilizo por si falla un Sensor aparezca en blanco su valor en
lugar de :-0º
call LCD_Caracter ;LCD_Mensaje
goto Histerisis_6 ;para que active o desactive la salida en función del valor de
histerisis establecido
;con la TempMini y TempMax
EliminarMenosCero_7
movlw MensajeEnBlanco
call LCD_Caracter ;LCD_Mensaje
goto Histerisis_7 ;**Iniciar ciclo de visualización de los sensores sin repetir T1 a T8
;---------------------------------------------------------------------------
;RUTINAS PARA VISUALIZAR EN PANTALLA LCD y/o HIPERTERMINAL LAS TEMPERATURAS
;DEPENDERÁ DE LA POSICIÓN DEL INTERRUPTOR SE SELECCIÓN (RB0) : SÓLO LCD o bien PC Y LCD par
poder configurar
;---------------------------------------------------------------------------
9
OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera
;-----------------PARA VER EN LCD LA TEMPERATURA DEL Sensor_0---------------------
;-------------------ESTE COMIENZA EN LA LÍNEA 1 posición .3 -------------------------
VisualizaTermometro_LCD_0 ;EN PANTALLA LCD
call LCD_Borra ;Borra toda la pantalla.EVITA que al pasar de 10º a 9º se vea
9ºº SE ENCUENTRA EN LA LIBRERIA "LCD_4BIT_4X16.INC"
call Visualizar_T1_a_T8 ;Para visualizar en la LCD T:1 a T:8 SE ENCUENTRA EN LA
LIBRERIA "Temperatura_a_LCD.INC"
;EVITA que al pasar de XXº a Xº se vean dos grados Xºº
;-------------------------------------------------
; PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC
;-------------------------------------------------
;----Lo primero será ver si DESEO MODIFICAR LA PROGRAMACIÓN DE LOS VALORES-----
;Para ver si modifico los valores de TempMin, TempMax y el Tiempo de Muestreo
;"SI Mantengo Presionado el Pulsador "RB1" A MASA, SÍ DESEO PROGRAMAR."
goto Verificar_Deseo_PROGRAMAR ;esta rutina está en "CONFIGURACION_DESDE_PC.INC"
;según desee PROGRAMAR o No, se irá a "Continuar" o a
"Continuar_1"
;------------------------------------------------------------------------------
Continuar ;NO QUIERO PROGRAMAR. Verificar ahora si deseo llevar también al PC
btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC
goto No_PC_0_1 ;primer salto para evitar el PC
;-------------------------------------------------------------------------------------
;************INICIALIZAR EL PUERTO SERIE comunicación con el PC*******************
;;Continuar_1 ;si mantengo pulsado "RB1" Es porque quiero PROGRAMAR. se vuelve aquí
desde "Borrar_EEPROM"
;PRIMERO COMPRUEBO SI ES LA PRIMERA VEZ QUE SE PROGRAMA SI ES ASÍ PERMITIRLO DE
LO CONTRARIO NO
;PARA ELLO LEER EL FLAG GRABADO EN LE POSICIÓN "0" DE LA EEPROM DONDE GUARDO EL
FLAG CON VALOR 1 DE
;Flag_No_Repetir_Programar
movlw .1
movwf Flag_No_Repetir_Programar ;utilizo el mismo nombre por no utilizar otro registro
clrf EE_Dir ;Posición "0" donde está grabado el Flag en la EEPROM (lo
hice dese la Rutina "PROGRAMAR"
call EEPROM_LeeDato ;lee lo escrito en la posición "0" de la EEprom si ya se
hubiese PROGRAMADO tendrá valor "1"
;----COMPARA SI TIENE VALOR 1 EN CUYO CASO NO VOLVER A PROGRAMAR-----
subwf Flag_No_Repetir_Programar,W ;
btfsc STATUS,Z ;Si Z=1 NO VOLVER A PROGRAMAR. Y SI Z=0 PROGRAMAR es decir
configurar las Tmin y Tmax de cada sensor
goto No_Volver_A_PROGRAMAR ;si quiero volver a programar pulsar el boton de RESET.
;--------------------------------------------------------------------
;+++++PARA BORRAR LO QUE HAYA EN LA PANTALLA DEL PC HIPERTERMINAL++++
;Para ello simplemente salto de página--> decimal; .12
movlw .12 ; Nueva página
call RS232_EnviaDato
call Retardo_200ms ;para que no salga raro la primera vez aunque en las siguientes ok
Continuar_1 ;LO PONGO AQUÍ PARA QUE SIEMPRE TENGA UN RENGLÓN DE SEPARACIÓN Respecto a lo
anterior escrito
movlw .13
call RS232_EnviaDato
10
OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera
call PROGRAMAR ; Rutina de la librería "CONFIGURACION_DESDE_PC.INC"
;escribe en PC ; "PROGRAMAR: SENSOR1: Tmin: Tmax: HASTA EL
SENSOR8: Tmin: Tmax:"
nop
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;------------MENSAJE TIEMPO DE MUESTREO------------------
movlw MensajesAlPC_Tiempo_Muestreo ;carga el Mensaje para visualizar en el PC
call RS232_Mensaje ;Mensaje al PC
call Tiempo_De_Muestreo ;Rutina donde selecciono el valor 1-2-3 del tiempo de muestreo
(1= 10sg)(2=20 Sg)(3 = 1 min)
;y lo guarda en el registro: "TiempoMuestreo" y en EEPROM posición
.17
;--------------------------------------------------------------------------
No_Volver_A_PROGRAMAR ;Este primer corte es para una vez PROGRAMADAS LAS Tmin y Tmax
;No vuelva a salir lo de volver a PROGRAMARLAS
;; call RS232_Inicializa ;Inicializa la comunicación con el
puerto Serie. RA1=TX y RA5 = RD (en lugar de RA3 y RA4
;----No suprimirlo evito que salga "SENSOR 1" SI volviese a PROGRAMAR-----------
btfss PORTB,0 ;Si está a (1) Si llevar datos al PC
goto No_PC_0_1 ;Si está a (0) no llevar al PC
;-------------------------------------------------------------------------------
movlw .13
call RS232_EnviaDato
movlw MensajesAlPC_SENSOR ;carga la primera posición del mensaje "SENSOR "
call RS232_Mensaje ;lo visualiza en el PC
movlw MensajesAlPC_Sensor1 ;carga la primera posición del mensaje "1: "
call RS232_Mensaje ;lo visualiza en el PC
;---------------------------------------
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC
No_PC_0_1 ; éste es el primer salto para no reflejar en PC
;--------------------------------------
; Se coloca para visualización en la T1:XXº T2:
movlw .3 ; Se coloca para visualización en la
call LCD_PosicionLinea1 ; primera línea más el valor del registro W
btfss TempSigno_0,7 ; ¿Temperatura negativa?.
goto TemperaturaPositiva_0 ; No, la temperatura es positiva.
TemperaturaNegativa_0
;Para comprobar que un registro vale (0) hay que cargar el registro sobre sí mismo
;mediante la instrucción (movf)(que es la única que posiciona flags), con lo cual se logra
;posicionar el flag (Z) sin variar su contenido.
;Si el sensor Falla daria -0º y no puede ser. Por tanto para que salga en blanco:
;Compara si el registro vale 0
movf TempSensor_0,F ;para posicionar el flag Z
btfsc STATUS,Z ;¿Es cero?, ¿Z=1? Si Z=1 "el Registro vale 0"
goto EliminarMenosCero_0 ;Si el valor es cero eliminar el menos -0º
;si es Z=0 el registro NO vale 0 por tanto escribir -
;Si el registro No vale Cero ponerle el signo -
movlw '-' ; Visualiza el signo "-" de temperatura negativa.
call LCD_Caracter
;---------------------------------------------------------------------------------------
;activar El "Flag_Es_Negativo" Para ver o no ver el signo 'º' por falta de espacio en LCD
bsf Flag_Es_Negativo,0
11
OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera
;---------------------------------------------------------------------------------------
;_______________________________________________________________________
;++++++++++++++++++++AÑADIDO PARA VER EN EL PC++++++++++++
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC
btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC
goto TemperaturaPositiva_0 ;sólo EN PANTALLA LCD
;PARA LLEVARLO AL PC En negativo
movlw '-' ; Visualiza el signo "-" de temperatura negativa. en el PC
call RS232_EnviaDato
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;______________________________________________________________________________
TemperaturaPositiva_0
movf TempSensor_0,W ; Visualiza el valor absoluto de la temperatura siempre en (+)
call BIN_a_BCD ; pasándola previamente a BCD.
Call Temperatura_En_LCD ;para ver la temperatura suprimiendo el cero no
significativo ej "089" saldrá "89"
;+++++++++++++AÑADIDO PARTE DECIMAL++++++++++++++++
movf DS1624_Decimal_0,F ;para ver si tiene el valor .0º en cuyo caso no visualizarlo
en la LCD por falta de espacio
btfsc STATUS,Z ;Si Z=1 es CERO LA PARTE DECIMAL .0º
goto Decimal_0_Es_Cero ;como es cero NO REPRESENTARLO y ponerle 'º'
;Si Z=0 NO ES CERO y por tanto visualizar el '.' y el 'º'
movlw '.' ; Visualiza el punto decimal.
call LCD_Caracter
movf DS1624_Decimal_0,W ;Visualiza la parte decimal
call LCD_Nibble ;Visualiza en el lugar actual de la pantalla el valor HEXADECIMAL
que almacena el nibble bajo del registro (W). El
;nibble alto en (W) no es tenido en cuenta ej: si (W) = 0101 0110 se
visualiza "6"
; si (W) es 1010 1110, se visualiza "E"
;------------lo he suprimido de la libreria Temperatura_a_LCD.INC-------------
btfsc Flag_TresCaracteres,0 ;Si tiene tres Caracteres la parte entera NO PONER 'º' por
razón de NO TENER espacio
goto Continua_0 ;
;Se representa el signo "º"
Decimal_0_Es_Cero
movlw MensajeGradoCentigrado ; En pantalla aparece "º".
call LCD_Mensaje
;++++++++++++++++++++++++++++++++++++++++++++++++++++
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC
;ACTIVAR LAS SALIDAS comparando con los valores de la EEPROM programados
Continua_0
btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC
goto Histerisis_0 ;para también activar las salidas aún eligiendo solo el LCD sin
PC;;;;; goto VisualizaTermometro_LCD_1 ;EN PANTALLA LCD
;-------------------------------------
movf DS1624_Decimal_0,W ;para poder ver el valor en decimal de cada sensor librería
"temperatura_a_PC.INC"
movwf DS1624_Decimal
;--------------------------------------------------------------
movf TempSensor_0,W ; Visualiza el valor absoluto de la temperatura, en (+)
call Temperatura_En_PC ;Desde aquí se verán las Centanas-Decenas-Unidades en el PC
12
OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera
;---------------------------------------------------------------------------------------
;+++++ACTIVA LA SALIDA CORRESPONDIENTE ENTRE LOS VALORES DE HISTERISIS ESTABLECIDOS++++++
;++++++ENTRE LA TempMin_X y TempMax_X. Es decir sólo activa entre estos valores++++++++
;---------------------------------------------------------------------------------------
Histerisis_0 ;Activar_Desactivar_Salidas
call EEPROM_Lectura_De_0_a_17 ;Esta en "EEPROM_16F87X.INC" para la lectura de los
valores de
;la TempMin y TempMax de cada sensor grabados en
la EEPROM
btfss TempSigno_0,7 ;Si el último bit es un "1" Es una temperatura Negativa.
goto EsPositivo_0
goto EsNegativo_0
EsPositivo_0
movf TempSensor_0,W ;Carga el Valor (+) de la Temperatura en (W)
goto Activar_Desactivar_Salidas_0 ;Se va a Activar o Desactivar la salida
EsNegativo_0
movf GlobalNegativa_0,W ;Carga el Valor (-) de la Temperatura en (W) se encuentra en
libreria "DS1624_Modificado_0.INC"
movwf TempSensor_0 ;y ya en VALOR NEGATIVO lo llevo a TempSensor_0
;goto Activar_Desactivar_Salidas ;Se va a Activar o
Desactivar la salida
;-----está modificado para hacer como en el programa de internet que active por encima de la
tempMin hasta la TempMax pero siempre de abajo a arriba y no al revés
Activar_Desactivar_Salidas_0
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;-----------------------------------------------------------------
;Si la Temperatura del Sensor (TempSensor_x)está por debajo de la TempMin_X estará activa la
Salida. Y se mantendrá activa hasta
;alcanzar la TempMax_X . Nota si partimos de una temperatura del sensor comprendida entre dichos
valores No estará activa la salida
;hasta quedar por debajo de la TempMini_X.
;(La otras instrucciones que tenía la salida estaría activa siempre que la temperatura del
sensor estuviese entre los valores
; de la TempMin y la TempMax)
;-----------------------------------------------------------------
movf TempMax_0,W
subwf TempSensor_0,W
btfsc STATUS,C ;¿C=0? TempSensor_0 < (TempMax_0)
bcf PORTC,0 ;Desactiva la salida 0 de PORTC por ser Mayor o igual la
TempMax_0 que la del TempSensor_0
movf TempMin_0,W
subwf TempSensor_0,W
btfss STATUS,C ;¿C=1? (TempMin_0) >= TempSensor_0
bsf PORTC,0 ;Activa la salida 0 de PORTC por ser Mayor la TempMin_0 que
la del Sensor_0
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;-----------------PARA VER EN LCD LA TEMPERATURA DEL Sensor_1---------------------
;-------------------ESTE COMIENZA EN LA LÍNEA 1 posición .11 -------------------------
VisualizaTermometro_LCD_1 ;EN PANTALLA LCD
;---------------------------------------
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC
btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC
goto No_PC_1_1 ;
;-------------------------------------
;+++++++++++++++++++++++++++++++++++++++++++++++++++++
13
OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera
;SOBRA EL goto no_pc_2 de arriba
; 2º CORTE , NO HACE FALTA LLAMAR POR HABERLO YA HECHO DESDE EL PRIMER SENSOR
movlw MensajesAlPC_SENSOR ;carga la primera posición del mensaje "SENSOR "
call RS232_Mensaje ;lo visualiza en el PC
movlw MensajesAlPC_Sensor2 ;carga la primera posición del mensaje "2: "
call RS232_Mensaje ;lo visualiza en el PC
; movlw MensajesAlPC_Sensor2 ;carga la primera posición del mensaje "SENSOR 2: "
; call RS232_Mensaje ;lo visualiza en el PC
;++++++++++++++++++++++++++++++++++++++++++++++++++++
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC
No_PC_1_1 ; éste es el segundo salto para no reflejar en PC
;-------------------------------------
movlw .11 ; Se coloca para visualización en la T1: T2:XXº
call LCD_PosicionLinea1 ; primera línea.
btfss TempSigno_1,7 ; ¿Temperatura negativa?.
goto TemperaturaPositiva_1 ; No, la temperatura es positiva.
TemperaturaNegativa_1
;Si el el sensor Falla daria -0º y no puede ser. Por tanto para que salga en blanco:
movf TempSensor_1,F
btfsc STATUS,Z ;¿Es cero?, ¿Z=1? Si Z=1 "el Registro vale 0"
goto EliminarMenosCero_1 ;Si el valor es cero eliminar el menos -0º
;si es Z=0 el registro NO vale 0 por tanto escribir -
;Si el registro No vale Cero ponerle el signo -
movlw '-' ; Visualiza el signo "-" de temperatura negativa.
call LCD_Caracter
;---------------------------------------------------------------------------------------
;activar El "Flag_Es_Negativo" Para ver o no ver el signo 'º' por falta de espacio en LCD
bsf Flag_Es_Negativo,0
;---------------------------------------------------------------------------------------
;_______________________________________________________________________
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC
btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC
goto No_PC_1_2 ;
;-------------------------------------
;PARA LLEVARLO AL PC En negativo
movlw '-' ; Visualiza el signo "-" de temperatura negativa. en el PC
call RS232_EnviaDato
;---------------------------------------
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC
No_PC_1_2 ; se puede quitar. Salto para no reflejar en PC
nop ;se puede quitar
TemperaturaPositiva_1
movf TempSensor_1,W ; Visualiza el valor absoluto de la temperatura,
call BIN_a_BCD ; pasándola previamente a BCD.
call Temperatura_En_LCD ;para ver la temperatura suprimiendo el cero no significativo ej
"089" saldrá "89"
;+++++++++++++AÑADIDO PARTE DECIMAL++++++++++++++++
movf DS1624_Decimal_1,F ;para ver si tiene el valor .0º en cuyo caso no visualizarlo
en la LCD por falta de espacio
btfsc STATUS,Z ;Si Z=1 es CERO LA PARTE DECIMAL .0º
goto Decimal_1_Es_Cero ;como es cero NO REPRESENTARLO y ponerle 'º'
;Si Z=0 NO ES CERO y por tanto visualizar el '.' y el 'º'
14
OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera
movlw '.' ; Visualiza el punto decimal.
call LCD_Caracter
movf DS1624_Decimal_1,W ;Visualiza la parte decimal
call LCD_Nibble ;Visualiza en el lugar actual de la pantalla el valor HEXADECIMAL
que almacena el nibble bajo del registro (W). El
;nibble alto en (W) no es tenido en cuenta ej: si (W) = 0101 0110 se
visualiza "6"
; si (W) es 1010 1110, se visualiza "E"
;------------lo he suprimido de la libreria Temperatura_a_LCD.INC-------------
btfsc Flag_TresCaracteres,0 ;Si tiene tres Caracteres la parte entera NO PONER 'º' por
razón de NO TENER espacio
goto Continua_1 ;
;Se representa el signo "º"
Decimal_1_Es_Cero
movlw MensajeGradoCentigrado ; En pantalla aparece "º".
call LCD_Mensaje
;++++++++++++++++++++++++++++++++++++++++++++++++++++
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC
;ACTIVAR LAS SALIDAS comparando con los valores de la EEPROM programados
Continua_1
btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC
goto Histerisis_1 ;Se va a Activar o Desactivar la salida
;-------------------------------------
;--------------------------------------------------------------
movf DS1624_Decimal_1,W ;para poder ver el valor en decimal de cada sensor librería
"temperatura_a_PC.INC"
movwf DS1624_Decimal
;--------------------------------------------------------------
movf TempSensor_1,W ; Visualiza el valor absoluto de la temperatura,
call Temperatura_En_PC ;Desde aquí se verán las centenas-decenas-unidades en el PC
; call RetornoCarro_Y_CambioLinea ; hace cambio de linea con retorno
;---------------------------------------------------------------------------------------
;+++++ACTIVA LA SALIDA CORRESPONDIENTE ENTRE LOS VALORES DE HISTERISIS ESTABLECIDOS++++++
;++++++ENTRE LA TempMin_1 y TempMax_1. Es decir sólo activa entre estos valores++++++++
;---------------------------------------------------------------------------------------
Histerisis_1
btfss TempSigno_1,7 ;Si el último bit es un "1" Es una temperatura Negativa.
goto EsPositivo_1
goto EsNegativo_1
EsPositivo_1
movf TempSensor_1,W ;Carga el Valor (+) de la Temperatura en (W)
goto Activar_Desactivar_Salidas_1 ;Se va a Activar o Desactivar la salida
EsNegativo_1
movf GlobalNegativa_1,W ;Carga el Valor (-) de la Temperatura en (W) se encuentra en
libreria "DS1624_Modificado_0.INC"
movwf TempSensor_1 ;y ya en VALOR NEGATIVO lo llevo a TempSensor_1
;goto Activar_Desactivar_Salidas ;Se va a Activar o
Desactivar la salida
Activar_Desactivar_Salidas_1
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;-----------------------------------------------------------------
;Si la Temperatura del Sensor (TempSensor_x)está por debajo de la TempMin_X estará activa la
Salida. Y se mantendrá activa hasta
;alcanzar la TempMax_X . Nota si partimos de una temperatura del sensor comprendida entre dichos
15
OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera
valores No estará activa la salida
;hasta quedar por debajo de la TempMini_X.
;(La otras instrucciones que tenía la salida estaría activa siempre que la temperatura del
sensor estuviese entre los valores
; de la TempMin y la TempMax)
;-----------------------------------------------------------------
movf TempMax_1,W
subwf TempSensor_1,W
btfsc STATUS,C ;¿C=0? TempSensor_1 < (TempMax_1)
bcf PORTC,1 ;Desactiva la salida 0 de PORTC por ser Mayor o igual la
TempMax_0 que la del TempSensor_1
movf TempMin_1,W
subwf TempSensor_1,W
btfss STATUS,C ;¿C=1? (TempMin_1) >= TempSensor_1
bsf PORTC,1 ;Activa la salida 1 de PORTC por ser Mayor la TempMin_1 que
la del Sensor_1
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;Activar_Desactivar_Salidas_1
;;Para comprobar si un registro es mayor o menor que otro ver la pag 123 del
libro de Remiro.
; subwf TempMin_1,W ;(TempMin_1)- (TempSensor_1) subwf TempMin_1,W
; btfss STATUS,C ;¿C=1? (TempMin_1) >= TempSensor_1
; goto Menor_1
;goto MayorIgual_1 ;sobra
;MayorIgual_1
;C=1 Entonces ha sido (TempMin_1 ó TempMax_1) >= TempSensor_1
; btfsc STATUS,Z ;SI (Z)=1 SON IGUALES Y EN ESE CASO ACTIVAR LA SALIDA para que
se active desde el valor mínimo al máximo que establezcamos
; goto Menor_1
; bcf PORTC,1 ;Desactiva la salida 1 de PORTC
; goto VisualizaTermometro_LCD_2 ;***Para salir y continuar con las siguientes
instrucciones Sería AL VisualizaTermometro_LCD_2
;Menor_1
; bsf PORTC,1 ;Activa la salida 0 de PORTC
; movf TempSensor_1,W ;valor absoluto de Temperatura del "Sensor 2"
; subwf TempMax_1,W ;(TempMax_1)- (TempSensor_1)
; btfss STATUS,C ;¿C=1? (TempMax_1) >= TempSensor_1
; goto MayorIgual_1 ;"Desactiva la Salida Estará activa sólo entre la TempMin y la
TempMax"
;------------------------------------------------------------------
;-----------------PARA VER EN LCD LA TEMPERATURA DEL Sensor_2---------------------
;-------------------ESTE COMIENZA EN LA LÍNEA 2 posición .3 -------------------------
VisualizaTermometro_LCD_2 ;EN PANTALLA LCD
;---------------------------------------
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC
btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC
goto No_PC_2_1 ;
;-------------------------------------
;+++++++++++++++++++++++++++++++++++++++++++++++++++++
;SOBRA EL goto no_pc_2 de arriba
; 2º CORTE , NO HACE FALTA LLAMAR POR HABERLO YA HECHO DESDE EL PRIMER SENSOR
movlw MensajesAlPC_SENSOR ;carga la primera posición del mensaje "SENSOR "
16
OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera
call RS232_Mensaje ;lo visualiza en el PC
movlw MensajesAlPC_Sensor3 ;carga la primera posición del mensaje "3: "
call RS232_Mensaje ;lo visualiza en el PC
; movlw MensajesAlPC_Sensor3 ;carga la primera posición del mensaje "SENSOR 3: "
; call RS232_Mensaje ;lo visualiza en el PC
;++++++++++++++++++++++++++++++++++++++++++++++++++++
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC
No_PC_2_1 ; éste es el segundo salto para no reflejar en PC
;-------------------------------------
movlw .3 ; Se coloca para visualización en la T3: T4:XXº
call LCD_PosicionLinea2 ; SEGUNDA línea.
btfss TempSigno_2,7 ; ¿Temperatura negativa?.
goto TemperaturaPositiva_2 ; No, la temperatura es positiva.
TemperaturaNegativa_2
;Si el el sensor Falla daria -0º y no puede ser. Por tanto para que salga en blanco:
movf TempSensor_2,F
btfsc STATUS,Z ;¿Es cero?, ¿Z=1? Si Z=1 "el Registro vale 0"
goto EliminarMenosCero_2 ;Si el valor es cero eliminar el menos -0º
;si es Z=0 el registro NO vale 0 por tanto escribir -
;Si el registro No vale Cero ponerle el signo -
movlw '-' ; Visualiza el signo "-" de temperatura negativa.
call LCD_Caracter
;---------------------------------------------------------------------------------------
;activar El "Flag_Es_Negativo" Para ver o no ver el signo 'º' por falta de espacio en LCD
bsf Flag_Es_Negativo,0
;---------------------------------------------------------------------------------------
;_______________________________________________________________________
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC
btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC
goto No_PC_2_2 ;
;-------------------------------------
;PARA LLEVARLO AL PC En negativo
movlw '-' ; Visualiza el signo "-" de temperatura negativa. en el PC
call RS232_EnviaDato
;---------------------------------------
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC
No_PC_2_2 ; éste es el tercer salto para no reflejar en PC
nop ;se puede quitar
TemperaturaPositiva_2
movf TempSensor_2,W ; Visualiza el valor absoluto de la temperatura,
call BIN_a_BCD ; pasándola previamente a BCD.
call Temperatura_En_LCD ;para ver la temperatura suprimiendo el cero no significativo ej
"089" saldrá "89"
;+++++++++++++AÑADIDO PARTE DECIMAL++++++++++++++++
movf DS1624_Decimal_2,F ;para ver si tiene el valor .0º en cuyo caso no visualizarlo
en la LCD por falta de espacio
btfsc STATUS,Z ;Si Z=1 es CERO LA PARTE DECIMAL .0º
goto Decimal_2_Es_Cero ;como es cero NO REPRESENTARLO y ponerle 'º'
;Si Z=0 NO ES CERO y por tanto visualizar el '.' y el 'º'
movlw '.' ; Visualiza el punto decimal.
17
OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera
call LCD_Caracter
movf DS1624_Decimal_2,W ;Visualiza la parte decimal
call LCD_Nibble ;Visualiza en el lugar actual de la pantalla el valor HEXADECIMAL
que almacena el nibble bajo del registro (W). El
;nibble alto en (W) no es tenido en cuenta ej: si (W) = 0101 0110 se
visualiza "6"
; si (W) es 1010 1110, se visualiza "E"
;------------lo he suprimido de la libreria Temperatura_a_LCD.INC-------------
btfsc Flag_TresCaracteres,0 ;Si tiene tres Caracteres la parte entera NO PONER 'º' por
razón de NO TENER espacio
goto Continua_2 ;
;Se representa el signo "º"
Decimal_2_Es_Cero
movlw MensajeGradoCentigrado ; En pantalla aparece "º".
call LCD_Mensaje
;++++++++++++++++++++++++++++++++++++++++++++++++++++
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC
;ACTIVAR LAS SALIDAS comparando con los valores de la EEPROM programados
Continua_2
btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC
goto Histerisis_2 ;Se va a Activar o Desactivar la salida
;-------------------------------------
;--------------------------------------------------------------
movf DS1624_Decimal_2,W ;para poder ver el valor en decimal de cada sensor librería
"temperatura_a_PC.INC"
movwf DS1624_Decimal
;--------------------------------------------------------------
movf TempSensor_2,W ; Visualiza el valor absoluto de la temperatura,
call Temperatura_En_PC ;Desde aquí se verán las centenas-decenas-unidades en el PC
; call RetornoCarro_Y_CambioLinea ; hace cambio de linea con retorno
;---------------------------------------------------------------------------------------
;+++++ACTIVA LA SALIDA CORRESPONDIENTE ENTRE LOS VALORES DE HISTERISIS ESTABLECIDOS++++++
;++++++ENTRE LA TempMin_2 y TempMax_2. Es decir sólo activa entre estos valores++++++++
;---------------------------------------------------------------------------------------
Histerisis_2
btfss TempSigno_2,7 ;Si el último bit es un "1" Es una temperatura Negativa.
goto EsPositivo_2
goto EsNegativo_2
EsPositivo_2
movf TempSensor_2,W ;Carga el Valor (+) de la Temperatura en (W)
goto Activar_Desactivar_Salidas_2 ;Se va a Activar o Desactivar la salida
EsNegativo_2
movf GlobalNegativa_2,W ;Carga el Valor (-) de la Temperatura en (W) se encuentra en
libreria "DS1624_Modificado_0.INC"
movwf TempSensor_2 ;y ya en VALOR NEGATIVO lo llevo a TempSensor_1
;goto Activar_Desactivar_Salidas ;Se va a Activar o
Desactivar la salida
Activar_Desactivar_Salidas_2
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;-----------------------------------------------------------------
;Si la Temperatura del Sensor (TempSensor_x)está por debajo de la TempMin_X estará activa la
Salida. Y se mantendrá activa hasta
;alcanzar la TempMax_X . Nota si partimos de una temperatura del sensor comprendida entre dichos
valores No estará activa la salida
;hasta quedar por debajo de la TempMini_X.
;(La otras instrucciones que tenía la salida estaría activa siempre que la temperatura del
sensor estuviese entre los valores
18
OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera
; de la TempMin y la TempMax)
;-----------------------------------------------------------------
movf TempMax_2,W
subwf TempSensor_2,W
btfsc STATUS,C ;¿C=0? TempSensor_2 < (TempMax_2)
bcf PORTC,2 ;Desactiva la salida 2 de PORTC por ser Mayor o igual la
TempMax_2 que la del TempSensor_2
movf TempMin_2,W
subwf TempSensor_2,W
btfss STATUS,C ;¿C=1? (TempMin_2) >= TempSensor_2
bsf PORTC,2 ;Activa la salida 2 de PORTC por ser Mayor la TempMin_2 que
la del Sensor_2
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;-----------------PARA VER EN LCD LA TEMPERATURA DEL Sensor_3---------------------
;-------------------ESTE COMIENZA EN LA LÍNEA 2 posición .11 -------------------------
VisualizaTermometro_LCD_3 ;EN PANTALLA LCD
;---------------------------------------
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC
btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC
goto No_PC_3_1 ;
;-------------------------------------
;+++++++++++++++++++++++++++++++++++++++++++++++++++++
;SOBRA EL goto no_pc_2 de arriba
; 2º CORTE , NO HACE FALTA LLAMAR POR HABERLO YA HECHO DESDE EL PRIMER SENSOR
movlw MensajesAlPC_SENSOR ;carga la primera posición del mensaje "SENSOR "
call RS232_Mensaje ;lo visualiza en el PC
movlw MensajesAlPC_Sensor4 ;carga la primera posición del mensaje "4: "
call RS232_Mensaje ;lo visualiza en el PC
;---------------------------------------
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC
No_PC_3_1 ; éste es el segundo salto para no reflejar en PC
;-------------------------------------
movlw .11 ; Se coloca para visualización en la T3: T4:XXº
call LCD_PosicionLinea2 ; SEGUNDA línea.
btfss TempSigno_3,7 ; ¿Temperatura negativa?.
goto TemperaturaPositiva_3 ; No, la temperatura es positiva.
TemperaturaNegativa_3
;Si el el sensor Falla daria -0º y no puede ser. Por tanto para que salga en blanco:
movf TempSensor_3,F
btfsc STATUS,Z ;¿Es cero?, ¿Z=1? Si Z=1 "el Registro vale 0"
goto EliminarMenosCero_3 ;Si el valor es cero eliminar el menos -0º
;si es Z=0 el registro NO vale 0 por tanto escribir -
;Si el registro No vale Cero ponerle el signo -
movlw '-' ; Visualiza el signo "-" de temperatura negativa.
call LCD_Caracter
;---------------------------------------------------------------------------------------
;activar El "Flag_Es_Negativo" Para ver o no ver el signo 'º' por falta de espacio en LCD
bsf Flag_Es_Negativo,0
;---------------------------------------------------------------------------------------
;_______________________________________________________________________
19
OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC
btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC
goto No_PC_3_2 ;
;-------------------------------------
;PARA LLEVARLO AL PC En negativo
movlw '-' ; Visualiza el signo "-" de temperatura negativa. en el PC
call RS232_EnviaDato
;---------------------------------------
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC
No_PC_3_2 ; éste es el tercer salto para no reflejar en PC
nop ;se puede quitar
TemperaturaPositiva_3
movf TempSensor_3,W ; Visualiza el valor absoluto de la temperatura,
call BIN_a_BCD ; pasándola previamente a BCD.
call Temperatura_En_LCD ;para ver la temperatura suprimiendo el cero no significativo ej
"089" saldrá "89"
;+++++++++++++AÑADIDO PARTE DECIMAL++++++++++++++++
movf DS1624_Decimal_3,F ;para ver si tiene el valor .0º en cuyo caso no visualizarlo
en la LCD por falta de espacio
btfsc STATUS,Z ;Si Z=1 es CERO LA PARTE DECIMAL .0º
goto Decimal_3_Es_Cero ;como es cero NO REPRESENTARLO y ponerle 'º'
;Si Z=0 NO ES CERO y por tanto visualizar el '.' y el 'º'
movlw '.' ; Visualiza el punto decimal.
call LCD_Caracter
movf DS1624_Decimal_3,W ;Visualiza la parte decimal
call LCD_Nibble ;Visualiza en el lugar actual de la pantalla el valor HEXADECIMAL
que almacena el nibble bajo del registro (W). El
;nibble alto en (W) no es tenido en cuenta ej: si (W) = 0101 0110 se
visualiza "6"
; si (W) es 1010 1110, se visualiza "E"
;------------lo he suprimido de la libreria Temperatura_a_LCD.INC-------------
btfsc Flag_TresCaracteres,0 ;Si tiene tres Caracteres la parte entera NO PONER 'º' por
razón de NO TENER espacio
goto Continua_3 ;
;Se representa el signo "º"
Decimal_3_Es_Cero
movlw MensajeGradoCentigrado ; En pantalla aparece "º".
call LCD_Mensaje
;++++++++++++++++++++++++++++++++++++++++++++++++++++
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC
;ACTIVAR LAS SALIDAS comparando con los valores de la EEPROM programados
Continua_3
btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC
goto Histerisis_3 ;Se va a Activar o Desactivar la salida
;-------------------------------------
;--------------------------------------------------------------
movf DS1624_Decimal_3,W ;para poder ver el valor en decimal de cada sensor librería
"temperatura_a_PC.INC"
movwf DS1624_Decimal
;--------------------------------------------------------------
movf TempSensor_3,W ; Visualiza el valor absoluto de la temperatura,
call Temperatura_En_PC ;Desde aquí se verán las centenas-decenas-unidades en el PC
; call RetornoCarro_Y_CambioLinea ; hace cambio de linea con retorno
20
OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera
;---------------------------------------------------------------------------------------
;+++++ACTIVA LA SALIDA CORRESPONDIENTE ENTRE LOS VALORES DE HISTERISIS ESTABLECIDOS++++++
;++++++ENTRE LA TempMin_3 y TempMax_3. Es decir sólo activa entre estos valores++++++++
;---------------------------------------------------------------------------------------
Histerisis_3
btfss TempSigno_3,7 ;Si el último bit es un "1" Es una temperatura Negativa.
goto EsPositivo_3
goto EsNegativo_3
EsPositivo_3
movf TempSensor_3,W ;Carga el Valor (+) de la Temperatura en (W)
goto Activar_Desactivar_Salidas_3 ;Se va a Activar o Desactivar la salida
EsNegativo_3
movf GlobalNegativa_3,W ;Carga el Valor (-) de la Temperatura en (W) se encuentra en
libreria "DS1624_Modificado_0.INC"
movwf TempSensor_3 ;y ya en VALOR NEGATIVO lo llevo a TempSensor_1
;goto Activar_Desactivar_Salidas ;Se va a Activar o
Desactivar la salida
Activar_Desactivar_Salidas_3
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;-----------------------------------------------------------------
;Si la Temperatura del Sensor (TempSensor_x)está por debajo de la TempMin_X estará activa la
Salida. Y se mantendrá activa hasta
;alcanzar la TempMax_X . Nota si partimos de una temperatura del sensor comprendida entre dichos
valores No estará activa la salida
;hasta quedar por debajo de la TempMini_X.
;(La otras instrucciones que tenía la salida estaría activa siempre que la temperatura del
sensor estuviese entre los valores
; de la TempMin y la TempMax)
;-----------------------------------------------------------------
movf TempMax_3,W
subwf TempSensor_3,W
btfsc STATUS,C ;¿C=0? TempSensor_3 < (TempMax_3)
bcf PORTC,3 ;Desactiva la salida 3 de PORTC por ser Mayor o igual la
TempMax_3 que la del TempSensor_3
movf TempMin_3,W
subwf TempSensor_3,W
btfss STATUS,C ;¿C=1? (TempMin_3) >= TempSensor_3
bsf PORTC,3 ;Activa la salida 3 de PORTC por ser Mayor la TempMin_3 que
la del Sensor_3
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;-----------------PARA VER EN LCD LA TEMPERATURA DEL Sensor_4---------------------
;-------------------ESTE COMIENZA EN LA LÍNEA 3 posición .3 -------------------------
VisualizaTermometro_LCD_4 ;EN PANTALLA LCD
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC
btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC
goto No_PC_4_1 ;
;-------------------------------------
;+++++++++++++++++++++++++++++++++++++++++++++++++++++
;SOBRA EL goto no_pc_2 de arriba
; 2º CORTE , NO HACE FALTA LLAMAR POR HABERLO YA HECHO DESDE EL PRIMER SENSOR
movlw MensajesAlPC_SENSOR ;carga la primera posición del mensaje "SENSOR "
call RS232_Mensaje ;lo visualiza en el PC
21
OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera
movlw MensajesAlPC_Sensor5 ;carga la primera posición del mensaje "5: "
call RS232_Mensaje ;lo visualiza en el PC
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC
No_PC_4_1 ; éste es el segundo salto para no reflejar en PC
;-------------------------------------
movlw .3 ; Se coloca para visualización en la T5:XXº T6:
call LCD_PosicionLinea3 ; primera línea.
btfss TempSigno_4,7 ; ¿Temperatura negativa?.
goto TemperaturaPositiva_4 ; No, la temperatura es positiva.
TemperaturaNegativa_4
;Si el el sensor Falla daria -0º y no puede ser. Por tanto para que salga en blanco:
movf TempSensor_4,F
btfsc STATUS,Z ;¿Es cero?, ¿Z=1? Si Z=1 "el Registro vale 0"
goto EliminarMenosCero_4 ;Si el valor es cero eliminar el menos -0º
;si es Z=0 el registro NO vale 0 por tanto escribir -
;Si el registro No vale Cero ponerle el signo -
movlw '-' ; Visualiza el signo "-" de temperatura negativa.
call LCD_Caracter
;---------------------------------------------------------------------------------------
;activar El "Flag_Es_Negativo" Para ver o no ver el signo 'º' por falta de espacio en LCD
bsf Flag_Es_Negativo,0
;---------------------------------------------------------------------------------------
;_______________________________________________________________________
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC
btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC
goto No_PC_4_2 ;
;-------------------------------------
;PARA LLEVARLO AL PC En negativo
movlw '-' ; Visualiza el signo "-" de temperatura negativa. en el PC
call RS232_EnviaDato
;---------------------------------------
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC
No_PC_4_2 ; éste es el tercer salto para no reflejar en PC
;-------------------------------------
nop ;se puede quitar
TemperaturaPositiva_4
movf TempSensor_4,W ; Visualiza el valor absoluto de la temperatura,
call BIN_a_BCD ; pasándola previamente a BCD.
call Temperatura_En_LCD ;para ver la temperatura suprimiendo el cero no significativo ej
"089" saldrá "89"
;+++++++++++++AÑADIDO PARTE DECIMAL++++++++++++++++
movf DS1624_Decimal_4,F ;para ver si tiene el valor .0º en cuyo caso no visualizarlo
en la LCD por falta de espacio
btfsc STATUS,Z ;Si Z=1 es CERO LA PARTE DECIMAL .0º
goto Decimal_4_Es_Cero ;como es cero NO REPRESENTARLO y ponerle 'º'
;Si Z=0 NO ES CERO y por tanto visualizar el '.' y el 'º'
movlw '.' ; Visualiza el punto decimal.
call LCD_Caracter
movf DS1624_Decimal_4,W ;Visualiza la parte decimal
call LCD_Nibble ;Visualiza en el lugar actual de la pantalla el valor HEXADECIMAL
que almacena el nibble bajo del registro (W). El
;nibble alto en (W) no es tenido en cuenta ej: si (W) = 0101 0110 se
visualiza "6"
22
OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera
; si (W) es 1010 1110, se visualiza "E"
;------------lo he suprimido de la libreria Temperatura_a_LCD.INC-------------
btfsc Flag_TresCaracteres,0 ;Si tiene tres Caracteres la parte entera NO PONER 'º' por
razón de NO TENER espacio
goto Continua_4 ;
;Se representa el signo "º"
Decimal_4_Es_Cero
movlw MensajeGradoCentigrado ; En pantalla aparece "º".
call LCD_Mensaje
;++++++++++++++++++++++++++++++++++++++++++++++++++++
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC
;ACTIVAR LAS SALIDAS comparando con los valores de la EEPROM programados
Continua_4
btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC
goto Histerisis_4 ;Se va a Activar o Desactivar la salida ;;;;;No_PC_4 ;
;-------------------------------------
;--------------------------------------------------------------
movf DS1624_Decimal_4,W ;para poder ver el valor en decimal de cada sensor librería
"temperatura_a_PC.INC"
movwf DS1624_Decimal
;--------------------------------------------------------------
movf TempSensor_4,W ; Visualiza el valor absoluto de la temperatura,
call Temperatura_En_PC ;Desde aquí se verán las centenas-decenas-unidades en el PC
; call RetornoCarro_Y_CambioLinea ; hace cambio de linea con retorno
;---------------------------------------------------------------------------------------
;+++++ACTIVA LA SALIDA CORRESPONDIENTE ENTRE LOS VALORES DE HISTERISIS ESTABLECIDOS++++++
;++++++ENTRE LA TempMin_4 y TempMax_4. Es decir sólo activa entre estos valores++++++++
;---------------------------------------------------------------------------------------
Histerisis_4
btfss TempSigno_4,7 ;Si el último bit es un "1" Es una temperatura Negativa.
goto EsPositivo_4
goto EsNegativo_4
EsPositivo_4
movf TempSensor_4,W ;Carga el Valor (+) de la Temperatura en (W)
goto Activar_Desactivar_Salidas_4 ;Se va a Activar o Desactivar la salida
EsNegativo_4
movf GlobalNegativa_4,W ;Carga el Valor (-) de la Temperatura en (W) se encuentra en
libreria "DS1624_Modificado_0.INC"
movwf TempSensor_4 ;y ya en VALOR NEGATIVO lo llevo a TempSensor_1
;goto Activar_Desactivar_Salidas ;Se va a Activar o
Desactivar la salida
Activar_Desactivar_Salidas_4
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;-----------------------------------------------------------------
;Si la Temperatura del Sensor (TempSensor_x)está por debajo de la TempMin_X estará activa la
Salida. Y se mantendrá activa hasta
;alcanzar la TempMax_X . Nota si partimos de una temperatura del sensor comprendida entre dichos
valores No estará activa la salida
;hasta quedar por debajo de la TempMini_X.
;(La otras instrucciones que tenía la salida estaría activa siempre que la temperatura del
sensor estuviese entre los valores
; de la TempMin y la TempMax)
;-----------------------------------------------------------------
movf TempMax_4,W
subwf TempSensor_4,W
btfsc STATUS,C ;¿C=0? TempSensor_4 < (TempMax_4)
bcf PORTC,4 ;Desactiva la salida 4 de PORTC por ser Mayor o igual la
TempMax_4 que la del TempSensor_4
23
OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera
movf TempMin_4,W
subwf TempSensor_4,W
btfss STATUS,C ;¿C=1? (TempMin_4) >= TempSensor_4
bsf PORTC,4 ;Activa la salida 4 de PORTC por ser Mayor la TempMin_4 que
la del Sensor_4
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;-----------------PARA VER EN LCD LA TEMPERATURA DEL Sensor_5---------------------
;-------------------ESTE COMIENZA EN LA LÍNEA 3 posición .11 -------------------------
VisualizaTermometro_LCD_5 ;EN PANTALLA LCD
;---------------------------------------
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC
btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC
goto No_PC_5_1 ;
;-------------------------------------
;+++++++++++++++++++++++++++++++++++++++++++++++++++++
;SOBRA EL goto no_pc_2 de arriba
; 2º CORTE , NO HACE FALTA LLAMAR POR HABERLO YA HECHO DESDE EL PRIMER SENSOR
movlw MensajesAlPC_SENSOR ;carga la primera posición del mensaje "SENSOR "
call RS232_Mensaje ;lo visualiza en el PC
movlw MensajesAlPC_Sensor6 ;carga la primera posición del mensaje "6: "
call RS232_Mensaje ;lo visualiza en el PC
; movlw MensajesAlPC_Sensor6 ;carga la primera posición del mensaje "SENSOR 6: "
; call RS232_Mensaje ;lo visualiza en el PC
;++++++++++++++++++++++++++++++++++++++++++++++++++++
;EL TABULADOR NO ACTÚA EN EL PROTEUS PERO LUEGO EN LA PRÁCTICA SÍ ACTÚA. ver ejemplo
"Termometro_4_LM35"
; movlw TabuladorH ;Un tabulador horizontal
; call RS232_EnviaDato
;------------------------------------------------
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC
No_PC_5_1 ; éste es el segundo salto para no reflejar en PC
;-------------------------------------
movlw .11 ; Se coloca para visualización en la T5: T6:XXº
call LCD_PosicionLinea3 ; TERCERA línea.
btfss TempSigno_5,7 ; ¿Temperatura negativa?.
goto TemperaturaPositiva_5 ; No, la temperatura es positiva.
TemperaturaNegativa_5
;Si el el sensor Falla daria -0º y no puede ser. Por tanto para que salga en blanco:
movf TempSensor_5,F
btfsc STATUS,Z ;¿Es cero?, ¿Z=1? Si Z=1 "el Registro vale 0"
goto EliminarMenosCero_5 ;Si el valor es cero eliminar el menos -0º
;si es Z=0 el registro NO vale 0 por tanto escribir -
;Si el registro No vale Cero ponerle el signo -
movlw '-' ; Visualiza el signo "-" de temperatura negativa.
call LCD_Caracter
;---------------------------------------------------------------------------------------
;activar El "Flag_Es_Negativo" Para ver o no ver el signo 'º' por falta de espacio en LCD
bsf Flag_Es_Negativo,0
24
OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera
;---------------------------------------------------------------------------------------
;_______________________________________________________________________
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC
btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC
goto No_PC_5_2 ;
;-------------------------------------
;PARA LLEVARLO AL PC En negativo
movlw '-' ; Visualiza el signo "-" de temperatura negativa. en el PC
call RS232_EnviaDato
;---------------------------------------
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC
No_PC_5_2 ; éste es el tercer salto para no reflejar en PC
;-------------------------------------
nop ;se puede quitar
TemperaturaPositiva_5
movf TempSensor_5,W ; Visualiza el valor absoluto de la temperatura,
call BIN_a_BCD ; pasándola previamente a BCD.
call Temperatura_En_LCD ;para ver la temperatura suprimiendo el cero no significativo ej
"089" saldrá "89"
;+++++++++++++AÑADIDO PARTE DECIMAL++++++++++++++++
movf DS1624_Decimal_5,F ;para ver si tiene el valor .0º en cuyo caso no visualizarlo
en la LCD por falta de espacio
btfsc STATUS,Z ;Si Z=1 es CERO LA PARTE DECIMAL .0º
goto Decimal_5_Es_Cero ;como es cero NO REPRESENTARLO y ponerle 'º'
;Si Z=0 NO ES CERO y por tanto visualizar el '.' y el 'º'
movlw '.' ; Visualiza el punto decimal.
call LCD_Caracter
movf DS1624_Decimal_5,W ;Visualiza la parte decimal
call LCD_Nibble ;Visualiza en el lugar actual de la pantalla el valor HEXADECIMAL
que almacena el nibble bajo del registro (W). El
;nibble alto en (W) no es tenido en cuenta ej: si (W) = 0101 0110 se
visualiza "6"
; si (W) es 1010 1110, se visualiza "E"
;------------lo he suprimido de la libreria Temperatura_a_LCD.INC-------------
btfsc Flag_TresCaracteres,0 ;Si tiene tres Caracteres la parte entera NO PONER 'º' por
razón de NO TENER espacio
goto Continua_5 ;
;Se representa el signo "º"
Decimal_5_Es_Cero
movlw MensajeGradoCentigrado ; En pantalla aparece "º".
call LCD_Mensaje
;++++++++++++++++++++++++++++++++++++++++++++++++++++
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC
;ACTIVAR LAS SALIDAS comparando con los valores de la EEPROM programados
Continua_5
btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC
goto Histerisis_5 ;Se va a Activar o Desactivar la salida
;-------------------------------------
;--------------------------------------------------------------
movf DS1624_Decimal_5,W ;para poder ver el valor en decimal de cada sensor librería
"temperatura_a_PC.INC"
movwf DS1624_Decimal
;--------------------------------------------------------------
movf TempSensor_5,W ; Visualiza el valor absoluto de la temperatura,
25
OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera
call Temperatura_En_PC ;Desde aquí se verán las centenas-decenas-unidades en el PC
; call RetornoCarro_Y_CambioLinea ; hace cambio de linea con retorno
;---------------------------------------------------------------------------------------
;+++++ACTIVA LA SALIDA CORRESPONDIENTE ENTRE LOS VALORES DE HISTERISIS ESTABLECIDOS++++++
;++++++ENTRE LA TempMin_5 y TempMax_5. Es decir sólo activa entre estos valores++++++++
;---------------------------------------------------------------------------------------
Histerisis_5
btfss TempSigno_5,7 ;Si el último bit es un "1" Es una temperatura Negativa.
goto EsPositivo_5
goto EsNegativo_5
EsPositivo_5
movf TempSensor_5,W ;Carga el Valor (+) de la Temperatura en (W)
goto Activar_Desactivar_Salidas_5 ;Se va a Activar o Desactivar la salida
EsNegativo_5
movf GlobalNegativa_5,W ;Carga el Valor (-) de la Temperatura en (W) se encuentra en
libreria "DS1624_Modificado_0.INC"
movwf TempSensor_5 ;y ya en VALOR NEGATIVO lo llevo a TempSensor_5
;goto Activar_Desactivar_Salidas ;Se va a Activar o
Desactivar la salida
Activar_Desactivar_Salidas_5
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;-----------------------------------------------------------------
;Si la Temperatura del Sensor (TempSensor_x)está por debajo de la TempMin_X estará activa la
Salida. Y se mantendrá activa hasta
;alcanzar la TempMax_X . Nota si partimos de una temperatura del sensor comprendida entre dichos
valores No estará activa la salida
;hasta quedar por debajo de la TempMini_X.
;(La otras instrucciones que tenía la salida estaría activa siempre que la temperatura del
sensor estuviese entre los valores
; de la TempMin y la TempMax)
;-----------------------------------------------------------------
movf TempMax_5,W
subwf TempSensor_5,W
btfsc STATUS,C ;¿C=0? TempSensor_5 < (TempMax_5)
bcf PORTC,5 ;Desactiva la salida 5 de PORTC por ser Mayor o igual la
TempMax_5 que la del TempSensor_5
movf TempMin_5,W
subwf TempSensor_5,W
btfss STATUS,C ;¿C=1? (TempMin_5) >= TempSensor_5
bsf PORTC,5 ;Activa la salida 5 de PORTC por ser Mayor la TempMin_5 que
la del Sensor_5
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;-----------------PARA VER EN LCD LA TEMPERATURA DEL Sensor_6---------------------
;-------------------ESTE COMIENZA EN LA LÍNEA 4 posición .3 -------------------------
VisualizaTermometro_LCD_6 ;EN PANTALLA LCD
;---------------------------------------
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC
btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC
goto No_PC_6_1 ;
;-------------------------------------
;+++++++++++++++++++++++++++++++++++++++++++++++++++++
;SOBRA EL goto no_pc_2 de arriba
; 2º CORTE , NO HACE FALTA LLAMAR POR HABERLO YA HECHO DESDE EL PRIMER SENSOR
26
OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera
movlw MensajesAlPC_SENSOR ;carga la primera posición del mensaje "SENSOR "
call RS232_Mensaje ;lo visualiza en el PC
movlw MensajesAlPC_Sensor7 ;carga la primera posición del mensaje "1: "
call RS232_Mensaje ;lo visualiza en el PC
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC
No_PC_6_1 ; éste es el segundo salto para no reflejar en PC
;-------------------------------------
movlw .3 ; Se coloca para visualización en la T7:XXº T8:
call LCD_PosicionLinea4 ; CUARTA línea.
btfss TempSigno_6,7 ; ¿Temperatura negativa?.
goto TemperaturaPositiva_6 ; No, la temperatura es positiva.
TemperaturaNegativa_6
;Si el el sensor Falla daria -0º y no puede ser. Por tanto para que salga en blanco:
movf TempSensor_6,F
btfsc STATUS,Z ;¿Es cero?, ¿Z=1? Si Z=1 "el Registro vale 0"
goto EliminarMenosCero_6 ;Si el valor es cero eliminar el menos -0º
;si es Z=0 el registro NO vale 0 por tanto escribir -
;Si el registro No vale Cero ponerle el signo -
movlw '-' ; Visualiza el signo "-" de temperatura negativa.
call LCD_Caracter
;---------------------------------------------------------------------------------------
;activar El "Flag_Es_Negativo" Para ver o no ver el signo 'º' por falta de espacio en LCD
bsf Flag_Es_Negativo,0
;---------------------------------------------------------------------------------------
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC
btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC
goto No_PC_6_2 ;
;-------------------------------------
;PARA LLEVARLO AL PC En negativo
movlw '-' ; Visualiza el signo "-" de temperatura negativa. en el PC
call RS232_EnviaDato
;---------------------------------------
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC
No_PC_6_2 ; éste es el tercer salto para no reflejar en PC
nop ;se puede quitar
TemperaturaPositiva_6
movf TempSensor_6,W ; Visualiza el valor absoluto de la temperatura,
call BIN_a_BCD ; pasándola previamente a BCD.
call Temperatura_En_LCD ;para ver la temperatura suprimiendo el cero no significativo ej
"089" saldrá "89"
;+++++++++++++AÑADIDO PARTE DECIMAL++++++++++++++++
movf DS1624_Decimal_6,F ;para ver si tiene el valor .0º en cuyo caso no visualizarlo
en la LCD por falta de espacio
btfsc STATUS,Z ;Si Z=1 es CERO LA PARTE DECIMAL .0º
goto Decimal_6_Es_Cero ;como es cero NO REPRESENTARLO y ponerle 'º'
;Si Z=0 NO ES CERO y por tanto visualizar el '.' y el 'º'
movlw '.' ; Visualiza el punto decimal.
call LCD_Caracter
movf DS1624_Decimal_6,W ;Visualiza la parte decimal
call LCD_Nibble ;Visualiza en el lugar actual de la pantalla el valor HEXADECIMAL
27
OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera
que almacena el nibble bajo del registro (W). El
;nibble alto en (W) no es tenido en cuenta ej: si (W) = 0101 0110 se
visualiza "6"
; si (W) es 1010 1110, se visualiza "E"
;------------lo he suprimido de la libreria Temperatura_a_LCD.INC-------------
btfsc Flag_TresCaracteres,0 ;Si tiene tres Caracteres la parte entera NO PONER 'º' por
razón de NO TENER espacio
goto Continua_6 ;
;Se representa el signo "º"
Decimal_6_Es_Cero
movlw MensajeGradoCentigrado ; En pantalla aparece "º".
call LCD_Mensaje
;++++++++++++++++++++++++++++++++++++++++++++++++++++
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC
;ACTIVAR LAS SALIDAS comparando con los valores de la EEPROM programados
Continua_6
btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC
goto Histerisis_6 ;Se va a Activar o Desactivar la salida ;;;;;No_PC_4 ;
;-------------------------------------
;--------------------------------------------------------------
movf DS1624_Decimal_6,W ;para poder ver el valor en decimal de cada sensor librería
"temperatura_a_PC.INC"
movwf DS1624_Decimal
;--------------------------------------------------------------
movf TempSensor_6,W ; Visualiza el valor absoluto de la temperatura,
call Temperatura_En_PC ;Desde aquí se verán las centenas-decenas-unidades en el PC
; call RetornoCarro_Y_CambioLinea ; hace cambio de linea con retorno
;---------------------------------------------------------------------------------------
;+++++ACTIVA LA SALIDA CORRESPONDIENTE ENTRE LOS VALORES DE HISTERISIS ESTABLECIDOS++++++
;++++++ENTRE LA TempMin_6 y TempMax_6. Es decir sólo activa entre estos valores++++++++
;---------------------------------------------------------------------------------------
Histerisis_6
btfss TempSigno_6,7 ;Si el último bit es un "1" Es una temperatura Negativa.
goto EsPositivo_6
goto EsNegativo_6
EsPositivo_6
movf TempSensor_6,W ;Carga el Valor (+) de la Temperatura en (W)
goto Activar_Desactivar_Salidas_6 ;Se va a Activar o Desactivar la salida
EsNegativo_6
movf GlobalNegativa_6,W ;Carga el Valor (-) de la Temperatura en (W) se encuentra en
libreria "DS1624_Modificado_0.INC"
movwf TempSensor_6 ;y ya en VALOR NEGATIVO lo llevo a TempSensor_1
;goto Activar_Desactivar_Salidas ;Se va a Activar o
Desactivar la salida
Activar_Desactivar_Salidas_6
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;-----------------------------------------------------------------
;Si la Temperatura del Sensor (TempSensor_x)está por debajo de la TempMin_X estará activa la
Salida. Y se mantendrá activa hasta
;alcanzar la TempMax_X . Nota si partimos de una temperatura del sensor comprendida entre dichos
valores No estará activa la salida
;hasta quedar por debajo de la TempMini_X.
;(La otras instrucciones que tenía la salida estaría activa siempre que la temperatura del
sensor estuviese entre los valores
; de la TempMin y la TempMax)
;-----------------------------------------------------------------
movf TempMax_6,W
subwf TempSensor_6,W
btfsc STATUS,C ;¿C=0? TempSensor_6 < (TempMax_6)
28
OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera
bcf PORTC,6 ;Desactiva la salida 6 de PORTC por ser Mayor o igual la
TempMax_6 que la del TempSensor_6
movf TempMin_6,W
subwf TempSensor_6,W
btfss STATUS,C ;¿C=1? (TempMin_6) >= TempSensor_6
bsf PORTC,6 ;Activa la salida 6 de PORTC por ser Mayor la TempMin_6 que
la del Sensor_6
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;-----------------PARA VER EN LCD LA TEMPERATURA DEL Sensor_7---------------------
;-------------------ESTE COMIENZA EN LA LÍNEA 4 posición .11 -------------------------
VisualizaTermometro_LCD_7 ;EN PANTALLA LCD
;---------------------------------------
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC
btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC
goto No_PC_7_1 ;
;-------------------------------------
;+++++++++++++++++++++++++++++++++++++++++++++++++++++
;SOBRA EL goto no_pc_2 de arriba
; 2º CORTE , NO HACE FALTA LLAMAR POR HABERLO YA HECHO DESDE EL PRIMER SENSOR
movlw MensajesAlPC_SENSOR ;carga la primera posición del mensaje "SENSOR "
call RS232_Mensaje ;lo visualiza en el PC
movlw MensajesAlPC_Sensor8 ;carga la primera posición del mensaje "8: "
call RS232_Mensaje ;lo visualiza en el PC
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC
No_PC_7_1 ; éste es el segundo salto para no reflejar en PC
;-------------------------------------
movlw .11 ; Se coloca para visualización en la T7: T8:XXº
call LCD_PosicionLinea4 ; TERCERA línea.
btfss TempSigno_7,7 ; ¿Temperatura negativa?.
goto TemperaturaPositiva_7 ; No, la temperatura es positiva.
TemperaturaNegativa_7
;Si el el sensor Falla daria -0º y no puede ser. Por tanto para que salga en blanco:
movf TempSensor_7,F
btfsc STATUS,Z ;¿Es cero?, ¿Z=1? Si Z=1 "el Registro vale 0"
goto EliminarMenosCero_7 ;Si el valor es cero eliminar el menos -0º
;si es Z=0 el registro NO vale 0 por tanto escribir -
;Si el registro No vale Cero ponerle el signo -
movlw '-' ; Visualiza el signo "-" de temperatura negativa.
call LCD_Caracter
;---------------------------------------------------------------------------------------
;activar El "Flag_Es_Negativo" Para ver o no ver el signo 'º' por falta de espacio en LCD
bsf Flag_Es_Negativo,0
;---------------------------------------------------------------------------------------
;_______________________________________________________________________
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC
btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC
goto No_PC_7_2 ;
;-------------------------------------
29
OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera
;PARA LLEVARLO AL PC En negativo
movlw '-' ; Visualiza el signo "-" de temperatura negativa. en el PC
call RS232_EnviaDato
;---------------------------------------
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC
No_PC_7_2 ; éste es el tercer salto para no reflejar en PC
;-------------------------------------
nop ;se puede quitar
TemperaturaPositiva_7
movf TempSensor_7,W ; Visualiza el valor absoluto de la temperatura,
call BIN_a_BCD ; pasándola previamente a BCD.
call Temperatura_En_LCD ;para ver la temperatura suprimiendo el cero no significativo ej
"089" saldrá "89"
;+++++++++++++AÑADIDO PARTE DECIMAL++++++++++++++++
movf DS1624_Decimal_7,F ;para ver si tiene el valor .0º en cuyo caso no visualizarlo
en la LCD por falta de espacio
btfsc STATUS,Z ;Si Z=1 es CERO LA PARTE DECIMAL .0º
goto Decimal_7_Es_Cero ;como es cero NO REPRESENTARLO y ponerle 'º'
;Si Z=0 NO ES CERO y por tanto visualizar el '.' y el 'º'
movlw '.' ; Visualiza el punto decimal.
call LCD_Caracter
movf DS1624_Decimal_7,W ;Visualiza la parte decimal
call LCD_Nibble ;Visualiza en el lugar actual de la pantalla el valor HEXADECIMAL
que almacena el nibble bajo del registro (W). El
;nibble alto en (W) no es tenido en cuenta ej: si (W) = 0101 0110 se
visualiza "6"
; si (W) es 1010 1110, se visualiza "E"
;------------lo he suprimido de la libreria Temperatura_a_LCD.INC-------------
btfsc Flag_TresCaracteres,0 ;Si tiene tres Caracteres la parte entera NO PONER 'º' por
razón de NO TENER espacio
goto Continua_7 ;
;Se representa el signo "º"
Decimal_7_Es_Cero
movlw MensajeGradoCentigrado ; En pantalla aparece "º".
call LCD_Mensaje
;++++++++++++++++++++++++++++++++++++++++++++++++++++
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC
;ACTIVAR LAS SALIDAS comparando con los valores de la EEPROM programados
Continua_7
btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC
goto Histerisis_7 ;Se va a Activar o Desactivar la salida
;--------SÍ QUIERO PC---------
;--------------------------------------------------------------
movf DS1624_Decimal_7,W ;para poder ver el valor en decimal de cada sensor librería
"temperatura_a_PC.INC"
movwf DS1624_Decimal
;--------------------------------------------------------------
movf TempSensor_7,W ; Visualiza el valor absoluto de la temperatura,
call Temperatura_En_PC ;Desde aquí se verán las centenas-decenas-unidades en el PC
; call RetornoCarro_Y_CambioLinea ; hace cambio de linea con retorno
;---------------------------------------------------------------------------------------
;+++++ACTIVA LA SALIDA CORRESPONDIENTE ENTRE LOS VALORES DE HISTERISIS ESTABLECIDOS++++++
30
OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera
;++++++ENTRE LA TempMin_7 y TempMax_7. Es decir sólo activa entre estos valores++++++++
;---------------------------------------------------------------------------------------
Histerisis_7
btfss TempSigno_7,7 ;Si el último bit es un "1" Es una temperatura Negativa.
goto EsPositivo_7
goto EsNegativo_7
EsPositivo_7
movf TempSensor_7,W ;Carga el Valor (+) de la Temperatura en (W)
goto Activar_Desactivar_Salidas_7 ;Se va a Activar o Desactivar la salida
EsNegativo_7
movf GlobalNegativa_7,W ;Carga el Valor (-) de la Temperatura en (W) se encuentra en
libreria "DS1624_Modificado_0.INC"
movwf TempSensor_7 ;y ya en VALOR NEGATIVO lo llevo a TempSensor_1
;goto Activar_Desactivar_Salidas ;Se va a Activar o Desactivar la
salida
Activar_Desactivar_Salidas_7
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;-----------------------------------------------------------------
;Si la Temperatura del Sensor (TempSensor_x)está por debajo de la TempMin_X estará activa la
Salida. Y se mantendrá activa hasta
;alcanzar la TempMax_X . Nota si partimos de una temperatura del sensor comprendida entre dichos
valores No estará activa la salida
;hasta quedar por debajo de la TempMini_X.
;(La otras instrucciones que tenía la salida estaría activa siempre que la temperatura del
sensor estuviese entre los valores
; de la TempMin y la TempMax)
;-----------------------------------------------------------------
movf TempMax_7,W
subwf TempSensor_7,W
btfsc STATUS,C ;¿C=0? TempSensor_7 < (TempMax_7)
bcf PORTC,7 ;Desactiva la salida 7 de PORTC por ser Mayor o igual la
TempMax_7 que la del TempSensor_7
movf TempMin_7,W
subwf TempSensor_7,W
btfss STATUS,C ;¿C=1? (TempMin_7) >= TempSensor_7
bsf PORTC,7 ;Activa la salida 7 de PORTC por ser Mayor la TempMin_7 que
la del Sensor_7
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;-----------------------------------------------------------------------------------------------
call Tiempo_De_Muestreo_LCD_1; Esta en "TIEMPO_DE_MUESTREO.INC" por COMPARACION determina
;Si he elegido la opcion 1 ,2 ó 3 ; 10sg, 20 sg ó 1 Min
;Es valido aunque se vaya la LUZ por estar en EEPROM
;-----------------------------------------------------------------------------------------------
goto Sensor_0; ;;;;***VisualizaTermometro_LCD_0 ;***Para salir y continuar con
las siguientes instrucciones Sería AL VisualizaTermometro_LCD_2 Pero como no he puesto más
vuelvo al inicial
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC
No_PC_4 ; éste es el tercer salto para no reflejar en PC
;---------------------------------
;ESTE SERÁ EL VALOR POR DEFECTO EN CASO DE NO CONFIGURAR EN EL PC.
;si no se pone al reflejar el último sensor directamente se iria a Inicio y no se vería En la LCD
;por ello poner un retraso Standar de por ej 10 sg
;;;; call Retardo_10s ;PARA REFLEJAR DURANTE 10sg los 4 últimos sensores
;-----------------------------------------------------------------------------------------------
call Tiempo_De_Muestreo_LCD_1; Está en "TIEMPO_DE_MUESTREO.INC" por COMPARACION determina
;Si he elegido la opcion 1 ,2 ó 3 ; 10sg, 20 sg ó 1 Min
;Es valido aunque se vaya la LUZ por estar en EEPROM
;-----------------------------------------------------------------------------------------------
31
Control8sensoresDS1621I2C
Control8sensoresDS1621I2C
Control8sensoresDS1621I2C
Control8sensoresDS1621I2C
Control8sensoresDS1621I2C
Control8sensoresDS1621I2C
Control8sensoresDS1621I2C
Control8sensoresDS1621I2C
Control8sensoresDS1621I2C
Control8sensoresDS1621I2C
Control8sensoresDS1621I2C

Más contenido relacionado

Similar a Control8sensoresDS1621I2C

CONTROLADOR DE TEMPERATURA ICPlus 902 ICP11J0450000.pdf
CONTROLADOR DE TEMPERATURA ICPlus 902 ICP11J0450000.pdfCONTROLADOR DE TEMPERATURA ICPlus 902 ICP11J0450000.pdf
CONTROLADOR DE TEMPERATURA ICPlus 902 ICP11J0450000.pdfDenisRodriguez54
 
Controlador autom
Controlador automControlador autom
Controlador automraiverfx
 
Par64 led vecttor DMX facil en español, compatible American DJ y Freestyler
Par64 led vecttor DMX facil en español, compatible American DJ y FreestylerPar64 led vecttor DMX facil en español, compatible American DJ y Freestyler
Par64 led vecttor DMX facil en español, compatible American DJ y FreestylerUlisesVecttor
 
Microcontroladores - Configuración de puertos, bucles y saltos
Microcontroladores - Configuración de puertos, bucles y saltosMicrocontroladores - Configuración de puertos, bucles y saltos
Microcontroladores - Configuración de puertos, bucles y saltosmarco calderon layme
 
Descripcion detallada del pic 16 f877
Descripcion detallada del pic 16 f877Descripcion detallada del pic 16 f877
Descripcion detallada del pic 16 f877Raphael Raphael
 
Ramón Vizcaíno - Medida y control
Ramón Vizcaíno -  Medida y controlRamón Vizcaíno -  Medida y control
Ramón Vizcaíno - Medida y controlRamonVizcaino
 
Microcontroladores de arquitectura X51
Microcontroladores de arquitectura X51Microcontroladores de arquitectura X51
Microcontroladores de arquitectura X51ADRIAN CASTAÑEDA
 
Proyecto brazo robotico ksr10 enero marzo 2015
Proyecto brazo robotico ksr10  enero marzo 2015Proyecto brazo robotico ksr10  enero marzo 2015
Proyecto brazo robotico ksr10 enero marzo 2015joaquinin1
 
Proyecto brazo robotico ksr10 enero marzo 2015
Proyecto brazo robotico ksr10  enero marzo 2015Proyecto brazo robotico ksr10  enero marzo 2015
Proyecto brazo robotico ksr10 enero marzo 2015joaquinin1
 
Brazo robotico ksr10 ps2 x mayo 2015 a 9v_version_3
Brazo robotico ksr10 ps2 x  mayo 2015 a 9v_version_3Brazo robotico ksr10 ps2 x  mayo 2015 a 9v_version_3
Brazo robotico ksr10 ps2 x mayo 2015 a 9v_version_3joaquinin1
 
Libro arduino blocks 40 proyectos resueltos
Libro   arduino blocks 40 proyectos resueltos Libro   arduino blocks 40 proyectos resueltos
Libro arduino blocks 40 proyectos resueltos polpol2
 

Similar a Control8sensoresDS1621I2C (20)

CONTROLADOR DE TEMPERATURA ICPlus 902 ICP11J0450000.pdf
CONTROLADOR DE TEMPERATURA ICPlus 902 ICP11J0450000.pdfCONTROLADOR DE TEMPERATURA ICPlus 902 ICP11J0450000.pdf
CONTROLADOR DE TEMPERATURA ICPlus 902 ICP11J0450000.pdf
 
Controlador autom
Controlador automControlador autom
Controlador autom
 
Par64 led vecttor
Par64 led vecttorPar64 led vecttor
Par64 led vecttor
 
Par64 led vecttor DMX facil en español, compatible American DJ y Freestyler
Par64 led vecttor DMX facil en español, compatible American DJ y FreestylerPar64 led vecttor DMX facil en español, compatible American DJ y Freestyler
Par64 led vecttor DMX facil en español, compatible American DJ y Freestyler
 
Reg voltaje carga
Reg voltaje cargaReg voltaje carga
Reg voltaje carga
 
Microcontroladores - Configuración de puertos, bucles y saltos
Microcontroladores - Configuración de puertos, bucles y saltosMicrocontroladores - Configuración de puertos, bucles y saltos
Microcontroladores - Configuración de puertos, bucles y saltos
 
Descripcion detallada del pic 16 f877
Descripcion detallada del pic 16 f877Descripcion detallada del pic 16 f877
Descripcion detallada del pic 16 f877
 
Sensores proyecto de control
Sensores proyecto de controlSensores proyecto de control
Sensores proyecto de control
 
Sensores proyecto de control PSM Valencia
Sensores proyecto de control   PSM ValenciaSensores proyecto de control   PSM Valencia
Sensores proyecto de control PSM Valencia
 
Ramón Vizcaíno - Medida y control
Ramón Vizcaíno -  Medida y controlRamón Vizcaíno -  Medida y control
Ramón Vizcaíno - Medida y control
 
Microcontroladores de arquitectura X51
Microcontroladores de arquitectura X51Microcontroladores de arquitectura X51
Microcontroladores de arquitectura X51
 
Proyecto brazo robotico ksr10 enero marzo 2015
Proyecto brazo robotico ksr10  enero marzo 2015Proyecto brazo robotico ksr10  enero marzo 2015
Proyecto brazo robotico ksr10 enero marzo 2015
 
Proyecto brazo robotico ksr10 enero marzo 2015
Proyecto brazo robotico ksr10  enero marzo 2015Proyecto brazo robotico ksr10  enero marzo 2015
Proyecto brazo robotico ksr10 enero marzo 2015
 
Módulo EUSART del PIC16F887
Módulo EUSART del PIC16F887Módulo EUSART del PIC16F887
Módulo EUSART del PIC16F887
 
Ds8619 trans-contr-es-es
Ds8619 trans-contr-es-esDs8619 trans-contr-es-es
Ds8619 trans-contr-es-es
 
I2C PIC18F4550
I2C PIC18F4550I2C PIC18F4550
I2C PIC18F4550
 
Brazo robotico ksr10 ps2 x mayo 2015 a 9v_version_3
Brazo robotico ksr10 ps2 x  mayo 2015 a 9v_version_3Brazo robotico ksr10 ps2 x  mayo 2015 a 9v_version_3
Brazo robotico ksr10 ps2 x mayo 2015 a 9v_version_3
 
sensor de temperatura
sensor de temperaturasensor de temperatura
sensor de temperatura
 
Adc y usart pic16 f887
Adc y usart pic16 f887Adc y usart pic16 f887
Adc y usart pic16 f887
 
Libro arduino blocks 40 proyectos resueltos
Libro   arduino blocks 40 proyectos resueltos Libro   arduino blocks 40 proyectos resueltos
Libro arduino blocks 40 proyectos resueltos
 

Más de joaquinin1

Simulador_CAN_OBD2_por_Joaquín_Berrocal_Piris_mayo_2023.pdf
Simulador_CAN_OBD2_por_Joaquín_Berrocal_Piris_mayo_2023.pdfSimulador_CAN_OBD2_por_Joaquín_Berrocal_Piris_mayo_2023.pdf
Simulador_CAN_OBD2_por_Joaquín_Berrocal_Piris_mayo_2023.pdfjoaquinin1
 
Control_Temp_Hume_AC_junio_22.pdf
Control_Temp_Hume_AC_junio_22.pdfControl_Temp_Hume_AC_junio_22.pdf
Control_Temp_Hume_AC_junio_22.pdfjoaquinin1
 
Mi simulador obdii_2018_marzo_2018--34 pags
Mi simulador obdii_2018_marzo_2018--34 pagsMi simulador obdii_2018_marzo_2018--34 pags
Mi simulador obdii_2018_marzo_2018--34 pagsjoaquinin1
 
Proyecto bornera 60 +_94_pines_mayo_18_por_joaquin berrocal piris
Proyecto bornera 60 +_94_pines_mayo_18_por_joaquin berrocal pirisProyecto bornera 60 +_94_pines_mayo_18_por_joaquin berrocal piris
Proyecto bornera 60 +_94_pines_mayo_18_por_joaquin berrocal pirisjoaquinin1
 
Proyecto robot mentor v1 enero_19_por_joaquin berrocal piris
Proyecto robot mentor v1 enero_19_por_joaquin berrocal pirisProyecto robot mentor v1 enero_19_por_joaquin berrocal piris
Proyecto robot mentor v1 enero_19_por_joaquin berrocal pirisjoaquinin1
 
Construccion seguidor de línea por joaquín berrocal verano 2017
Construccion seguidor de línea por joaquín berrocal verano 2017Construccion seguidor de línea por joaquín berrocal verano 2017
Construccion seguidor de línea por joaquín berrocal verano 2017joaquinin1
 
Proyecto coche por bluetooth por joaquin berrocal piris marzo 2017
Proyecto coche por bluetooth por joaquin berrocal piris marzo 2017Proyecto coche por bluetooth por joaquin berrocal piris marzo 2017
Proyecto coche por bluetooth por joaquin berrocal piris marzo 2017joaquinin1
 
Construccion sonometro nov dic 16 21 pgs-joaquin
Construccion sonometro nov dic 16 21 pgs-joaquinConstruccion sonometro nov dic 16 21 pgs-joaquin
Construccion sonometro nov dic 16 21 pgs-joaquinjoaquinin1
 
Alarma arduino wavecom programa y esquema numeros borrados 48 pag
Alarma arduino wavecom programa y esquema numeros borrados 48 pagAlarma arduino wavecom programa y esquema numeros borrados 48 pag
Alarma arduino wavecom programa y esquema numeros borrados 48 pagjoaquinin1
 
Proyecto balancing joaquin berrocal piris abril 2016 - 53 pag
Proyecto balancing joaquin berrocal piris abril 2016  - 53 pagProyecto balancing joaquin berrocal piris abril 2016  - 53 pag
Proyecto balancing joaquin berrocal piris abril 2016 - 53 pagjoaquinin1
 
Puente garaje-asm
Puente garaje-asmPuente garaje-asm
Puente garaje-asmjoaquinin1
 
Frecuencimetro receptor hall esquema y programa pbp 28 pag
Frecuencimetro receptor hall esquema y programa pbp 28 pagFrecuencimetro receptor hall esquema y programa pbp 28 pag
Frecuencimetro receptor hall esquema y programa pbp 28 pagjoaquinin1
 
Incubadora con foto, esquemas y programa en PBP 19 pag
Incubadora con foto, esquemas y programa en PBP 19 pagIncubadora con foto, esquemas y programa en PBP 19 pag
Incubadora con foto, esquemas y programa en PBP 19 pagjoaquinin1
 
Proyecto mi alarma_pbp_completo_48pag
Proyecto mi alarma_pbp_completo_48pagProyecto mi alarma_pbp_completo_48pag
Proyecto mi alarma_pbp_completo_48pagjoaquinin1
 
Ascensor fotos esquemas_asm_y_hex
Ascensor fotos esquemas_asm_y_hexAscensor fotos esquemas_asm_y_hex
Ascensor fotos esquemas_asm_y_hexjoaquinin1
 
Construcción máquina control numérico cnc agost-sept-2009_joaquin berrocal pî...
Construcción máquina control numérico cnc agost-sept-2009_joaquin berrocal pî...Construcción máquina control numérico cnc agost-sept-2009_joaquin berrocal pî...
Construcción máquina control numérico cnc agost-sept-2009_joaquin berrocal pî...joaquinin1
 
Proyecto brazo robotico ksr10 enero marzo 2015 a 9 v-version_2
Proyecto brazo robotico ksr10  enero marzo 2015 a 9 v-version_2Proyecto brazo robotico ksr10  enero marzo 2015 a 9 v-version_2
Proyecto brazo robotico ksr10 enero marzo 2015 a 9 v-version_2joaquinin1
 
Ruedas muy interesante _67_pag
Ruedas muy interesante _67_pagRuedas muy interesante _67_pag
Ruedas muy interesante _67_pagjoaquinin1
 
Sistema de carga y arranque del automovil 18 pag
Sistema de carga y arranque del automovil 18 pagSistema de carga y arranque del automovil 18 pag
Sistema de carga y arranque del automovil 18 pagjoaquinin1
 
Ac muy bueno 143 pag f sin logo
Ac muy bueno 143 pag f sin logoAc muy bueno 143 pag f sin logo
Ac muy bueno 143 pag f sin logojoaquinin1
 

Más de joaquinin1 (20)

Simulador_CAN_OBD2_por_Joaquín_Berrocal_Piris_mayo_2023.pdf
Simulador_CAN_OBD2_por_Joaquín_Berrocal_Piris_mayo_2023.pdfSimulador_CAN_OBD2_por_Joaquín_Berrocal_Piris_mayo_2023.pdf
Simulador_CAN_OBD2_por_Joaquín_Berrocal_Piris_mayo_2023.pdf
 
Control_Temp_Hume_AC_junio_22.pdf
Control_Temp_Hume_AC_junio_22.pdfControl_Temp_Hume_AC_junio_22.pdf
Control_Temp_Hume_AC_junio_22.pdf
 
Mi simulador obdii_2018_marzo_2018--34 pags
Mi simulador obdii_2018_marzo_2018--34 pagsMi simulador obdii_2018_marzo_2018--34 pags
Mi simulador obdii_2018_marzo_2018--34 pags
 
Proyecto bornera 60 +_94_pines_mayo_18_por_joaquin berrocal piris
Proyecto bornera 60 +_94_pines_mayo_18_por_joaquin berrocal pirisProyecto bornera 60 +_94_pines_mayo_18_por_joaquin berrocal piris
Proyecto bornera 60 +_94_pines_mayo_18_por_joaquin berrocal piris
 
Proyecto robot mentor v1 enero_19_por_joaquin berrocal piris
Proyecto robot mentor v1 enero_19_por_joaquin berrocal pirisProyecto robot mentor v1 enero_19_por_joaquin berrocal piris
Proyecto robot mentor v1 enero_19_por_joaquin berrocal piris
 
Construccion seguidor de línea por joaquín berrocal verano 2017
Construccion seguidor de línea por joaquín berrocal verano 2017Construccion seguidor de línea por joaquín berrocal verano 2017
Construccion seguidor de línea por joaquín berrocal verano 2017
 
Proyecto coche por bluetooth por joaquin berrocal piris marzo 2017
Proyecto coche por bluetooth por joaquin berrocal piris marzo 2017Proyecto coche por bluetooth por joaquin berrocal piris marzo 2017
Proyecto coche por bluetooth por joaquin berrocal piris marzo 2017
 
Construccion sonometro nov dic 16 21 pgs-joaquin
Construccion sonometro nov dic 16 21 pgs-joaquinConstruccion sonometro nov dic 16 21 pgs-joaquin
Construccion sonometro nov dic 16 21 pgs-joaquin
 
Alarma arduino wavecom programa y esquema numeros borrados 48 pag
Alarma arduino wavecom programa y esquema numeros borrados 48 pagAlarma arduino wavecom programa y esquema numeros borrados 48 pag
Alarma arduino wavecom programa y esquema numeros borrados 48 pag
 
Proyecto balancing joaquin berrocal piris abril 2016 - 53 pag
Proyecto balancing joaquin berrocal piris abril 2016  - 53 pagProyecto balancing joaquin berrocal piris abril 2016  - 53 pag
Proyecto balancing joaquin berrocal piris abril 2016 - 53 pag
 
Puente garaje-asm
Puente garaje-asmPuente garaje-asm
Puente garaje-asm
 
Frecuencimetro receptor hall esquema y programa pbp 28 pag
Frecuencimetro receptor hall esquema y programa pbp 28 pagFrecuencimetro receptor hall esquema y programa pbp 28 pag
Frecuencimetro receptor hall esquema y programa pbp 28 pag
 
Incubadora con foto, esquemas y programa en PBP 19 pag
Incubadora con foto, esquemas y programa en PBP 19 pagIncubadora con foto, esquemas y programa en PBP 19 pag
Incubadora con foto, esquemas y programa en PBP 19 pag
 
Proyecto mi alarma_pbp_completo_48pag
Proyecto mi alarma_pbp_completo_48pagProyecto mi alarma_pbp_completo_48pag
Proyecto mi alarma_pbp_completo_48pag
 
Ascensor fotos esquemas_asm_y_hex
Ascensor fotos esquemas_asm_y_hexAscensor fotos esquemas_asm_y_hex
Ascensor fotos esquemas_asm_y_hex
 
Construcción máquina control numérico cnc agost-sept-2009_joaquin berrocal pî...
Construcción máquina control numérico cnc agost-sept-2009_joaquin berrocal pî...Construcción máquina control numérico cnc agost-sept-2009_joaquin berrocal pî...
Construcción máquina control numérico cnc agost-sept-2009_joaquin berrocal pî...
 
Proyecto brazo robotico ksr10 enero marzo 2015 a 9 v-version_2
Proyecto brazo robotico ksr10  enero marzo 2015 a 9 v-version_2Proyecto brazo robotico ksr10  enero marzo 2015 a 9 v-version_2
Proyecto brazo robotico ksr10 enero marzo 2015 a 9 v-version_2
 
Ruedas muy interesante _67_pag
Ruedas muy interesante _67_pagRuedas muy interesante _67_pag
Ruedas muy interesante _67_pag
 
Sistema de carga y arranque del automovil 18 pag
Sistema de carga y arranque del automovil 18 pagSistema de carga y arranque del automovil 18 pag
Sistema de carga y arranque del automovil 18 pag
 
Ac muy bueno 143 pag f sin logo
Ac muy bueno 143 pag f sin logoAc muy bueno 143 pag f sin logo
Ac muy bueno 143 pag f sin logo
 

Último

LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...JAVIER SOLIS NOYOLA
 
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptxLINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptxdanalikcruz2000
 
La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.amayarogel
 
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptDE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptELENA GALLARDO PAÚLS
 
RETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docxRETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docxAna Fernandez
 
texto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticostexto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticosisabeltrejoros
 
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARONARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFAROJosé Luis Palma
 
EXPECTATIVAS vs PERSPECTIVA en la vida.
EXPECTATIVAS vs PERSPECTIVA  en la vida.EXPECTATIVAS vs PERSPECTIVA  en la vida.
EXPECTATIVAS vs PERSPECTIVA en la vida.DaluiMonasterio
 
Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.José Luis Palma
 
la unidad de s sesion edussssssssssssssscacio fisca
la unidad de s sesion edussssssssssssssscacio fiscala unidad de s sesion edussssssssssssssscacio fisca
la unidad de s sesion edussssssssssssssscacio fiscaeliseo91
 
Identificación de componentes Hardware del PC
Identificación de componentes Hardware del PCIdentificación de componentes Hardware del PC
Identificación de componentes Hardware del PCCesarFernandez937857
 
Informatica Generalidades - Conceptos Básicos
Informatica Generalidades - Conceptos BásicosInformatica Generalidades - Conceptos Básicos
Informatica Generalidades - Conceptos BásicosCesarFernandez937857
 
Unidad II Doctrina de la Iglesia 1 parte
Unidad II Doctrina de la Iglesia 1 parteUnidad II Doctrina de la Iglesia 1 parte
Unidad II Doctrina de la Iglesia 1 parteJuan Hernandez
 
La Función tecnológica del tutor.pptx
La  Función  tecnológica  del tutor.pptxLa  Función  tecnológica  del tutor.pptx
La Función tecnológica del tutor.pptxJunkotantik
 
Movimientos Precursores de La Independencia en Venezuela
Movimientos Precursores de La Independencia en VenezuelaMovimientos Precursores de La Independencia en Venezuela
Movimientos Precursores de La Independencia en Venezuelacocuyelquemao
 
codigos HTML para blogs y paginas web Karina
codigos HTML para blogs y paginas web Karinacodigos HTML para blogs y paginas web Karina
codigos HTML para blogs y paginas web Karinavergarakarina022
 
PRIMER SEMESTRE 2024 ASAMBLEA DEPARTAMENTAL.pptx
PRIMER SEMESTRE 2024 ASAMBLEA DEPARTAMENTAL.pptxPRIMER SEMESTRE 2024 ASAMBLEA DEPARTAMENTAL.pptx
PRIMER SEMESTRE 2024 ASAMBLEA DEPARTAMENTAL.pptxinformacionasapespu
 
Factores ecosistemas: interacciones, energia y dinamica
Factores ecosistemas: interacciones, energia y dinamicaFactores ecosistemas: interacciones, energia y dinamica
Factores ecosistemas: interacciones, energia y dinamicaFlor Idalia Espinoza Ortega
 
Planificacion Anual 2do Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 2do Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 2do Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 2do Grado Educacion Primaria 2024 Ccesa007.pdfDemetrio Ccesa Rayme
 

Último (20)

LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
 
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptxLINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
 
La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.
 
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptDE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
 
RETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docxRETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docx
 
texto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticostexto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticos
 
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARONARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
 
EXPECTATIVAS vs PERSPECTIVA en la vida.
EXPECTATIVAS vs PERSPECTIVA  en la vida.EXPECTATIVAS vs PERSPECTIVA  en la vida.
EXPECTATIVAS vs PERSPECTIVA en la vida.
 
Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.
 
la unidad de s sesion edussssssssssssssscacio fisca
la unidad de s sesion edussssssssssssssscacio fiscala unidad de s sesion edussssssssssssssscacio fisca
la unidad de s sesion edussssssssssssssscacio fisca
 
Defendamos la verdad. La defensa es importante.
Defendamos la verdad. La defensa es importante.Defendamos la verdad. La defensa es importante.
Defendamos la verdad. La defensa es importante.
 
Identificación de componentes Hardware del PC
Identificación de componentes Hardware del PCIdentificación de componentes Hardware del PC
Identificación de componentes Hardware del PC
 
Informatica Generalidades - Conceptos Básicos
Informatica Generalidades - Conceptos BásicosInformatica Generalidades - Conceptos Básicos
Informatica Generalidades - Conceptos Básicos
 
Unidad II Doctrina de la Iglesia 1 parte
Unidad II Doctrina de la Iglesia 1 parteUnidad II Doctrina de la Iglesia 1 parte
Unidad II Doctrina de la Iglesia 1 parte
 
La Función tecnológica del tutor.pptx
La  Función  tecnológica  del tutor.pptxLa  Función  tecnológica  del tutor.pptx
La Función tecnológica del tutor.pptx
 
Movimientos Precursores de La Independencia en Venezuela
Movimientos Precursores de La Independencia en VenezuelaMovimientos Precursores de La Independencia en Venezuela
Movimientos Precursores de La Independencia en Venezuela
 
codigos HTML para blogs y paginas web Karina
codigos HTML para blogs y paginas web Karinacodigos HTML para blogs y paginas web Karina
codigos HTML para blogs y paginas web Karina
 
PRIMER SEMESTRE 2024 ASAMBLEA DEPARTAMENTAL.pptx
PRIMER SEMESTRE 2024 ASAMBLEA DEPARTAMENTAL.pptxPRIMER SEMESTRE 2024 ASAMBLEA DEPARTAMENTAL.pptx
PRIMER SEMESTRE 2024 ASAMBLEA DEPARTAMENTAL.pptx
 
Factores ecosistemas: interacciones, energia y dinamica
Factores ecosistemas: interacciones, energia y dinamicaFactores ecosistemas: interacciones, energia y dinamica
Factores ecosistemas: interacciones, energia y dinamica
 
Planificacion Anual 2do Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 2do Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 2do Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 2do Grado Educacion Primaria 2024 Ccesa007.pdf
 

Control8sensoresDS1621I2C

  • 1.                     + La comunicación por el puerto Serie permite ver los valores en el  ORDENADOR si así lo deseamos al accionar el conmutador.     + Se pueden modificar los valores de temperatura mínima y  máxima de cada sensor desde el PC, para así mantener una histérisis de  accionamiento de la salida  correspondiente y poder adaptarlo a  cualquier condición de trabajo  que necesitemos.    +  Los  sensores  “DS1621”  leen  desde  (‐55ºC  a  +  125ºC)  con  una  apreciación de 0,5 ºC.                  El programa está preparado también para aceptar los sensores  “DS1624”, cuya apreciación es de 0,1ºC. (Estos no se usan por ser muy  caros)    ESQUEMA ELECTRÓNICO : en  PROTEUS y en EAGLE.    Diseño placa  Control de 8 sensores de  temperatura “DS1621” por bus I2C   (Joaquín Berrocal Piris) 
  • 9. SCL SDA SCL SDA SCL SDA GND SCL SDA GND SCL SDA SCL SDA SCL SDA GND GND GND GND SDA SCL GND RB4 RB5 RB6 RB7 RA0 RA2 SCL SDA SCL SDA RA1_TX_PIC RA5_RD_PIC RB0 RB0 RB1 RB1 RA1_TX_PIC RA5_RD_PIC RA0 RA2 RB7 RB6 RB5 RB4 9.5 SCL 2 SDA 1 A0 7 TOUT 3 A1 6 A2 5 U1 DS1621 20.0 SCL 2 SDA 1 A0 7 TOUT 3 A1 6 A2 5 U2 DS1621 29.0 SCL 2 SDA 1 A0 7 TOUT 3 A1 6 A2 5 U3 DS1621 40.0 SCL 2 SDA 1 A0 7 TOUT 3 A1 6 A2 5 U4 DS1621 49.0 SCL 2 SDA 1 A0 7 TOUT 3 A1 6 A2 5 U5 DS1621 60.0 SCL 2 SDA 1 A0 7 TOUT 3 A1 6 A2 5 U6 DS1621 69.0 SCL 2 SDA 1 A0 7 TOUT 3 A1 6 A2 5 U7 DS1621 80.0 SCL 2 SDA 1 A0 7 TOUT 3 A1 6 A2 5 U8 DS1621 R3 4k7 R4 4k7 Diseñado por : Joaquín Berrocal Piris Control de 8 Sensores de Temperatura DS1624 ó DS1621 por Bus I2C Marzo 2011 www.iesccp.comze.com/index.php Empiezan a aparecer las Temperaturas a los 13 sgs. RA0/AN0 2 RA1/AN1 3 RA2/AN2/VREF-/CVREF 4 RA4/T0CKI/C1OUT 6 RA5/AN4/SS/C2OUT 7 OSC1/CLKIN 9 OSC2/CLKOUT 10 RC1/T1OSI/CCP2 12 RC2/CCP1 13 RC3/SCK/SCL 14 RB7/PGD 28 RB6/PGC 27 RB5 26 RB4 25 RB3/PGM 24 RB2 23 RB1 22 RB0/INT 21 RC7/RX/DT 18 RC6/TX/CK 17 RC5/SDO 16 RC4/SDI/SDA 15 RA3/AN3/VREF+ 5 RC0/T1OSO/T1CKI 11 MCLR/Vpp/THV 1 U10 PIC16F876A 1 2 3 4 5 6 7 8 20 19 18 17 16 15 14 13 9 10 12 11 U11 LED-BARGRAPH-GRN R2 350 350 350 350 350 350 350 350 R11 10k (+) valores al PC para configurar (-) sólo al LCD no hay comunicación con el PC 100 10k R14 10k Mantener pulsado para desde el PC configurar las TempMin , TempMax y el Tiempo de Muestreo RXD RTS TXD CTS NOTA: El "DS1621" tienen una apreciación de SÓLO 0.5º por ello, le pongo a su propiedad "granularity" 0.5 Los "DS1624" SÍ tienen una apreciación de 0.03125º PERO el "PROTEUS" SÓLO tiene el "DS1621" Ver NOTA en "Desing>Edit Desing Notes..." SENSOR "DS1621" Apreciación -> 0.5º PUERTO SERIE ( HIPERTERMINAL ) D7 14 D6 13 D5 12 D4 11 D3 10 D2 9 D1 8 D0 7 E 6 RW 5 RS 4 VSS 1 VDD 2 VEE 3 LCD1 LM044L LCD 4X20 (4 LÍNEAS x 20 CARACTERES) R15 10k PONGO RB3/PGM a PULL-UP. Para evitar se reinicie al acercar el dedo a RB3/PGM Reset
  • 10. 11/01/2012 10:08:16 f=0.71 C:MIS PROYECTOSPROYECTOS TEMPERATURA OKARCHIVOS CNC Y EAGLE SENSORES DS1621 PARA LCDCNC 3 PASADAS 100X108para 0,4 RESET RA0 RA2 RB4 RB5 RB6 RB7 +LED VSS VDD VEE RS RW E D0 D1 D2 D3 D4 D5 D6 D7 RB7 RB6 RB5 RB4 RC7 RC6 RC5 RC4 RC3 RC2 RC1 RC0 LCD 4X16 ó LCD 4X20 Comandos para situar el cursor en el Inicio de Línea LCD 4X16 Línea1; 0x 80 b'1000 0000' Línea 2; 0x C0 b'1100 0000' Línea3; 0x 90 b'1001 0000' Línea4; 0x D0 b'1101 0000' Línea 1 0x 80 b'1000 0000' Línea 2; 0x C0 b'1100 0000' Línea 3; 0x 94 b'1001 0100' Línea 4; 0x D4 b'1101 0100' LCD 4X20 CONEXIÓN SENSORES TEMPERATURA "DS1621 ó DS1624" SDA-RA4 SCL-RA3 SDA-RA4 SDA-RA4 SDA-RA4 SCL-RA3 SCL-RA3 SCL-RA3 SDA-RA4 Mantener Pulsado para desde el PC configurar las TempMin,TempMax RC0 RC7 SDA-RA4 SCL-RA3 SDA-RA4 SDA-RA4 SDA-RA4 SCL-RA3 SCL-RA3 RB1y el Tiempo de Muestreo RB0 RB1 RB0 RB1 (+) Valores al PC para configurar (-) Solo al LCD NO Comunica con PC RA5_RD_PIC RA1_TX_PIC RS232 EnelEAGLE:Con-subdF09HP Patilla3:TxD Patilla2:RxD RxD TxD (+ 16) y (- 15) SDA-RA4 SCL-RA3 RA0 RA1_TX_PIC RA5_RD_PIC RA2 BUS I2C BUSI2C RB0 RB1 Realizado con "Invoque" ON + OFF (-) Salidas; Activadas si los Sensores 1 al 8 superan la temperatura establecida Led1 se activa si Sensor 1 está entre su TempMin y TempMax establecida. La histérisis de activación es de Abajo arriba, es decir, Led1 estará activo si la temperatura a ascendido desde la TempMi a la TempMax pero no se activará si estaba por encima de la TempMax hasta que baje de la TempMin y vuelva a ascender Y así con todos los demás Sensores y Leds. EAGLE;(EI42-1)-->TRANSF ENCAPSULADO :(TR9V6VA) 220 VOLT ALTERNA 9VOLCC6VA Puentes para utilizar o no el transformador como alimentación >=9 Vcc Tx el Pic Transmite "Rojo" Rx el Pic Recibe "Verde" LEDS de 3 mm (SDA) (SCL) (-) (+) Pull Up RB3. Evita se reinicia tocar patilla RB3 MCLR-RESET MCLR-RESET PIC16876P >= 9 VCC 400 220 uF 220 uF GND +5V +12V 4MHZ 15pF15pF 400 400 400 400 400 400 400 GND 10010K+5V GND GND 470 k +5V GND GND +5V +5V 4K7 4K7 +5V GND GND +5V GND 10K 10K +5V GND GND MAX232 1uF1uF 1uF 1uF 100n GND +5V GND +5V GND TL36PO 1K 220 VAC 470 470 +5V 10K+5V MCLR/THV1 RA0/AN02 RA1/AN13 RA2/AN24 RA3/AN35 RA4/T0CKI6 RA5/AN47 OSC1/CLKIN9 OSC2/CLKOUT10 RC0/T1OSO11 RC1/T1OSI12 RC2/CCP113 RC3/SCK14 SDI/RC4 15 SDO/RC5 16 RC6 17 RC7 18 8 20 INT/RB0 21 RB1 22 RB2 23 PGM/RB3 24 RB4 25 RB5 26 PGC/RB6 27 PGD/RB7 28 19 IC1 VDD VSS 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 JP1 3 1 24 S1 3 1 24 S4 X1-1 X1-2 IC2 GND IN OUT LED1 R1 C1 C2 Q1 C3C4 LED2 LED3 LED4 LED5 LED6 LED7 LED8 R2 R3 R4 R5 R6 R7 R8 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 JP2 R9R10 C5 1 2 3 4 5 6 7 8 JP3 R11 R12 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 JP4 R13 R14 1 6 2 7 3 8 4 9 5 X2 C1+1 C1-3 C2+4 C2-5 T1IN11 T2IN10 R1OUT12 R2OUT9 V+ 2 V- 6 T1OUT 14 T2OUT 7 R1IN 13 R2IN 8 IC4 1615 GNDVCC IC4P C7C8 C9 C10 C11 2 3 1 S3 LED9 1 5 7 9 TR1 1 2 JP5 1 2 JP6 X3-1 X3-2 LED10 R16 LED11 R17 R18 Autor: Joaquín Berrocal Piris + + + + + + PRI SEC In 0 I/O 0 I/O 0 I/O 0 I/O 0 I/O 0 I/O 0 In 0 Out 0 I/O 0 I/O 0 I/O 0 I/O 0 I/O 0 I/O 0 I/O 0 I/O 0 Pwr0 Pwr0 I/O 0 I/O 0 I/O 0 I/O 0 I/O 0 I/O 0 I/O 0 I/O 0 Pwr0 Pas0 Pas0 Pas0 Pas0 Pas0 Pas0 Pas0 Pas0 Pas0 Pas0 Pas0 Pas0 Pas0 Pas0 Pas0 Pas0 Pas 2 Pas 1 Pas 1Pas 2 Pas 2 Pas 1 Pas 1Pas 2 Pas 0 Pas 0 In 0 In0 Pas 0 Pas0Pas0Pas1Pas1 Pas0Pas0 Pas0Pas0 Sup0 Sup0 Sup0 Pas1Pas112 Pas 1 Pas 1 Pas 1 Pas 1 Pas0Pas0 Pas0Pas0 Pas0Pas0 Pas0Pas0 Pas0Pas0 Pas0Pas0 Pas0Pas0 Pas1Pas1 Pas1Pas1 Pas1Pas1 Pas1Pas1 Pas1Pas1 Pas1Pas1 Pas1Pas1 Sup0 Pas 0 Pas 0 Pas 0 Pas 0 Pas 0 Pas 0 Pas 0 Pas 0 Pas 0 Pas 0 Pas 0 Pas 0 Pas 0 Pas 0 Pas 0 Pas 0 Pas1Pas1Pas1Pas1Sup0 Sup0 Sup0 Pas1Pas1 Sup0 Sup0 Sup0 Sup0 Pas0 Pas0 Pas0 Pas0 Pas0 Pas0 Pas0 Pas0 Sup0 Pas1Pas1 Pas1Pas1 Sup0 Pas 0 Pas 0 Pas 0 Pas 0 Pas 0 Pas 0 Pas 0 Pas 0 Pas 0 Pas 0 Pas 0 Pas 0 Pas 0 Pas 0 Pas 0 Pas 0 Sup0 Sup0Sup0 Sup0 Pas1Pas1 Pas1Pas1 Sup0 Sup0 Pas 0 Pas 0 Pas 0 Pas 0 Pas 0 Pas 0 Pas 0 Pas 0 Pas 0 Sup0 I/O 0 I/O 0 I/O 0 I/O 0 In 0 In 0 Out 0 Out 0 I/O 0 I/O 0 Out 0 Out 0 In 0 In 0 Pwr0Pwr0 Pas 0 Pas 0 Pas 0 Pas 0 Pas 0Pas 0 Pas 0 Pas 0 Pas 1Pas 1 Sup0 Sup0 Sup 0 Sup0Sup0 Pas 0 Pas 0 Pas 0 Pas0Pas0Pas1Pas1 Pas 1 Pas 1 Pas 2 Pas 2 Pas0 Pas0Pas0 Pas0 Pas 0 Pas 0 Pas 0Pas 0 Pas 1Pas 1 Pas 0Pas 0 Pas 1Pas 1 Sup0 Pas1Pas1Sup0
  • 11. 11/01/2012 9:21:50 C:MIS PROYECTOSPROYECTOS TEMPERATURA OKARCHIVOS CNC Y EAGLE SENSORES DS1621 SDA SCL - + FaltapuentearconSCL 12 1 5 96 2,54 F09 P1 S1 EI42-1 1 2 12 34 12 34 -I O - + IC1 JP1 S1 S4 X1 IC2 LED1 R1 C1 C2 Q1 C3 C4 LED2 LED3 LED4 LED5 LED6 LED7 LED8 R2 R3 R4 R5 R6 R7 R8 JP2 R9 R10 C5 JP3 R11 R12 JP4 R13R14 X2 IC4 C7 C8 C9 C10 C11 S3 LED9 R15 TR1JP5JP6 X3 LED10 R16 LED11 R17 R18 PIC16876P >= 9 VCC 7805 400 220 uF 220 uF 4MHZ 15pF 15pF 400 400 400 400 400 400 400 100 10K 470 k 4K7 4K7 10K 10K MAX232 1 uF 1 uF 1 uF 1 uF 100n TL36PO 1K 220 VAC 470 470 10K
  • 12. 11/01/2012 9:10:33 C:MIS PROYECTOSPROYECTOS TEMPERATURA OKARCHIVOS CNC Y EAGLE SENSORES DS1621 SDA SCL - + FaltapuentearconSCL 12 1 5 96 2,54 F09 P1 S1 EI42-1 1 2 12 34 12 34 -I O - + IC1 JP1 S1 S4 X1 IC2 LED1 R1 C1 C2 Q1 C3 C4 LED2 LED3 LED4 LED5 LED6 LED7 LED8 R2 R3 R4 R5 R6 R7 R8 JP2 R9 R10 C5 JP3 R11 R12 JP4 R13R14 X2 IC4 C7 C8 C9 C10 C11 S3 LED9 R15 TR1JP5JP6 X3 LED10 R16 LED11 R17 R18 PIC16876P >= 9 VCC 7805 400 220 uF 220 uF 4MHZ 15pF 15pF 400 400 400 400 400 400 400 100 10K 470 k 4K7 4K7 10K 10K MAX232 1 uF 1 uF 1 uF 1 uF 100n TL36PO 1K 220 VAC 470 470 10K
  • 13. 11/01/2012 9:20:24 C:MIS PROYECTOSPROYECTOS TEMPERATURA OKARCHIVOS CNC Y EAGLE SENSORES DS1621 SDA SCL - + FaltapuentearconSCL 12 1 5 96 2,54 F09 P1 S1 EI42-1 1 2 12 34 12 34 -I O - + IC1 JP1 S1 S4 X1 IC2 LED1 R1 C1 C2 Q1 C3 C4 LED2 LED3 LED4 LED5 LED6 LED7 LED8 R2 R3 R4 R5 R6 R7 R8 JP2 R9 R10 C5 JP3 R11 R12 JP4 R13R14 X2 IC4 C7 C8 C9 C10 C11 S3 LED9 R15 TR1JP5JP6 X3 LED10 R16 LED11 R17 R18 PIC16876P >= 9 VCC 7805 400 220 uF 220 uF 4MHZ 15pF 15pF 400 400 400 400 400 400 400 100 10K 470 k 4K7 4K7 10K 10K MAX232 1 uF 1 uF 1 uF 1 uF 100n TL36PO 1K 220 VAC 470 470 10K
  • 14. 11/01/2012 9:19:38 C:MIS PROYECTOSPROYECTOS TEMPERATURA OKARCHIVOS CNC Y EAGLE SENSORES DS1621 SDA SCL - + FaltapuentearconSCL 12 1 5 96 2,54 F09 P1 S1 EI42-1 1 2 12 34 12 34 -I O - + IC1 JP1 S1 S4 X1 IC2 LED1 R1 C1 C2 Q1 C3 C4 LED2 LED3 LED4 LED5 LED6 LED7 LED8 R2 R3 R4 R5 R6 R7 R8 JP2 R9 R10 C5 JP3 R11 R12 JP4 R13R14 X2 IC4 C7 C8 C9 C10 C11 S3 LED9 R15 TR1JP5JP6 X3 LED10 R16 LED11 R17 R18 PIC16876P >= 9 VCC 7805 400 220 uF 220 uF 4MHZ 15pF 15pF 400 400 400 400 400 400 400 100 10K 470 k 4K7 4K7 10K 10K MAX232 1 uF 1 uF 1 uF 1 uF 100n TL36PO 1K 220 VAC 470 470 10K
  • 15. OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera ;******************************* Control_I2C_8_Sensores_Temperatura.asm ************************ ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ; Realizado por JOAQUÍN BERROCAL PIRIS en marzo de 2011 ;+++++++++++++++++++++++ ¡¡ PARA EL LCD 20X4 !!+++++++++++++++++++++++++++ ;-------LE HE AÑADIDO LA LIBRERÍA LCD 4X20.INC------- ; ESTOY UTILIZANDO EL PIC16F876A ;+Programa de control DE 8 SENSORES DE TEMPERATURA DS1624 ó el DS1621 ;+VISUALIZACIÓN SOBRE LCD 4X16 LÍNEAS Y TAMBIÉN SI QUEREMOS SOBRE PC A TRAVÉS DE PUERTO SERIE RS232. ;+DESDE EL PC (hiperterminal) se pueden configurar las TempMín y TempMax de cada sensor ;+Si la temperatura del sensor es inferior a la TempMáx configurada para él, se activará la salida correspondiente. ;OBSERVACIÓN: ;LO TENGO PREPARADA CON UNA HISTÉRISIS PARA EVITAR CONSTANTE ACTIVACIONES Y DESACTIVACIONES. ; PARA ELLO POR EJEMPLO SI CONFIGURO EL SENSOR 1 con una TempMi---> 10ºC y la TempMax a 12ºC. ;su salida estará activa (RC0), SI ES INFERIOR A < 12ºC "PERO TIENE QUE EMPEZAR A ACTIVARSE POR DEBAJO DE LA TempMin establecida en este caso 10ºC ;de lo contrario hasta que no descienda de la temperatura TempMin 10º no se volverá a activar ;Conclusión; mantiene activa la salida si la temperatura del sensor es < TempMin y < TempMax y para poder estar activa debe encontrarse inicialmente ;por debajo de la TempMin o bien descender por debajo de dicha temperatura. De esta manera se consigue una correcta HISTÉRISIS DE ACTIVACIÓN. ; ; ;PARA SIMULARLO EN PROTEUS USAR EL DS1621 funciona igual,SOLO QUE ÉSTE LA APRECIACION ES DE 0.5ºC. ;(CON EL "DS1624" SE CONSIGUIRÍA UNA APRECIACIÓN DE 0.1º SEGÚN LA TABLA DE CONVERSIÓN QUE TENGO EN el comienzo del programa **.asm) ;visualizarlo sobre LCD una LCD 4X16 .También se podría hacer sobre LCD 2x16 ligeros cambios ;++++++++++++++++++++++++++++++OBSERVACIÓN FINAL+++++++++++++++++++++++++++++++++++++ ;TENGO MUCHAS INSTRUCCIONES ANULADAS CON ";" PERO LAS DEJO POR POSIBLES REFORMAS A FUTURO ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ; ; ZONA DE DATOS ********************************************************************** LIST P=16F876A INCLUDE <P16F876A.INC> __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC CBLOCK 0x20 ;para guardar temporalmente la temperatura de los sensores y poder reflejarlas en la pantalla todas a la vez TempSensor_0 TempSensor_1 TempSensor_2 TempSensor_3 TempSensor_4 TempSensor_5 TempSensor_6 TempSensor_7 TempSigno_0 TempSigno_1 TempSigno_2 TempSigno_3 TempSigno_4 TempSigno_5 TempSigno_6 TempSigno_7 ; para guardar el valor decimal redondeado a un sólo dígito. DS1624_Decimal_0 DS1624_Decimal_1 DS1624_Decimal_2 1
  • 16. OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera DS1624_Decimal_3 DS1624_Decimal_4 DS1624_Decimal_5 DS1624_Decimal_6 DS1624_Decimal_7 ; FlagSaltarElReturn ;Para poder hacer el parpadeo de "Leyendo Sensores": LO SUPRIMO POR NO UTILIZARLO ;para recoger las Temperaturas mínimas y máximas de cada Sensor entre las que estará ;activa la salida a relé indicadO. TempMin_0 TempMax_0 TempMin_1 TempMax_1 TempMin_2 TempMax_2 TempMin_3 TempMax_3 TempMin_4 TempMax_4 TempMin_5 TempMax_5 TempMin_6 TempMax_6 TempMin_7 TempMax_7 ENDC ;------------------------------------------ RetornoCarro EQU .13 ; Código de tecla "Enter" o "Retorno de Carro". CambioLinea EQU .10 ; Código para el cambio de línea. ;;TabuladorH EQU .9 ;Código para un salto de tabulador horizontal ;;TabuladorV EQU .11 ;Código para tabulador Vertical y poder así borrar lo escrito en el PC ;;InicioCabecera EQU .1 ;;BorrarPC EQU .127 ;DEL borrar ;ESTOS SOBRAN PERO LOS DEJO DE MOMENTO ;;#DEFINE Entrada0 PORTB,4 ; Define dónde se sitúan las entradas. ;;#DEFINE Entrada1 PORTB,5 ;;#DEFINE Entrada2 PORTB,6 ;;#DEFINE Entrada3 PORTB,7 ;----------------------------------------- ; *******************************ZONA DE CÓDIGOS ************************************* ORG 0 goto Inicio ;Pone la línea 1 y 2 con las iniciales de T1: T2: T3: t4: Mensajes ; Los mensajes no deben sobrepasar las 256 addwf PCL,F ; primeras posiciones de memoria de programa. MensajeEnBlanco DT " ", 0x00 ;Lo utilizo por si falla un Sensor aparezca en blanco su valor en lugar de :-0º MensajeGradoCentigrado DT "º", 0x00 ; En la pantalla: "ºC" "C" Se puede suprimir para que quepa un 2
  • 17. OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera decimal ;PARA REFLEJAR EN LCD T1: a T8: T1 DT "T1:",0x00 T2 DT "T2:",0x00 T3 DT "T3:",0x00 T4 DT "T4:",0x00 T5 DT "T5:",0x00 T6 DT "T6:",0x00 T7 DT "T7:",0x00 T8 DT "T8:",0x00 Espere DT " ESPERE", 0x00 ;LE AÑADO DOS ESPACIOS PARA EL LCD 20X4.Para poner en la línea 1 DT " ESPERE ", 0x00 Leyendo_Sensores ;Mensaje de Espera a leer los 8 sensores aprox 9 sgs DT " Leyendo Sensores", 0x00 ;LE AÑADO DOS ESPACIOS PARA EL LCD 20X4 ;UTILIZO ESTOS MENSAJES PARA VERLOS UNO DEBAJO DEL OTRO YA QUE EN EL HIPERTERMINAL DEL "PROTEUS" No actúa el Tabulador y ;se ven todas las temperaturas una detrás de la otra sin tabulación MensajesAlPC_PROGRAMAR ;Lo primero que sale si tengo comunicación con el PC interruptor RB0 = 1 DT CambioLinea,RetornoCarro DT "PROGRAMAR:",0x00 ;------PARA REDUCIR POSICIONES DE LAS 256 POSIBLES--- MensajesAlPC_SENSOR ;VALOR "SENSOR " global para todos los sensores AÑADIRLE después el número DT CambioLinea,RetornoCarro,RetornoCarro DT "SENSOR ",0x00 MensajesAlPC_Sensor1 DT "1: ",0x00 MensajesAlPC_Sensor2 DT "2: ",0x00 MensajesAlPC_Sensor3 DT "3: ",0x00 MensajesAlPC_Sensor4 DT "4: ",0x00 MensajesAlPC_Sensor5 DT "5: ",0x00 MensajesAlPC_Sensor6 DT "6: ",0x00 MensajesAlPC_Sensor7 DT "7: ",0x00 MensajesAlPC_Sensor8 DT "8: ",0x00 ;------------------------------------------------------------------------------------------------- -- MensajeAlPC_Tmin DT CambioLinea,RetornoCarro,RetornoCarro ;DT RetornoCarro DT "Tmin: ",0x00 MensajeAlPC_Tmax DT CambioLinea,RetornoCarro,RetornoCarro ;DT RetornoCarro DT "Tmax: ",0x00 3
  • 18. OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera SELECCION_1 ;Para indicar en el PC "SELECCIONADO: 1 = 10 Sg" DT " 10 Sg",0x00 SELECCION_2 ;Para indicar en el PC "SELECCIONADO: 1 = 10 Sg" ; DT RetornoCarro DT " 20 Sg",0x00; DT "SELECCIONADO: 2 = 20 Sg",0x00 SELECCION_3 ;Para indicar en el PC "SELECCIONADO: 1 = 10 Sg" ; DT RetornoCarro DT " 1 Min",0x00 ;DT "SELECCIONADO: 3 = 1 Min",0x00 MensajesAlPC_Tiempo_Muestreo ;SELECCIONAR TIEMPO DE MUESTREO: 1 = 10 Sg 2 = 20 Sg 3 = 30 Sg DT CambioLinea, RetornoCarro,RetornoCarro DT "SELECCIONAR TIEMPO DE MUESTREO : " DT CambioLinea, RetornoCarro,RetornoCarro DT "1 = 10 Sg" DT CambioLinea, RetornoCarro DT "2 = 20 Sg" DT CambioLinea,RetornoCarro DT "3 = 1 Min" DT CambioLinea,RetornoCarro,0x00 ;para dejar una separación en el PC Elegido DT "ELEGIDO", 0x00 ;Para poner en la línea 1 DT " ESPERE ", 0x00 ;Subrutina "DS1624_RedondeaDecimal" ---------------------------------------------------- ;Esta rutina NO LA PUEDO DEJAR en "DS1624_Modificado_0.INC" por tener problemas en su lectura probablemente por la ;distancia. Aquí no da problemas ; Esta subrutina redondea el valor del contenido del registro de trabajo W al valor más cercano ; con un decimal indicado en una tabla. ; ;ESTA TABLA ESTÁ PENSADA PARA EL SENSOR "DS1624" Que tiene una apreciación de 0,03125º ;NO PARA EL SENSOR "DS1621" el cual su apreciación es de 0,5º ;no obstante la dejo integra por posible uso a futuro con un DS1624 DS1624_RedondeoDecimal addwf PCL,F ;LO MISMO ES PONER "F" QUE "1" retlw d'0' ;0; (DS1624_Decimal)=b'0000'. Mide 0,0000ºC. Redondeado a 0,0ºC. retlw d'1' ;1; (DS1624_Decimal)=b'0001'. Mide 0,0625ºC. Redondeado a 0,1ºC. retlw d'1' ;2; (DS1624_Decimal)=b'0010'. Mide 0,1250ºC. Redondeado a 0,1ºC. retlw d'2' ;3; (DS1624_Decimal)=b'0011'. Mide 0,1875ºC. Redondeado a 0,2ºC. retlw d'3' ;4; (DS1624_Decimal)=b'0100'. Mide 0,2500ºC. Redondeado a 0,3ºC. retlw d'3' ;5; (DS1624_Decimal)=b'0101'. Mide 0,3125ºC. Redondeado a 0,3ºC. retlw d'4' ;6; (DS1624_Decimal)=b'0110'. Mide 0,3750ºC. Redondeado a 0,4ºC. retlw d'4' ;7; (DS1624_Decimal)=b'0111'. Mide 0,4375ºC. Redondeado a 0,4ºC. retlw d'5' ;8; (DS1624_Decimal)=b'1000'. Mide 0,5000ºC. Redondeado a 0,5ºC.;Este es el único valor utilizado para el DS1621 retlw d'6' ;9; (DS1624_Decimal)=b'1001'. Mide 0,5625ºC. Redondeado a 0,6ºC. retlw d'6' ;10 (DS1624_Decimal)=b'1010'. Mide 0,6250ºC. Redondeado a 0,6ºC. retlw d'7' ;11 (DS1624_Decimal)=b'1011'. Mide 0,6875ºC. Redondeado a 0,7ºC. retlw d'8' ;12 (DS1624_Decimal)=b'1100'. Mide 0,7500ºC. Redondeado a 0,8ºC. retlw d'8' ;13 (DS1624_Decimal)=b'1101'. Mide 0,8125ºC. Redondeado a 0,8ºC. retlw d'9' ;14 (DS1624_Decimal)=b'1110'. Mide 0,8750ºC. Redondeado a 0,9ºC. retlw d'9' ;15 (DS1624_Decimal)=b'1111'. Mide 0,9375ºC. Redondeado a 0,9ºC. DS1624_FinTablaRedondeo IF (DS1624_FinTablaRedondeo > 0xFF) ; ERROR "¡CUIDADO!" ;;;"¡CUIDADO!: La tabla ha superado el tamaño de la página de los" ; MESSG "Error";;;"primeros 256 bytes de memoria ROM. NO funcionará correctamente." 4
  • 19. OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera bsf PORTC,6 ;ACTIVOLA SALIDA 7 ENDIF ; ---------Subrutina "Inicio" -------------------------- Inicio ;-----Para el pic16f876a puerta A E/S digitales-------- bsf STATUS,RP0 ;Selección Banco 1 movlw b'00000011' ;PUERTA B como Salida PERO movwf TRISB ;RBO Y RB1 COMO ENTRADA. Una para no tener comunicación con el PC y la otra para obligar a PROGRAMAR ;;; clrf TRISB ;PUERTA B como Salida PERO ;;; bsf TRISB,0 ;RB0 lo configuro como ENTRADA para tener o no comunicación con el PC a través del interruptor conectado al RB0 ;comunicación con el PC y LCD ->RB0 = 1. SÓLO LCD -> RB0 = 0 ;; bsf TRISB,1 clrf TRISC ;PUERTA C como Salida movlw b'00000110' ;PUERTAA E/S Digitales movwf ADCON1 ; movlw b'00011111' ;La PUERTAA se configura como Entrada ; movwf TRISA ;NO ES NECESARIO. configurarlo bcf STATUS,RP0 ;Vuelta al BANCO 0 ;INICIA LOS PUERTOS APAGANDO TODAS SUS SALIDAS clrf PORTB clrf PORTC clrf Flag_No_Repetir_Programar clrf FlagValorNegativo ;reseteo el flag ;PARA PONER A CERO TODOS ESTOS REGISTROS clrf TempSensor_0 clrf TempSensor_1 clrf TempSensor_2 clrf TempSensor_3 clrf TempSensor_4 clrf TempSensor_5 clrf TempSensor_6 clrf TempSensor_7 ;--------------------------------- clrf Flag_Es_Negativo ;reiniciar aquí el flag lo utilizo para suprimir el '.' y la 'º' si la parte entera tiene ;3 Caracteres incluido del signo (-) y la decimal es .0º ;---------------------------------------------------- ;-----------INICIA LA PANTALLA LCD------------------- ;---------------------------------------------------- call LCD_Inicializa ;PARA INICIAR LA LCD call RS232_Inicializa ;Inicializa la comunicación con el puerto Serie. RA1=TX y RA5 = RD (en lugar de RA3 y RA4 ;---------------------------------------------------- ;++++++POR SI SE VA LA LUZ LEER LAS POSICIONES DE 0 A 17 DE LA EEPROM++++++ ;++++++++++++para así trabajar con los valores PROGRAMADOS ++++++++++++ ;LAS POSICIONES 0 a 17 están recogidas el flag de no reptir programar. Las TempMin y TempMax de cada SENSOR Y el valor del "TiempoMuestreo" call EEPROM_Lectura_De_0_a_17 ;;;Rutina en EEPROM_16F87XX.INC;EEPROM_Lectura_De_0_a_17 EEPROM_Lectura_TempMin_a_TempMax ;EEPROM_Lectura_TempMin_a_TempMax Rutina en 5
  • 20. OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera EEPROM_16F87XX.INC Parpadeo ;Fijo el mensaje "ESPERE" y Parpadeante el "Leyendo Sensores" movlw .5 call LCD_PosicionLinea1 ; primera línea más el valor del registro W movlw Espere ;Mensaje "ESPERE" call LCD_Mensaje ;Visualiza el Mensaje ; En la primera línea de la pantalla aparece un mensaje fijo. call LCD_Linea2 ; Pasa a la segunda línea. movlw Leyendo_Sensores ; Apunta al mensaje parpadeante. "Leyendo Sensores" call LCD_Mensaje ; Lo visualiza. ;------ANULO EL PARPADEO----- ;; call Retardo_500ms ; Durante este tiempo. ;; call LCD_Linea2 ; Vuelve a situarse al principio de la línea 2. ;; call LCD_LineaEnBlanco ; Visualiza línea en blanco.Para no ver nada en esa línea y así producir efecto intermitente ; call Retardo_500ms ; Durante este tiempo, produciendo un efecto de Parpadeo LO SUPRIMO por ;tener en cada sensor un Call Retardo_1s que se va a mantener apagado ;++++++SI QUITO LAS DOS INSTRUCCIONES DE ABAJO SE QUEDA PARPADEANDO PERMANENTEMENTE+++++ ; btfsc FlagSaltarElReturn,0 ;Si está cargado con valor (0) saltar el Return ya que es la primera vez ; return ;retorna de cada Sensor_1 al Sensor_7 Si está cargado con valor 1 hacer el return para poder seguir con el parpadeo ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ;--------------------------------------------------------------------------- ;LECTURA DE LOS SENSORES DE TEMPERATURA ; Sensor_0 ;; bsf FlagSaltarElReturn,0 ;para activar el flag call DS1624_Inicializa_0 ; Configura el DS1624 e inicia la conversión. call Retardo_1s ;retardo de 1 segundos call DS1624_LeeTemperatura ; Lee la temperatura. ; call DS1624_IniciaConversion ;Comienza conversión para la siguiente lectura SI LO PONGO NO FUNCIONAN NI LOS ENTEROS -8 movwf TempSensor_0 ;lo guardo temporalmente para reflejarlo en la LCD todas las temperaturas juntas movf DS1624_Signo,W movwf TempSigno_0 ;Para guardar temporalmente el signo del sensor 1 ;---Para guardar temporalmente el DECIMAL del Sensor_0--- movf DS1624_Decimal,W movwf DS1624_Decimal_0 ;-------------------------------------------------------- ;++++INSTRUCCIONES PARA PODER PROGRAMAR LAS TempMin y TempMax y el TiempoMuestreo++++++ btfsc PORTB,1 ;VERIFICA si está PULSADO .No pongo RB1 por no reconocerlo goto Sensor_1 ;NO ESTÁ PULSADO continuar en "Sensor_0" call Retardo_20ms ;Espera que se estabilicen los niveles de tensión btfsc PORTB,1 ;Comprueba si es un Rebote goto Sensor_1 ;NO ESTÁ PULSADO "Sensor_0" goto VisualizaTermometro_LCD_0 ;Sí está pulsado ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Sensor_1 ;; call Parpadeo 6
  • 21. OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera call DS1624_Inicializa_1 ; Configura el DS1624 e inicia la conversión. call Retardo_1s ;retardo de 1 segundos call DS1624_LeeTemperatura_1 ; Lee la temperatura. ; call DS1624_IniciaConversion_1 ;Comienza conversión para la siguiente lectura movwf TempSensor_1 ;lo guardo temporalmente para reflejarlo en la LCD todas las temperaturas juntas movf DS1624_Signo,W movwf TempSigno_1 ;Para guardar temporalmente el signo del sensor 1 ;---Para guardar temporalmente el DECIMAL del Sensor_1--- movf DS1624_Decimal,W movwf DS1624_Decimal_1 ;-------------------------------------------------------- Sensor_2 ;; call Parpadeo call DS1624_Inicializa_2 ; Configura el DS1624 e inicia la conversión. call Retardo_1s ;retardo de 1 segundos call DS1624_LeeTemperatura_2 ; Lee la temperatura. ; call DS1624_IniciaConversion_2 ;Comienza conversión para la siguiente lectura movwf TempSensor_2 ;lo guardo temporalmente para reflejarlo en la LCD todas las temperaturas juntas movf DS1624_Signo,W movwf TempSigno_2 ;Para guardar temporalmente el signo del sensor 2 ;---Para guardar temporalmente el DECIMAL del Sensor_2--- movf DS1624_Decimal,W movwf DS1624_Decimal_2 ;-------------------------------------------------------- Sensor_3 ;; call Parpadeo call DS1624_Inicializa_3 ; Configura el DS1624 e inicia la conversión. call Retardo_1s ;retardo de 1 segundos call DS1624_LeeTemperatura_3 ; Lee la temperatura. ; call DS1624_IniciaConversion_1 ;Comienza conversión para la siguiente lectura movwf TempSensor_3 ;lo guardo temporalmente para reflejarlo en la LCD todas las temperaturas juntas movf DS1624_Signo,W movwf TempSigno_3 ;Para guardar temporalmente el signo del sensor 3 ;---Para guardar temporalmente el DECIMAL del Sensor_0--- movf DS1624_Decimal,W movwf DS1624_Decimal_3 ;-------------------------------------------------------- Sensor_4 ;; bsf FlagSaltarElReturn,0 ;para activar el flag call DS1624_Inicializa_4 ; Configura el DS1624 e inicia la conversión. call Retardo_1s ;retardo de 1 segundos call DS1624_LeeTemperatura_4 ; Lee la temperatura. ; call DS1624_IniciaConversion ;Comienza conversión para la siguiente lectura SI LO PONGO NO FUNCIONAN NI LOS ENTEROS -8 movwf TempSensor_4 ;lo guardo temporalmente para reflejarlo en la LCD todas las temperaturas juntas movf DS1624_Signo,W movwf TempSigno_4 ;Para guardar temporalmente el signo del sensor 4 7
  • 22. OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera ;---Para guardar temporalmente el DECIMAL del Sensor_0--- movf DS1624_Decimal,W movwf DS1624_Decimal_4 ;-------------------------------------------------------- Sensor_5 ;; call Parpadeo call DS1624_Inicializa_5 ; Configura el DS1624 e inicia la conversión. call Retardo_1s ;retardo de 1 segundos call DS1624_LeeTemperatura_5 ; Lee la temperatura. ; call DS1624_IniciaConversion_1 ;Comienza conversión para la siguiente lectura movwf TempSensor_5 ;lo guardo temporalmente para reflejarlo en la LCD todas las temperaturas juntas movf DS1624_Signo,W movwf TempSigno_5 ;Para guardar temporalmente el signo del sensor 5 ;---Para guardar temporalmente el DECIMAL del Sensor_5--- movf DS1624_Decimal,W movwf DS1624_Decimal_5 ;-------------------------------------------------------- ;++++INSTRUCCIONES PARA PODER PROGRAMAR LAS TempMin y TempMax y el TiempoMuestreo++++++ btfsc PORTB,1 ;VERIFICA si está PULSADO .No pongo RB1 por no reconocerlo goto Sensor_6 ;NO ESTÁ PULSADO continuar en "Sensor_0" call Retardo_20ms ;Espera que se estabilicen los niveles de tensión btfsc PORTB,1 ;Comprueba si es un Rebote goto Sensor_6 ;NO ESTÁ PULSADO "Sensor_6" goto VisualizaTermometro_LCD_0 ;Sí está pulsado ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Sensor_6 ;; call Parpadeo call DS1624_Inicializa_6 ; Configura el DS1624 e inicia la conversión. call Retardo_1s ;retardo de 1 segundos call DS1624_LeeTemperatura_6 ; Lee la temperatura. ; call DS1624_IniciaConversion_2 ;Comienza conversión para la siguiente lectura movwf TempSensor_6 ;lo guardo temporalmente para reflejarlo en la LCD todas las temperaturas juntas movf DS1624_Signo,W movwf TempSigno_6 ;Para guardar temporalmente el signo del sensor 6 ;---Para guardar temporalmente el DECIMAL del Sensor_6--- movf DS1624_Decimal,W movwf DS1624_Decimal_6 ;-------------------------------------------------------- Sensor_7 ;; call Parpadeo call DS1624_Inicializa_7 ; Configura el DS1624 e inicia la conversión. call Retardo_1s ;retardo de 1 segundos call DS1624_LeeTemperatura_7 ; Lee la temperatura. ; call DS1624_IniciaConversion_1 ;Comienza conversión para la siguiente lectura movwf TempSensor_7 ;lo guardo temporalmente para reflejarlo en la LCD todas las temperaturas juntas movf DS1624_Signo,W movwf TempSigno_7 ;Para guardar temporalmente el signo del sensor 7 ;---Para guardar temporalmente el DECIMAL del Sensor_7--- 8
  • 23. OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera movf DS1624_Decimal,W movwf DS1624_Decimal_7 ;-------------------------------------------------------- ;++++++Primero visualiza todos los sensores desde el 0 al 7 en la LCD+++++ goto VisualizaTermometro_LCD_0 ;EN PANTALLA LCD *ESTE SÍ ESTABA la de arriba y abajo NO ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ;*****PARA EVITAR SI ALGÚN SENSOR DEJA DE FUNCIONAR QUE APAREZCA ;*****EN LA PANTALLA EL VALOR -0º. con estas rutinas de más abajo ;*****se consigue que aparezca en blanco el valor. EliminarMenosCero_0 movlw MensajeEnBlanco ;;Lo utilizo por si falla un Sensor aparezca en blanco su valor en lugar de :-0º call LCD_Caracter ;LCD_Mensaje goto Histerisis_0 ;para que active o desactive la salida en función del valor de histerisis establecido ;con la TempMini y TempMax EliminarMenosCero_1 movlw MensajeEnBlanco ;;Lo utilizo por si falla un Sensor aparezca en blanco su valor en lugar de :-0º call LCD_Caracter ;LCD_Mensaje goto Histerisis_1 ;para que active o desactive la salida en función del valor de histerisis establecido ;con la TempMini y TempMax EliminarMenosCero_2 movlw MensajeEnBlanco ;;Lo utilizo por si falla un Sensor aparezca en blanco su valor en lugar de :-0º call LCD_Caracter ;LCD_Mensaje goto Histerisis_2 ;para que active o desactive la salida en función del valor de histerisis establecido ;con la TempMini y TempMax EliminarMenosCero_3 movlw MensajeEnBlanco ;;Lo utilizo por si falla un Sensor aparezca en blanco su valor en lugar de :-0º call LCD_Caracter ;LCD_Mensaje goto Histerisis_3 ;para que active o desactive la salida en función del valor de histerisis establecido ;con la TempMini y TempMax EliminarMenosCero_4 movlw MensajeEnBlanco ;;Lo utilizo por si falla un Sensor aparezca en blanco su valor en lugar de :-0º call LCD_Caracter ;LCD_Mensaje goto Histerisis_4 ;para que active o desactive la salida en función del valor de histerisis establecido ;con la TempMini y TempMax EliminarMenosCero_5 movlw MensajeEnBlanco ;;Lo utilizo por si falla un Sensor aparezca en blanco su valor en lugar de :-0º call LCD_Caracter ;LCD_Mensaje goto Histerisis_5 ;para que active o desactive la salida en función del valor de histerisis establecido ;con la TempMini y TempMax EliminarMenosCero_6 movlw MensajeEnBlanco ;;Lo utilizo por si falla un Sensor aparezca en blanco su valor en lugar de :-0º call LCD_Caracter ;LCD_Mensaje goto Histerisis_6 ;para que active o desactive la salida en función del valor de histerisis establecido ;con la TempMini y TempMax EliminarMenosCero_7 movlw MensajeEnBlanco call LCD_Caracter ;LCD_Mensaje goto Histerisis_7 ;**Iniciar ciclo de visualización de los sensores sin repetir T1 a T8 ;--------------------------------------------------------------------------- ;RUTINAS PARA VISUALIZAR EN PANTALLA LCD y/o HIPERTERMINAL LAS TEMPERATURAS ;DEPENDERÁ DE LA POSICIÓN DEL INTERRUPTOR SE SELECCIÓN (RB0) : SÓLO LCD o bien PC Y LCD par poder configurar ;--------------------------------------------------------------------------- 9
  • 24. OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera ;-----------------PARA VER EN LCD LA TEMPERATURA DEL Sensor_0--------------------- ;-------------------ESTE COMIENZA EN LA LÍNEA 1 posición .3 ------------------------- VisualizaTermometro_LCD_0 ;EN PANTALLA LCD call LCD_Borra ;Borra toda la pantalla.EVITA que al pasar de 10º a 9º se vea 9ºº SE ENCUENTRA EN LA LIBRERIA "LCD_4BIT_4X16.INC" call Visualizar_T1_a_T8 ;Para visualizar en la LCD T:1 a T:8 SE ENCUENTRA EN LA LIBRERIA "Temperatura_a_LCD.INC" ;EVITA que al pasar de XXº a Xº se vean dos grados Xºº ;------------------------------------------------- ; PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC ;------------------------------------------------- ;----Lo primero será ver si DESEO MODIFICAR LA PROGRAMACIÓN DE LOS VALORES----- ;Para ver si modifico los valores de TempMin, TempMax y el Tiempo de Muestreo ;"SI Mantengo Presionado el Pulsador "RB1" A MASA, SÍ DESEO PROGRAMAR." goto Verificar_Deseo_PROGRAMAR ;esta rutina está en "CONFIGURACION_DESDE_PC.INC" ;según desee PROGRAMAR o No, se irá a "Continuar" o a "Continuar_1" ;------------------------------------------------------------------------------ Continuar ;NO QUIERO PROGRAMAR. Verificar ahora si deseo llevar también al PC btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC goto No_PC_0_1 ;primer salto para evitar el PC ;------------------------------------------------------------------------------------- ;************INICIALIZAR EL PUERTO SERIE comunicación con el PC******************* ;;Continuar_1 ;si mantengo pulsado "RB1" Es porque quiero PROGRAMAR. se vuelve aquí desde "Borrar_EEPROM" ;PRIMERO COMPRUEBO SI ES LA PRIMERA VEZ QUE SE PROGRAMA SI ES ASÍ PERMITIRLO DE LO CONTRARIO NO ;PARA ELLO LEER EL FLAG GRABADO EN LE POSICIÓN "0" DE LA EEPROM DONDE GUARDO EL FLAG CON VALOR 1 DE ;Flag_No_Repetir_Programar movlw .1 movwf Flag_No_Repetir_Programar ;utilizo el mismo nombre por no utilizar otro registro clrf EE_Dir ;Posición "0" donde está grabado el Flag en la EEPROM (lo hice dese la Rutina "PROGRAMAR" call EEPROM_LeeDato ;lee lo escrito en la posición "0" de la EEprom si ya se hubiese PROGRAMADO tendrá valor "1" ;----COMPARA SI TIENE VALOR 1 EN CUYO CASO NO VOLVER A PROGRAMAR----- subwf Flag_No_Repetir_Programar,W ; btfsc STATUS,Z ;Si Z=1 NO VOLVER A PROGRAMAR. Y SI Z=0 PROGRAMAR es decir configurar las Tmin y Tmax de cada sensor goto No_Volver_A_PROGRAMAR ;si quiero volver a programar pulsar el boton de RESET. ;-------------------------------------------------------------------- ;+++++PARA BORRAR LO QUE HAYA EN LA PANTALLA DEL PC HIPERTERMINAL++++ ;Para ello simplemente salto de página--> decimal; .12 movlw .12 ; Nueva página call RS232_EnviaDato call Retardo_200ms ;para que no salga raro la primera vez aunque en las siguientes ok Continuar_1 ;LO PONGO AQUÍ PARA QUE SIEMPRE TENGA UN RENGLÓN DE SEPARACIÓN Respecto a lo anterior escrito movlw .13 call RS232_EnviaDato 10
  • 25. OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera call PROGRAMAR ; Rutina de la librería "CONFIGURACION_DESDE_PC.INC" ;escribe en PC ; "PROGRAMAR: SENSOR1: Tmin: Tmax: HASTA EL SENSOR8: Tmin: Tmax:" nop ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ;------------MENSAJE TIEMPO DE MUESTREO------------------ movlw MensajesAlPC_Tiempo_Muestreo ;carga el Mensaje para visualizar en el PC call RS232_Mensaje ;Mensaje al PC call Tiempo_De_Muestreo ;Rutina donde selecciono el valor 1-2-3 del tiempo de muestreo (1= 10sg)(2=20 Sg)(3 = 1 min) ;y lo guarda en el registro: "TiempoMuestreo" y en EEPROM posición .17 ;-------------------------------------------------------------------------- No_Volver_A_PROGRAMAR ;Este primer corte es para una vez PROGRAMADAS LAS Tmin y Tmax ;No vuelva a salir lo de volver a PROGRAMARLAS ;; call RS232_Inicializa ;Inicializa la comunicación con el puerto Serie. RA1=TX y RA5 = RD (en lugar de RA3 y RA4 ;----No suprimirlo evito que salga "SENSOR 1" SI volviese a PROGRAMAR----------- btfss PORTB,0 ;Si está a (1) Si llevar datos al PC goto No_PC_0_1 ;Si está a (0) no llevar al PC ;------------------------------------------------------------------------------- movlw .13 call RS232_EnviaDato movlw MensajesAlPC_SENSOR ;carga la primera posición del mensaje "SENSOR " call RS232_Mensaje ;lo visualiza en el PC movlw MensajesAlPC_Sensor1 ;carga la primera posición del mensaje "1: " call RS232_Mensaje ;lo visualiza en el PC ;--------------------------------------- ;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC No_PC_0_1 ; éste es el primer salto para no reflejar en PC ;-------------------------------------- ; Se coloca para visualización en la T1:XXº T2: movlw .3 ; Se coloca para visualización en la call LCD_PosicionLinea1 ; primera línea más el valor del registro W btfss TempSigno_0,7 ; ¿Temperatura negativa?. goto TemperaturaPositiva_0 ; No, la temperatura es positiva. TemperaturaNegativa_0 ;Para comprobar que un registro vale (0) hay que cargar el registro sobre sí mismo ;mediante la instrucción (movf)(que es la única que posiciona flags), con lo cual se logra ;posicionar el flag (Z) sin variar su contenido. ;Si el sensor Falla daria -0º y no puede ser. Por tanto para que salga en blanco: ;Compara si el registro vale 0 movf TempSensor_0,F ;para posicionar el flag Z btfsc STATUS,Z ;¿Es cero?, ¿Z=1? Si Z=1 "el Registro vale 0" goto EliminarMenosCero_0 ;Si el valor es cero eliminar el menos -0º ;si es Z=0 el registro NO vale 0 por tanto escribir - ;Si el registro No vale Cero ponerle el signo - movlw '-' ; Visualiza el signo "-" de temperatura negativa. call LCD_Caracter ;--------------------------------------------------------------------------------------- ;activar El "Flag_Es_Negativo" Para ver o no ver el signo 'º' por falta de espacio en LCD bsf Flag_Es_Negativo,0 11
  • 26. OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera ;--------------------------------------------------------------------------------------- ;_______________________________________________________________________ ;++++++++++++++++++++AÑADIDO PARA VER EN EL PC++++++++++++ ;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC goto TemperaturaPositiva_0 ;sólo EN PANTALLA LCD ;PARA LLEVARLO AL PC En negativo movlw '-' ; Visualiza el signo "-" de temperatura negativa. en el PC call RS232_EnviaDato ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ;______________________________________________________________________________ TemperaturaPositiva_0 movf TempSensor_0,W ; Visualiza el valor absoluto de la temperatura siempre en (+) call BIN_a_BCD ; pasándola previamente a BCD. Call Temperatura_En_LCD ;para ver la temperatura suprimiendo el cero no significativo ej "089" saldrá "89" ;+++++++++++++AÑADIDO PARTE DECIMAL++++++++++++++++ movf DS1624_Decimal_0,F ;para ver si tiene el valor .0º en cuyo caso no visualizarlo en la LCD por falta de espacio btfsc STATUS,Z ;Si Z=1 es CERO LA PARTE DECIMAL .0º goto Decimal_0_Es_Cero ;como es cero NO REPRESENTARLO y ponerle 'º' ;Si Z=0 NO ES CERO y por tanto visualizar el '.' y el 'º' movlw '.' ; Visualiza el punto decimal. call LCD_Caracter movf DS1624_Decimal_0,W ;Visualiza la parte decimal call LCD_Nibble ;Visualiza en el lugar actual de la pantalla el valor HEXADECIMAL que almacena el nibble bajo del registro (W). El ;nibble alto en (W) no es tenido en cuenta ej: si (W) = 0101 0110 se visualiza "6" ; si (W) es 1010 1110, se visualiza "E" ;------------lo he suprimido de la libreria Temperatura_a_LCD.INC------------- btfsc Flag_TresCaracteres,0 ;Si tiene tres Caracteres la parte entera NO PONER 'º' por razón de NO TENER espacio goto Continua_0 ; ;Se representa el signo "º" Decimal_0_Es_Cero movlw MensajeGradoCentigrado ; En pantalla aparece "º". call LCD_Mensaje ;++++++++++++++++++++++++++++++++++++++++++++++++++++ ;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC ;ACTIVAR LAS SALIDAS comparando con los valores de la EEPROM programados Continua_0 btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC goto Histerisis_0 ;para también activar las salidas aún eligiendo solo el LCD sin PC;;;;; goto VisualizaTermometro_LCD_1 ;EN PANTALLA LCD ;------------------------------------- movf DS1624_Decimal_0,W ;para poder ver el valor en decimal de cada sensor librería "temperatura_a_PC.INC" movwf DS1624_Decimal ;-------------------------------------------------------------- movf TempSensor_0,W ; Visualiza el valor absoluto de la temperatura, en (+) call Temperatura_En_PC ;Desde aquí se verán las Centanas-Decenas-Unidades en el PC 12
  • 27. OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera ;--------------------------------------------------------------------------------------- ;+++++ACTIVA LA SALIDA CORRESPONDIENTE ENTRE LOS VALORES DE HISTERISIS ESTABLECIDOS++++++ ;++++++ENTRE LA TempMin_X y TempMax_X. Es decir sólo activa entre estos valores++++++++ ;--------------------------------------------------------------------------------------- Histerisis_0 ;Activar_Desactivar_Salidas call EEPROM_Lectura_De_0_a_17 ;Esta en "EEPROM_16F87X.INC" para la lectura de los valores de ;la TempMin y TempMax de cada sensor grabados en la EEPROM btfss TempSigno_0,7 ;Si el último bit es un "1" Es una temperatura Negativa. goto EsPositivo_0 goto EsNegativo_0 EsPositivo_0 movf TempSensor_0,W ;Carga el Valor (+) de la Temperatura en (W) goto Activar_Desactivar_Salidas_0 ;Se va a Activar o Desactivar la salida EsNegativo_0 movf GlobalNegativa_0,W ;Carga el Valor (-) de la Temperatura en (W) se encuentra en libreria "DS1624_Modificado_0.INC" movwf TempSensor_0 ;y ya en VALOR NEGATIVO lo llevo a TempSensor_0 ;goto Activar_Desactivar_Salidas ;Se va a Activar o Desactivar la salida ;-----está modificado para hacer como en el programa de internet que active por encima de la tempMin hasta la TempMax pero siempre de abajo a arriba y no al revés Activar_Desactivar_Salidas_0 ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ;----------------------------------------------------------------- ;Si la Temperatura del Sensor (TempSensor_x)está por debajo de la TempMin_X estará activa la Salida. Y se mantendrá activa hasta ;alcanzar la TempMax_X . Nota si partimos de una temperatura del sensor comprendida entre dichos valores No estará activa la salida ;hasta quedar por debajo de la TempMini_X. ;(La otras instrucciones que tenía la salida estaría activa siempre que la temperatura del sensor estuviese entre los valores ; de la TempMin y la TempMax) ;----------------------------------------------------------------- movf TempMax_0,W subwf TempSensor_0,W btfsc STATUS,C ;¿C=0? TempSensor_0 < (TempMax_0) bcf PORTC,0 ;Desactiva la salida 0 de PORTC por ser Mayor o igual la TempMax_0 que la del TempSensor_0 movf TempMin_0,W subwf TempSensor_0,W btfss STATUS,C ;¿C=1? (TempMin_0) >= TempSensor_0 bsf PORTC,0 ;Activa la salida 0 de PORTC por ser Mayor la TempMin_0 que la del Sensor_0 ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ;-----------------PARA VER EN LCD LA TEMPERATURA DEL Sensor_1--------------------- ;-------------------ESTE COMIENZA EN LA LÍNEA 1 posición .11 ------------------------- VisualizaTermometro_LCD_1 ;EN PANTALLA LCD ;--------------------------------------- ;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC goto No_PC_1_1 ; ;------------------------------------- ;+++++++++++++++++++++++++++++++++++++++++++++++++++++ 13
  • 28. OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera ;SOBRA EL goto no_pc_2 de arriba ; 2º CORTE , NO HACE FALTA LLAMAR POR HABERLO YA HECHO DESDE EL PRIMER SENSOR movlw MensajesAlPC_SENSOR ;carga la primera posición del mensaje "SENSOR " call RS232_Mensaje ;lo visualiza en el PC movlw MensajesAlPC_Sensor2 ;carga la primera posición del mensaje "2: " call RS232_Mensaje ;lo visualiza en el PC ; movlw MensajesAlPC_Sensor2 ;carga la primera posición del mensaje "SENSOR 2: " ; call RS232_Mensaje ;lo visualiza en el PC ;++++++++++++++++++++++++++++++++++++++++++++++++++++ ;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC No_PC_1_1 ; éste es el segundo salto para no reflejar en PC ;------------------------------------- movlw .11 ; Se coloca para visualización en la T1: T2:XXº call LCD_PosicionLinea1 ; primera línea. btfss TempSigno_1,7 ; ¿Temperatura negativa?. goto TemperaturaPositiva_1 ; No, la temperatura es positiva. TemperaturaNegativa_1 ;Si el el sensor Falla daria -0º y no puede ser. Por tanto para que salga en blanco: movf TempSensor_1,F btfsc STATUS,Z ;¿Es cero?, ¿Z=1? Si Z=1 "el Registro vale 0" goto EliminarMenosCero_1 ;Si el valor es cero eliminar el menos -0º ;si es Z=0 el registro NO vale 0 por tanto escribir - ;Si el registro No vale Cero ponerle el signo - movlw '-' ; Visualiza el signo "-" de temperatura negativa. call LCD_Caracter ;--------------------------------------------------------------------------------------- ;activar El "Flag_Es_Negativo" Para ver o no ver el signo 'º' por falta de espacio en LCD bsf Flag_Es_Negativo,0 ;--------------------------------------------------------------------------------------- ;_______________________________________________________________________ ;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC goto No_PC_1_2 ; ;------------------------------------- ;PARA LLEVARLO AL PC En negativo movlw '-' ; Visualiza el signo "-" de temperatura negativa. en el PC call RS232_EnviaDato ;--------------------------------------- ;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC No_PC_1_2 ; se puede quitar. Salto para no reflejar en PC nop ;se puede quitar TemperaturaPositiva_1 movf TempSensor_1,W ; Visualiza el valor absoluto de la temperatura, call BIN_a_BCD ; pasándola previamente a BCD. call Temperatura_En_LCD ;para ver la temperatura suprimiendo el cero no significativo ej "089" saldrá "89" ;+++++++++++++AÑADIDO PARTE DECIMAL++++++++++++++++ movf DS1624_Decimal_1,F ;para ver si tiene el valor .0º en cuyo caso no visualizarlo en la LCD por falta de espacio btfsc STATUS,Z ;Si Z=1 es CERO LA PARTE DECIMAL .0º goto Decimal_1_Es_Cero ;como es cero NO REPRESENTARLO y ponerle 'º' ;Si Z=0 NO ES CERO y por tanto visualizar el '.' y el 'º' 14
  • 29. OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera movlw '.' ; Visualiza el punto decimal. call LCD_Caracter movf DS1624_Decimal_1,W ;Visualiza la parte decimal call LCD_Nibble ;Visualiza en el lugar actual de la pantalla el valor HEXADECIMAL que almacena el nibble bajo del registro (W). El ;nibble alto en (W) no es tenido en cuenta ej: si (W) = 0101 0110 se visualiza "6" ; si (W) es 1010 1110, se visualiza "E" ;------------lo he suprimido de la libreria Temperatura_a_LCD.INC------------- btfsc Flag_TresCaracteres,0 ;Si tiene tres Caracteres la parte entera NO PONER 'º' por razón de NO TENER espacio goto Continua_1 ; ;Se representa el signo "º" Decimal_1_Es_Cero movlw MensajeGradoCentigrado ; En pantalla aparece "º". call LCD_Mensaje ;++++++++++++++++++++++++++++++++++++++++++++++++++++ ;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC ;ACTIVAR LAS SALIDAS comparando con los valores de la EEPROM programados Continua_1 btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC goto Histerisis_1 ;Se va a Activar o Desactivar la salida ;------------------------------------- ;-------------------------------------------------------------- movf DS1624_Decimal_1,W ;para poder ver el valor en decimal de cada sensor librería "temperatura_a_PC.INC" movwf DS1624_Decimal ;-------------------------------------------------------------- movf TempSensor_1,W ; Visualiza el valor absoluto de la temperatura, call Temperatura_En_PC ;Desde aquí se verán las centenas-decenas-unidades en el PC ; call RetornoCarro_Y_CambioLinea ; hace cambio de linea con retorno ;--------------------------------------------------------------------------------------- ;+++++ACTIVA LA SALIDA CORRESPONDIENTE ENTRE LOS VALORES DE HISTERISIS ESTABLECIDOS++++++ ;++++++ENTRE LA TempMin_1 y TempMax_1. Es decir sólo activa entre estos valores++++++++ ;--------------------------------------------------------------------------------------- Histerisis_1 btfss TempSigno_1,7 ;Si el último bit es un "1" Es una temperatura Negativa. goto EsPositivo_1 goto EsNegativo_1 EsPositivo_1 movf TempSensor_1,W ;Carga el Valor (+) de la Temperatura en (W) goto Activar_Desactivar_Salidas_1 ;Se va a Activar o Desactivar la salida EsNegativo_1 movf GlobalNegativa_1,W ;Carga el Valor (-) de la Temperatura en (W) se encuentra en libreria "DS1624_Modificado_0.INC" movwf TempSensor_1 ;y ya en VALOR NEGATIVO lo llevo a TempSensor_1 ;goto Activar_Desactivar_Salidas ;Se va a Activar o Desactivar la salida Activar_Desactivar_Salidas_1 ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ;----------------------------------------------------------------- ;Si la Temperatura del Sensor (TempSensor_x)está por debajo de la TempMin_X estará activa la Salida. Y se mantendrá activa hasta ;alcanzar la TempMax_X . Nota si partimos de una temperatura del sensor comprendida entre dichos 15
  • 30. OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera valores No estará activa la salida ;hasta quedar por debajo de la TempMini_X. ;(La otras instrucciones que tenía la salida estaría activa siempre que la temperatura del sensor estuviese entre los valores ; de la TempMin y la TempMax) ;----------------------------------------------------------------- movf TempMax_1,W subwf TempSensor_1,W btfsc STATUS,C ;¿C=0? TempSensor_1 < (TempMax_1) bcf PORTC,1 ;Desactiva la salida 0 de PORTC por ser Mayor o igual la TempMax_0 que la del TempSensor_1 movf TempMin_1,W subwf TempSensor_1,W btfss STATUS,C ;¿C=1? (TempMin_1) >= TempSensor_1 bsf PORTC,1 ;Activa la salida 1 de PORTC por ser Mayor la TempMin_1 que la del Sensor_1 ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ;Activar_Desactivar_Salidas_1 ;;Para comprobar si un registro es mayor o menor que otro ver la pag 123 del libro de Remiro. ; subwf TempMin_1,W ;(TempMin_1)- (TempSensor_1) subwf TempMin_1,W ; btfss STATUS,C ;¿C=1? (TempMin_1) >= TempSensor_1 ; goto Menor_1 ;goto MayorIgual_1 ;sobra ;MayorIgual_1 ;C=1 Entonces ha sido (TempMin_1 ó TempMax_1) >= TempSensor_1 ; btfsc STATUS,Z ;SI (Z)=1 SON IGUALES Y EN ESE CASO ACTIVAR LA SALIDA para que se active desde el valor mínimo al máximo que establezcamos ; goto Menor_1 ; bcf PORTC,1 ;Desactiva la salida 1 de PORTC ; goto VisualizaTermometro_LCD_2 ;***Para salir y continuar con las siguientes instrucciones Sería AL VisualizaTermometro_LCD_2 ;Menor_1 ; bsf PORTC,1 ;Activa la salida 0 de PORTC ; movf TempSensor_1,W ;valor absoluto de Temperatura del "Sensor 2" ; subwf TempMax_1,W ;(TempMax_1)- (TempSensor_1) ; btfss STATUS,C ;¿C=1? (TempMax_1) >= TempSensor_1 ; goto MayorIgual_1 ;"Desactiva la Salida Estará activa sólo entre la TempMin y la TempMax" ;------------------------------------------------------------------ ;-----------------PARA VER EN LCD LA TEMPERATURA DEL Sensor_2--------------------- ;-------------------ESTE COMIENZA EN LA LÍNEA 2 posición .3 ------------------------- VisualizaTermometro_LCD_2 ;EN PANTALLA LCD ;--------------------------------------- ;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC goto No_PC_2_1 ; ;------------------------------------- ;+++++++++++++++++++++++++++++++++++++++++++++++++++++ ;SOBRA EL goto no_pc_2 de arriba ; 2º CORTE , NO HACE FALTA LLAMAR POR HABERLO YA HECHO DESDE EL PRIMER SENSOR movlw MensajesAlPC_SENSOR ;carga la primera posición del mensaje "SENSOR " 16
  • 31. OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera call RS232_Mensaje ;lo visualiza en el PC movlw MensajesAlPC_Sensor3 ;carga la primera posición del mensaje "3: " call RS232_Mensaje ;lo visualiza en el PC ; movlw MensajesAlPC_Sensor3 ;carga la primera posición del mensaje "SENSOR 3: " ; call RS232_Mensaje ;lo visualiza en el PC ;++++++++++++++++++++++++++++++++++++++++++++++++++++ ;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC No_PC_2_1 ; éste es el segundo salto para no reflejar en PC ;------------------------------------- movlw .3 ; Se coloca para visualización en la T3: T4:XXº call LCD_PosicionLinea2 ; SEGUNDA línea. btfss TempSigno_2,7 ; ¿Temperatura negativa?. goto TemperaturaPositiva_2 ; No, la temperatura es positiva. TemperaturaNegativa_2 ;Si el el sensor Falla daria -0º y no puede ser. Por tanto para que salga en blanco: movf TempSensor_2,F btfsc STATUS,Z ;¿Es cero?, ¿Z=1? Si Z=1 "el Registro vale 0" goto EliminarMenosCero_2 ;Si el valor es cero eliminar el menos -0º ;si es Z=0 el registro NO vale 0 por tanto escribir - ;Si el registro No vale Cero ponerle el signo - movlw '-' ; Visualiza el signo "-" de temperatura negativa. call LCD_Caracter ;--------------------------------------------------------------------------------------- ;activar El "Flag_Es_Negativo" Para ver o no ver el signo 'º' por falta de espacio en LCD bsf Flag_Es_Negativo,0 ;--------------------------------------------------------------------------------------- ;_______________________________________________________________________ ;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC goto No_PC_2_2 ; ;------------------------------------- ;PARA LLEVARLO AL PC En negativo movlw '-' ; Visualiza el signo "-" de temperatura negativa. en el PC call RS232_EnviaDato ;--------------------------------------- ;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC No_PC_2_2 ; éste es el tercer salto para no reflejar en PC nop ;se puede quitar TemperaturaPositiva_2 movf TempSensor_2,W ; Visualiza el valor absoluto de la temperatura, call BIN_a_BCD ; pasándola previamente a BCD. call Temperatura_En_LCD ;para ver la temperatura suprimiendo el cero no significativo ej "089" saldrá "89" ;+++++++++++++AÑADIDO PARTE DECIMAL++++++++++++++++ movf DS1624_Decimal_2,F ;para ver si tiene el valor .0º en cuyo caso no visualizarlo en la LCD por falta de espacio btfsc STATUS,Z ;Si Z=1 es CERO LA PARTE DECIMAL .0º goto Decimal_2_Es_Cero ;como es cero NO REPRESENTARLO y ponerle 'º' ;Si Z=0 NO ES CERO y por tanto visualizar el '.' y el 'º' movlw '.' ; Visualiza el punto decimal. 17
  • 32. OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera call LCD_Caracter movf DS1624_Decimal_2,W ;Visualiza la parte decimal call LCD_Nibble ;Visualiza en el lugar actual de la pantalla el valor HEXADECIMAL que almacena el nibble bajo del registro (W). El ;nibble alto en (W) no es tenido en cuenta ej: si (W) = 0101 0110 se visualiza "6" ; si (W) es 1010 1110, se visualiza "E" ;------------lo he suprimido de la libreria Temperatura_a_LCD.INC------------- btfsc Flag_TresCaracteres,0 ;Si tiene tres Caracteres la parte entera NO PONER 'º' por razón de NO TENER espacio goto Continua_2 ; ;Se representa el signo "º" Decimal_2_Es_Cero movlw MensajeGradoCentigrado ; En pantalla aparece "º". call LCD_Mensaje ;++++++++++++++++++++++++++++++++++++++++++++++++++++ ;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC ;ACTIVAR LAS SALIDAS comparando con los valores de la EEPROM programados Continua_2 btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC goto Histerisis_2 ;Se va a Activar o Desactivar la salida ;------------------------------------- ;-------------------------------------------------------------- movf DS1624_Decimal_2,W ;para poder ver el valor en decimal de cada sensor librería "temperatura_a_PC.INC" movwf DS1624_Decimal ;-------------------------------------------------------------- movf TempSensor_2,W ; Visualiza el valor absoluto de la temperatura, call Temperatura_En_PC ;Desde aquí se verán las centenas-decenas-unidades en el PC ; call RetornoCarro_Y_CambioLinea ; hace cambio de linea con retorno ;--------------------------------------------------------------------------------------- ;+++++ACTIVA LA SALIDA CORRESPONDIENTE ENTRE LOS VALORES DE HISTERISIS ESTABLECIDOS++++++ ;++++++ENTRE LA TempMin_2 y TempMax_2. Es decir sólo activa entre estos valores++++++++ ;--------------------------------------------------------------------------------------- Histerisis_2 btfss TempSigno_2,7 ;Si el último bit es un "1" Es una temperatura Negativa. goto EsPositivo_2 goto EsNegativo_2 EsPositivo_2 movf TempSensor_2,W ;Carga el Valor (+) de la Temperatura en (W) goto Activar_Desactivar_Salidas_2 ;Se va a Activar o Desactivar la salida EsNegativo_2 movf GlobalNegativa_2,W ;Carga el Valor (-) de la Temperatura en (W) se encuentra en libreria "DS1624_Modificado_0.INC" movwf TempSensor_2 ;y ya en VALOR NEGATIVO lo llevo a TempSensor_1 ;goto Activar_Desactivar_Salidas ;Se va a Activar o Desactivar la salida Activar_Desactivar_Salidas_2 ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ;----------------------------------------------------------------- ;Si la Temperatura del Sensor (TempSensor_x)está por debajo de la TempMin_X estará activa la Salida. Y se mantendrá activa hasta ;alcanzar la TempMax_X . Nota si partimos de una temperatura del sensor comprendida entre dichos valores No estará activa la salida ;hasta quedar por debajo de la TempMini_X. ;(La otras instrucciones que tenía la salida estaría activa siempre que la temperatura del sensor estuviese entre los valores 18
  • 33. OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera ; de la TempMin y la TempMax) ;----------------------------------------------------------------- movf TempMax_2,W subwf TempSensor_2,W btfsc STATUS,C ;¿C=0? TempSensor_2 < (TempMax_2) bcf PORTC,2 ;Desactiva la salida 2 de PORTC por ser Mayor o igual la TempMax_2 que la del TempSensor_2 movf TempMin_2,W subwf TempSensor_2,W btfss STATUS,C ;¿C=1? (TempMin_2) >= TempSensor_2 bsf PORTC,2 ;Activa la salida 2 de PORTC por ser Mayor la TempMin_2 que la del Sensor_2 ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ;-----------------PARA VER EN LCD LA TEMPERATURA DEL Sensor_3--------------------- ;-------------------ESTE COMIENZA EN LA LÍNEA 2 posición .11 ------------------------- VisualizaTermometro_LCD_3 ;EN PANTALLA LCD ;--------------------------------------- ;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC goto No_PC_3_1 ; ;------------------------------------- ;+++++++++++++++++++++++++++++++++++++++++++++++++++++ ;SOBRA EL goto no_pc_2 de arriba ; 2º CORTE , NO HACE FALTA LLAMAR POR HABERLO YA HECHO DESDE EL PRIMER SENSOR movlw MensajesAlPC_SENSOR ;carga la primera posición del mensaje "SENSOR " call RS232_Mensaje ;lo visualiza en el PC movlw MensajesAlPC_Sensor4 ;carga la primera posición del mensaje "4: " call RS232_Mensaje ;lo visualiza en el PC ;--------------------------------------- ;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC No_PC_3_1 ; éste es el segundo salto para no reflejar en PC ;------------------------------------- movlw .11 ; Se coloca para visualización en la T3: T4:XXº call LCD_PosicionLinea2 ; SEGUNDA línea. btfss TempSigno_3,7 ; ¿Temperatura negativa?. goto TemperaturaPositiva_3 ; No, la temperatura es positiva. TemperaturaNegativa_3 ;Si el el sensor Falla daria -0º y no puede ser. Por tanto para que salga en blanco: movf TempSensor_3,F btfsc STATUS,Z ;¿Es cero?, ¿Z=1? Si Z=1 "el Registro vale 0" goto EliminarMenosCero_3 ;Si el valor es cero eliminar el menos -0º ;si es Z=0 el registro NO vale 0 por tanto escribir - ;Si el registro No vale Cero ponerle el signo - movlw '-' ; Visualiza el signo "-" de temperatura negativa. call LCD_Caracter ;--------------------------------------------------------------------------------------- ;activar El "Flag_Es_Negativo" Para ver o no ver el signo 'º' por falta de espacio en LCD bsf Flag_Es_Negativo,0 ;--------------------------------------------------------------------------------------- ;_______________________________________________________________________ 19
  • 34. OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera ;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC goto No_PC_3_2 ; ;------------------------------------- ;PARA LLEVARLO AL PC En negativo movlw '-' ; Visualiza el signo "-" de temperatura negativa. en el PC call RS232_EnviaDato ;--------------------------------------- ;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC No_PC_3_2 ; éste es el tercer salto para no reflejar en PC nop ;se puede quitar TemperaturaPositiva_3 movf TempSensor_3,W ; Visualiza el valor absoluto de la temperatura, call BIN_a_BCD ; pasándola previamente a BCD. call Temperatura_En_LCD ;para ver la temperatura suprimiendo el cero no significativo ej "089" saldrá "89" ;+++++++++++++AÑADIDO PARTE DECIMAL++++++++++++++++ movf DS1624_Decimal_3,F ;para ver si tiene el valor .0º en cuyo caso no visualizarlo en la LCD por falta de espacio btfsc STATUS,Z ;Si Z=1 es CERO LA PARTE DECIMAL .0º goto Decimal_3_Es_Cero ;como es cero NO REPRESENTARLO y ponerle 'º' ;Si Z=0 NO ES CERO y por tanto visualizar el '.' y el 'º' movlw '.' ; Visualiza el punto decimal. call LCD_Caracter movf DS1624_Decimal_3,W ;Visualiza la parte decimal call LCD_Nibble ;Visualiza en el lugar actual de la pantalla el valor HEXADECIMAL que almacena el nibble bajo del registro (W). El ;nibble alto en (W) no es tenido en cuenta ej: si (W) = 0101 0110 se visualiza "6" ; si (W) es 1010 1110, se visualiza "E" ;------------lo he suprimido de la libreria Temperatura_a_LCD.INC------------- btfsc Flag_TresCaracteres,0 ;Si tiene tres Caracteres la parte entera NO PONER 'º' por razón de NO TENER espacio goto Continua_3 ; ;Se representa el signo "º" Decimal_3_Es_Cero movlw MensajeGradoCentigrado ; En pantalla aparece "º". call LCD_Mensaje ;++++++++++++++++++++++++++++++++++++++++++++++++++++ ;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC ;ACTIVAR LAS SALIDAS comparando con los valores de la EEPROM programados Continua_3 btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC goto Histerisis_3 ;Se va a Activar o Desactivar la salida ;------------------------------------- ;-------------------------------------------------------------- movf DS1624_Decimal_3,W ;para poder ver el valor en decimal de cada sensor librería "temperatura_a_PC.INC" movwf DS1624_Decimal ;-------------------------------------------------------------- movf TempSensor_3,W ; Visualiza el valor absoluto de la temperatura, call Temperatura_En_PC ;Desde aquí se verán las centenas-decenas-unidades en el PC ; call RetornoCarro_Y_CambioLinea ; hace cambio de linea con retorno 20
  • 35. OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera ;--------------------------------------------------------------------------------------- ;+++++ACTIVA LA SALIDA CORRESPONDIENTE ENTRE LOS VALORES DE HISTERISIS ESTABLECIDOS++++++ ;++++++ENTRE LA TempMin_3 y TempMax_3. Es decir sólo activa entre estos valores++++++++ ;--------------------------------------------------------------------------------------- Histerisis_3 btfss TempSigno_3,7 ;Si el último bit es un "1" Es una temperatura Negativa. goto EsPositivo_3 goto EsNegativo_3 EsPositivo_3 movf TempSensor_3,W ;Carga el Valor (+) de la Temperatura en (W) goto Activar_Desactivar_Salidas_3 ;Se va a Activar o Desactivar la salida EsNegativo_3 movf GlobalNegativa_3,W ;Carga el Valor (-) de la Temperatura en (W) se encuentra en libreria "DS1624_Modificado_0.INC" movwf TempSensor_3 ;y ya en VALOR NEGATIVO lo llevo a TempSensor_1 ;goto Activar_Desactivar_Salidas ;Se va a Activar o Desactivar la salida Activar_Desactivar_Salidas_3 ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ;----------------------------------------------------------------- ;Si la Temperatura del Sensor (TempSensor_x)está por debajo de la TempMin_X estará activa la Salida. Y se mantendrá activa hasta ;alcanzar la TempMax_X . Nota si partimos de una temperatura del sensor comprendida entre dichos valores No estará activa la salida ;hasta quedar por debajo de la TempMini_X. ;(La otras instrucciones que tenía la salida estaría activa siempre que la temperatura del sensor estuviese entre los valores ; de la TempMin y la TempMax) ;----------------------------------------------------------------- movf TempMax_3,W subwf TempSensor_3,W btfsc STATUS,C ;¿C=0? TempSensor_3 < (TempMax_3) bcf PORTC,3 ;Desactiva la salida 3 de PORTC por ser Mayor o igual la TempMax_3 que la del TempSensor_3 movf TempMin_3,W subwf TempSensor_3,W btfss STATUS,C ;¿C=1? (TempMin_3) >= TempSensor_3 bsf PORTC,3 ;Activa la salida 3 de PORTC por ser Mayor la TempMin_3 que la del Sensor_3 ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ;-----------------PARA VER EN LCD LA TEMPERATURA DEL Sensor_4--------------------- ;-------------------ESTE COMIENZA EN LA LÍNEA 3 posición .3 ------------------------- VisualizaTermometro_LCD_4 ;EN PANTALLA LCD ;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC goto No_PC_4_1 ; ;------------------------------------- ;+++++++++++++++++++++++++++++++++++++++++++++++++++++ ;SOBRA EL goto no_pc_2 de arriba ; 2º CORTE , NO HACE FALTA LLAMAR POR HABERLO YA HECHO DESDE EL PRIMER SENSOR movlw MensajesAlPC_SENSOR ;carga la primera posición del mensaje "SENSOR " call RS232_Mensaje ;lo visualiza en el PC 21
  • 36. OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera movlw MensajesAlPC_Sensor5 ;carga la primera posición del mensaje "5: " call RS232_Mensaje ;lo visualiza en el PC ;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC No_PC_4_1 ; éste es el segundo salto para no reflejar en PC ;------------------------------------- movlw .3 ; Se coloca para visualización en la T5:XXº T6: call LCD_PosicionLinea3 ; primera línea. btfss TempSigno_4,7 ; ¿Temperatura negativa?. goto TemperaturaPositiva_4 ; No, la temperatura es positiva. TemperaturaNegativa_4 ;Si el el sensor Falla daria -0º y no puede ser. Por tanto para que salga en blanco: movf TempSensor_4,F btfsc STATUS,Z ;¿Es cero?, ¿Z=1? Si Z=1 "el Registro vale 0" goto EliminarMenosCero_4 ;Si el valor es cero eliminar el menos -0º ;si es Z=0 el registro NO vale 0 por tanto escribir - ;Si el registro No vale Cero ponerle el signo - movlw '-' ; Visualiza el signo "-" de temperatura negativa. call LCD_Caracter ;--------------------------------------------------------------------------------------- ;activar El "Flag_Es_Negativo" Para ver o no ver el signo 'º' por falta de espacio en LCD bsf Flag_Es_Negativo,0 ;--------------------------------------------------------------------------------------- ;_______________________________________________________________________ ;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC goto No_PC_4_2 ; ;------------------------------------- ;PARA LLEVARLO AL PC En negativo movlw '-' ; Visualiza el signo "-" de temperatura negativa. en el PC call RS232_EnviaDato ;--------------------------------------- ;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC No_PC_4_2 ; éste es el tercer salto para no reflejar en PC ;------------------------------------- nop ;se puede quitar TemperaturaPositiva_4 movf TempSensor_4,W ; Visualiza el valor absoluto de la temperatura, call BIN_a_BCD ; pasándola previamente a BCD. call Temperatura_En_LCD ;para ver la temperatura suprimiendo el cero no significativo ej "089" saldrá "89" ;+++++++++++++AÑADIDO PARTE DECIMAL++++++++++++++++ movf DS1624_Decimal_4,F ;para ver si tiene el valor .0º en cuyo caso no visualizarlo en la LCD por falta de espacio btfsc STATUS,Z ;Si Z=1 es CERO LA PARTE DECIMAL .0º goto Decimal_4_Es_Cero ;como es cero NO REPRESENTARLO y ponerle 'º' ;Si Z=0 NO ES CERO y por tanto visualizar el '.' y el 'º' movlw '.' ; Visualiza el punto decimal. call LCD_Caracter movf DS1624_Decimal_4,W ;Visualiza la parte decimal call LCD_Nibble ;Visualiza en el lugar actual de la pantalla el valor HEXADECIMAL que almacena el nibble bajo del registro (W). El ;nibble alto en (W) no es tenido en cuenta ej: si (W) = 0101 0110 se visualiza "6" 22
  • 37. OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera ; si (W) es 1010 1110, se visualiza "E" ;------------lo he suprimido de la libreria Temperatura_a_LCD.INC------------- btfsc Flag_TresCaracteres,0 ;Si tiene tres Caracteres la parte entera NO PONER 'º' por razón de NO TENER espacio goto Continua_4 ; ;Se representa el signo "º" Decimal_4_Es_Cero movlw MensajeGradoCentigrado ; En pantalla aparece "º". call LCD_Mensaje ;++++++++++++++++++++++++++++++++++++++++++++++++++++ ;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC ;ACTIVAR LAS SALIDAS comparando con los valores de la EEPROM programados Continua_4 btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC goto Histerisis_4 ;Se va a Activar o Desactivar la salida ;;;;;No_PC_4 ; ;------------------------------------- ;-------------------------------------------------------------- movf DS1624_Decimal_4,W ;para poder ver el valor en decimal de cada sensor librería "temperatura_a_PC.INC" movwf DS1624_Decimal ;-------------------------------------------------------------- movf TempSensor_4,W ; Visualiza el valor absoluto de la temperatura, call Temperatura_En_PC ;Desde aquí se verán las centenas-decenas-unidades en el PC ; call RetornoCarro_Y_CambioLinea ; hace cambio de linea con retorno ;--------------------------------------------------------------------------------------- ;+++++ACTIVA LA SALIDA CORRESPONDIENTE ENTRE LOS VALORES DE HISTERISIS ESTABLECIDOS++++++ ;++++++ENTRE LA TempMin_4 y TempMax_4. Es decir sólo activa entre estos valores++++++++ ;--------------------------------------------------------------------------------------- Histerisis_4 btfss TempSigno_4,7 ;Si el último bit es un "1" Es una temperatura Negativa. goto EsPositivo_4 goto EsNegativo_4 EsPositivo_4 movf TempSensor_4,W ;Carga el Valor (+) de la Temperatura en (W) goto Activar_Desactivar_Salidas_4 ;Se va a Activar o Desactivar la salida EsNegativo_4 movf GlobalNegativa_4,W ;Carga el Valor (-) de la Temperatura en (W) se encuentra en libreria "DS1624_Modificado_0.INC" movwf TempSensor_4 ;y ya en VALOR NEGATIVO lo llevo a TempSensor_1 ;goto Activar_Desactivar_Salidas ;Se va a Activar o Desactivar la salida Activar_Desactivar_Salidas_4 ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ;----------------------------------------------------------------- ;Si la Temperatura del Sensor (TempSensor_x)está por debajo de la TempMin_X estará activa la Salida. Y se mantendrá activa hasta ;alcanzar la TempMax_X . Nota si partimos de una temperatura del sensor comprendida entre dichos valores No estará activa la salida ;hasta quedar por debajo de la TempMini_X. ;(La otras instrucciones que tenía la salida estaría activa siempre que la temperatura del sensor estuviese entre los valores ; de la TempMin y la TempMax) ;----------------------------------------------------------------- movf TempMax_4,W subwf TempSensor_4,W btfsc STATUS,C ;¿C=0? TempSensor_4 < (TempMax_4) bcf PORTC,4 ;Desactiva la salida 4 de PORTC por ser Mayor o igual la TempMax_4 que la del TempSensor_4 23
  • 38. OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera movf TempMin_4,W subwf TempSensor_4,W btfss STATUS,C ;¿C=1? (TempMin_4) >= TempSensor_4 bsf PORTC,4 ;Activa la salida 4 de PORTC por ser Mayor la TempMin_4 que la del Sensor_4 ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ;-----------------PARA VER EN LCD LA TEMPERATURA DEL Sensor_5--------------------- ;-------------------ESTE COMIENZA EN LA LÍNEA 3 posición .11 ------------------------- VisualizaTermometro_LCD_5 ;EN PANTALLA LCD ;--------------------------------------- ;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC goto No_PC_5_1 ; ;------------------------------------- ;+++++++++++++++++++++++++++++++++++++++++++++++++++++ ;SOBRA EL goto no_pc_2 de arriba ; 2º CORTE , NO HACE FALTA LLAMAR POR HABERLO YA HECHO DESDE EL PRIMER SENSOR movlw MensajesAlPC_SENSOR ;carga la primera posición del mensaje "SENSOR " call RS232_Mensaje ;lo visualiza en el PC movlw MensajesAlPC_Sensor6 ;carga la primera posición del mensaje "6: " call RS232_Mensaje ;lo visualiza en el PC ; movlw MensajesAlPC_Sensor6 ;carga la primera posición del mensaje "SENSOR 6: " ; call RS232_Mensaje ;lo visualiza en el PC ;++++++++++++++++++++++++++++++++++++++++++++++++++++ ;EL TABULADOR NO ACTÚA EN EL PROTEUS PERO LUEGO EN LA PRÁCTICA SÍ ACTÚA. ver ejemplo "Termometro_4_LM35" ; movlw TabuladorH ;Un tabulador horizontal ; call RS232_EnviaDato ;------------------------------------------------ ;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC No_PC_5_1 ; éste es el segundo salto para no reflejar en PC ;------------------------------------- movlw .11 ; Se coloca para visualización en la T5: T6:XXº call LCD_PosicionLinea3 ; TERCERA línea. btfss TempSigno_5,7 ; ¿Temperatura negativa?. goto TemperaturaPositiva_5 ; No, la temperatura es positiva. TemperaturaNegativa_5 ;Si el el sensor Falla daria -0º y no puede ser. Por tanto para que salga en blanco: movf TempSensor_5,F btfsc STATUS,Z ;¿Es cero?, ¿Z=1? Si Z=1 "el Registro vale 0" goto EliminarMenosCero_5 ;Si el valor es cero eliminar el menos -0º ;si es Z=0 el registro NO vale 0 por tanto escribir - ;Si el registro No vale Cero ponerle el signo - movlw '-' ; Visualiza el signo "-" de temperatura negativa. call LCD_Caracter ;--------------------------------------------------------------------------------------- ;activar El "Flag_Es_Negativo" Para ver o no ver el signo 'º' por falta de espacio en LCD bsf Flag_Es_Negativo,0 24
  • 39. OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera ;--------------------------------------------------------------------------------------- ;_______________________________________________________________________ ;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC goto No_PC_5_2 ; ;------------------------------------- ;PARA LLEVARLO AL PC En negativo movlw '-' ; Visualiza el signo "-" de temperatura negativa. en el PC call RS232_EnviaDato ;--------------------------------------- ;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC No_PC_5_2 ; éste es el tercer salto para no reflejar en PC ;------------------------------------- nop ;se puede quitar TemperaturaPositiva_5 movf TempSensor_5,W ; Visualiza el valor absoluto de la temperatura, call BIN_a_BCD ; pasándola previamente a BCD. call Temperatura_En_LCD ;para ver la temperatura suprimiendo el cero no significativo ej "089" saldrá "89" ;+++++++++++++AÑADIDO PARTE DECIMAL++++++++++++++++ movf DS1624_Decimal_5,F ;para ver si tiene el valor .0º en cuyo caso no visualizarlo en la LCD por falta de espacio btfsc STATUS,Z ;Si Z=1 es CERO LA PARTE DECIMAL .0º goto Decimal_5_Es_Cero ;como es cero NO REPRESENTARLO y ponerle 'º' ;Si Z=0 NO ES CERO y por tanto visualizar el '.' y el 'º' movlw '.' ; Visualiza el punto decimal. call LCD_Caracter movf DS1624_Decimal_5,W ;Visualiza la parte decimal call LCD_Nibble ;Visualiza en el lugar actual de la pantalla el valor HEXADECIMAL que almacena el nibble bajo del registro (W). El ;nibble alto en (W) no es tenido en cuenta ej: si (W) = 0101 0110 se visualiza "6" ; si (W) es 1010 1110, se visualiza "E" ;------------lo he suprimido de la libreria Temperatura_a_LCD.INC------------- btfsc Flag_TresCaracteres,0 ;Si tiene tres Caracteres la parte entera NO PONER 'º' por razón de NO TENER espacio goto Continua_5 ; ;Se representa el signo "º" Decimal_5_Es_Cero movlw MensajeGradoCentigrado ; En pantalla aparece "º". call LCD_Mensaje ;++++++++++++++++++++++++++++++++++++++++++++++++++++ ;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC ;ACTIVAR LAS SALIDAS comparando con los valores de la EEPROM programados Continua_5 btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC goto Histerisis_5 ;Se va a Activar o Desactivar la salida ;------------------------------------- ;-------------------------------------------------------------- movf DS1624_Decimal_5,W ;para poder ver el valor en decimal de cada sensor librería "temperatura_a_PC.INC" movwf DS1624_Decimal ;-------------------------------------------------------------- movf TempSensor_5,W ; Visualiza el valor absoluto de la temperatura, 25
  • 40. OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera call Temperatura_En_PC ;Desde aquí se verán las centenas-decenas-unidades en el PC ; call RetornoCarro_Y_CambioLinea ; hace cambio de linea con retorno ;--------------------------------------------------------------------------------------- ;+++++ACTIVA LA SALIDA CORRESPONDIENTE ENTRE LOS VALORES DE HISTERISIS ESTABLECIDOS++++++ ;++++++ENTRE LA TempMin_5 y TempMax_5. Es decir sólo activa entre estos valores++++++++ ;--------------------------------------------------------------------------------------- Histerisis_5 btfss TempSigno_5,7 ;Si el último bit es un "1" Es una temperatura Negativa. goto EsPositivo_5 goto EsNegativo_5 EsPositivo_5 movf TempSensor_5,W ;Carga el Valor (+) de la Temperatura en (W) goto Activar_Desactivar_Salidas_5 ;Se va a Activar o Desactivar la salida EsNegativo_5 movf GlobalNegativa_5,W ;Carga el Valor (-) de la Temperatura en (W) se encuentra en libreria "DS1624_Modificado_0.INC" movwf TempSensor_5 ;y ya en VALOR NEGATIVO lo llevo a TempSensor_5 ;goto Activar_Desactivar_Salidas ;Se va a Activar o Desactivar la salida Activar_Desactivar_Salidas_5 ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ;----------------------------------------------------------------- ;Si la Temperatura del Sensor (TempSensor_x)está por debajo de la TempMin_X estará activa la Salida. Y se mantendrá activa hasta ;alcanzar la TempMax_X . Nota si partimos de una temperatura del sensor comprendida entre dichos valores No estará activa la salida ;hasta quedar por debajo de la TempMini_X. ;(La otras instrucciones que tenía la salida estaría activa siempre que la temperatura del sensor estuviese entre los valores ; de la TempMin y la TempMax) ;----------------------------------------------------------------- movf TempMax_5,W subwf TempSensor_5,W btfsc STATUS,C ;¿C=0? TempSensor_5 < (TempMax_5) bcf PORTC,5 ;Desactiva la salida 5 de PORTC por ser Mayor o igual la TempMax_5 que la del TempSensor_5 movf TempMin_5,W subwf TempSensor_5,W btfss STATUS,C ;¿C=1? (TempMin_5) >= TempSensor_5 bsf PORTC,5 ;Activa la salida 5 de PORTC por ser Mayor la TempMin_5 que la del Sensor_5 ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ;-----------------PARA VER EN LCD LA TEMPERATURA DEL Sensor_6--------------------- ;-------------------ESTE COMIENZA EN LA LÍNEA 4 posición .3 ------------------------- VisualizaTermometro_LCD_6 ;EN PANTALLA LCD ;--------------------------------------- ;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC goto No_PC_6_1 ; ;------------------------------------- ;+++++++++++++++++++++++++++++++++++++++++++++++++++++ ;SOBRA EL goto no_pc_2 de arriba ; 2º CORTE , NO HACE FALTA LLAMAR POR HABERLO YA HECHO DESDE EL PRIMER SENSOR 26
  • 41. OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera movlw MensajesAlPC_SENSOR ;carga la primera posición del mensaje "SENSOR " call RS232_Mensaje ;lo visualiza en el PC movlw MensajesAlPC_Sensor7 ;carga la primera posición del mensaje "1: " call RS232_Mensaje ;lo visualiza en el PC ;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC No_PC_6_1 ; éste es el segundo salto para no reflejar en PC ;------------------------------------- movlw .3 ; Se coloca para visualización en la T7:XXº T8: call LCD_PosicionLinea4 ; CUARTA línea. btfss TempSigno_6,7 ; ¿Temperatura negativa?. goto TemperaturaPositiva_6 ; No, la temperatura es positiva. TemperaturaNegativa_6 ;Si el el sensor Falla daria -0º y no puede ser. Por tanto para que salga en blanco: movf TempSensor_6,F btfsc STATUS,Z ;¿Es cero?, ¿Z=1? Si Z=1 "el Registro vale 0" goto EliminarMenosCero_6 ;Si el valor es cero eliminar el menos -0º ;si es Z=0 el registro NO vale 0 por tanto escribir - ;Si el registro No vale Cero ponerle el signo - movlw '-' ; Visualiza el signo "-" de temperatura negativa. call LCD_Caracter ;--------------------------------------------------------------------------------------- ;activar El "Flag_Es_Negativo" Para ver o no ver el signo 'º' por falta de espacio en LCD bsf Flag_Es_Negativo,0 ;--------------------------------------------------------------------------------------- ;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC goto No_PC_6_2 ; ;------------------------------------- ;PARA LLEVARLO AL PC En negativo movlw '-' ; Visualiza el signo "-" de temperatura negativa. en el PC call RS232_EnviaDato ;--------------------------------------- ;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC No_PC_6_2 ; éste es el tercer salto para no reflejar en PC nop ;se puede quitar TemperaturaPositiva_6 movf TempSensor_6,W ; Visualiza el valor absoluto de la temperatura, call BIN_a_BCD ; pasándola previamente a BCD. call Temperatura_En_LCD ;para ver la temperatura suprimiendo el cero no significativo ej "089" saldrá "89" ;+++++++++++++AÑADIDO PARTE DECIMAL++++++++++++++++ movf DS1624_Decimal_6,F ;para ver si tiene el valor .0º en cuyo caso no visualizarlo en la LCD por falta de espacio btfsc STATUS,Z ;Si Z=1 es CERO LA PARTE DECIMAL .0º goto Decimal_6_Es_Cero ;como es cero NO REPRESENTARLO y ponerle 'º' ;Si Z=0 NO ES CERO y por tanto visualizar el '.' y el 'º' movlw '.' ; Visualiza el punto decimal. call LCD_Caracter movf DS1624_Decimal_6,W ;Visualiza la parte decimal call LCD_Nibble ;Visualiza en el lugar actual de la pantalla el valor HEXADECIMAL 27
  • 42. OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera que almacena el nibble bajo del registro (W). El ;nibble alto en (W) no es tenido en cuenta ej: si (W) = 0101 0110 se visualiza "6" ; si (W) es 1010 1110, se visualiza "E" ;------------lo he suprimido de la libreria Temperatura_a_LCD.INC------------- btfsc Flag_TresCaracteres,0 ;Si tiene tres Caracteres la parte entera NO PONER 'º' por razón de NO TENER espacio goto Continua_6 ; ;Se representa el signo "º" Decimal_6_Es_Cero movlw MensajeGradoCentigrado ; En pantalla aparece "º". call LCD_Mensaje ;++++++++++++++++++++++++++++++++++++++++++++++++++++ ;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC ;ACTIVAR LAS SALIDAS comparando con los valores de la EEPROM programados Continua_6 btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC goto Histerisis_6 ;Se va a Activar o Desactivar la salida ;;;;;No_PC_4 ; ;------------------------------------- ;-------------------------------------------------------------- movf DS1624_Decimal_6,W ;para poder ver el valor en decimal de cada sensor librería "temperatura_a_PC.INC" movwf DS1624_Decimal ;-------------------------------------------------------------- movf TempSensor_6,W ; Visualiza el valor absoluto de la temperatura, call Temperatura_En_PC ;Desde aquí se verán las centenas-decenas-unidades en el PC ; call RetornoCarro_Y_CambioLinea ; hace cambio de linea con retorno ;--------------------------------------------------------------------------------------- ;+++++ACTIVA LA SALIDA CORRESPONDIENTE ENTRE LOS VALORES DE HISTERISIS ESTABLECIDOS++++++ ;++++++ENTRE LA TempMin_6 y TempMax_6. Es decir sólo activa entre estos valores++++++++ ;--------------------------------------------------------------------------------------- Histerisis_6 btfss TempSigno_6,7 ;Si el último bit es un "1" Es una temperatura Negativa. goto EsPositivo_6 goto EsNegativo_6 EsPositivo_6 movf TempSensor_6,W ;Carga el Valor (+) de la Temperatura en (W) goto Activar_Desactivar_Salidas_6 ;Se va a Activar o Desactivar la salida EsNegativo_6 movf GlobalNegativa_6,W ;Carga el Valor (-) de la Temperatura en (W) se encuentra en libreria "DS1624_Modificado_0.INC" movwf TempSensor_6 ;y ya en VALOR NEGATIVO lo llevo a TempSensor_1 ;goto Activar_Desactivar_Salidas ;Se va a Activar o Desactivar la salida Activar_Desactivar_Salidas_6 ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ;----------------------------------------------------------------- ;Si la Temperatura del Sensor (TempSensor_x)está por debajo de la TempMin_X estará activa la Salida. Y se mantendrá activa hasta ;alcanzar la TempMax_X . Nota si partimos de una temperatura del sensor comprendida entre dichos valores No estará activa la salida ;hasta quedar por debajo de la TempMini_X. ;(La otras instrucciones que tenía la salida estaría activa siempre que la temperatura del sensor estuviese entre los valores ; de la TempMin y la TempMax) ;----------------------------------------------------------------- movf TempMax_6,W subwf TempSensor_6,W btfsc STATUS,C ;¿C=0? TempSensor_6 < (TempMax_6) 28
  • 43. OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera bcf PORTC,6 ;Desactiva la salida 6 de PORTC por ser Mayor o igual la TempMax_6 que la del TempSensor_6 movf TempMin_6,W subwf TempSensor_6,W btfss STATUS,C ;¿C=1? (TempMin_6) >= TempSensor_6 bsf PORTC,6 ;Activa la salida 6 de PORTC por ser Mayor la TempMin_6 que la del Sensor_6 ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ;-----------------PARA VER EN LCD LA TEMPERATURA DEL Sensor_7--------------------- ;-------------------ESTE COMIENZA EN LA LÍNEA 4 posición .11 ------------------------- VisualizaTermometro_LCD_7 ;EN PANTALLA LCD ;--------------------------------------- ;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC goto No_PC_7_1 ; ;------------------------------------- ;+++++++++++++++++++++++++++++++++++++++++++++++++++++ ;SOBRA EL goto no_pc_2 de arriba ; 2º CORTE , NO HACE FALTA LLAMAR POR HABERLO YA HECHO DESDE EL PRIMER SENSOR movlw MensajesAlPC_SENSOR ;carga la primera posición del mensaje "SENSOR " call RS232_Mensaje ;lo visualiza en el PC movlw MensajesAlPC_Sensor8 ;carga la primera posición del mensaje "8: " call RS232_Mensaje ;lo visualiza en el PC ;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC No_PC_7_1 ; éste es el segundo salto para no reflejar en PC ;------------------------------------- movlw .11 ; Se coloca para visualización en la T7: T8:XXº call LCD_PosicionLinea4 ; TERCERA línea. btfss TempSigno_7,7 ; ¿Temperatura negativa?. goto TemperaturaPositiva_7 ; No, la temperatura es positiva. TemperaturaNegativa_7 ;Si el el sensor Falla daria -0º y no puede ser. Por tanto para que salga en blanco: movf TempSensor_7,F btfsc STATUS,Z ;¿Es cero?, ¿Z=1? Si Z=1 "el Registro vale 0" goto EliminarMenosCero_7 ;Si el valor es cero eliminar el menos -0º ;si es Z=0 el registro NO vale 0 por tanto escribir - ;Si el registro No vale Cero ponerle el signo - movlw '-' ; Visualiza el signo "-" de temperatura negativa. call LCD_Caracter ;--------------------------------------------------------------------------------------- ;activar El "Flag_Es_Negativo" Para ver o no ver el signo 'º' por falta de espacio en LCD bsf Flag_Es_Negativo,0 ;--------------------------------------------------------------------------------------- ;_______________________________________________________________________ ;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC goto No_PC_7_2 ; ;------------------------------------- 29
  • 44. OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera ;PARA LLEVARLO AL PC En negativo movlw '-' ; Visualiza el signo "-" de temperatura negativa. en el PC call RS232_EnviaDato ;--------------------------------------- ;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC No_PC_7_2 ; éste es el tercer salto para no reflejar en PC ;------------------------------------- nop ;se puede quitar TemperaturaPositiva_7 movf TempSensor_7,W ; Visualiza el valor absoluto de la temperatura, call BIN_a_BCD ; pasándola previamente a BCD. call Temperatura_En_LCD ;para ver la temperatura suprimiendo el cero no significativo ej "089" saldrá "89" ;+++++++++++++AÑADIDO PARTE DECIMAL++++++++++++++++ movf DS1624_Decimal_7,F ;para ver si tiene el valor .0º en cuyo caso no visualizarlo en la LCD por falta de espacio btfsc STATUS,Z ;Si Z=1 es CERO LA PARTE DECIMAL .0º goto Decimal_7_Es_Cero ;como es cero NO REPRESENTARLO y ponerle 'º' ;Si Z=0 NO ES CERO y por tanto visualizar el '.' y el 'º' movlw '.' ; Visualiza el punto decimal. call LCD_Caracter movf DS1624_Decimal_7,W ;Visualiza la parte decimal call LCD_Nibble ;Visualiza en el lugar actual de la pantalla el valor HEXADECIMAL que almacena el nibble bajo del registro (W). El ;nibble alto en (W) no es tenido en cuenta ej: si (W) = 0101 0110 se visualiza "6" ; si (W) es 1010 1110, se visualiza "E" ;------------lo he suprimido de la libreria Temperatura_a_LCD.INC------------- btfsc Flag_TresCaracteres,0 ;Si tiene tres Caracteres la parte entera NO PONER 'º' por razón de NO TENER espacio goto Continua_7 ; ;Se representa el signo "º" Decimal_7_Es_Cero movlw MensajeGradoCentigrado ; En pantalla aparece "º". call LCD_Mensaje ;++++++++++++++++++++++++++++++++++++++++++++++++++++ ;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC ;ACTIVAR LAS SALIDAS comparando con los valores de la EEPROM programados Continua_7 btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC goto Histerisis_7 ;Se va a Activar o Desactivar la salida ;--------SÍ QUIERO PC--------- ;-------------------------------------------------------------- movf DS1624_Decimal_7,W ;para poder ver el valor en decimal de cada sensor librería "temperatura_a_PC.INC" movwf DS1624_Decimal ;-------------------------------------------------------------- movf TempSensor_7,W ; Visualiza el valor absoluto de la temperatura, call Temperatura_En_PC ;Desde aquí se verán las centenas-decenas-unidades en el PC ; call RetornoCarro_Y_CambioLinea ; hace cambio de linea con retorno ;--------------------------------------------------------------------------------------- ;+++++ACTIVA LA SALIDA CORRESPONDIENTE ENTRE LOS VALORES DE HISTERISIS ESTABLECIDOS++++++ 30
  • 45. OYECTOSPROYECTOS TEMPERATURA OKCON DECI COMPLETOTermometro Con 16F876A _LCD20X4_Y_PCControl_I2C_8_Sensores_De_Tempera ;++++++ENTRE LA TempMin_7 y TempMax_7. Es decir sólo activa entre estos valores++++++++ ;--------------------------------------------------------------------------------------- Histerisis_7 btfss TempSigno_7,7 ;Si el último bit es un "1" Es una temperatura Negativa. goto EsPositivo_7 goto EsNegativo_7 EsPositivo_7 movf TempSensor_7,W ;Carga el Valor (+) de la Temperatura en (W) goto Activar_Desactivar_Salidas_7 ;Se va a Activar o Desactivar la salida EsNegativo_7 movf GlobalNegativa_7,W ;Carga el Valor (-) de la Temperatura en (W) se encuentra en libreria "DS1624_Modificado_0.INC" movwf TempSensor_7 ;y ya en VALOR NEGATIVO lo llevo a TempSensor_1 ;goto Activar_Desactivar_Salidas ;Se va a Activar o Desactivar la salida Activar_Desactivar_Salidas_7 ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ;----------------------------------------------------------------- ;Si la Temperatura del Sensor (TempSensor_x)está por debajo de la TempMin_X estará activa la Salida. Y se mantendrá activa hasta ;alcanzar la TempMax_X . Nota si partimos de una temperatura del sensor comprendida entre dichos valores No estará activa la salida ;hasta quedar por debajo de la TempMini_X. ;(La otras instrucciones que tenía la salida estaría activa siempre que la temperatura del sensor estuviese entre los valores ; de la TempMin y la TempMax) ;----------------------------------------------------------------- movf TempMax_7,W subwf TempSensor_7,W btfsc STATUS,C ;¿C=0? TempSensor_7 < (TempMax_7) bcf PORTC,7 ;Desactiva la salida 7 de PORTC por ser Mayor o igual la TempMax_7 que la del TempSensor_7 movf TempMin_7,W subwf TempSensor_7,W btfss STATUS,C ;¿C=1? (TempMin_7) >= TempSensor_7 bsf PORTC,7 ;Activa la salida 7 de PORTC por ser Mayor la TempMin_7 que la del Sensor_7 ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ;----------------------------------------------------------------------------------------------- call Tiempo_De_Muestreo_LCD_1; Esta en "TIEMPO_DE_MUESTREO.INC" por COMPARACION determina ;Si he elegido la opcion 1 ,2 ó 3 ; 10sg, 20 sg ó 1 Min ;Es valido aunque se vaya la LUZ por estar en EEPROM ;----------------------------------------------------------------------------------------------- goto Sensor_0; ;;;;***VisualizaTermometro_LCD_0 ;***Para salir y continuar con las siguientes instrucciones Sería AL VisualizaTermometro_LCD_2 Pero como no he puesto más vuelvo al inicial ;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC No_PC_4 ; éste es el tercer salto para no reflejar en PC ;--------------------------------- ;ESTE SERÁ EL VALOR POR DEFECTO EN CASO DE NO CONFIGURAR EN EL PC. ;si no se pone al reflejar el último sensor directamente se iria a Inicio y no se vería En la LCD ;por ello poner un retraso Standar de por ej 10 sg ;;;; call Retardo_10s ;PARA REFLEJAR DURANTE 10sg los 4 últimos sensores ;----------------------------------------------------------------------------------------------- call Tiempo_De_Muestreo_LCD_1; Está en "TIEMPO_DE_MUESTREO.INC" por COMPARACION determina ;Si he elegido la opcion 1 ,2 ó 3 ; 10sg, 20 sg ó 1 Min ;Es valido aunque se vaya la LUZ por estar en EEPROM ;----------------------------------------------------------------------------------------------- 31