You are on page 1of 21

INDICE

INTRODUCCION MODO DE USO DESARROLLO


SENSADO DE TEMPERATURA ETAPA DE MUESTREO BLOQUE DE CONTROL

2 3 5
5 7 10

ANEXOS
PROGRAMACION 13

BIBLIOGRAFIA

21

INTRODUCCION. En el siglo XX, se volvi indispensable el uso de incubadoras para neonatos (recin nacidos) en alto riesgo o prematuros, tanto en hospitales pblicos como en clnicas privadas, para lograr una reduccin en la tasa de mortalidad infantil. Los problemas en los bebs prematuros estn relacionados con la inmadurez de sus sistemas orgnicos, por lo cual necesitan cuidados especiales en la sala de neonatos hasta cuando sus sistemas orgnicos se hayan desarrollado lo suficiente como para mantenerlos con vida sin necesidad de brindarles apoyo especializado. Estos cuidados pueden durar semanas o meses dependiendo que tan prematuro sea el beb. En la actualidad existe una gran variedad de dichos equipos en el mercado, algunos ms o menos complejos que otros, pero todos trabajan para el mismo fin y controlan las mismas variables principales, o sea la temperatura y la circulacin de aire en el habitculo. Algunos equipos tienen la opcin de controlar otros parmetros como la saturacin de oxigeno en la sangre, la humedad dentro del habitculo, entre otras. El objetivo de este proyecto es realizar un prototipo de control de incubadora, siguiendo las normas vigentes al caso, que nos sirva de base para empezar a disear seriamente un control con el fin de poder comercializarlo en el futuro. En este proyecto, nos basamos en la norma IRAM 4220-2-19 de APARATOS ELECTROMEDICOS INCUBADORAS DE BEBES, asi como tambin en los manuales de la marca MEDIX de los modelos TR-306(Incubadora de transporte Manual de servicio Tcnico) y PC-305(Incubadora de terapia intensiva Manual de usuario). Como se dijo, esto es slo un prototipo.

MODO DE USO. Este sistema cuenta con un indicador de temperatura en display, control microprocesado de temperatura, alarma acstica, alarmas visuales de temperatura y de falla en ventilador de recirculacin de aire. El control trabaja en un rango de temperatura fijo que va de 20 a 37C con opcin de ser extendida a 39C. La lectura de temperatura en el recinto se visualiza en display en un rango que va de 20 a 45C, con una precisin de 0.1C (un decimal).

Al encenderse el sistema, aparece en display la temperatura que se mide en el habitculo. Por defecto la temperatura de set es de 30C, por lo cual, si la misma fuese menor a este valor, al encenderse el sistema arranca el control de calefaccin. En caso de que la temperatura sensada este 3C por debajo o 1C por encima de la temperatura seteada se enciende la alarma por temperatura. Si la temperatura es mayor: Suena la alarma acstica intermitentemente. Se enciende en forma intermitente el indicador de alarma TEMP. AIRE. Se apagan la resistencia calefactora junto con el ventilador de recirculacin de aire. Si la temperatura es menor: Suena la alarma acstica intermitentemente. Se enciende en forma intermitente el indicador de alarma TEMP. AIRE.

Se enciende la resistencia calefactora (potencia mxima) junto con el ventilador de recirculacin de aire.

En ambos casos la alarma acstica se puede silenciar oprimiendo el pulsador RESET ALARMA, transcurridos 10 minutos y si la falla no se corrige vuelve a sonar la alarma. Para modificar la temperatura en el habitculo, se debe presionar el botn SET_TEMP, al hacerlo se visualiza en el display la temperatura de set actual (sin decimales), la misma se modifica apretando los botones (+) o (-), una vez seleccionada la temperatura deseada, se debe aceptar con el botn SET (de otro modo los cambios no producen), y presionando el botn MUESTRA, vuelve a mostrar en display la temperatura del habitculo.

Ante una falla en la circulacin de aire, se enciende la alarma correspondiente, la cual, al igual que la alarma anterior, consta de una indicacin sonora y una visual. Esta alarma trabaja como sigue: Suena la alarma acstica intermitentemente. Se enciende en forma intermitente el indicador de alarma falla de aire. Se interrumpe la potencia del calefactor a travs de un circuito de rel. La alarma acstica NO se puede silenciar oprimiendo el pulsador RESET ALARMA.

