Escuela Superior Politécnica del Litoral Facultad de...

37
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

Transcript of Escuela Superior Politécnica del Litoral Facultad de...

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

IMPRESO DEL PCB

Circuito emisor

Circuito receptor

Circuito controlador de temperatura

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.

ANEXO

HOJAS DE ESPECIFICACIONES DE COMPONENTES.

PIC 16F887.

LM35

LM324

LCD 16X2

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";

else

text1="T3";

LCD_Out(2,3,text1);

delay_ms(2000);

}

}

// _______ ________

// | | | | |

// | | | | |

// | | | | |

// | |____________| |______________|

//

// t1 t2 t3 t1

//