Escuela Superior Politécnica del Litoral
Facultad de Ingeniería en Electricidad y Computación
Proyecto:
Control automático de temperatura y trasmitir la temperatura y
mostrarla en un LCD
Paralelo: 03
Profesor: Ing. Efrein Herrera
II Término 2010
INTRODUCCION
En nuestro entorno que vivimos todo depende los fenómenos físicos
naturales, el cambio de estos fenómenos físicos por lo general se
quieren controlar y mostrar. Para nuestro proyecto el fenómeno
físico a controlar y mostrar es la temperatura.
La electrónica puede ser utilizada para facilitar la vida del
hombre. Por ejemplo, los sistemas de control remoto evitan que el
usuario se tenga que desplazar hasta alguna máquina para cambiar
algún parámetro: también los sistemas modernos de comunicación
permiten hablar con otras personas en cualquier lugar del mundo,
etc.
Para la comunicación inalámbrica existen varias formas de las
cuales las más conocidas son, infrarrojas, radiofrecuencia,
Bluetooth. Para este proyecto vamos a utilizar la vía infrarrojos
el cual debemos utilizar el protocolo de comunicación correcta.
Este protocolo debe modular la información sobre una portadora y
transmitir la señal modulada por algún sistema en el que el
receptor sea capaz de obtener nuevamente la información, esto nos
permitirá enviar información (temperatura) constante de manera
inalámbrica y mostrarla al usuario.
Para controlar la temperatura nos vamos a utilizar un ventilador
DC el cual encenderá automáticamente en el momento en que el
sensor detecte una temperatura mayor a la del ambiente
OBJETIVOS
Utilizar los conocimientos obtenidos en laboratorio de
electrónica A para armar, analizar y comprender un proyecto
funcional aplicado a nuestra carrera.
Diseñar e implementar un circuito electrónico para poder
transmitir la temperatura obtenida del sensor sin necesidad
de estar cerca de la fuente que lo produce o que exista un
componente físico que una el receptor con el emisor.
Utilizar el programa PROTEUS para las simulaciones
respectivas y comparar los resultados que ofrece el
simulador con los resultados experimentales obtenidos.
Establecer un alcance lo suficientemente eficaz entre el
receptor y el emisor que permita el buen uso de nuestro
circuito electrónico.
Poder controlar la temperatura automáticamente si esta
sobrepasa la temperatura ambiente.
DIAGRAMA DE BLOQUES
ANÁLISIS TEÓRICO
ETAPA DE TRANSMISIÓN.
Para esta etapa utilizamos el PROTOCOLO RC5.
El protocolo RC5, es un tipo de modulación que utilizan los
controles remotos para enviar la información por vía
infrarrojo ya sea a televisores o equipos de audio, el cual
Pic16f887 Sensor
Lm35 Pic16f887
LCD
EMISOR RECEPTOR
LCD
Fan
puede ser adaptado en cualquier sistema que requiera un
manejo de equipos a distancia.
El protocolo consiste en un tren de pulsos cuadrados de 36Khz
(la denominada "portadora"). Cada "1" esta codificado como
889 microsegundos de pulsos, y 889 microsegundos de
"silencio". El "0" se codifica como 889 microsegundos de
"silencio" y 889 microsegundos de pulsos. La longitud total
del "0" y del "1" es idéntica, y son 1778 microsegundos (o
1,778 milisegundos). El grafico siguiente ilustra claramente
esto:
Dentro de un bit "caben" exactamente 64 pulsos, si la
portadora es de 36KHz. Es decir, el periodo de una señal de
36KHz es de 1/36.000 = 27.78125... us, que multiplicado por
64 da exactamente 1778 us. Este es un buen dato para tener en
cuenta el diseño del software de nuestro receptor.
Para que el receptor sepa que le esta "diciendo" el emisor
remoto, debe poder interpretar las "tramas" de ceros y unos
que este le envía. Cada trama es un comando, y está compuesto
por 14 bits (15 en el caso del RC5X). De esos 14 bits, los
primeros 2 bits son de "start" (arranque): siempre son "1".
El tercer bit se invierte cada vez que una tecla se pulsa y
se suelta nuevamente, para poder distinguir si una tecla
permanece presionada o se ha presionado más de una vez. Los
siguientes 5 bits corresponden a la dirección del dispositivo
receptor, y los últimos 6 al comando trasmitido. Esto permite
utilizar un mismo control remoto para comandar diferentes
equipos, simplemente asignando a cada uno un código de
dirección diferente.
Una trama RC5 completa
CIRCUITO EMISOR.
El circuito emisor trabaja de la siguiente forma el sensor (lm35)
nos convierte la señal de temperatura a una señal de voltaje,
este sensor tiene una relación lineal de (10m [V/ C°]), a
temperatura ambiente (28 C °) el voltaje del salida del sensor
será 0.28 [V], esta señal del sensor es enviada directamente al
pic16f887 el cual tiene un convertidor (analógico - digital)
integrado con una resolución de 10 bits.
Para nuestro proyecto decimos utilizar el programa MikroC el cual
nos permite manejar todas las funciones que necesitamos utilizar
en el pic. Una vez obtenida la señal del señor y convertida a
digital, por medio de la programación pudimos establecer un rango
de temperaturas para esto utilizamos tres leds.
R73.3k
24.0
3
1
VOUT2
U2
LM35
RE3/MCLR/VPP1
RA1/AN1/C12IN1-3
RA2/AN2/VREF-/CVREF/C2IN+4
RA4/T0CKI/C1OUT6
RA5/AN4/SS/C2OUT7
RB0/AN12/INT33
RB1/AN10/C12IN3-34
RB2/AN835
RA7/OSC1/CLKIN13
RA6/OSC2/CLKOUT14
RD5/P1B28
RD6/P1C29
RD7/P1D30
RC4/SDI/SDA23
RC5/SDO24
RC3/SCK/SCL18
RC2/P1A/CCP117
RC1/T1OSI/CCP216
RC0/T1OSO/T1CKI15
RB7/ICSPDAT40
RB6/ICSPCLK39
RB5/AN13/T1G38
RB4/AN1137
RD322
RD221
RD120
RD019
RC7/RX/DT26
RC6/TX/CK25
RE2/AN710
RE1/AN69
RE0/AN58
RA3/AN3/VREF+/C1IN+5
RD427
RB3/AN9/PGM/C12IN2-36
RA0/AN0/ULPWU/C12IN0-2
U4
PIC16F887
R11100Q2
2N3904
AK
D3
LED-YELLOW
A K
D4
LED-YELLOW
A K
D5
LED-YELLOW
A K
D6
LED-YELLOW
R13
330
R14
330
R15
330
X1
CRYSTAL
C11nF
C21nF
1
2
J1
TBLOCK-I2
1
2
J2
TBLOCK-I2
INDICADORES DE NIVEL
SENSOR
LED EMISOR
Los leds son indicadores de temperatura los cuales prenderán de
acuerdo al siguiente rango:
Led verde 0<T c°<25
Led amarillo 26<T c°<45
Led rojo T c°>46
Para la trasmisión al pic en este circuito lo utilizamos como un
modulador el cual enviara la información obtenida por el sensor
convertido en digital, por medio de la programación podemos
enviar la información estableciendo la plataforma del protocolo
RC5.
CIRCUITO RECEPTOR.
En esta etapa se recibe la señal modulada por el pic que tenemos
en el emisor y atreves del led receptor la demodula y esta
señal digital, la recibe el pic que tenemos en el receptor. Para
evitar posibles ruidos a la señal pusimos un capacitor a la
entrada.
Una vez obtenida la señal del emisor por medio de programación
podemos manejar la información que en nuestro caso es la
RE3/MCLR/VPP1
RA1/AN1/C12IN1-3
RA2/AN2/VREF-/CVREF/C2IN+4
RA4/T0CKI/C1OUT6
RA5/AN4/SS/C2OUT7
RB0/AN12/INT33
RB1/AN10/C12IN3-34
RB2/AN835
RA7/OSC1/CLKIN13
RA6/OSC2/CLKOUT14
RD5/P1B28
RD6/P1C29
RD7/P1D30
RC4/SDI/SDA23
RC5/SDO24
RC3/SCK/SCL18
RC2/P1A/CCP117
RC1/T1OSI/CCP216
RC0/T1OSO/T1CKI15
RB7/ICSPDAT40
RB6/ICSPCLK39
RB5/AN13/T1G38
RB4/AN1137
RD322
RD221
RD120
RD019
RC7/RX/DT26
RC6/TX/CK25
RE2/AN710
RE1/AN69
RE0/AN58
RA3/AN3/VREF+/C1IN+5
RD427
RB3/AN9/PGM/C12IN2-36
RA0/AN0/ULPWU/C12IN0-2
U1
PIC16F887
D714
D613
D512
D411
D310
D29
D18
D07
E6
RW5
RS4
VSS1
VDD2
VEE3
LCD2
LM016L
R1
3.3k
R2
470
R3
330 AK
D1LED-YELLOW
1
2
J1
TBLOCK-I2
29.0
3
1
VOUT2
U2
LM35
C?1nF
LED RECEPTOR
INDICADOR DE TRANSMISION
PANTALLA LCD
temperatura y poder mostrarla en la pantalla LCD . En la pantalla
nos mostrara la temperatura, aparte constantemente nos mostrara
un nivel en el cual está la temperatura.
Los niveles de temperatura son:
Nivel T1 0<T c°<25
Nivel T2 26<T c°<45
Nivel T3 T c°>46
Etapa de Control de temperatura.
Circuito de control de temperatura
En esta etapa del proyecto podemos controlar la temperatura de
tal forma de que si la temperatura aumenta y es mayor que la
temperatura ambiente el ventilador comenzara a funcionar y su
velocidad aumentara, para esto utilizamos la señal del sensor
(Lm35) y de 4 OPAMS (Lm325) .
3
2
1
411
U1:ALM324
5
6
7
411
U1:B
LM324
10
9
8
411
U1:C
LM324
12
13
14
411
U1:D
LM324
R410k
100%
12
3
RV2
1k
R510k
R61M
D21N4733A
R7
3.3k
R8
10k
R10
10k
R1150k
R220k
R3
10k
A K
D1Q1BC549
R980
1 2
1
2
1
2
J?
TBLOCK-I2
R?10k
VENTILADOR
SEÑAL DEL SENSOR
LED INDICADOR
DE AUMENTO DE
TEMPERATURA
La señal de voltaje del señor es muy pequeña entonces por medio
de los amplificadores operacionales usamos la configuración
amplificador no inversor (U1: D) como podemos ver en la gráfica
y con lo cual aumentamos aproximadamente 9 veces la señal.
Ejemplo si la temperatura es 28 C ° el Vout del sensor será de
0.28 [V]y después de la amplificación con una ganancia de
aproximadamente de 9 el voltaje final será de 2.52 [V]
Una vez obtenida la señal ya amplificada debemos restarle un
voltaje fijo similar a la temperatura ambiente (2.5 [voltios]),
para esto utilizamos un diodo zener y luego debemos amplificar
ese voltaje final (Vsensor -Vzener), este procedimiento se
realiza para cuando se prenda el circuito y si estamos a una
temperatura adecuada (ambiente) el ventilador no funcione o la
velocidad este bien baja.
Cálculos Numéricos
Análisis de la primera Etapa obtención de la temperatura
Por medio del sensor obtenemos un voltaje de salida el cual
estará entre y este voltaje representara la
temperatura.
Para la conversión de este voltaje de analógico a digital
utilizamos el adc del pic16f887. La conversión esta representada
de la siguiente forma:
• Vin = Voltaje de entrada analógico
• Vref = Voltaje de referencia
• n = resolución de la conversión del pic
INT(N) es la parte entera de N en base 10 que luego se convierte
a binario para determinar la salida actual del ADC.
Ejemplo si la temperatura es de = 0.28[V]
La conversión es
Así es como obtenemos el dato analógico y lo convertimos a
digital. Una vez obtenido el dato digital lo podemos usar de la
manera más conveniente por medio de la programación del pic, la
programación del pic está en el anexo.
Análisis de la segunda Etapa <<Recepción y mostrar en el LCD>>
En esta segunda parte el pic lo hace casi todo por medio de la
programación obtenemos el dato constantemente y lo utilizamos
para mostrarlo en el LCD y los niveles de temperatura. En el
anexo esta la programación.
Análisis de la Tercera Etapa <<Controlador de temperatura>>
Primera Etapa
Para el controlador de temperatura primero la pequeña señal del
sensor (lm35) el cual está en el orden de los mili voltios con
una ganancia aproximadamente de 9, para esto utilizamos el
amplificador no inversor.
I3
Segunda Etapa
Una vez obtenida amplificada la señal de voltaje que representa
la temperatura utilizamos el amplificador de instrumentación el
cual va a restar dos voltajes y multiplicarlo por un factor
+
+ =
(
)
(
)
I2
I1
𝑉𝐴
𝑉𝐵
𝑽𝒐𝒖𝒕 𝑉𝑖𝑛 𝑅
𝑅
* (
)
+ * (
)
+
*(
)
+ *(
)
+
Utilizamos la diferencia de voltajes para que el ventilador no
encienda inmediatamente cuando prendemos el circuito ya que
regularmente estamos a temperatura ambiente lo cual el voltaje
del zener aproximadamente nos ayuda a representarlo.
Tercera Etapa
𝑉𝑂 A K
D1Q1BC549
R9132
VENTILADOR
LED INDICADOR
DE AUMENTO DE
TEMPERATURA
+8
8.8
kR
PM
𝑉𝑂 𝑉 𝑉 ( 𝑅
𝑅𝑔𝑎𝑖𝑛 )
En esta etapa el ventilador enciende y aumenta la velocidad
dependiendo de la temperatura. Si la temperatura se eleva después
de pasar todas las etapas anteriores entonces el va aumentar
y la de tal manera que pueda polarizar la base y aumentar la potencia del ventilador .El transistor en este caso lo utilizamos
como un switch y así el ventilador pueda funcionar y aumentar la
velocidad.
CALCULO DE ERRORES
Temperatura obtenida del sensor(10mV/ c°)
TEÓRICO(V) SIMULADO(V) REAL(V) %ERROR
Vout 0.28 0.28 0.293 4.6
<<Temperatura real seria del ambiente 28 c° su equivalente a
voltaje seria 0.28 >>
Opamp (1º Parte) amplificador no inversor
TEÓRICO(V) SIMULADO(V) REAL(V) %ERROR
V+ 0.28 0.28 0.293 4.6 V- 0.28 0.28 0.293 4.6
Vo 2.38 2.38 2.47 3.78
Opamp(2º Parte) amplificador instrumentacion
TEÓRICO(V) SIMULADO(V) REAL(V) %ERROR
V2 2.38 2.38 2.47 3.78
V1 2.1 2.1 2.05 2.38 Vo 5.88 5.88 5.61 4.59
SIMULACIONES
Circuito emisor
R73.3k
24.0
3
1
VOUT2
U2
LM35
RE3/MCLR/VPP1
RA1/AN1/C12IN1-3
RA2/AN2/VREF-/CVREF/C2IN+4
RA4/T0CKI/C1OUT6
RA5/AN4/SS/C2OUT7
RB0/AN12/INT33
RB1/AN10/C12IN3-34
RB2/AN835
RA7/OSC1/CLKIN13
RA6/OSC2/CLKOUT14
RD5/P1B28
RD6/P1C29
RD7/P1D30
RC4/SDI/SDA23
RC5/SDO24
RC3/SCK/SCL18
RC2/P1A/CCP117
RC1/T1OSI/CCP216
RC0/T1OSO/T1CKI15
RB7/ICSPDAT40
RB6/ICSPCLK39
RB5/AN13/T1G38
RB4/AN1137
RD322
RD221
RD120
RD019
RC7/RX/DT26
RC6/TX/CK25
RE2/AN710
RE1/AN69
RE0/AN58
RA3/AN3/VREF+/C1IN+5
RD427
RB3/AN9/PGM/C12IN2-36
RA0/AN0/ULPWU/C12IN0-2
U4
PIC16F887
R11100Q2
2N3904
AK
D3
LED-YELLOW
A K
D4
LED-YELLOW
A K
D5
LED-YELLOW
A K
D6
LED-YELLOW
R13
330
R14
330
R15
330
X1
CRYSTAL
C11nF
C21nF
1
2
J1
TBLOCK-I2
1
2
J2
TBLOCK-I2
INDICADORES DE NIVEL
SENSOR
LED EMISOR
A
B
C
D
Circuito receptor
Controlador de temperatura
RE3/MCLR/VPP1
RA1/AN1/C12IN1-3
RA2/AN2/VREF-/CVREF/C2IN+4
RA4/T0CKI/C1OUT6
RA5/AN4/SS/C2OUT7
RB0/AN12/INT33
RB1/AN10/C12IN3-34
RB2/AN835
RA7/OSC1/CLKIN13
RA6/OSC2/CLKOUT14
RD5/P1B28
RD6/P1C29
RD7/P1D30
RC4/SDI/SDA23
RC5/SDO24
RC3/SCK/SCL18
RC2/P1A/CCP117
RC1/T1OSI/CCP216
RC0/T1OSO/T1CKI15
RB7/ICSPDAT40
RB6/ICSPCLK39
RB5/AN13/T1G38
RB4/AN1137
RD322
RD221
RD120
RD019
RC7/RX/DT26
RC6/TX/CK25
RE2/AN710
RE1/AN69
RE0/AN58
RA3/AN3/VREF+/C1IN+5
RD427
RB3/AN9/PGM/C12IN2-36
RA0/AN0/ULPWU/C12IN0-2
U1
PIC16F887
R1
3.30k
R2
4.70k
R3
330
A KD1LED-YELLOW
D7
14
D6
13
D5
12
D4
11
D3
10
D2
9D
18
D0
7
E6
RW
5R
S4
VS
S1
VD
D2
VE
E3
LCD?LM016L
señal enviada del emisor
3
2
1
411
U1:ALM324
5
6
7
411
U1:B
LM324
10
9
8
411
U1:C
LM324
12
13
14
411
U1:D
LM324
R410k
100%
12
3
RV2
1k
R510k
R61M
D21N4733A
R7
3.3k
R8
10k
R10
10k
+12
R1150k
R220k
R3
10k
A K
D1Q1BC549
R980
R?75
VENTILADOR
SEÑAL DEL SENSOR
LED INDICADOR
DE AUMENTO DE
TEMPERATURA
29.0
3
1
VOUT2
U?
LM35
kR
PM
+0
.94
Volts
+7.32
TABLA DE COMPONENTES Y PRECIOS.
Lista de materiales del emisor
Cant. Artículo
Precio
unitario Cantidad total
4 Resistores $
0,05
$
0,20
2 Capacitores $
0,10
$
0,20
3 D1 Led
rojo/amarillo/verde
$
0,10
$
0,30
1 Transistor $
0,15
$
0,15
1 fototransistor $
1,50
$
1,50
2 Borneras (2 tornillos) $
0,16
$
0,32
1 Pic 16F887 $
4,50
$
4,50
1 Lm35 $
6,00
$
6,00
1 Cristal de cuarzo $
1,00
$
1,00
Subtotal 1
$
14,17
Materiales generales
Estaño (1m) $
0,25
Pasta para soldar $
2,00
Circuito impreso $
Lista de materiales del receptor
Cant. Artículo
Precio
unitario Cantidad total
2 Resistores
$
0,05
$
0,10
1 Capacitores
$
0,10
$
0,10
1 Pic 16f887
$
4,50
$
4,50
1 Pantalla Lcd 16x2 $
10,00
$
10,00
1 Borneras (2 tornillos) $
0,16
$
0,16
1 receptor $
3,00
$
3,00
1 Diodo Led $
0,10
$
0,10
Subtotal 2
$
17 ,96
(emisor y receptor,
control de
temperatura)
13,80
Subtotal 3 $ 16,05
Lista de materiales del controlador de temperatura
Cant. Artículo
Precio
unitario Cantidad total
10 Resistores
$
0,05
$
0,50
1 transistor
$
0,15
$
0,15
1 Potenciometro
$
0,20
$
0,20
1 Lm325 $
0,30
$
0,30
3 Borneras (2 tornillos) $
0,16
$
0,48
1 Diodo
zener
$
0,10
$
0,10
1 Diodo Led $
0,10
$
0,10
1 Ventilador DC
12v(prueba)
$
3,00
$
3,00
Subtotal 2
$
4 ,83
Total: $ 53,01
OBSERVACIONES.
- Para obtener una mejor transmisión, se utilizó para el
emisor un foto diodo de muy bajas pérdidas, y para el
receptor se utilizó un foto transistor con recepción en
forma de radar, esto es para que tenga un gran alcance la
transmisión. Cabe recalcar que la frecuencia de la emisión
es de aproximadamente 40Khz.
- Se separó la emisión del valor de temperatura del circuito
de activación del ventilador, para que facilite el manejo de
los mismos, debido a que cada circuito trabaja con fuentes
de voltaje de diferentes valores y el diseño en el PCB se
tornaba muy complejo.
- Se utilizó un led en la sección de recepción de la señal de
temperatura, esto es solo para comprobar que la transmisión
se está llevando a efecto, así mismo se usa un led para
indicar la intensidad o la potencia en la que va a estar
funcionando el ventilador.
RECOMENDACIONES
- Al usar el PIC 16F887, se recomienda polarizarlos con un
voltaje máximo de 5 voltios, aunque el datasheet nos
informa que están diseñados o capacitados para que soporten
voltajes de hasta 10 voltios. Así mismo ver el datasheet
para hacer las debidas conexiones de polarización, de
entrada y salida de señales, ya que estos PIC tienen 40
conexiones posibles.
- En este trabajo utilizamos una pantalla LCD de 16x2, su
conexión es algo tediosa al PIC, ya que se necesita saber
cuáles son los pines de polarización, de entrada y de salida
de dato, además de la intensidad de luz que se quiera
observar en el mismo, se recomienda bajar de internet la
información sobre el manejo de este LCD, y también dejar la
intensidad de luz en un solo valor.
- Al momento de hacer el PCB, se recomienda usar borneras para
las debidas fuentes de voltaje, en nuestro caso, también
para la conexión del ventilador, y si es posible, para los
elementos que tienen precios un poco elevados. También
utilizar socket para los PIC, si se descomponen solo es de
retirarlo y poner otro.
CONCLUSIONES
- En este proyecto podemos ver el manejo del uso de la
transmisión de datos vía luz infrarroja, en nuestro caso, la
distancia o alcance que se presenta en este caso, depende no
solo de la corriente y voltaje en los diodos o transmisores
infrarrojos, sino también de la frecuencia que se module el
dato a interpretar.
- Este proyecto interpreta la lectura del valor de
temperatura, pero se puede usar el mismo para indicar
cualquier otro fenómeno físico, es decir, se puede usar la
misma base de funcionabilidad de este proyecto para indicar
no solo temperatura, sino presión, velocidad, humedad,
altitud, intensidad de luz, etc.
- Como toda transmisión de señales, aparece la señal no
deseada que es el ruido, debido a que usamos diodos y
transistores infrarrojos de muy buena calidad, la
transmisión no tiene mucha pérdida, así que, para
optimizarlo usamos capacitores, lo cual nos hizo muy
despreciable el ruido.
- Para una buena amplificación de voltaje, la opción más
favorable es utilizar OPAMPS, ya que tienen muy poca
pérdidas y no hay mucho aumento de corriente, dependiendo
del caso, en el nuestro, utilizamos una configuración de
OPAMPS conocida como LA INSTRUMENTAL, la cual nos resultó
muy óptima, ya que tiene algunas ventajas de más, que una
simple configuración de AMPLIFICACIÓN INVERSOR o NO
INVERSOR.
APLICACIONES.
- Para controlar la ventilación de alguna habitación u oficina
automáticamente, ahora que se presentan épocas de mucho
calor, esta sería una buena opción, para que uno no esté
pendiente del ventilador en prenderlo o apagarlo.
- Si necesita saber a cuánto se está de temperatura en algún
lugar de la casa o local, para así controlar algún
dispositivo de refrigeración.
Código Emisor.
/*PROGRAMADORES: Antonio Paucar Niola
Diego Cadena Avila */
//************************************************************************
void escribir_bit(int valor);
char botton;
unsigned int adc_rd,ch;
/*
El protocolo de los controles remotos: Philips RC-5
La longitud completa de la trama es igual a 14 * 1.778 us =
24.892 us. Si la tecla
se mantiene presionada, la trama se reenvía continuamente, pero
con una pausa de
equivalente a 50 bits ( 50 x 1.778 us = 88.900us) entre una y
otra transmisión.
Enrealidad hay 64 bits antes que halla una palabra completa, eso
quiere decir que
se a enviado el dato correctamente.
*/
void main() {
// CONFIGURACION DE PUERTOS
////////////////////////////////////////////////////
TRISA= 0X01; // CONFIGURA TODA LA PUERTA A COMO SALIDA
PORTA= 0X00; //
TRISB= 0X00; // CONFIGURA TODA LA PUERTA B COMO SALIDA
PORTB= 0X00; //
TRISC= 0X00; // CONFIGURA TODA LA PUERTA B COMO SALIDA
PORTC= 0X00;
TRISD= 0X00; // CONFIGURA TODA LA PUERTA B COMO SALIDA
PORTD= 0X00;
// ANALOG SELECT REGISTER
//////////////////////////////////////////////////////
ANSEL= 0X01; // ANS COMO DIGITAL LOS BITS 0-7
ANSELH= 0X00; // ANS COMO DIGITAL LOS BITS 8-13
/////////////////////////////////////////////////////////////////
///////////////
botton=0x00;
while(1){
adc_rd = ADC_read(0);
ch = (adc_rd *100/234);
portb=ch;
botton = ch;
//PROGRAMACION DE LOS LED
if(ch<=0x19)
{
PORTD.F0 =1 ;
PORTD.F1 =0 ;
PORTD.F2 =0 ;
}
if
(ch>0x19&&ch<=0x2D)
{
PORTD.F0 =0;
PORTD.F1 =1;
PORTD.F2 =0;
}
if(ch>0x2D)
{
PORTD.F2 =1;
PORTD.F1 =0;
PORTD.F0 =0;
}
escribir_bit(botton.f0);
escribir_bit(botton.f1);
escribir_bit(botton.f2);
escribir_bit(botton.f3);
escribir_bit(botton.f4);
escribir_bit(botton.f5);
escribir_bit(botton.f6);
escribir_bit(botton.f7);
/////////////////////////////////////////////////////////////////
///////////////
delay_ms(87); // 50 * 1.778 ms
}
}
// PROTOCOLO RC5X
/////////////////////////////////////////////////////////////
void escribir_bit(int valor){
// Por cada bits que se transmite habra 1.778 ms
int i, j;
if(valor==1){ // H- 889 us // L- 889 us
// ESTADO EN ALTO 889 us
///////////////////////////////////////////////////////
for(j=0; j<69; j++)
{
// Oscilamos el led a 36khz para poder exitar el phototransistor
PORTC.RC6= PORTC.RC6 ^ 1;
delay_us(9);
}
// ESTADO EN BAJO 889 us
///////////////////////////////////////////////////////
PORTC.RC6=0;
delay_us(900);
/////////////////////////////////////////////////////////////////
///////////////
}
else
{ // H- 889 us // L- 889 us
// ESTADO EN BAJO 889 us
///////////////////////////////////////////////////////
PORTC.RC6=0;
delay_us(870);
// ESTADO EN ALTO 889 us
///////////////////////////////////////////////////////
for(j=0; j<69; j++){ // Oscilamos el led a 36khz
para poder exitar el phototransistor
PORTC.RC6= PORTC.RC6 ^ 1;
delay_us(9);
}
PORTC.RC6=0;
Código Receptor //configuracion de LCD
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB6_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB6_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
//***************************************************
#include <built_in.h>
unsigned char ch,receive;
unsigned int adc_rd;
char *text,*text1;
char txt[4];
long tlong;
int i,j;
int numveces= 0, haydatos=0;
unsigned int codigo[8];
int int_rb0=1, int_tmr0=0;
unsigned short valor;
void interrupt(){
if(INTCON.INTF==1 && int_rb0==1){
int_tmr0= 1;
int_rb0= 0;
INTCON= 0b11100000;
TMR0= 0x5A;
}else if(INTCON.T0IF==1 && int_tmr0==1){
portd.rd0 = portd.rd0 ^ 1;
if(PORTB.RB0==1){
codigo[numveces]=0;
}else{
codigo[numveces]=1;
}
int_tmr0= 1;
int_rb0= 0;
numveces++;
INTCON= 0b11100000;
TMR0= 0X27;
if(numveces==9){
int_tmr0= 0;
int_rb0= 1;
haydatos=1;
numveces=0;
INTCON= 0b11010000;
valor = 30 ;
valor = 0b00011110;
valor.F0 = codigo[0];
valor.F1 = codigo[1];
valor.F2 = codigo[2];
valor.F3 = codigo[3];
valor.F4 = codigo[4];
valor.F5 = codigo[5];
valor.F6 = codigo[6];
valor.F7 = codigo[7];
} // 1111 0101 245
// 1111 1010 250
}
}
void main() {
OPTION_REG= 0b10000011;
INTCON = 0b11010000;
OSCCON = 0b01110101;
ANSEL = 0;
ANSELH = 0;
TRISA = 0;
TRISD=0;
TRISB=0x01;
TRISC = 0X80;
UART1_Init(9600);
Delay_100ms ();
Lcd_Init();
Delay_100ms ();
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Cmd(_LCD_CLEAR);
for(i=0;i<5;i++){
Lcd_Cmd(_LCD_CLEAR);
text = "LABORATORIO DE";
LCD_Out(1,i,text);
Delay_ms(100);
}
text1 = "ELECTRONICA A";
LCD_Out(2,3,text1);
ADCON1 = 0x82;
TRISA = 0xFF;
Delay_ms(1000);
Lcd_Cmd(_LCD_CLEAR);
numveces=0;
int_tmr0= 0;
int_rb0= 1;
while (1) {
text = "Temperatura:";
for(j=16;j>0;j--){
Lcd_Cmd(_LCD_CLEAR);
LCD_Out(1,j,text);
Delay_ms(100);
}
ByteToStr(valor, txt);
Lcd_Out(2, 5,txt);
delay_ms(2000);
text = "Nivel:";
for(j=10;j>0;j--){
Lcd_Cmd(_LCD_CLEAR);
LCD_Out(1,j,text);
Delay_ms(100);
}
if(valor<=0x20)
text1 = "T1";
else if(valor>0x20&&valor<0x40)
text1="T2";