DESARROLLO. Este proyecto es un prototipo que usa un control ON-OFF de temperatura, el cual necesita muchos cambios y mejoras para poder usarse en una incubadora neonatal real. Este sistema cuenta con una unidad microprocesada para mostrar temperatura en display u otra para el control en s mismo. La unidad de muestreo en display de temperatura se hizo independiente del control porque asi se especifica en la norma IRAM 4220-2-19. Para el sensado de temperatura se armo interfaz para adaptar la seal de salida del sensor de temperatura a niveles de 0-5V que se puedan reconocer el la entrada de los microcontroladores utilizados. A efectos de simplificar se uso la misma interfaz para la unidad de control y la de muestreo. A continuacin se muestra circuito elctrico utilizado para la simulacin en proteus, puede verse que consta de tres bloque separados (la interfaz del sensor, el bloque de control y la etapa de muestreo), los cuales se interconectan entre si.
BLOQUE DE CONTROL
Interfaz sensor Pot calefaccion Ventilador Alarma Acustica sensor A puerto A/D seal acondicionada Alarma temp aire Falla ventilador Ventilador Calefactor

D9

D1
31.0

D7
Salida de datos
seal acondicionada Alarma Acustica

LM335 LM335

p8 p7 p6 p5 p4 p3 p2 p1

Falla vent Reset alarma extensin 39C set temp ++ temp -muestra set_temp

1_B 2_B 3_B 4_B

1b 2b 3b 4b

D8
Alarma temp aire

D10
b1 b2 b3 Falla ventilador

Q1_b Q2_b Q3_b

PIC16F877A

FALLA VENT

Pulsadores de control
p8

Control de Displays

RESET ALARMA

p7

ETAPA DE MUESTREO
1b 2b 3b 4b 1B 2B 3B 4B QA QB QC QD QE QF QG b1 b2 b3 Q1b Q2b Q3b 1 2 3 QA QB QC QD QE QF QG QA QB QC QD QE QF QG QA QB QC QD QE QF QG QA QB QC QD QE QF QG

EXT_39C

p6

SET

p5 p4

++ -MUESTRA

Entrada de datos
p3

p2

Display 1 Display 2 Display 3

SET_TEMP

p1

R8
SET_TEMP(2) VALUE=5 1k

R1
1k

R2
1k

R3
1k

R4
1k

R5
1k

R6
1k

R7
1k p2 p1 Muestra Set_temp

Interfaz sensor

PIC16F873A

DIAGRAMA GENERAL DE SIMULACION

El funcionamiento detallado de cada uno de los distintos bloques se explica a continuacin. Sensado de Temperatura. Para el sensado de temperatura se utilizo el sensor integrado LM335, el cual tiene una salida lineal con una variacin en la tensin de salida de 10mV/C. Los valores de salida de este sensor van desde 0V para 0K(-273C) en adelante. Como el rango de lectura que se programo va de 20-45C, necesitamos saber la salida del sensor para estos valores de temperatura, se tiene:

representacion salida de potencia y alarmas

INTERFAZ SENSOR

D11
seal acondicionada

Ahora bien estos valores no son los adecuados para enviar a la entrada del conversor AD del micro, entonces se hace una conversin lineal para llevar las variaciones que van de 2.93V a 3.18V a otras que van de 0V a 5V. Esto lo logramos con el bloque interfaz sensor, el circuito elctrico se detalla a continuacin.

R11
10k U6(V-) VALUE=-22

R13
24k

U6
R9(2) VALUE=22

U6(OP)

U5(V-) VALUE=-22

R9
10k 31.0

2 6 3 7 1

D1

10k

R12
1k2

2 6 3 A puerto A/D

4 5

sensor

R10

U5

4 5

LM741 LM335

R14
9k012 U6(V+) VALUE=22 U5(V+) VALUE=22

LM741

D2
1N4007

7 1

D3 - ZENER
1N4733A

R14(1) R14(1) VALUE=22

