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)
+ 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)
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) 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)
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
U1 3
TOUT
9.5
SCL SDA A0 A1 A2
2 1 7 6 5
SCL SDA
LM044L
U2
TOUT
20.0
SCL SDA A0 A1 A2
LCD1
Diseñado por : Joaquín Berrocal Piris
DS1621 3
Empiezan a aparecer las Temperaturas a los 13 sgs.
SENSOR "DS1621" Apreciación -> 0.5º
GND
2 1 7 6 5
SCL SDA
2 1 7 6 5
SCL SDA
LCD 4X20 (4 LÍNEAS x 20 CARACTERES)
Control de 8 Sensores de Temperatura DS1624 ó DS1621 por Bus I2C
Marzo 2011
www.iesccp.comze.com/index.php
GND
40.0
SCL SDA
Mantener pulsado para
U5
49.0
SCL SDA A0 A1 A2
2 1 7 6 5
SCL SDA GND
TOUT
60.0
SCL SDA A0 A1 A2
2 1 7 6 5
69.0
SCL SDA A0 A1 A2
2 3 4 5 6 7
GND SCL SDA
U7
TOUT
9 10
SCL SDA
DS1621 2 1 7 6 5
SCL SDA GND
1 10k
100
DS1621
U8 3
R15R11 10k 10k
(+) valores al PC para configurar
U10
U6
3
PONGO RB3/PGM a PULL-UP. Para evitar se reinicie al acercar el dedo a RB3/PGM
RA5_RD_PIC RA1_TX_PIC RA2 RA0
DS1621 3
7 8 9 10 11 12 13 14
10k
las TempMin , TempMax y el Tiempo de Muestreo RB1
TOUT
RS RW E
R14
desde el PC configurar GND
RB4 RB5 RB6 RB7
2 1 7 6 5
DS1621 3
4 5 6
SCL SDA RA2
SCL SDA A0 A1 A2
4k7
GND
U4
TOUT
R3
4k7
DS1621 3
R4
RA0
29.0
SCL SDA A0 A1 A2
1 2 3
TOUT
VSS VDD VEE
U3 3
D0 D1 D2 D3 D4 D5 D6 D7
DS1621
TOUT
80.0
SCL SDA A0 A1 A2
2 1 7 6 5
SCL SDA
OSC1/CLKIN OSC2/CLKOUT
RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD
RA0/AN0 RA1/AN1 RA2/AN2/VREF-/CVREF RA3/AN3/VREF+ RA4/T0CKI/C1OUT RA5/AN4/SS/C2OUT RC0/T1OSO/T1CKI MCLR/Vpp/THV RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RC4/SDI/SDA RC5/SDO RC6/TX/CK RC7/RX/DT
21 22 23 24 25 26 27 28
RB0 RB1
RB0
RB4 RB5 RB6 RB7
(-) sólo al LCD no hay comunicación con el PC
R2
11 12 13 14 15 16 17 18
350 350 350 350 350 350 350 350
U11 1 2 3 4 5 6 7 8 9 10
20 19 18 17 16 15 14 13 12 11
PIC16F876A
NOTA: Ver NOTA en "Desing>Edit Desing Notes..." Reset
El "DS1621" tienen una apreciación de SÓLO 0.5º por ello, le pongo a su propiedad "granularity" 0.5
DS1621
Los "DS1624" SÍ tienen una apreciación de 0.03125º PERO el "PROTEUS" SÓLO tiene el "DS1621"
RA1_TX_PIC RA5_RD_PIC
RXD TXD
PUERTO SERIE
RTS
( HIPERTERMINAL )
CTS
LED-BARGRAPH-GRN
Pas Pas 0 1
470
Pas 1
Tx el Pic Transmite "Rojo"
LEDS de 3 mm
16 Pwr 0
VCC
BUS I2C
R11
+5V
Pas 1 SDA-RA4
Pas 1
4K7 Pas 1 SCL-RA3
RB7 RB6 RB5 RB4
RC7 RC6 RC5 RC4
SDA-RA4 SCL-RA3 SDA-RA4 SCL-RA3 SDA-RA4
19 8
(SDA) (SCL) (-) (+)
JP4 SDA-RA4 SCL-RA3
PIC16876P
1 2 3 Pas 04 Pas 05 Pas 06 Pas 07 Pas 08 Pas 09 Pas 10 0 Pas 11 0 Pas 12 0 Pas 13 0 Pas 14 0 Pas 15 0 Pas 16 0 Pas 0 Pas 0 Pas 0
SDA-RA4 SCL-RA3
GND
Y así con todos los demás Sensores y Leds.
Pas 0 Pas 0
RC0
RA5_RD_PIC SDA-RA4 SCL-RA3 JP3
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
1 2 3 Pas 04 Pas 05 Pas 06 Pas 07 Pas 08 Pas 09 Pas 10 0 Pas 11 0 Pas 12 0 Pas 13 0 Pas 14 0 Pas 15 0 Pas 16 0 Pas 0
+5V
SDA-RA4 SCL-RA3
Sup 0
+5V
10K Pas 1
R18
Pas Sup 1 0
RB4 RB5 RB6 RB7 20 PwrSup0 0
+5V
RA0 RA2
R12 4K7
+5V
Sup 0
Sup 0
+ LED
Sup 0 1 Pas 1
Pas 1 Sup 0
VSS VDD VEE RS RW E D0 D1 D2 D3 D4 D5 D6 D7 Pas 0
Pas 0
Pas 0
1 2 3 Pas 04 Pas 05 Pas 06 Pas 07 Pas 08 Pas 09 Pas 10 0 Pas 11 0 Pas 12 0 Pas 13 0 Pas 14 0 Pas 15 0 Pas 16 0
JP1
+5V
Sup 0
RA5_RD_PIC RA2 RA1_TX_PIC RA0 MCLR-RESET
Pas 1
15 pF 15 pF
Sup 0
JP2
BUS I2C
SDA-RA4
Sup 0
Pas 0
470 R17
18 I/O 0 17 I/O 0 16 I/O 0 15 I/O 0
CONEXIÓN SENSORES TEMPERATURA "DS1621 ó DS1624"
RB1 RB0
Pas 1
LED11
R16 RxPasel1 Pic Recibe "Verde"
RC7 RC6 SDO/RC5 SDI/RC4
Pas 1
Pas Pas 0 1
Sup 0
+5V
LED10
RC0/T1OSO RC1/T1OSI RC2/CCP1 RC3/SCK VSS
28 I/O 0 27 I/O 0 26 I/O 0 25 I/O 0 24 I/O 0 23 I/O 0 22 I/O 0 21 I/O 0
Pas 1
14 Out 0 7 Out 0 13 In 0 8 In 0
RA1_TX_PIC
OSC1/CLKIN OSC2/CLKOUT
Pwr 0
T1OUT T1IN T2OUT T2IN R1OUT R1IN R2OUT R2IN
GND
Pas 1
11 I/O 0 12 I/O 0 13 I/O 0 14 I/O 0
Pwr Sup 0 0
GND
Pas 1
9 10
Pas 1
C2-
Pas 0
4 MHZ Pas 1 2 Q1
C2+
C3
+
Pas 0
Sup 0
I/O 0
C10
6
MAX232
Pas 0
1 uF
C9 +
In 0 Out 0
RC7
11 10 12 9
Pas 0
I/O 0
PGD/RB7 PGC/RB6 RB5 RB4 PGM/RB3 RB2 RB1 INT/RB0
8Pas 0 7Pas 0 6Pas 0 5Pas 0 4Pas 0 3Pas 0 2Pas 0 1Pas 0
X2
Out 0
Pas 0
I/O 0
Pas 1
RA0/AN0 RA1/AN1 RA2/AN2 RA3/AN3 RA4/T0CKI RA5/AN4
Pas 1
In 0 Out 0
V-
I/O 0
I/O 0
2 3 4 5 6 7
Pas 1
In 0
Pas 0
C1-
2
1 uF
5
I/O 0
C4
GND
C11
100n 4
I/O 0
Pas 1
MCLR/THV
Pas 1
TxD RxD
I/O 0
V+
I/O 0
1
RC0 RC1 RC2 RC3
Pas 0
Pas 0
Pas 1
Pas 1
Pas 0
C7
1 uF
+
3
1 2
Pull Up RB3. Evita se reinicia tocar patilla RB3
VDD
I/O 0
3 4
Pas 1
C1+
IC1
In 0
SDA-RA4
Pas 0
I/O 0
1
Pas 2
MCLR-RESET
Pas 1
Pas 1
S1 Pas 2
Sup 0 Sup 0
+5V
GND Pas 0
I/O 0
C8
5 4 3 2 1
1 uF
9 8 7 6
Pas 0
Sup 0
+5V +5V
Pas 1
Pas 1
GND
GND
SCL-RA3
Pas 0
Pas 1
IC4 +
Pas 0
GND Sup 0
Pas 0
1 2
RESET
Pas 0
Pas 0
3 4
GND
RS232
Patilla 3: TxD Patilla 2: RxD En el EAGLE: Con-subd F09HP
Sup 0
Pas 2
RB1
100
Pas 2
Pas Sup 1 0
10K
Mantener Pulsado para desde el PC configurar S4 las TempMin,TempMax y el Tiempo de Muestreo
Pas 0
R14
RB1Pas 1
GND
Sup 0 Pas 1
GND
15 Sup Pwr 0 0
+5V
Pas 1
Pas 1
10K
Pas 0
S3 ON + TL36PO
R10
3
Sup 0
R13 10K
2
R9
Pas 0
EAGLE;(EI42-1)-->TRANSF ENCAPSULADO :(TR9V6VA)
RB0Pas 1
(+) Valores al PC para configurar OFF (-) 1 Pas 0 RB0 (-) Solo al LCD NO Comunica con PC
LCD 4X16 ó LCD 4X20
RB1
2Pas 0 1Pas 0
Sup 0
Pas 1
Pas 2
5
IC4P
1K Pas Pas 10
1 2 Pas 0
Pas 0
Pas 0
7 Pas 1
JP6
Pas 0 X3-2 220 VAC
Pas 2
SEC
PRI
9
JP5
1
Pas 1
Pas 0 Sup 0
+5V Pas 1
In 0
Pas 0
GND
TR1
220 VOLT ALTERNA Pas 0 X3-1
Comandos para situar el cursor en el Inicio de Línea LCD 4X16 LCD 4X20 Línea1; 0x 80 b'1000 0000' Línea 1 0x 80 b'1000 0000' Línea 2; 0x C0 b'1100 0000' Línea 2; 0x C0 b'1100 0000' Línea3; 0x 90 b'1001 0000' Línea 3; 0x 94 b'1001 0100' GND Línea4; 0x D0 b'1101 0000' Línea 4; 0x D4 b'1101 0100'
220 uF
470 k
LED9
Puentes para utilizar o no el transformador como alimentación
IC2
(+ 16) y (- 15) C2
Sup 0
9 VOL CC 6VA
X1-2 >= 9 VCC
C5
+
+
220 uF Pas 0
Pas 0
OUT GND
Pas 0
X1-1
>=9 Vcc
IN
C1
Pas 0
Pas 0
In 0
Pas 1
Sup 0
+12V
Realizado con "Invoque"
400 LED1
Pas 0
LED2
Pas Pas 0 1
400 R1
400 R2 Pas 0
LED3
Pas Pas 0 1
400 R3
GND
Pas 0
LED4
Pas Pas 0 1
400 R4 Pas Pas 0 1 Pas 0 Sup 0
Pas 0
LED5
Pas Pas 0 1
400 R5 LED6
Pas 0
LED7
Pas Pas 0 1
400 R6
400 R7 Pas Pas 0 1 Pas 0
Pas 0
LED8
Pas Pas 0 1
R8
GND
Autor: Joaquín Berrocal Piris
11/01/2012 10:08:16 f=0.71 C:\MIS PROYECTOS\PROYECTOS TEMPERATURA OK\ARCHIVOS CNC Y EAGLE SENSORES DS1621 PARA LCD\CNC 3 PASADAS 100X108para 0,4
F09
2,54
2
S1
I - O IC2 7805
6 1
9 5
X2 1 uF C2
C7 1 uF
C8
220 uF MAX232
LED10 LED11
JP1
EI42-1
P1
X3 220 VAC
IC4
TR1 1
C1
S3
2
4 3
S1
470 R16 470 R17 2
IC1
R9 100 R10 10K R11 4K7 R12 4K7
>= 9 VCC X1 1
Falta puentear con SCL
R8 400
10K + R14R13 10K SCL SDA
LED8
1
R7 400
R15 1K
LED7
1 uF
1
C4
4 MHZ 15 pF
Q115 pF
C3
R6 400
S4 R18 10K
LED6
PIC16876P
R5 400
2
LED5
C9
C10
100n
R4 400
3
LED4
R3 400
1 uF
470 C11 k
JP5
4
LED3
JP6
R2 400
TL36PO
JP3
LED2
R1 400
LED9
LED1
220 uF C5
JP4 JP2
- +
11/01/2012 9:21:50 C:\MIS PROYECTOS\PROYECTOS TEMPERATURA OK\ARCHIVOS CNC Y EAGLE SENSORES DS1621
F09
2,54
2
S1
I - O IC2 7805
6 1
9 5
X2 1 uF C2
C7 1 uF
C8
220 uF MAX232
LED10 LED11
JP1
EI42-1
P1
X3 220 VAC
IC4
TR1 1
C1
S3
2
4 3
S1
470 R16 470 R17 2
IC1
R9 100 R10 10K R11 4K7 R12 4K7
>= 9 VCC X1 1
Falta puentear con SCL
R8 400
10K + R14R13 10K SCL SDA
LED8
1
R7 400
R15 1K
LED7
1 uF
1
C4
4 MHZ 15 pF
Q115 pF
C3
R6 400
S4 R18 10K
LED6
PIC16876P
R5 400
2
LED5
C9
C10
100n
R4 400
3
LED4
R3 400
1 uF
470 C11 k
JP5
4
LED3
JP6
R2 400
TL36PO
JP3
LED2
R1 400
LED9
LED1
220 uF C5
JP4 JP2
- +
11/01/2012 9:10:33 C:\MIS PROYECTOS\PROYECTOS TEMPERATURA OK\ARCHIVOS CNC Y EAGLE SENSORES DS1621
F09
2,54
2
S1
I - O IC2 7805
6 1
9 5
X2 1 uF C2
C7 1 uF
C8
220 uF MAX232
LED10 LED11
JP1
EI42-1
P1
X3 220 VAC
IC4
TR1 1
C1
S3
2
4 3
S1
470 R16 470 R17 2
IC1
R9 100 R10 10K R11 4K7 R12 4K7
>= 9 VCC X1 1
Falta puentear con SCL
R8 400
10K + R14R13 10K SCL SDA
LED8
1
R7 400
R15 1K
LED7
1 uF
1
C4
4 MHZ 15 pF
Q115 pF
C3
R6 400
S4 R18 10K
LED6
PIC16876P
R5 400
2
LED5
C9
C10
100n
R4 400
3
LED4
R3 400
1 uF
470 C11 k
JP5
4
LED3
JP6
R2 400
TL36PO
JP3
LED2
R1 400
LED9
LED1
220 uF C5
JP4 JP2
- +
11/01/2012 9:20:24 C:\MIS PROYECTOS\PROYECTOS TEMPERATURA OK\ARCHIVOS CNC Y EAGLE SENSORES DS1621
F09
2,54
2
S1
I - O IC2 7805
6 1
9 5
X2 1 uF C2
C7 1 uF
C8
220 uF MAX232
LED10 LED11
JP1
EI42-1
P1
X3 220 VAC
IC4
TR1 1
C1
S3
2
4 3
S1
470 R16 470 R17 2
IC1
R9 100 R10 10K R11 4K7 R12 4K7
>= 9 VCC X1 1
Falta puentear con SCL
R8 400
10K + R14R13 10K SCL SDA
LED8
1
R7 400
R15 1K
LED7
1 uF
1
C4
4 MHZ 15 pF
Q115 pF
C3
R6 400
S4 R18 10K
LED6
PIC16876P
R5 400
2
LED5
C9
C10
100n
R4 400
3
LED4
R3 400
1 uF
470 C11 k
JP5
4
LED3
JP6
R2 400
TL36PO
JP3
LED2
R1 400
LED9
LED1
220 uF C5
JP4 JP2
- +
11/01/2012 9:19:38 C:\MIS PROYECTOS\PROYECTOS TEMPERATURA OK\ARCHIVOS CNC Y EAGLE SENSORES DS1621
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_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
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera DS1624_Decimal_3 DS1624_Decimal_4 DS1624_Decimal_5 DS1624_Decimal_6 DS1624_Decimal_7
; FlagSaltarElReturn POR NO UTILIZARLO
;Para poder hacer el parpadeo de
"Leyendo Sensores": LO SUPRIMO
;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 goto
Mensajes addwf
0 Inicio
;Pone la línea 1 y 2 con las iniciales de T1:
T3:
t4:
; Los mensajes no deben sobrepasar las 256 ; primeras posiciones de memoria de programa.
PCL,F
MensajeEnBlanco DT " ", 0x00 :-0º
T2:
;Lo utilizo por si falla un Sensor aparezca en blanco su valor en lugar de
MensajeGradoCentigrado DT "º", 0x00
; En la pantalla: "ºC" "C" Se puede suprimir para que quepa un 2
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera decimal ;PARA REFLEJAR EN LCD 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
T1:
a
T8:
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 DT "
;Mensaje de Espera a leer los 8 sensores aprox 9 sgs
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 "Tmin: ",0x00
;DT RetornoCarro
MensajeAlPC_Tmax DT CambioLinea,RetornoCarro,RetornoCarro DT "Tmax: ",0x00
;DT RetornoCarro
3
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_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 DT DT DT DT DT DT DT DT DT
;SELECCIONAR TIEMPO DE MUESTREO: 1 = 10 Sg
2 = 20 Sg
3 = 30 Sg
CambioLinea, RetornoCarro,RetornoCarro "SELECCIONAR TIEMPO DE MUESTREO : " CambioLinea, RetornoCarro,RetornoCarro "1 = 10 Sg" CambioLinea, RetornoCarro "2 = 20 Sg" CambioLinea,RetornoCarro "3 = 1 Min" 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 retlw retlw retlw retlw retlw retlw retlw retlw retlw único valor retlw retlw retlw retlw retlw retlw retlw
PCL,F ;LO MISMO ES PONER "F" QUE "1" d'0' ;0; (DS1624_Decimal)=b'0000'. Mide d'1' ;1; (DS1624_Decimal)=b'0001'. Mide d'1' ;2; (DS1624_Decimal)=b'0010'. Mide d'2' ;3; (DS1624_Decimal)=b'0011'. Mide d'3' ;4; (DS1624_Decimal)=b'0100'. Mide d'3' ;5; (DS1624_Decimal)=b'0101'. Mide d'4' ;6; (DS1624_Decimal)=b'0110'. Mide d'4' ;7; (DS1624_Decimal)=b'0111'. Mide d'5' ;8; (DS1624_Decimal)=b'1000'. Mide utilizado para el DS1621 d'6' ;9; (DS1624_Decimal)=b'1001'. Mide d'6' ;10 (DS1624_Decimal)=b'1010'. Mide d'7' ;11 (DS1624_Decimal)=b'1011'. Mide d'8' ;12 (DS1624_Decimal)=b'1100'. Mide d'8' ;13 (DS1624_Decimal)=b'1101'. Mide d'9' ;14 (DS1624_Decimal)=b'1110'. Mide d'9' ;15 (DS1624_Decimal)=b'1111'. Mide
0,0000ºC. 0,0625ºC. 0,1250ºC. 0,1875ºC. 0,2500ºC. 0,3125ºC. 0,3750ºC. 0,4375ºC. 0,5000ºC.
Redondeado Redondeado Redondeado Redondeado Redondeado Redondeado Redondeado Redondeado Redondeado
a a a a a a a a a
0,0ºC. 0,1ºC. 0,1ºC. 0,2ºC. 0,3ºC. 0,3ºC. 0,4ºC. 0,4ºC. 0,5ºC.;Este es el
0,5625ºC. 0,6250ºC. 0,6875ºC. 0,7500ºC. 0,8125ºC. 0,8750ºC. 0,9375ºC.
Redondeado Redondeado Redondeado Redondeado Redondeado Redondeado Redondeado
a a a a a a a
0,6ºC. 0,6ºC. 0,7ºC. 0,8ºC. 0,8ºC. 0,9ºC. 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
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_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 movwf
b'00000110' ADCON1
;PUERTAA E/S Digitales
movlw movwf
b'00011111' TRISA
;La PUERTAA se configura como Entrada ;NO ES NECESARIO. configurarlo
bcf STATUS,RP0
clrf clrf clrf clrf
;Vuelta al BANCO 0
;INICIA LOS PUERTOS APAGANDO TODAS SUS SALIDAS PORTB PORTC Flag_No_Repetir_Programar FlagValorNegativo ;reseteo el flag
;PARA PONER clrf clrf clrf clrf clrf clrf clrf clrf
A CERO TODOS ESTOS REGISTROS TempSensor_0 TempSensor_1 TempSensor_2 TempSensor_3 TempSensor_4 TempSensor_5 TempSensor_6 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 RA5 = RD (en lugar de RA3 y RA4
;Inicializa la comunicación con el puerto Serie. RA1=TX y
;----------------------------------------------------
;++++++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
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera EEPROM_16F87XX.INC
Parpadeo movlw call movlw call
;Fijo el mensaje "ESPERE" y Parpadeante el "Leyendo Sensores" .5 LCD_PosicionLinea1 ; primera línea más el valor del registro W Espere ;Mensaje "ESPERE" LCD_Mensaje ;Visualiza el Mensaje
; En la primera línea de la pantalla aparece un mensaje fijo. call movlw call
LCD_Linea2 Leyendo_Sensores LCD_Mensaje
;------ANULO EL PARPADEO----;; call Retardo_500ms ;; call LCD_Linea2 ;; call LCD_LineaEnBlanco producir efecto intermitente ; call Retardo_500ms SUPRIMO por
; Pasa a la segunda línea. ; Apunta al mensaje parpadeante. "Leyendo Sensores" ; Lo visualiza.
; Durante este tiempo. ; Vuelve a situarse al principio de la línea 2. ; Visualiza línea en blanco.Para no ver nada en esa línea y así ; Durante este tiempo, produciendo un efecto de Parpadeo LO ;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 call call call
;para activar el flag
DS1624_Inicializa_0 Retardo_1s DS1624_LeeTemperatura
; call DS1624_IniciaConversion PONGO NO FUNCIONAN NI LOS ENTEROS -8 movwf TempSensor_0 temperaturas juntas movf movwf
DS1624_Signo,W TempSigno_0
; Configura el DS1624 e inicia la conversión. ;retardo de 1 segundos ; Lee la temperatura. ;Comienza conversión para la siguiente lectura SI LO
;lo guardo temporalmente para reflejarlo en la LCD todas las
;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
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera
;
call call call
DS1624_Inicializa_1 ; Configura el DS1624 e inicia la conversión. Retardo_1s ;retardo de 1 segundos DS1624_LeeTemperatura_1 ; Lee la temperatura.
call
DS1624_IniciaConversion_1
movwf TempSensor_1 temperaturas juntas movf movwf
DS1624_Signo,W TempSigno_1
;Comienza conversión para la siguiente lectura
;lo guardo temporalmente para reflejarlo en la LCD todas las
;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 call call
DS1624_Inicializa_2 ; Configura el DS1624 e inicia la conversión. Retardo_1s ;retardo de 1 segundos DS1624_LeeTemperatura_2 ; Lee la temperatura.
call
DS1624_IniciaConversion_2
movwf TempSensor_2 temperaturas juntas movf movwf
DS1624_Signo,W TempSigno_2
;Comienza conversión para la siguiente lectura
;lo guardo temporalmente para reflejarlo en la LCD todas las
;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 call call
DS1624_Inicializa_3 ; Configura el DS1624 e inicia la conversión. Retardo_1s ;retardo de 1 segundos DS1624_LeeTemperatura_3 ; Lee la temperatura.
call
DS1624_IniciaConversion_1
movwf TempSensor_3 temperaturas juntas movf movwf
DS1624_Signo,W TempSigno_3
;Comienza conversión para la siguiente lectura
;lo guardo temporalmente para reflejarlo en la LCD todas las
;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 call call call
;para activar el flag
DS1624_Inicializa_4 ; Configura el DS1624 e inicia la conversión. Retardo_1s ;retardo de 1 segundos DS1624_LeeTemperatura_4 ; Lee la temperatura.
; call DS1624_IniciaConversion PONGO NO FUNCIONAN NI LOS ENTEROS -8 movwf TempSensor_4 temperaturas juntas movf movwf
DS1624_Signo,W TempSigno_4
;Comienza conversión para la siguiente lectura SI LO
;lo guardo temporalmente para reflejarlo en la LCD todas las
;Para guardar temporalmente el signo del sensor 4 7
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_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 call call
DS1624_Inicializa_5 ; Configura el DS1624 e inicia la conversión. Retardo_1s ;retardo de 1 segundos DS1624_LeeTemperatura_5 ; Lee la temperatura.
call
DS1624_IniciaConversion_1
movwf TempSensor_5 temperaturas juntas movf movwf
DS1624_Signo,W TempSigno_5
;Comienza conversión para la siguiente lectura
;lo guardo temporalmente para reflejarlo en la LCD todas las
;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 call call
DS1624_Inicializa_6 ; Configura el DS1624 e inicia la conversión. Retardo_1s ;retardo de 1 segundos DS1624_LeeTemperatura_6 ; Lee la temperatura.
call
DS1624_IniciaConversion_2
movwf TempSensor_6 temperaturas juntas movf movwf
DS1624_Signo,W TempSigno_6
;Comienza conversión para la siguiente lectura
;lo guardo temporalmente para reflejarlo en la LCD todas las
;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 call call
DS1624_Inicializa_7 ; Configura el DS1624 e inicia la conversión. Retardo_1s ;retardo de 1 segundos DS1624_LeeTemperatura_7 ; Lee la temperatura.
call
DS1624_IniciaConversion_1
movwf TempSensor_7 temperaturas juntas movf movwf
DS1624_Signo,W TempSigno_7
;Comienza conversión para la siguiente lectura
;lo guardo temporalmente para reflejarlo en la LCD todas las
;Para guardar temporalmente el signo del sensor 7
;---Para guardar temporalmente el DECIMAL del Sensor_7--8
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_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 lugar de :-0º call LCD_Caracter ;LCD_Mensaje goto Histerisis_0 ;para que active histerisis establecido ;con la TempMini EliminarMenosCero_1 movlw MensajeEnBlanco ;;Lo utilizo por lugar de :-0º call LCD_Caracter ;LCD_Mensaje goto Histerisis_1 ;para que active histerisis establecido ;con la TempMini EliminarMenosCero_2 movlw MensajeEnBlanco ;;Lo utilizo por lugar de :-0º call LCD_Caracter ;LCD_Mensaje goto Histerisis_2 ;para que active histerisis establecido ;con la TempMini EliminarMenosCero_3 movlw MensajeEnBlanco ;;Lo utilizo por lugar de :-0º call LCD_Caracter ;LCD_Mensaje goto Histerisis_3 ;para que active histerisis establecido ;con la TempMini EliminarMenosCero_4 movlw MensajeEnBlanco ;;Lo utilizo por lugar de :-0º call LCD_Caracter ;LCD_Mensaje goto Histerisis_4 ;para que active histerisis establecido ;con la TempMini EliminarMenosCero_5 movlw MensajeEnBlanco ;;Lo utilizo por lugar de :-0º call LCD_Caracter ;LCD_Mensaje goto Histerisis_5 ;para que active histerisis establecido ;con la TempMini EliminarMenosCero_6 movlw MensajeEnBlanco ;;Lo utilizo por lugar de :-0º call LCD_Caracter ;LCD_Mensaje goto Histerisis_6 ;para que active histerisis establecido ;con la TempMini EliminarMenosCero_7 movlw MensajeEnBlanco call LCD_Caracter ;LCD_Mensaje goto Histerisis_7 ;**Iniciar ciclo
si falla un Sensor aparezca en blanco su valor en
o desactive la salida en función del valor de y TempMax si falla un Sensor aparezca en blanco su valor en
o desactive la salida en función del valor de y TempMax si falla un Sensor aparezca en blanco su valor en
o desactive la salida en función del valor de y TempMax si falla un Sensor aparezca en blanco su valor en
o desactive la salida en función del valor de y TempMax si falla un Sensor aparezca en blanco su valor en
o desactive la salida en función del valor de y TempMax si falla un Sensor aparezca en blanco su valor en
o desactive la salida en función del valor de y TempMax si falla un Sensor aparezca en blanco su valor en
o desactive la salida en función del valor de y TempMax
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
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_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 goto
PORTB,0 No_PC_0_1
;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC ;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 FLAG
;PARA ELLO LEER EL FLAG GRABADO EN LE POSICIÓN "0" DE LA EEPROM DONDE GUARDO EL CON VALOR 1 DE ;Flag_No_Repetir_Programar movlw movwf
.1 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 call
.12 ; Nueva página 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 call
.13 RS232_EnviaDato
10
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_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 call
MensajesAlPC_Tiempo_Muestreo ;carga el Mensaje para visualizar en el PC 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 call
.13 RS232_EnviaDato
movlw call
MensajesAlPC_SENSOR RS232_Mensaje
;carga la primera posición del mensaje "SENSOR " ;lo visualiza en el PC
movlw call
MensajesAlPC_Sensor1 RS232_Mensaje
;carga la primera posición del mensaje "1: " ;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 ;--------------------------------------
movlw call btfss goto
; Se coloca para visualización en la T1:XXº T2: .3 ; Se coloca para visualización en la LCD_PosicionLinea1 ; primera línea más el valor del registro W TempSigno_0,7 ; ¿Temperatura negativa?. 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 btfsc goto
TempSensor_0,F ;para posicionar el flag Z STATUS,Z ;¿Es cero?, ¿Z=1? Si Z=1 "el Registro vale 0" 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 call
'-' ; Visualiza el signo "-" de temperatura negativa. 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
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera ;--------------------------------------------------------------------------------------;_______________________________________________________________________ ;++++++++++++++++++++AÑADIDO PARA VER EN EL PC++++++++++++ ;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC btfss goto
PORTB,0 TemperaturaPositiva_0
;PARA LLEVARLO AL PC En negativo movlw '-' call RS232_EnviaDato
;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC ;sólo EN PANTALLA LCD
; Visualiza el signo "-" de temperatura negativa. en el PC
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ;______________________________________________________________________________ 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 significativo ej "089" saldrá "89"
;para ver la temperatura suprimiendo el cero no
;+++++++++++++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 call
'.' ; Visualiza el punto decimal. 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
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_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 valores de
EEPROM_Lectura_De_0_a_17
;Esta en "EEPROM_16F87X.INC" para la lectura de los ;la TempMin y TempMax de cada sensor grabados en
la EEPROM btfss goto goto
TempSigno_0,7 EsPositivo_0 EsNegativo_0
;Si el último bit es un "1" Es una temperatura Negativa.
EsPositivo_0 movf goto
TempSensor_0,W Activar_Desactivar_Salidas_0
;Carga el Valor (+) de la Temperatura en (W) ;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 bsf PORTC,0 la del Sensor_0
;¿C=1? (TempMin_0) >= TempSensor_0 ;Activa la salida 0 de PORTC por ser Mayor la TempMin_0 que
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;-----------------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
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_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 call
MensajesAlPC_SENSOR RS232_Mensaje
;carga la primera posición del mensaje "SENSOR " ;lo visualiza en el PC
movlw call
MensajesAlPC_Sensor2 RS232_Mensaje
;carga la primera posición del mensaje "2: " ;lo visualiza en el PC
movlw call
MensajesAlPC_Sensor2 RS232_Mensaje
;carga la primera posición del mensaje "SENSOR 2: " ;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 call btfss goto
.11 LCD_PosicionLinea1 TempSigno_1,7 TemperaturaPositiva_1
; ; ; ;
Se coloca para visualización en la T1: primera línea. ¿Temperatura negativa?. No, la temperatura es positiva.
T2:XXº
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 en la LCD por falta de espacio btfsc STATUS,Z goto Decimal_1_Es_Cero
;para ver si tiene el valor .0º en cuyo caso no visualizarlo ;Si Z=1 es CERO LA PARTE DECIMAL .0º ;como es cero NO REPRESENTARLO y ponerle 'º' ;Si Z=0 NO ES CERO y por tanto visualizar el '.' y el 'º'
14
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera
movlw call
'.' ; Visualiza el punto decimal. 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 goto
PORTB,0 Histerisis_1
;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC ;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 goto goto
TempSigno_1,7 EsPositivo_1 EsNegativo_1
;Si el último bit es un "1" Es una temperatura Negativa.
EsPositivo_1 movf goto
TempSensor_1,W Activar_Desactivar_Salidas_1
;Carga el Valor (+) de la Temperatura en (W) ;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
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_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 bsf PORTC,1 la del Sensor_1
;¿C=1? (TempMin_1) >= TempSensor_1 ;Activa la salida 1 de PORTC por ser Mayor la TempMin_1 que
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;Activar_Desactivar_Salidas_1 ;;Para comprobar si un registro es mayor o menor que otro ver la pag 123 del libro de Remiro. ; ; ;
subwf btfss goto ;goto
TempMin_1,W STATUS,C Menor_1 MayorIgual_1
;(TempMin_1)- (TempSensor_1) subwf TempMin_1,W ;¿C=1? (TempMin_1) >= TempSensor_1 ;sobra
;MayorIgual_1 ;C=1 Entonces ; btfsc STATUS,Z ;SI (Z)=1 SON se active desde el valor mínimo al máximo que ; goto Menor_1 ; bcf PORTC,1 ;Desactiva la
ha sido (TempMin_1 ó TempMax_1) >= TempSensor_1 IGUALES Y EN ESE CASO ACTIVAR LA SALIDA para que establezcamos 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 ; movf ; subwf ; btfss ; goto TempMax"
PORTC,1
;Activa la salida 0 de PORTC
TempSensor_1,W TempMax_1,W STATUS,C MayorIgual_1
;valor absoluto de Temperatura del "Sensor 2" ;(TempMax_1)- (TempSensor_1) ;¿C=1? (TempMax_1) >= TempSensor_1 ;"Desactiva la Salida Estará activa sólo entre la TempMin y la
;------------------------------------------------------------------
;-----------------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
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera
; ;
call
RS232_Mensaje
;lo visualiza en el PC
movlw call
MensajesAlPC_Sensor3 RS232_Mensaje
;carga la primera posición del mensaje "3: " ;lo visualiza en el PC
movlw call
MensajesAlPC_Sensor3 RS232_Mensaje
;carga la primera posición del mensaje "SENSOR 3: " ;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 call btfss goto
.3 LCD_PosicionLinea2 TempSigno_2,7 TemperaturaPositiva_2
; Se coloca para visualización en la T3: ; SEGUNDA línea. ; ¿Temperatura negativa?. ; No, la temperatura es positiva.
T4:XXº
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 call
'-' ; Visualiza el signo "-" de temperatura negativa. 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
call BIN_a_BCD call Temperatura_En_LCD "089" saldrá "89"
; Visualiza el valor absoluto de la temperatura, ; pasándola previamente a BCD. ;para ver la temperatura suprimiendo el cero no significativo ej
;+++++++++++++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
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_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 goto
PORTB,0 Histerisis_2
;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC ;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 goto goto
TempSigno_2,7 EsPositivo_2 EsNegativo_2
;Si el último bit es un "1" Es una temperatura Negativa.
EsPositivo_2 movf goto
TempSensor_2,W Activar_Desactivar_Salidas_2
;Carga el Valor (+) de la Temperatura en (W) ;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
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_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 bsf PORTC,2 la del Sensor_2
;¿C=1? (TempMin_2) >= TempSensor_2 ;Activa la salida 2 de PORTC por ser Mayor la TempMin_2 que
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;-----------------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 call
MensajesAlPC_SENSOR RS232_Mensaje
;carga la primera posición del mensaje "SENSOR " ;lo visualiza en el PC
movlw call
MensajesAlPC_Sensor4 RS232_Mensaje
;carga la primera posición del mensaje "4: " ;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 call btfss goto
.11 ; Se coloca para visualización en la T3: T4:XXº LCD_PosicionLinea2 ; SEGUNDA línea. TempSigno_3,7 ; ¿Temperatura negativa?. 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 call
'-' ; Visualiza el signo "-" de temperatura negativa. 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
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_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 call Temperatura_En_LCD "089" saldrá "89"
; pasándola previamente a BCD. ;para ver la temperatura suprimiendo el cero no significativo ej
;+++++++++++++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 call
'.' ; Visualiza el punto decimal. 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 goto
PORTB,0 Histerisis_3
;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC ;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
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_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 goto goto
TempSigno_3,7 EsPositivo_3 EsNegativo_3
;Si el último bit es un "1" Es una temperatura Negativa.
EsPositivo_3 movf goto
TempSensor_3,W Activar_Desactivar_Salidas_3
;Carga el Valor (+) de la Temperatura en (W) ;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 bsf PORTC,3 la del Sensor_3
;¿C=1? (TempMin_3) >= TempSensor_3 ;Activa la salida 3 de PORTC por ser Mayor la TempMin_3 que
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;-----------------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 call
MensajesAlPC_SENSOR RS232_Mensaje
;carga la primera posición del mensaje "SENSOR " ;lo visualiza en el PC
21
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera movlw call
MensajesAlPC_Sensor5 RS232_Mensaje
;carga la primera posición del mensaje "5: " ;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 call btfss goto
.3 ; Se coloca para visualización en la T5:XXº T6: LCD_PosicionLinea3 ; primera línea. TempSigno_4,7 ; ¿Temperatura negativa?. 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 call
'-' ; Visualiza el signo "-" de temperatura negativa. 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 call
'.' ; Visualiza el punto decimal. 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
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_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 goto
PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC 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
call
RetornoCarro_Y_CambioLinea
;Desde aquí se verán las centenas-decenas-unidades en el PC ; 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 goto goto
TempSigno_4,7 EsPositivo_4 EsNegativo_4
;Si el último bit es un "1" Es una temperatura Negativa.
EsPositivo_4 movf goto
TempSensor_4,W Activar_Desactivar_Salidas_4
;Carga el Valor (+) de la Temperatura en (W) ;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
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera movf TempMin_4,W subwf TempSensor_4,W btfss STATUS,C bsf PORTC,4 la del Sensor_4
;¿C=1? (TempMin_4) >= TempSensor_4 ;Activa la salida 4 de PORTC por ser Mayor la TempMin_4 que
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;-----------------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 call
MensajesAlPC_SENSOR RS232_Mensaje
;carga la primera posición del mensaje "SENSOR " ;lo visualiza en el PC
movlw call
MensajesAlPC_Sensor6 RS232_Mensaje
;carga la primera posición del mensaje "6: " ;lo visualiza en el PC
movlw call
MensajesAlPC_Sensor6 RS232_Mensaje
;carga la primera posición del mensaje "SENSOR 6: " ;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 call btfss goto
.11 ; Se coloca para visualización en la T5: T6:XXº LCD_PosicionLinea3 ; TERCERA línea. TempSigno_5,7 ; ¿Temperatura negativa?. 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 call
'-' ; Visualiza el signo "-" de temperatura negativa. 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
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_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 call
'.' ; Visualiza el punto decimal. 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 goto
PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC 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
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_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 goto goto
TempSigno_5,7 EsPositivo_5 EsNegativo_5
;Si el último bit es un "1" Es una temperatura Negativa.
EsPositivo_5 movf goto
TempSensor_5,W Activar_Desactivar_Salidas_5
;Carga el Valor (+) de la Temperatura en (W) ;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 bsf PORTC,5 la del Sensor_5
;¿C=1? (TempMin_5) >= TempSensor_5 ;Activa la salida 5 de PORTC por ser Mayor la TempMin_5 que
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;-----------------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
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera
movlw call
MensajesAlPC_SENSOR RS232_Mensaje
;carga la primera posición del mensaje "SENSOR " ;lo visualiza en el PC
movlw call
MensajesAlPC_Sensor7 RS232_Mensaje
;carga la primera posición del mensaje "1: " ;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 call btfss goto
.3 LCD_PosicionLinea4 TempSigno_6,7 TemperaturaPositiva_6
; ; ; ;
Se coloca para visualización en la T7:XXº CUARTA línea. ¿Temperatura negativa?. No, la temperatura es positiva.
T8:
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 call
'-' ; Visualiza el signo "-" de temperatura negativa. 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 call
'.' ; Visualiza el punto decimal. LCD_Caracter
movf
DS1624_Decimal_6,W
call
LCD_Nibble
;Visualiza la parte decimal
;Visualiza en el lugar actual de la pantalla el valor HEXADECIMAL 27
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_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) visualiza "6" ; si (W) es 1010 1110, se visualiza "E"
= 0101 0110 se
;------------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 goto
PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC 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
call
RetornoCarro_Y_CambioLinea
;Desde aquí se verán las centenas-decenas-unidades en el PC ; 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 goto goto
TempSigno_6,7 EsPositivo_6 EsNegativo_6
;Si el último bit es un "1" Es una temperatura Negativa.
EsPositivo_6 movf goto
TempSensor_6,W ;Carga el Valor (+) de la Temperatura en (W) 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
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_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 bsf PORTC,6 la del Sensor_6
;¿C=1? (TempMin_6) >= TempSensor_6 ;Activa la salida 6 de PORTC por ser Mayor la TempMin_6 que
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;-----------------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 call
MensajesAlPC_SENSOR RS232_Mensaje
;carga la primera posición del mensaje "SENSOR " ;lo visualiza en el PC
movlw call
MensajesAlPC_Sensor8 RS232_Mensaje
;carga la primera posición del mensaje "8: " ;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 call btfss goto
.11 LCD_PosicionLinea4 TempSigno_7,7 TemperaturaPositiva_7
; ; ; ;
Se coloca para visualización en la T7: TERCERA línea. ¿Temperatura negativa?. No, la temperatura es positiva.
T8:XXº
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 call
'-' ; Visualiza el signo "-" de temperatura negativa. 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
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_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 call
'.' ; Visualiza el punto decimal. 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 goto
PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC 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
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera ;++++++ENTRE LA TempMin_7 y TempMax_7. Es decir sólo activa entre estos valores++++++++ ;--------------------------------------------------------------------------------------Histerisis_7 btfss goto goto
TempSigno_7,7 EsPositivo_7 EsNegativo_7
;Si el último bit es un "1" Es una temperatura Negativa.
movf
TempSensor_7,W
;Carga el Valor (+) de la Temperatura en (W)
goto
Activar_Desactivar_Salidas_7
EsPositivo_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 bsf PORTC,7 la del Sensor_7
;¿C=1? (TempMin_7) >= TempSensor_7 ;Activa la salida 7 de PORTC por ser Mayor la TempMin_7 que
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;----------------------------------------------------------------------------------------------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
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera
goto Sensor_0 ;****Inicio ;------------------------------------------------------------------
;NO NECESITA PONER UN RETORNO YA QUE todo está en "Repetir_Ciclo" INCLUDE
<BUS_I2C.INC>
INCLUDE <LCD_4BIT_4X20.INC> ;PARA PODER VER LA LECTURA EN EL LCD modifico la patilla RA1 PARA PODER UTILIZARLA En la Transimisón del Puerto Serie ; INCLUDE <LCD_4BIT_Modificado.INC> ;PARA PODER VER LA LECTURA EN EL LCD modifico la patilla RA1 PARA PODER UTILIZARLA En la Transimisón del Puerto Serie INCLUDE <LCD_MENS.INC> ;; INCLUDE <DS1624_RedondeoDecimal_Todos.INC> ;no lo utilizo porque el resultado es lo mismo a si lo empleo en la librería "DS1624_Modificado_0.INC" INCLUDE <DS1624_Modificado_0.INC> ;modificado por mí para que pueda leer/escribir varios sensores.Tan solo debo modificar el programa principal INCLUDE <DS1624_Modificado_1.INC> ;modificado por mí para que pueda leer/escribir varios sensores.Tan solo debo modificar el programa principal INCLUDE <DS1624_Modificado_2.INC> ;modificado por mí para que pueda leer/escribir varios sensores.Tan solo debo modificar el programa principal INCLUDE <DS1624_Modificado_3.INC> ;modificado por mí para que pueda leer/escribir varios sensores.Tan solo debo modificar el programa principal INCLUDE <DS1624_Modificado_4.INC> ;modificado por mí para que pueda leer/escribir varios sensores.Tan solo debo modificar el programa principal INCLUDE <DS1624_Modificado_5.INC> ;modificado por mí para que pueda leer/escribir varios sensores.Tan solo debo modificar el programa principal INCLUDE <DS1624_Modificado_6.INC> ;modificado por mí para que pueda leer/escribir varios sensores.Tan solo debo modificar el programa principal INCLUDE <DS1624_Modificado_7.INC> ;modificado por mí para que pueda leer/escribir varios sensores.Tan solo debo modificar el programa principal INCLUDE <CONFIGURACION_DESDE_PC.INC>;AQUÍ ESTAN TODA LA CONFIGURACIÓN DEL COMIENZO; PROGRAMAR : SENSOR 1 AL 8 CON SUS Tmin y Tmax y la selección del tiempo de muestreo INCLUDE <TIEMPO_DE_MUESTREO.INC> ;librería PARA SELECCIONAR EL TIEMPO DE MUESTREO Y GUARDAR SU VALOR EN "TiempoMuestreo" INCLUDE <TEMPERATURAS_MIN_MAX.INC> ;Aqui están las rutinas para llevar SELECCIONAR DESDE EL PC las temperaturas MIN y MAX de cada sensor INCLUDE <Temperatura_a_LCD.INC> ;rutina para ver en LCD la temperatura, suprimiendo los CEROS no significativos ej "012" saldrá "12" INCLUDE <temperatura_a_PC.INC> INCLUDE <BIN_BCD.INC> INCLUDE <RETARDOS.INC> INCLUDE <RS232_Modificado.INC> ;lo modifico para poner PORTA,5 ; Línea por la que se reciben los datos ; y PORTA,1 ; Línea por la que se envían los datos. INCLUDE <RS232MEN.INC> INCLUDE <EEPROM_16F87X.INC> ;Para leer y escribir en la EEPROM y así poder tener datos de las TempMin y TempMax para activar Cada una de las salidas END .
32
Hexadecimal usando LCD de 4x20 (4 lineas 20 caracteres) :020000040000FA :100000000629820720340034BA34003454343134A1 :100010003A340034543432343A34003454343334BF :100020003A340034543434343A34003454343534AB :100030003A340034543436343A3400345434373497 :100040003A340034543438343A34003420342034D0 :10005000453453345034453452344534003420341C :1000600020344C346534793465346E3464346F3400 :100070002034533465346E3473346F3472346534E1 :10008000733400340A340D34503452344F3447340E :10009000523441344D34413452343A3400340A3409 :1000A0000D340D34533445344E3453344F345234BC :1000B0002034003431343A342034003432343A3489 :1000C0002034003433343A342034003434343A3475 :1000D0002034003435343A342034003436343A3461 :1000E0002034003437343A342034003438343A344D :1000F000203400340A340D340D3454346D346934F2 :100100006E343A34203400340A340D340D3454340F :100110006D34613478343A3420340034203431344E :1001200030342034533467340034203432343034A3 :1001300020345334673400342034313420344D3487 :1001400069346E3400340A340D340D34533445347C :100150004C3445344334433449344F344E344134C1 :10016000523420345434493445344D3450344F34AF :1001700020344434453420344D34553445345334DC :100180005434523445344F3420343A3420340A3411 :100190000D340D34313420343D3420343134303496 :1001A0002034533467340A340D34323420343D342F :1001B0002034323430342034533467340A340D342C :1001C000333420343D342034313420344D346934D8 :1001D0006E340A340D34003445344C3445344734DD :1001E000493444344F34003482070034013401343C :1001F000023403340334043404340534063406343E :1002000007340834083409340934071783160330D7 :100210008600870106309F00831286018701DE0178 :10022000E401A001A101A201A301A401A501A6016D :10023000A701E701B0236127CA270530E62326304E :100240003C24E0232F303C24642451277424A00054 :100250005508A8005408B000861832293727861898 :100260003229892994245127A424A1005508A900E2 :100270005408B100B1245127C124A2005508AA0096 :100280005408B200CE245127DE24A3005508AB0049 :100290005408B300EB245127FB24A4005508AC00FC :1002A0005408B400082551271825A5005508AD00AD :1002B0005408B500861860293727861860298929CF :1002C000252551273525A6005508AE005408B6004F :1002D000422551275225A7005508AF005408B70002 :1002E00089290230F923C9290230F923022A023070 :1002F000F9233A2A0230F923722A0230F923AA2A72 :100300000230F923E22A0230F9231A2B0230F923B2 :10031000522BF423AF265F2D061CA7290130DE00E7 :10032000F701C0275E0203199F290C307727312778 :100330000D30772766250000A3308827FE25061C90 :10034000A7290D3077274F3088275A308827033068 1
:10035000E623A81FB529A008031971292D30F92318 :100360006714061CB5292D30772720080727922609 :10037000B0080319C1292E30F9233008312466183A :10038000C32904303C24061CC9293008D4002008A5 :10039000CC26CA27A81FCD29CF292008D129560845 :1003A000A000390820020318071038082002031C97 :1003B0000714061CDF294F3088275E3088270B3052 :1003C000E623A91FEE29A108031974292D30F9236A :1003D0006714061CED292D30772700002108072718 :1003E0009226B1080319FA292E30F9233108312455 :1003F0006618FC2904303C24061C022A3108D4006B :100400002108CC26A91F052A072A2108092A5708EE :10041000A1003B082102031887103A082102031C9F :100420008714061C172A4F3088276230882703302C :10043000E823AA1F262AA208031977292D30F923B9 :100440006714061C252A2D3077270000220807276D :100450009226B2080319322A2E30F92332083124A9 :100460006618342A04303C24061C3A2A3208D40088 :100470002208CC26AA1F3D2A3F2A2208412A5808D2 :10048000A2003D082202031807113C082202031CA7 :100490000715061C4F2A4F308827663088270B30F7 :1004A000E823AB1F5E2AA30803197A292D30F9230C :1004B0006714061C5D2A2D307727000023080727C4 :1004C0009226B30803196A2A2E30F92333083124FF :1004D00066186C2A04303C24061C722A3308D400A7 :1004E0002308CC26AB1F752A772A2308792A5908B6 :1004F000A3003F082302031887113E082302031CB0 :100500008715061C872A4F3088276A3088270330D2 :10051000EA23AC1F962AA40803197D292D30F9235C :100520006714061C952A2D3077270000240807271A :100530009226B4080319A22A2E30F9233408312454 :100540006618A42A04303C24061CAA2A3408D400C5 :100550002408CC26AC1FAD2AAF2A2408B12A5A0899 :10056000A400410824020318071240082402031CB7 :100570000716061CBF2A4F3088276E3088270B309D :10058000EA23AD1FCE2AA508031980292D30F923AF :100590006714061CCD2A2D30772700002508072771 :1005A0009226B5080319DA2A2E30F92335083124AA :1005B0006618DC2A04303C24061CE22A3508D400E4 :1005C0002508CC26AD1FE52AE72A2508E92A5B087D :1005D000A500430825020318871242082502031CC0 :1005E0008716061CF72A4F30882772308827033079 :1005F000EC23AE1F062BA608031983292D30F923FF :100600006714061C052B2D307727000026080727C6 :100610009226B6080319122B2E30F92336083124FE :100620006618142B04303C24061C1A2B3608D40000 :100630002608CC26AE1F1D2B1F2B2608212B5C085D :10064000A600450826020318071344082602031CC7 :100650000717061C2F2B4F308827763088270B3042 :10066000EC23AF1F3E2BA708031986292D30F92351 :100670006714061C3D2B2D3077270000270807271D :100680009226B70803194A2B2E30F9233708312454 :1006900066184C2B04303C24061C522B3708D4001F :1006A0002708CC26AF1F552B572B2708592B5D0841 2
:1006B000A700470827020318871346082702031CD0 :1006C00087174426242944262429831605128312D9 :1006D000051208008316051683120800831685117B :1006E000831285110800831685158312851D762BCC :1006F00008006A2373232027652320276E232027E1 :1007000008006523732320276A2320270800C900D7 :100710000830C800C90D03188F2B6523902B6A235E :10072000732320276E232027C80B8A2B6A23732369 :1007300020276E23202708000830C8006A2373236F :100740000310051A0314C90D6E232027C80B9F2B15 :100750004A1C6523732320276E232027490808009D :100760008316051005118312051105103727303047 :10077000C8233B273030C82324273030C8232C27F8 :100780002030C8232C27F623F423F223DC2308008F :10079000F039CB0006080F39CB0483160608CD00CC :1007A0000F30860583124B08860005150511831648 :1007B0004D088600831208000630F72B8030F72B97 :1007C000C030F72B9430F72BD430F72B8038F72B31 :1007D000C038F72B9438F72BD438F72B0830F72B89 :1007E0000E30F72B0C30F72B0130F72B283005108B :1007F000FB2B05140324CC00C8234C0EC823051C76 :100800003D2729270800CB00F13C031D0A2CEE30C0 :10081000CB00172C4B08D13C031D112CEE30CB0024 :10082000172C4B08BA3C031D172CDF30CB004B08AC :1008300008001430202C0130202C0230202C0330F2 :10084000CE002030F923CE0B212C0800CF00F03948 :10085000031D2E2C2030F923302CCF004F0E3124D5 :100860004F080F39CE00093C031C392C4E08303E8E :100870003B2C4E08373EF92BD0000130D002D0037C :1008800050080120D100D1080319492CF923D00ABE :10089000402C0800D0000130D002D003D201F42354 :1008A00014305202031D592C312731271330D00246 :1008B0004E2C50080120D100D1080319632CF923D4 :1008C000D20AD00A502C080090308723AC308723FE :1008D0004B30872381236D240800792390308723B0 :1008E000EE308723812308004A1079239030872334 :1008F000AA3087237923913087239C23D300D60005 :100900004A149C23D4008123D501D31F8E2CD509F2 :10091000D409D3090130D4070318D30A540E0F3970 :10092000F420D4005308080092308723AC3087238A :100930004B30872381239D2408007923923087231D :10094000EE308723812308004A10792392308723D1 :10095000AA3087237923933087239C23D300D700A1 :10096000802C94308723AC3087234B30872381231E :10097000BA240800792394308723EE30872381231B :1009800008004A10792394308723AA3087237923DB :10099000953087239C23D300D800802C9630872362 :1009A000AC3087234B3087238123D7240800792359 :1009B00096308723EE308723812308004A1079235D :1009C00096308723AA3087237923973087239C2367 :1009D000D300D900802C98308723AC3087234B304C :1009E00087238123F4240800792398308723EE306D :1009F0008723812308004A10792398308723AA305F :100A000087237923993087239C23D300DA00802C15 3
:100A10009A308723AC3087234B30872381231125DD :100A2000080079239A308723EE308723812308003A :100A30004A1079239A308723AA30872379239B3061 :100A400087239C23D300DB00802C9C308723AC3091 :100A500087234B30872381232E25080079239C3060 :100A60008723EE308723812308004A1079239C30A6 :100A70008723AA30872379239D3087239C23D300A3 :100A8000DC00802C9E308723AC3087234B308723BB :100A900081234B25080079239E308723EE3087235E :100AA000812308004A1079239E308723AA308723A8 :100AB00079239F3087239C23D300DD00802C861868 :100AC0008C29372786188C299F2798295E145E0861 :100AD000F600F701AB27423088274F3088275A307D :100AE00088277A3088275B26B800F600F70AAB27FC :100AF000843088275B26B900F600F70AAB274F3011 :100B000088275E3088277A3088275B26BA00F6006F :100B1000F70AAB27843088275B26BB00F600F70A6C :100B2000AB274F308827623088277A3088275B26AA :100B3000BC00F600F70AAB27843088275B26BD008F :100B4000F600F70AAB274F308827663088277A30BF :100B500088275B26BE00F600F70AAB27843088277B :100B60005B26BF00F600F70AAB274F3088276A30B4 :100B700088277A3088275B26C000F600F70AAB2763 :100B8000843088275B26C100F600F70AAB274F3078 :100B900088276E3088277A3088275B26C200F600C7 :100BA000F70AAB27843088275B26C300F600F70AD4 :100BB000AB274F308827723088277A3088275B260A :100BC000C400F600F70AAB27843088275B26C500EF :100BD000F600F70AAB274F308827763088277A301F :100BE00088275B26C600F600F70AAB2784308827E3 :100BF0005B26C700F600F70AAB2708006627E0006F :100C000031306006031D162E0130DF00F600113072 :100C1000F700AB270D307727EC3088278E308827F8 :100C200000000A200D2000004B27432E32306006C2 :100C3000031D2C2E0230DF00F6001130F700AB2729 :100C40000D307727EC3088279530882700000A2060 :100C50000D2000004927432E33306006031DFE2D72 :100C60000330DF00F6001130F700AB270D30772797 :100C7000EC3088279C30882700000A200D200000D7 :100C8000492749274927080001305F06031D492EDF :100C9000080002305F06031D532E4D2751275327AE :100CA00031273327080003305F06031D482E4927EC :100CB0003127312708006627E1002D306102031D2E :100CC000652E2D30772764145B2E30306102031CB3 :100CD0005B2E4030610203185B2E61087727662780 :100CE000E20030306202031C6F2E403062020318B3 :100CF0006F2E62087727DF3077270F30E105093044 :100D0000E30061086107E303031D822EE1000F3059 :100D100062056107E500641C0800E509013065070C :100D2000E4010800E6016B08FF39031D992E00005D :100D3000A12E66146B0831246C0831246D0831240F :100D400008006C08FF39031DA72E0000AB2E6718A2 :100D500066146C0831246D083124E7010800DE2395 :100D600006303C240830E6230A303C24E0230E30D1 4
:100D70003C240830E82312303C24E22316303C2483 :100D80000830EA231A303C24E4231E303C24083087 :100D9000EC2322303C240800E800E901EA01643039 :100DA000E802031CD52EEA0AD02EE8070A30E80232 :100DB000031CDC2EE90AD72EE8073030E807E907E4 :100DC000EA076A080F39031DE72E0000F52E6A08AE :100DD000772769087727680877272E307727540800 :100DE000303E7727DF307727080069080F39031D69 :100DF000FB2E0000FD2E69087727680877272E3024 :100E000077275408303E7727DF3077270800EB013B :100E1000EC01ED000A306D02031C172FED00EC0A07 :100E20000A306C02031C0A2FEC01EB0A0A2F6C0E2D :100E30006D07080000000000000000000000000036 :100E400008000000A4302D2F000040302D2F1F304F :100E50002D2F00000E302D2F0530EE00EE0B2E2F23 :100E60000800C830402F6430402F3230402F1430FB :100E7000402F0A30402F0530402F0230402F0130E4 :100E8000EF00F930EE000000EE0B432FEF0B412F87 :100E90000800C830542F6430542F3230542F14308F :100EA000542F0A30542F0530F0006430EF00F93031 :100EB000EE000000EE0B592FEF0B572FF00B552FC4 :100EC0000800831685168510831208000830F1008B :100ED000851A682F272729270310851A0314F20C77 :100EE0002727F10B6C2F242772080800303EF200F0 :100EF0000830F10085102727F20C031C812F851480 :100F0000822F85102727F10B7C2F851424270800BA :100F1000F3000130F302F30373080120F400F40836 :100F20000319952F7727F30A8C2F08000A30F50054 :100F30000A307727F50B982F0D307727080003012B :100F4000F7000030F600AB271130F800F70AAB27A6 :100F5000F80BA62F08000D12760803178C00031358 :100F6000770803178D0083168C130C1555308D00F0 :100F7000AA308D008C14831203130D1EBD2F0800A0 :100F8000770803178D0083168C130C1483120C083A :100F9000031308000030F700C027DE000130F7001F :100FA000C027B800F70AC027B900F70AC027BA005F :100FB000F70AC027BB00F70AC027BC00F70AC02702 :100FC000BD00F70AC027BE00F70AC027BF00F70A16 :100FD000C027C000F70AC027C100F70AC027C20017 :100FE000F70AC027C300F70AC027C400F70AC027C2 :100FF000C500F70AC027C600F70AC027C700F70ACE :06100000C027DF0008001C :02400E00F13F80 :00000001FF
5
Hexadecimal usando LCD de 4x16 (4 lÃneas 16 caracteres) :020000040000FA :10000000FD28820720340034BA34003454343134AB :100010003A340034543432343A34003454343334BF :100020003A340034543434343A34003454343534AB :100030003A340034543436343A3400345434373497 :100040003A340034543438343A3400344534533478 :10005000503445345234453400344C3465347934AA :1000600065346E3464346F342034533465346E3404 :1000700073346F3472346534733400340A340D349D :10008000503452344F344734523441344D34413477 :1000900052343A3400340A340D340D345334453478 :1000A0004E3453344F3452342034003431343A34E3 :1000B0002034003432343A342034003433343A3487 :1000C0002034003434343A342034003435343A3473 :1000D0002034003436343A342034003437343A345F :1000E0002034003438343A34203400340D3454345D :1000F0006D3469346E343A34203400340D34543461 :100100006D34613478343A3420340034203431345E :1001100030342034533467340034203432343034B3 :1001200020345334673400342034313420344D3497 :1001300069346E3400340A340D340D34533445348C :100140004C3445344334433449344F344E344134D1 :10015000523420345434493445344D3450344F34BF :1001600020344434453420344D34553445345334EC :100170005434523445344F3420343A3420340A3421 :100180000D340D34313420343D34203431343034A6 :100190002034533467340A340D34323420343D343F :1001A0002034323430342034533467340A340D343C :1001B000333420343D342034313420344D346934E8 :1001C0006E340A340D34003445344C3445344734ED :1001D000493444344F34003482070034013401344C :1001E000023403340334043404340534063406344E :1001F0000734083408340934093483160330860080 :10020000870106309F00831286018701DE01E40129 :10021000A001A101A201A301A401A501A601A701BA :10022000E701A7235827C1270530DD2326303324D3 :10023000D7232D3033245B2448276B24A000550896 :10024000A8005408B000861829292E2786182929C5 :1002500080298B2448279B24A1005508A900540815 :10026000B100A8244827B824A2005508AA005408C1 :10027000B200C5244827D524A3005508AB00540874 :10028000B300E2244827F224A4005508AC00540827 :10029000B400FF2448270F25A5005508AD005408D9 :1002A000B500861857292E278618572980291C251E :1002B00048272C25A6005508AE005408B60039255D :1002C00048274925A7005508AF005408B7008029E2 :1002D0000230F023C0290230F023F9290230F02344 :1002E000312A0230F023692A0230F023A12A023099 :1002F000F023D92A0230F023112B0230F023492BAE :10030000EB23A626562D061C9E290130DE00F701A0 :10031000B7275E02031996290C306E2728270D3067 :100320006E275D2500009B307F27F525061C9E2942 :100330000D306E274B307F2756307F270330DD236B :10034000A81FAC29A008031968292D30F0236714D1 1
:10035000061CAC292D306E272008FE268926B00801 :100360000319B8292E30F023300828246618BA293A :1003700004303324061CC0293008D4002008C326CA :10038000C127A81FC429C6292008C8295608A000CB :10039000390820020318071038082002031C07142C :1003A000061CD6294B307F275A307F270B30DD23A0 :1003B000A91FE529A10803196B292D30F023671423 :1003C000061CE4292D306E2700002108FE26892610 :1003D000B1080319F1292E30F023310828246618BA :1003E000F32904303324061CF9293108D4002108EC :1003F000C326A91FFC29FE292108002A5708A100AD :100400003B082102031887103A082102031C8714B5 :10041000061C0E2A4B307F275E307F270330DF23F8 :10042000AA1F1D2AA20803196E292D30F023671474 :10043000061C1C2A2D306E2700002208FE26892665 :10044000B2080319292A2E30F0233208282466180E :100450002B2A04303324061C312A3208D400220807 :10046000C326AA1F342A362A2208382A5808A2008E :100470003D082202031807113C082202031C07153D :10048000061C462A4B307F2762307F270B30DF2344 :10049000AB1F552AA308031971292D30F0236714C7 :1004A000061C542A2D306E2700002308FE268926BC :1004B000B3080319612A2E30F02333082824661864 :1004C000632A04303324061C692A3308D400230825 :1004D000C326AB1F6C2A6E2A2308702A5908A30072 :1004E0003F082302031887113E082302031C8715C7 :1004F000061C7E2A4B307F2766307F270330E1239E :10050000AC1F8D2AA408031974292D30F023671419 :10051000061C8C2A2D306E2700002408FE26892612 :10052000B4080319992A2E30F023340828246618B9 :100530009B2A04303324061CA12A3408D400240842 :10054000C326AC1FA42AA62A2408A82A5A08A40055 :10055000410824020318071240082402031C07164E :10056000061CB62A4B307F276A307F270B30E123E9 :10057000AD1FC52AA508031977292D30F02367146C :10058000061CC42A2D306E2700002508FE26892669 :10059000B5080319D12A2E30F0233508282466180F :1005A000D32A04303324061CD92A3508D400250860 :1005B000C326AD1FDC2ADE2A2508E02A5B08A50039 :1005C000430825020318871242082502031C8716D8 :1005D000061CEE2A4B307F276E307F270330E32343 :1005E000AE1FFD2AA60803197A292D30F0236714BF :1005F000061CFC2A2D306E2700002608FE268926C0 :10060000B6080319092B2E30F02336082824661863 :100610000B2B04303324061C112B3608D40026087B :10062000C326AE1F142B162B2608182B5C08A60019 :10063000450826020318071344082602031C07175F :10064000061C262B4B307F2772307F270B30E3238D :10065000AF1F352BA70803197D292D30F023671410 :10066000061C342B2D306E2700002708FE26892615 :10067000B7080319412B2E30F023370828246618B9 :10068000432B04303324061C492B3708D400270899 :10069000C326AF1F4C2B4E2B2708502B5D08A700FD :1006A000470827020318871346082702031C8717E9 2
:1006B0003B261B293B261B29831605128312051294 :1006C000080083160516831208008316851183120D :1006D00085110800831685158312851D6D2B080072 :1006E00061236A2317275C23172765231727080030 :1006F0005C236A231727612317270800C9000830E5 :10070000C800C90D0318862B5C23872B61236A233D :10071000172765231727C80B812B61236A23172707 :100720006523172708000830C80061236A230310D7 :10073000051A0314C90D65231727C80B962B4A1CED :100740005C236A23172765231727490808008316A7 :10075000051005118312051105102E273030BF2317 :1007600032273030BF231B273030BF2323272030D0 :10077000BF232327ED23EB23E923D3230800F039FC :10078000CB0006080F39CB0483160608CD000F30C6 :10079000860583124B0886000515051183164D0842 :1007A0008600831208000630EE2B8030EE2BC0301E :1007B000EE2B9030EE2BD030EE2B8038EE2BC03865 :1007C000EE2B9038EE2BD038EE2B0830EE2B0E307F :1007D000EE2B0C30EE2B0130EE2B28300510F22BD7 :1007E0000514FA23CC00BF234C0EBF23051C34276D :1007F00020270800CB00F13C031D012CEE30CB007C :100800000E2C4B08D13C031D082CEE30CB000E2CD7 :100810004B08BA3C031D0E2CDF30CB004B08080000 :100820001030172C0130172C0230172C0330CE005B :100830002030F023CE0B182C0800CF00F039031D18 :10084000252C2030F023272CCF004F0E28244F08D2 :100850000F39CE00093C031C302C4E08303E322CA0 :100860004E08373EF02BD0000130D002D0035008A4 :100870000120D100D1080319402CF023D00A372CD5 :100880000800D0000130D002D003D201EB23103099 :100890005202031D502C282728270F30D002452C48 :1008A00050080120D100D10803195A2CF023D20A94 :1008B000D00A472C080090307E23AC307E234B308A :1008C0007E23782364240800702390307E23EE304A :1008D0007E23782308004A10702390307E23AA30AC :1008E0007E23702391307E239323D300D6004A14B5 :1008F0009323D4007823D501D31F852CD509D4099F :10090000D3090130D4070318D30A540E0F39EC2051 :10091000D4005308080092307E23AC307E234B3045 :100920007E23782394240800702392307E23EE30B7 :100930007E23782308004A10702392307E23AA3049 :100940007E23702393307E239323D300D700772C0C :1009500094307E23AC307E234B307E237823B12429 :100960000800702394307E23EE307E237823080025 :100970004A10702394307E23AA307E237023953052 :100980007E239323D300D800772C96307E23AC307F :100990007E234B307E237823CE24080070239630AC :1009A0007E23EE307E23782308004A107023963091 :1009B0007E23AA307E23702397307E239323D30097 :1009C000D900772C98307E23AC307E234B307E23A9 :1009D0007823EB240800702398307E23EE307E23AA :1009E000782308004A10702398307E23AA307E2393 :1009F000702399307E239323D300DA00772C9A302A :100A00007E23AC307E234B307E23782308250800DC 3
:100A100070239A307E23EE307E23782308004A101C :100A200070239A307E23AA307E2370239B307E234E :100A30009323D300DB00772C9C307E23AC307E23C5 :100A40004B307E2378232525080070239C307E239D :100A5000EE307E23782308004A1070239C307E23DA :100A6000AA307E2370239D307E239323D300DC00A5 :100A7000772C9E307E23AC307E234B307E23782330 :100A80004225080070239E307E23EE307E2378239B :100A900008004A1070239E307E23AA307E237023E4 :100AA0009F307E239323D300DD00772C8618832983 :100AB0002E278618832996278F295E145E08F60054 :100AC000F701A2273E307F274B307F2756307F2704 :100AD00076307F275226B800F600F70AA2277E302C :100AE0007F275226B900F600F70AA2274B307F274E :100AF0005A307F2776307F275226BA00F600F70A51 :100B0000A2277E307F275226BB00F600F70AA227D5 :100B10004B307F275E307F2776307F275226BC0000 :100B2000F600F70AA2277E307F275226BD00F60086 :100B3000F70AA2274B307F2762307F2776307F2746 :100B40005226BE00F600F70AA2277E307F275226E3 :100B5000BF00F600F70AA2274B307F2766307F27B9 :100B600076307F275226C000F600F70AA2277E3093 :100B70007F275226C100F600F70AA2274B307F27B5 :100B80006A307F2776307F275226C200F600F70AA8 :100B9000A2277E307F275226C300F600F70AA2273D :100BA0004B307F276E307F2776307F275226C40058 :100BB000F600F70AA2277E307F275226C500F600EE :100BC000F70AA2274B307F2772307F2776307F27A6 :100BD0005226C600F600F70AA2277E307F2752264B :100BE000C700F600F70AA22708005D27E0003130B1 :100BF0006006031D0D2E0130DF00F6001130F700F6 :100C0000A2270D306E27E4307F2786307F27000033 :100C10000A200D20000042273A2E32306006031DC4 :100C2000232E0230DF00F6001130F700A2270D302E :100C30006E27E4307F278D307F2700000A200D20AB :100C4000000040273A2E33306006031DF52D033097 :100C5000DF00F6001130F700A2270D306E27E430D8 :100C60007F2794307F2700000A200D2000004027B6 :100C700040274027080001305F06031D402E080072 :100C800002305F06031D4A2E442748274A2728279B :100C90002A27080003305F06031D3F2E4027282720 :100CA000282708005D27E1002D306102031D5C2E1E :100CB0002D306E276414522E30306102031C522EE8 :100CC000403061020318522E61086E275D27E20052 :100CD00030306202031C662E403062020318662E1A :100CE00062086E27DF306E270F30E1050930E30020 :100CF00061086107E303031D792EE1000F306205EF :100D00006107E500641C0800E50901306507E4019E :100D10000800E6016B08FF39031D902E0000982E95 :100D200066146B0828246C0828246D082824080001 :100D30006C08FF39031D9E2E0000A22E6718661452 :100D40006C0828246D082824E7010800D523063004 :100D500033240830DD230A303324D7230E303324E4 :100D60000830DF2312303324D923163033240830DF 4
:100D7000E1231A303324DB231E3033240830E323ED :100D8000223033240800E800E901EA016430E80277 :100D9000031CCC2EEA0AC72EE8070A30E802031C1F :100DA000D32EE90ACE2EE8073030E807E907EA0734 :100DB0006A080F39031DDE2E0000EC2E6A086E272C :100DC00069086E2768086E272E306E275408303E5B :100DD0006E27DF306E27080069080F39031DF22ED9 :100DE0000000F42E69086E2768086E272E306E27E3 :100DF0005408303E6E27DF306E270800EB01EC010F :100E0000ED000A306D02031C0E2FED00EC0A0A30D3 :100E10006C02031C012FEC01EB0A012F6C0E6D0715 :100E200008000000000000000000000000000800B2 :100E30000000A430242F00004030242F1F30242F26 :100E400000000E30242F0530EE00EE0B252F080099 :100E5000C830372F6430372F3230372F1430372FC8 :100E60000A30372F0530372F0230372F0130EF008F :100E7000F930EE000000EE0B3A2FEF0B382F080090 :100E8000C8304B2F64304B2F32304B2F14304B2F48 :100E90000A304B2F0530F0006430EF00F930EE00DF :100EA0000000EE0B502FEF0B4E2FF00B4C2F0800D5 :100EB000831685168510831208000830F100851A04 :100EC0005F2F1E2720270310851A0314F20C1E27FC :100ED000F10B632F1B2772080800303EF200083028 :100EE000F10085101E27F20C031C782F8514792F32 :100EF00085101E27F10B732F85141B270800F300A4 :100F00000130F302F30373080120F400F40803191D :100F10008C2F6E27F30A832F08000A30F5000A3061 :100F20006E27F50B8F2F0D306E2708000301F70099 :100F30000030F600A2271130F800F70AA227F80BBC :100F40009D2F08000D12760803178C0003137708F5 :100F500003178D0083168C130C1555308D00AA30A5 :100F60008D008C14831203130D1EB42F0800770814 :100F700003178D0083168C130C1483120C080313B3 :100F800008000030F700B727DE000130F700B72770 :100F9000B800F70AB727B900F70AB727BA00F70A67 :100FA000B727BB00F70AB727BC00F70AB727BD0071 :100FB000F70AB727BE00F70AB727BF00F70AB72717 :100FC000C000F70AB727C100F70AB727C200F70A1F :100FD000B727C300F70AB727C400F70AB727C50029 :100FE000F70AB727C600F70AB727C700F70AB727D7 :040FF000DF00080016 :02400E00F13F80 :00000001FF
5