El diagrama consta de dos Amp. Operacionales, el primero se configura como inversor y el segundo como sumador para dar la escala necesaria de 0-5V a su salida. Debe notarse que el circuito es solo de simulacin, en el circuito prctico que se hizo se coloco a la salida del sensor un filtro pasa bajos, el cual es seguido por un operacional configurado como seguidor de tensin, a modo seguir la variaciones de tensin evitando un consumo innecesario de corriente.

J1

1 2 3

1: -22V 2: GND 3: +22V

Seguidor de tension

Filtro pasa Bajo


2

4 5

U1
6 LM741 7 1

R1
10k

R2 J3
3 2 1 3M3 1 PRES1 2 2 3 10k

C1 Potenciometro para calibrar sensor


33nF

Conector sensor

R4
10k

R7
12k

R8
12k

R3
10k

4 5

2 3 7 1

U2
6 LM741 1 PRES2 1 2 3

R5
1k2 3 1k

4 5 2

U3
6 LM741 7 1

R6
8k2

J2
2 1

Conector de salida hacia la entrada del conversor A/D

D2
1N4007

D3 - ZENER
1N4733A

CONN-H2

CIRCUITO PRACTICO

Etapa de muestreo. Como se dijo antes, la unidad bloque de muestreo en display se hizo independientemente del control porque asi lo especifica la norma IRAM 4220-2-19. En vista de los componentes que se pueden conseguir en el mercado de la zona, y debido al costo de los mismos, se opto por usar un PIC16f873A ya que de este modo el costo se haca menor que si se usaban componentes discretos para visualizar un valor analgico en display. Como se aprecia en el diagrama general de simulacin en proteus que se muestra al principio, el bloque de muestreo tiene 5 conjuntos de lneas de entrada y un conjunto de lneas de salida.

Un conjunto se usa como E/S de alimentacin elctrica para los displays. El conjunto de entrada de datos consta de cuatro lneas de datos provenientes del bloque de control, estas se usan para transmitir informacin cuando se quiere mostrar en display la temperatura de seteo, o dicho de otra forma estas lneas llevan el cdigo BCD de la temperatura de seteo para que se visualice en display. El conjunto de control de displays se usa para controlar los mismos desde el bloque de control cuando se est seteando temperatura. Por ltimo quedan dos lneas que proviene de los pulsadores de control y la entrada correspondiente a la seal acondicionada por la interfaz del sensor para conectarla al ADC.

A continuacin se detalla diagrama elctrico correspondiente al bloque de muestreo:


4B

Entrada de datos

3B 2B 1B

U1
rc0 rc1 rc2 rc3 2 3 5 6 11 10 14 13 rb3 1 15 1A 1B 2A 2B 3A 3B 4A 4B A/B E 74HC157 1Y 2Y 3Y 4Y 4 7 9 12 7 1 2 6 3 4 5

U2
A B C D LT BI LE/STB 4511 QA QB QC QD QE QF QG 13 12 11 10 9 15 14

rb2

R29 R28
220 220

R30
220

R31
220

R32
220

R33
220

R34
220

R26
1k

R27
1k

10

14

15

4k7

4k7

4k7

4k7

4k7

4k7

4k7

4k7

4k7

4k7

R26(1) VALUE=5 13 12 11 Q1 Q2 Q3 10 9 15 14 QA QB QC QD QE QF QG

rb0

rb1

Set_temp Muestra Interfaz sensor

rb0 rb1 ra0 ra0

U3
9 10 2 3 4 5 6 7 1 OSC1/CLKIN OSC2/CLKOUT RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD 21 22 23 24 25 26 27 28 11 12 13 14 15 16 17 18

2N2222 rb2 rb3

Q1

Q2
2N2222

2N2222

Q3

Salida Codigo 7 segmentos


Q1 Display 1 Display 2 Display 3 Q2 Q3

C1
33p

4MHz

C2
33n

PIC16F873A PROGRAM=..\Programas\Programa 7 seg CCS\Control 7 segmentos.hex

XT1

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

R42
1k2

R43
1k2

R44
1k2

Retorno catodo de displays


rc0 rc1 rc2 rc3 3 4 10 1_b 2_b Q1b Q2b Q3b

U7:A
4030

U7:B
4030

U7:C
4030

3_b

Control de Displays
8 9

1_b

R35
4k7

R35(1) VALUE=5

2_b 3_b

R36
4k7

R37 R38
4k7 4k7

R39
4k7

U7:D R40
4k7

R41
4k7

12 11 13 4030

R36(1) VALUE=5

Si se observa el esquema, puede verse que el micro usado es un PIC16F873A, el cual trabaja en una frecuencia de 4MHz. La entrada de seal analgica proveniente de la interfaz del sensor se conecta al pin 2 del micro para ser convertida a un valor digital. Dicho valor se procesa mediante el ADC interno del micro, el cual da una salida de conversin de 10 bits, cuyos valores van desde 0 a 1023 (10n). Una vez obtenido el valor de la seal de entrada en el ADC interno, esta se procesa y se manda en cdigo BCD al CI4511, el cual es un Driver y conversor BDC/7Segmentos, para ser mostrado en display. El CI 74HC157 conectado antes del CI 4511 es un multiplexor cudruple de 2x1 canales, se usa para seleccionar que datos se deben mostrar, los datos correspondientes a la temperatura que salen del PIC16F873A o los correspondientes a la temperatura de seteo proveniente del bloque de control. El multiplexor se comanda, para que habilite uno u otro canal de datos, con el PICF16F873A mediante los pulsadores MUESTRA y SET_TEMP. Si se observa el circuito elctrico, se ve que las salidas de control de los displays 7 segmentos se manejan con los transistores Q1, Q2 y Q3, y estos a su vez se controlan por medio de las compuertas X-OR conectadas a sus bases. Dichas compuertas cumplen la funcin de aislar las seales de control de display que provienen del Pic16F873A y del bloque de control de modo que no se den las dos a la vez y pueda ocasionarse un mal funcionamiento.

11

12

13

R16 R17

R18

R19

R20

R21 R22

R23

R24

R25

Los resistores conectados a la entrada del 74HC157 y de las compuertas X-OR, y que se conectan a Vd = 5V cumplen la funcin de interfaz de lgica TTL a lgica CMOS. Esto se hizo asi porque el microcontrolador maneja niveles de tensin TTL, mientras que El 74HC157 y las X-OR(CD4030) manejan niveles de tensin CMOS. A continuacin se muestra el esquema elctrico prctico utilizado para hacer la placa de muestreo, en el mismo se distinguen dos bloques internos los cuales se muestran ms abajo.

J1 1 2 3 4 datos set temp

CONMUTADOR
5V gnd+ E 1B 2B 3B 4B A/B 1A 2A 3A 4A QA QB QC QD QE QF QG dp
QA QB QC QD QE QF QG dp

J5

Vin 1 - GND 2 - 5V

DRIVER 7 SEGMENTOS

1 2

U8 C-501G
QA QB QC QD QE QF QG

U9 C-501G 7 6 4 QD 2 QE 1 QF 9 QG 10 dp 5
QA QB QC

U10 C-501G 7 6 4 QD 2 QE 1 QF 9 QG 10 5
QA QB QC

7 6 4 2 1 9 10 5

3 8

3 8

3 8

3 8

Q1 2N2222 R17 1k2 R18 1k2

Q2 2N2222

Q3 2N2222

R19 1k2

SENSOR TEMPERATURA
E R42 J2 6 5 4 3 2 1 pulsadores sensor R12 1k R2 1k 4k7 5V gnd+ reset Muestra set_temp Q1a Q2a Q3a A/B rc0 1

10

3 8

3 8

a b c d e f g dp

a b c d e f g dp

a b c d e f g dp

U7:A 4030

U7:B 4030

U7:C 4030

11

U7:D 4030

rc1 rc2 rc3

R34 12 13 4k7 R35 4k7 R36 4k7 R37

PIC 16F873A

4k7 R38 1 2 3 4k7

J7 1 2

R39 sensor 1 - sensor 2 - GND J8 control displays 4k7

DIAGRAMA GENERAL PRACTICO

C1

33p X1 C2 4MHz U3 9 10 2 3 4 5 6 7 1 reset OSC1/CLKIN OSC2/CLKOUT RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD 21 22 23 24 25 26 27 28 11 12 13 14 15 16 17 18 Set_temp Muestra E A/B Q1a Q2a Q3a rc0 rc1 rc2 rc3

33n gnd+

sensor

SENSOR TEMPERATURA

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 PIC16F873A

U1 1A 1B 2A 2B 3A 3B 4A 4B A/B E 2 3 5 6 11 10 14 13 1 15 1A 1B 2A 2B 3A 3B 4A 4B A/B E 74HC157 R15 1k R16 1k 1Y 2Y 3Y 4Y 4 7 9 12 7 1 2 6 3 4 5 U2 A B C D LT BI LE/STB 4511 R1 gnd+ 220 R11 4k7 R13 4k7 R14 4k7 R22 4k7 R23 4k7 R24 4k7 R25 4k7 R26 4k7 R27 4k7 R28 4k7 QA QB QC QD QE QF QG 13 12 11 10 9 15 14 R21 R20 220 220

R33 R32 R30 R29 220 220 R31 220 220 220

dp

QG

QF

QE

QD

QC

QB

QA

5V

CONMUTADOR

Se puede ver en los diagramas prcticos que la fuente de alimentacin es externa, esto se pens asi para poder implementar a futuro (dentro de la misma fuente general de alimentacin) alguna proteccin por hardware por sobre carga y/o cortocircuito. Bloque de control. Este bloque es un control muy bsico de temperatura que sirve para controlar un rel (el cual maneja la resistencia calefactora), una salida para el ventilador de recirculacin de aire y algunas alarmas. El hecho de que controle un rel indica que se trata de un control ON-OFF. Ahora bien algo mejor sera usar un control PID, esto es una mejora para implementar a futuro. El corazn de este bloque es el Pic16F877A, el cual se encarga de convertir a un valor digital la seal que sale de la interfaz del sensor y de procesar dicho valor (al igual que lo hace el Pic16F873A en el bloque de muestreo) para tomarlo como referencia para controlar el calefactor. Se ve que del micro salen lneas reservadas para las alarmas. Estas se simulan mediante leds de indicacin de distintos colores, asi como tambin el calefactor y el ventilador, pero en la prctica se uso un rel para la potencia. La condicin de alarma que indica falla en la ventilacin se simulo con una entrada digital mediante un pulsador debido a que no contbamos con un sensor adecuado para tal efecto, esto es un detalle a corregir a futuro. A continuacin se muestra el diagrama elctrico de simulacin de proteus del bloque de control.

10

C3
22p

XT0

8MHz

C4
22p

U4
13 14 interfaz sensor extensin 39C set temp ++ temp -muestra set_temp 2 3 4 5 6 7 8 9 10 1 OSC1/CLKIN OSC2/CLKOUT RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD 33 34 35 36 37 38 39 40 15 16 17 18 23 24 25 26 19 20 21 22 27 28 29 30 1_B 2_B 3_B 4_B Reset alarma Falla vent

RA0/AN0 RA1/AN1 RA2/AN2/VREF-/CVREF RA3/AN3/VREF+ RA4/T0CKI/C1OUT RA5/AN4/SS/C2OUT RC0/T1OSO/T1CKI RE0/AN5/RD RC1/T1OSI/CCP2 RE1/AN6/WR RC2/CCP1 RE2/AN7/CS RC3/SCK/SCL RC4/SDI/SDA MCLR/Vpp/THV RC5/SDO RC6/TX/CK RC7/RX/DT RD0/PSP0 RD1/PSP1 RD2/PSP2 RD3/PSP3 RD4/PSP4 RD5/PSP5 RD6/PSP6 RD7/PSP7 PIC16F877A

Pot calefaccion Ventilador

Q1_b Q2_b Q3_b Alarma Acustica Alarma temp aire Falla ventilador

R15
RESET 16F877A

R15(1) VALUE=5

4k7

BLOQUE DE CONTROL

Se observa que el bloque de control no es ms que el micro utilizado con sus respectivas E/S. A continuacin se muestra el prototipo resultante de este proyecto, todas las etapas explicadas, salvo la de control (por estar en desarrollo aun) fueron llevadas a cabo en una placa de circuito impreso.

11

Observacin sobre los microcontroladores utilizados. Si se ven los diagramas elctricos se puede ver que de los dos microcontroladores ninguno se usa de modo de sacar el mayor provecho debido a que no se utilizan todos los pines de todos los puertos. Esto es porque en un futuro se agregaran ms funciones que demanden mayor cantidad de pines E/S, asi que estos micros pueden servir para tal caso. Ambos microcontroladores tienen un ADC interno de 10 bits, de modo que el valor de temperatura que se lee en display es igual (tericamente) al que tiene como referencia el control de temperatura.

12

ANEXOS. Programacin Para este proyecto usamos el lenguaje de programacin CCS, el cual puede trabajarse en conjunto con MPLAB para bajar los programas al respectivo microcontrolador. A continuacin se muestran los cdigos de programacin que se usaron en este proyecto. Programa para el Pic del bloque de muestreo:
#include <16F873A.h> #device adc = 10 /*Con esto defino el modulo ADC(siempre se define despues de definir el pic chip a usar, si lo defino en otro momento no compila)*/ #use delay(clock=4000000) #fuses XT, NOWDT, PROTECT #opt 9 #use fast_io(a) #use fast_io(b) #use fast_io(c) #byte porta = 0x05 #byte portb = 0x06 #byte portc = 0x07 int aux1; int flagtemp = 0; int cont = 0; void muestra(float); void borrado(); Dec2Bcd(int); #int_rtcc void interrup_temp() {cont ++; if(cont == 31) {flagtemp = 1; cont = 0; } set_timer0(0x00); } void main() {float b = 0.02441; float a; //Numero de 8 bits sin signo //uso la maxima optimizacion de codigo //Selecciono los puertos A,B,y C como E/S digitales

//como no me da para temporizar 2 segundos uso un //loop De 61 vueltas para lograrlo, De este modo temporizo //exactamente hasta 1.998848 segundos //T = 4* Tosc* (256 -N10)* Rango del Divisor de Frec * loop

//Defino un numero de 32 bits en punto flotante

13

setup_adc_ports(RA0_RA1_RA3_ANALOG); setup_adc(adc_clock_div_32); set_adc_channel(0); setup_counters(rtcc_internal, rtcc_div_256); /*clock interno, preescaler al TMR0, divido por 256*/ enable_interrupts(global); enable_interrupts(int_rtcc); set_timer0(0x00); set_tris_a(0x01); set_tris_b(0x03); set_tris_c(0x00); aux1 = 0; output_bit(pin_b2, 0); output_bit(pin_b3, 0); output_bit(pin_b5, 0); output_bit(pin_b6, 0); output_bit(pin_b7, 0); do {if (flagtemp == 1) {a = read_adc() * b + 20; flagtemp = 0; } /*habilito permiso de interrupciones por desbordamiento del TMR0*/ //inicializo el TMR0 en cero

//En estas lineas se procesa el valor analogico //que entra al ADC interno del micro

muestra(a); //llama a la funcion de muestra en display if(input(pin_b0) && (aux1 == 0)) //Si aprieto el boton de Set_temp desahibilito {aux1 = 1; //las salidas a los transistores del Pic16F873A borrado(); //para que entren los datos del bloque de control } }while(true); } /*esta Funcion se encarga de mostrar la temperatura en display*/ void muestra(float valor_temp) {int De, U, dec, aux; /*Aca esta la definicion de parametros*/ De = (int) (valor_temp/10); U = (int)(valor_temp - 10*De); aux = 10*De + U; dec = (int)(10*valor_temp - 10*aux); //decenas //Unidades //decimales

/*Ahora convierto los parametros a codigo BCD*/ De = Dec2Bcd(De); //muestra decenas U = Dec2Bcd(U); //muestra unidades dec = Dec2Bcd(dec); //muestra decimales /*Aca viene la rutina de muestreo en display*/ output_c(De);

14

output_bit(pin_b5, 1); delay_ms(15); output_bit(pin_b5, 0); output_c(U); output_bit(pin_b6, 1); delay_ms(20); output_bit(pin_b6, 0); output_c(dec); output_bit(pin_b7, 1); delay_ms(15); output_bit(pin_b7, 0); return; } /*esta es la funcion que transfiere el control de los displays al Pic16F877A que esta en bloque de control*/ void borrado() {do {output_bit(pin_b5, 0); output_bit(pin_b6, 0); output_bit(pin_b7, 0); output_bit(pin_b3, 1); if(input(pin_b1) && (aux1 == 1)) {delay_ms(100); aux1 = 0; output_bit(pin_b3, 0); return; } }while(true); } /*Funcion para convertir a codigo BCD*/ Dec2Bcd(int valor) {int aux2; aux2 = valor & 0x0F; return(aux2); }

15

Programa para el Pic del bloque de control:


#include <16F877A.h> #device adc = 10 #use delay(clock=8000000) #fuses HS, NOWDT, NOPROTECT #opt 9 #priority rtcc, timer1 #use fast_io(a) #use fast_io(b) #use fast_io(c) #use fast_io(d) #use fast_io(e) #byte porta = 0x05 #byte portb = 0x06 #byte portc = 0x07 #byte portd = 0x08 #byte porte = 0x09 int set = 30; int flagtemp = 0; int reset_alarma = 0; int cont = 0; int cont1 = 0; int aux1, aux2, aux3; int aux0 = 37; float a; #int_rtcc void interrup_temp() {cont ++; if(cont == 31) {flagtemp = 1; cont = 0; } set_timer0(0x00); } #int_timer1 void interrup_TIMER1() {cont1 ++; if (cont1 == 38) {cont1 = 0; reset_alarma = 0; output_low(pin_d4); output_low(pin_d5); } //uso la maxima optimizacion de codigo //Priorizo interrupcion del TMR0 antes que la del TMR1 //Selecciono los puertos A,B,C, D y E como E/S digitales

//como no me da para temporizar 2 segundos uso un // loop De 61 vueltas para lograrlo, De este modo temporizo // exactamente hasta 1.998848 segundos // T = 4* Tosc* (256 -N10)* Rango del Divisor de Frec * loop

16

if (((int)a <= aux3) && ((int)a >= aux2)) reset_alarma = 0; set_timer1(0x00); } set_temp(int); Dec2Bcd(int); void alarma(int); void main() {int salida; float b = 0.02441; setup_adc_ports(RA0_RA1_RA3_ANALOG); setup_adc(ADC_CLOCK_DIV_32); set_adc_channel(0); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256); /*clock interno, preescaler al TMR0, divido por 256*/ set_timer0(0x00); //inicializo el TMR0 en cero setup_timer_1(T1_INTERNAL|T1_DIV_BY_8); /*clock interno, preescaler al TMR1, divido por 8*/ enable_interrupts(global); enable_interrupts(INT_RTCC); enable_interrupts(INT_TIMER1); set_tris_a(0xFF); set_tris_b(0xF0); set_tris_c(0x00); set_tris_d(0x00); set_tris_e(0xF); output_c(0x00); output_d(0x00); aux1 = 0; do {aux2 = set-3; aux3 = set+1; if (flagtemp == 1) {a = read_adc() * b + 20; flagtemp = 0; } if (input(pin_e2) && (aux1 == 0)) {delay_ms(100); aux1 = 1; set_temp(set); } //Llamada a funcion set_temp() //Habilito interrupciones globales //Habilito interrupcion por desbordamiento de TMR0 //Habilito interrupcion por desbordamiento de TMR1

17

/* las siguientes lineas son para controlar el calefactor*/ if ((int)a < (set-1)) //Defino el arranque del calefactor {salida = 1; //con una histerisis de 1C } if ((int)a >= set) {salida = 2; } /* las siguientes lineas son De llamada a las funciones De alarma*/ if ((int)a < aux2) //Lamada alarma de temp_aire por debajo de 3C del set {if (reset_alarma == 0) {alarma(1); salida = 1; } else {alarma(2); salida = 1; } } if ((int)a > aux3) //Lamada alarma de temp_aire por encima de 1C del set {if (reset_alarma == 0) {alarma(1); salida = 2; } else {alarma(2); salida = 2; } } if (((int)a <= aux3) && ((int)a >= aux2)) {if (!input(pin_b5)) {output_low(pin_d4); output_low(pin_d5); output_low(pin_d6); } } //Si se est en condiciones normales //normales apago todos los bits //de alarma.

if (input(pin_b5)) //Llamada a funcion alarma falla_ventilacion {alarma(3); salida = 2; } /*Las siguientes lineas son de encendido y apagado del calefactor y el ventilador de recirculacion*/ switch (salida) {case 1:{output_bit(pin_c2, 1); output_bit(Pin_c3, 1); break;} case 2:{output_low(pin_c2); output_low(Pin_c3); break;} }

18

}while(true); } /*Funcion de seteo de temperatura*/ set_temp(int temp) {int De, U; output_bit(pin_d3, 0); //deshabilito el tercer display do {De = (int) temp/10; //decenas U = (int)(temp-10*De); //Unidades De = Dec2Bcd(De); U = Dec2Bcd(U); /*muestro las decenas*/ output_b(De); output_bit(pin_d1, 1); delay_ms(20); output_bit(pin_d1, 0); /*muestro las unidades*/ output_b(U); output_bit(pin_d2, 1); delay_ms(20); output_bit(pin_d2, 0); if(input(pin_a5)) {delay_ms(20); if (input_state(pin_a5)) temp++; } if(input(pin_e0)) {delay_ms(20); if (input_state(pin_e0)) temp--; } /*Extension del rango de temperatura*/ if(input(pin_a2)) {delay_ms(20); if (input_state(pin_a2) && (aux0 == 37)) aux0 = 39; if (input_state(pin_a2) && (aux0 == 39)) aux0 = 37; } if (temp < 20) temp = 20; if (temp >= aux0) temp = aux0; if(input(pin_a4)) set = temp;

19

if (input(pin_e1) && (aux1 == 1)) {output_bit(pin_d1, 0); output_bit(pin_d2, 0); output_bit(pin_d3, 0); aux1 = 0; return(set);} }while(true); } /*Funcion para convertir de Decimal a BCD9*/ Dec2Bcd(int valor) {int aux2; aux2 = valor & 0x0F; return(aux2); } /* La siguiente funcion engloba todas las alarmas programadas*/ void alarma(int tipo) {switch (tipo) {case 1: //Alarma temp_aire {output_toggle(pin_d4); output_toggle(pin_d5); delay_ms(500); if(input(pin_b4)) //Pulsador De RESET ALARMA {output_low(pin_d4); //reseteo la alarma acustica reset_alarma = 1; set_timer1(0x00); //Habilito el TMR1 para que empiece a contar } break;} case 2: //Alarma temp_aire con nla acustica reseteada {output_low(pin_d4); output_toggle(pin_d5); delay_ms(500); break;} case 3: //Alarma falla ventilacion {output_toggle(pin_d4); output_toggle(pin_d6); delay_ms(500); break; } } }

20

Bibliografa o Datasheet transistor 2n2222. o Datasheet transistor TIP 122. o Datasheet Amp. Op. LM 741. o Datasheet microcontrolador PIC16F877A. o Datasheet microcontrolador PIC16F873A. o Datasheet 74HC157 - multiplexor cudruple de 2 a 1. o Datasheet M74HC4511 - BCD to 7 segment latch decoder driver. o Datasheet CD4030 - cudruple XOR. o Tutorial para crear componentes en Proteus. o Compilador C CCS y Simulador Proteus Para Microcontroladores Pic - Eduardo Garca Breijo. o Manual de usuario del compilador PCW de CCS - Escrito por Andrs Cnovas Lpez. o Manual_PIC16F87X_FIRTEC. o Curso PIC16f877 en espaol.pdf. o Amplificadores operacionales y circuitos integrados y lineales 5 edicin Robert F. Coughlin Frederick F. Driscoll. o Norma IRAM 4220-2-19 de APARATOS ELECTROMEDICOS INCUBADORAS DE BEBES. o Manual de usuario de la incubadora para terapia intensiva modelo PC-305. o Manual de servicio tcnico de la incubadora de transporte modelo TR-306.

21

You might also like