Documento Tesis Rfid PDF
Documento Tesis Rfid PDF
Documento Tesis Rfid PDF
FACULTAD DE INGENIERÍA
BOGOTÁ
2009
IMPLEMENTACIÓN DE UN MÓDULO BASADO EN TECNOLOGÍA RFID
PARA LA EMULACIÓN DEL SUMINISTRO DE MEDICAMENTOS,
RECONOCIMIENTO Y RESPECTIVA REACCIÓN, EN UN MANIQUÍ DE
ENTRENAMIENTO MÉDICO.
TRABAJO DE GRADO
FACULTAD DE INGENIERÍA
BOGOTÁ
2009
A nuestros padres, hermanos, familiares y amigos…
AGRADECIMIENTOS
El ingeniero Jhon Jairo Ramírez, por su apoyo y por darnos ánimo para
realizar este proyecto que esperamos contribuya a un mejor entrenamiento
de médicos en nuestra universidad.
CONTENIDO
Pág.
INTRODUCCIÓN 20
1. MARCO TEÓRICO 22
2.2.1 HF Mifare Plug and Play 31
4.3.1 Reacciones 96
6. RESULTADOS 131
6.4 COSTO TOTAL DEL MÓDULO REALIZADO 141
7. CONCLUSIONES 143
8. RECOMENDACIONES 145
BIBLIOGRAFÍA 146
LISTA DE TABLAS
Pág.
Tabla 23. Tabla estados futuros con base en estado actual. 110
LISTA DE FIGURAS
Pág.
Figura 11. Estructura para enviar dato al módulo. (Escritura del puerto) 41
Figura 12. Estructura para leer dato al módulo. (Lectura del puerto) 42
Figura 13. Lectura del Puerto 42
Figura 25. Concatenación de las cadenas que forman la instrucción final que
se envía al módulo lector de RFID para escribir la información en la tarjeta de
RFID. 69
Figura 28. Proceso para reconocer el estado futuro del neonato de acuerdo a
la medicina programada. 72
Figura 37. LM555 como oscilador monoestable. 97
Figura 41. Interfaz que indica estado de salud del neonato. 117
Figura 44. Circuito Impreso del circuito que alimenta y comunica al módulo de
RFID con el computador. 121
Figura 46. Layout del circuito que receptor de la información proveniente del
aplicador o del maniquí. 123
Figura 49. Esquemático del circuito implementado en el aplicador (Jeringa)
125
Figura 52. Esquemático del circuito controlador del módulo lector de RFID en
el maniquí. 127
Figura 53. PCB del circuito controlador del módulo lector de RFID en el
maniquí. 128
Figura 54. PCB del circuito controlador del módulo lector de RFID en el
maniquí. 128
Figura 63. Bloque 1: PROGRAMADOR DE MEDICAMENTOS. 136
LISTA DE ANEXOS
RESUMEN
INTRODUCCIÓN
Para hacer esto posible, se está utilizando un sistema basado en
tecnología de RFID en el que la información referente al tipo y cantidad de
medicamento a suministrar serán los datos identificados por el maniquí de
entrenamiento, una vez que éste realiza el proceso de reconocimiento de
dicha información tendrá algunas señales que representen la reacción o
efecto que dicho medicamento tiene en su estado de salud.
1. MARCO TEÓRICO
equipos, infraestructura y procesos que permiten realizar las actividades de
recaudo con la venta de pasajes del sistema3.
• ATI
• DSS ELECTRONICS COLOMBIA
• Integración Comercial Efectiva
• SMARTCHIP S.A.
• W&R Soluciones Integrales
• Iprelenso LTDA.
3
http://www.angelcom.com.co/textos/text4.txt
4
http://www.iprelenso.com.co/alianzas_estra.html
gestionado conjuntamente por la Organización Internacional de
Normalización (ISO) y Comisión Electrotécnica Internacional (IEC).
• Mifare T = CL: Bajo esta denominación se encuadran las tarjetas
Mifare ProX y SmartMX. Son tarjetas microprocesadas que incorporan
un sistema operativo de tarjeta (Card Operating System - COS) y
aplicaciones desarrolladas específicamente para ser ejecutadas en la
tarjeta. Estas tarjetas son capaces de ejecutar operaciones complejas
de forma rápida y segura, igual que las tarjetas con contactos ISO
7816.
5
www.SmartCardWorld.com
1.2.1.1 Lectores de RFID Iprelenso también se encarga de comercializar los
módulos lectores encargados de identificar estos TAGs. Los módulos Plug
and Play comerciales generalmente constan de una antena, una interfaz de
comunicación con el ordenador (RS232, RS485, RS422, USB, entre otras),
leds indicadores y el componente principal que es un dispositivo compacto
diseñado (microcontrolador) que se encarga de procesar la información
captada por la antena. Generalmente las empresas que realizan este tipo de
módulos son muy reservados con el código de programación de estos
microcontroladores, por ello, el lector se vende como un dispositivo Plug and
Play que quiere decir que el usuario puede acceder al mismo por medio del
ordenador sin tener que configurar (mediante jumpers o software específico
(no controladores) proporcionado por el fabricante) ni proporcionar
parámetros a sus controladores.
Para que sea posible, el sistema operativo con el que funciona el ordenador
debe tener soporte para dicho dispositivo. El comerciante está encargado de
brindar la información acerca del protocolo requerido para acceder al
dispositivo y las respectivas instrucciones que deben ser enviadas hacia el
mismo para configurar el modulo de acuerdo a la aplicación que sepa
realizada.
1.3 PROYECTO POSGRADO UNAL
2. DESCRIPCIÓN DEL PROYECTO
2.2.1 HF Mifare Plug and Play El módulo Plug and Play está compuesto por
el transciever HF Mifare OEM de ACG (Figura 3) que es el módulo
encargado de leer y escribir los tags con los que es compatible, gracias a su
compacto diseño puede ser integrado fácilmente en módulos lectores
portables o estacionarios.
Además, este módulo posee una interfaz serial-TTL que puede ser
conectada directamente a un microprocesador y al mismo tiempo ser
fácilmente convertida a la interfaz RS232 de algún dispositivo, gracias al
diseño sofisticado del receptor, este módulo garantiza que es muy estable
frente a ruido electromagnético y variaciones de la antena.
Básicamente el módulo Plug and Play (Figura 3), integra el módulo Mifare
OEM con una antena PCB en la parte posterior, y al mismo tiempo integra la
interfaz RS232 para que el transciever pueda ser conectado de manera
directa a un computador.
Figura 3. OEM reader y Módulo HF Mifare Plug and Play
En la siguiente tabla se resumen las propiedades del módulo Plug and Play.
hyperterminal. Bajo este protocolo los datos son transmitidos en ASCII
hexadecimal, por defecto, los dispositivos trabajan bajo este protocolo una
vez son fabricados. Por su parte, el protocolo binario se utiliza en
aplicaciones de tipo industrial con sincronización y con chequeo de trama.
También se incluye un byte de direccionamiento para redes tipo esclavo-
maestro o multidrop. Para la aplicación a implementar se ha decidido utilizar
el protocolo ASCII pues se va a realizar una programación y una
comunicación directa entre un solo TAG y un solo lector.
También es posible observar que cada sector contiene un bloque
denominado como Sector Trailer, estos bloques contienen las claves
secretas A y B para poder acceder a la memoria y las condiciones de acceso
de los cuatro bloques de cada sector. Esta información es muy importante
teniendo en cuenta que antes de llevar a cabo cualquier operación con la
memoria, es necesario que la tarjeta sea seleccionada y se realice una
autenticación con las claves secretas A y B descritas así como las
condiciones de acceso de cada bloque, a continuación se presenta el
diagrama de flujo de acceso a la memoria, que será tenido en cuenta para la
programación del TAG una vez se establezca el proceso de comunicación
que permita una eficaz emulación de programación de la jeringa.
Figura 6. Diagrama de flujo acceso al TAG.
Figura 7. Configuración del protocolo serial
A continuación, se realiza el proceso especificado por el algoritmo de acceso
expuesto anteriormente, en primer lugar se realiza la selección de la tarjeta,
como se observa en la figura 8, una vez enviado el comando de selección
(‘s’) se obtiene como respuesta el número serial de la tarjeta seleccionada
(44CD92CD), luego, para continuar con el proceso de autentificación se
envía la instrucción de Log In al sector 1 en este caso, de la siguiente
manera:
‘l’ 01 AA FFFFFFFFFFFF
Donde ‘l’ corresponde al comando de Log In, el primer byte (01) corresponde
al sector al cual se desea acceder, comprendiendo entonces un rango entre
00h – 3Fh. El siguiente byte (AA) corresponde al tipo de clave con el que se
desea acceder al sector, esta llave puede ser la A o la B dependiendo de la
operación a realizar, en general la clave A se usa para poder realizar
operaciones de lectura/escritura, mientras que la clave B se usa para
operaciones de solo lectura, finalmente los últimos 6 bytes corresponden a la
clave en sí, para el caso de nuestra tarjeta, tiene definida la clave A como
FFFFFFFFFFFF.
Una vez se realiza la operación de incremento (para el bloque 4) y
decremento (para el bloque 6) se observa que efectivamente sus valores
pueden ser modificados de manera sencilla una vez que se ha tenido acceso
a dichos sectores del TAG. Como se observa en la figura el lector responde
con los nuevos valores de cada bloque, para el 4, pasa de 0 a 1 pues se le
envió la instrucción +0400000001 donde el ´+´corresponde al comando de
incremento, el siguiente byte (04) corresponde al bloque al cual se desea
aplicar dicha instrucción y los siguientes 4 bytes (00000001) corresponden a
la cantidad a ser aumentada, en caso contrario la instrucción solo se modifica
con el comando inicial, que para disminuir el valor es ´-´; en el caso del
ejemplo vemos que se envía la instrucción al bloque 6 de la siguiente manera
-0600000002, y una vez leído el nuevo valor vemos como pasó de 3 a 1.
Hyperterminal, para ello utilizamos el módulo Visa configure serial Port,
que según el programa, sirve para inicializar el puerto serial de una fuente
especificada a una configuración deseada, a cada una de las variables que
pueden ser modificadas se le crea un control desde el que es posible realizar
la configuración.
En las figuras 9 y 10 se ilustra el diagrama de bloques de la programación y
el panel frontal desde donde se puede controlar la configuración del puerto.
Una vez configurado el puerto, se emplean los módulos Visa Write y Visa
Read para poder enviar y recibir datos a través del puerto serial
respectivamente, en la figura 11 se muestra el diagrama de bloques utilizado
para enviar una instrucción al módulo, inicialmente se están enviando los
caracteres por separado, sin embargo esta función será optimizada para que
el proceso sea realizado de una mejor manera.
Figura 11. Estructura para enviar dato al módulo. (Escritura del puerto)
Figura 12. Estructura para leer dato al módulo. (Lectura del puerto)
tarjeta seleccionada, esto ocurre en las dos ocasiones en que este comando
es enviado, también una vez se envía el comando de versión se observa que
efectivamente en el puerto se lee dicha información (Mifare 1.0), y finalmente,
cuando se envía la instrucción de autentificación se recibe una ´L´ que
significa que el acceso al sector 01del TAG se realizó de manera exitosa.
6
Ministerio de comunicaciones, documento “Banda de 450MHz”, para Comunicaciones Digitales Fijas y Móviles en
Áreas Rurales en el Foro de “Tecnologías Alternativas”
es decir uno de los dígitos binarios se representa mediante la presencia de la
portadora a amplitud constante, y el otro dígito se representa mediante la
ausencia de la señal portadora. En otras palabras, cuando se envia un ‘1’
logico, se emite una señal, mientras que cuando se envia un ‘0’ logico no se
envia ninguna señal. Este efecto se puede ver con mayor claridad en la
figura 15.
debe medir L=λ/4=c/f*4=17.28 cm. En algunos foros en internet se comenta
que cuando la distancia de operación no es mayor a los 4 m, se puede
utilizar el modulo TLP434 sin ninguna antena aunque si se coloca un cable
de la longitud recomendada, se pueden obtener transmisiones inalambricas
de hasta 100 m. La distribución de pines se muestra en la figura 16.
El RLP434 tiene una pequeña bobina, para distinguir bien los pines, esa
bobina debe estar al frente, dicha bobina se representa con el círculo negro
el siguiente gráfico, en donde ademas se puede ver la distribución de pines
del receptor.
La salida de los datos se encuentra en el pin número 2 y guardan el orden de
trama que se especificó en el microcontrolador que procesa los datos del
sensor. Por ello, al llegar los datos al receptor RLP434, los datos pasan a un
nuevo microcontrolador que se encarga de convertir la trama digital en
unaseñal que pueda ser procesada por la tarjeta de adquisición de datos.
De esta forma, fue necesario escoger otro sensor que pueda producir una
señal relacionada con la cantidad de medicina que se está midiendo. Se
encontró que el sensor de efecto hall UGN3503 es bastante económico y
cumple con los requisitos de la aplicación.
El UGN3503, disponible en varias cápsulas de tipo transistor, puede detectar
con precisión pequeños cambios en la densidad de un flujo magnético,
incluso aquellos demasiado débiles como para actuar sobre interruptores de
efecto Hall. Tiene sólo tres conexiones, que son la alimentación (4,5 a 6 V),
el común o tierra, y la salida. Si no hay campo magnético aplicado, la tensión
en la salida es de la mitad del voltaje de alimentación. Así mismo, presenta
una buena repetitividad cuando la frecuencia de medida es menos a 23kHz.
Esta última característica no afecta el propósito de nuestro proyecto. Se debe
tener en cuenta cuando el sensor será utilizado en aplicaciones donde se
requiere medir la intensidad de un campo magnético que se encuentra
cambiando muy frecuentemente, por ejemplo, un piñón girando a gran
velocidad.
La resolución de este sensor depende del imán que se está utilizando. Está
claro que entre más magnetizado esté el material a detectar, se obtendrá
mayor resolución en la medida. Lo importante es que se en la práctica se ha
comprobado que con imanes regulares, se puede detectar una distancia
superior a los 3 cm. El diagrama funcional del UGN3503 se encuentra en la
figura 18.
7
http://www.datasheetcatalog.com/datasheets_pdf/U/G/N/3/UGN3503.shtml
Dentro de las especificaciones se puede encontrar que con un imán de 900
G se puede obtener una resolución de 1.3mV/G, lo que quiere decir que el
rango de voltaje con un imán de estas características sería de 1.17V.
3. MEDICAMENTOS Y DOSIS SELECCIONADAS
Las reacciones que pueden producir las anteriores medicinas son bastante
variadas y diversas, de hecho, muchas de ellas no pueden ser simuladas
electrónicamente. Por ello, fue necesario consultar directamente al
neonatólogo y asesor de la tesis Luis Carlos Méndez Córdoba8 quién
recomendó utilizar otros fármacos que generalmente se hacen necesarios
8
Médico, profesor y coordinador Académico de Perinatología de la Universidad Nacional de Colombia, especialista
en neonatología, miembro de la asociación colombiana de neonatología y asesor del proyecto en cuestión.
frente a situaciones criticas en los recién nacidos. A continuación se presenta
una tabla con las medicinas recomendadas, los efectos sobre la salud de los
pacientes y las reacciones adversas que se pueden presentar en caso de
una sobredosis.
Tabla 2. (Continuación)
Depresión
Respiratoria/disminuye ritmo
PENTOBARBITAL IV LENTO Sedante de poco tiempo cardiaco
POTASIO
CLORURO ORAL arritmia/bloqueo del corazón/
ORAL, IV MAS DE
PROPANOL 10 MINS tratar taqui-arritmias/hipertensión Bradicardia/bronco espasmo/
SILDENAFIL OROGÁSTRICA
SULFACTANTES INTRATRAQUEAL
Cómo se puede observar, las vías de inyección son variadas, así como el
tiempo de aplicación. Este hecho limitó mucho la escogencia de las
medicinas ya que el proyecto inicialmente busca que los fármacos
reconocidos por el simulador físico puedan ser inyectados por medio de una
jeringa, en ese caso, sólo pueden ser utilizados aquellos que se apliquen de
forma intravenosa y rápida. En ese caso, las soluciones que pueden ser
utilizadas se restringen a:
frecuencia una vez son utilizadas estas medicinas es el ritmo cardiaco. La
Naloxona el Pencuronio y el Vecuronio son utilizados para efectos muy
complejos como la relajación de músculos y la resucitación, por ello, fueron
descartados. De tal forma que las 4 medicinas seleccionadas fueron:
Adenosina, Adrenalina, Atropina y Terbutalina.
También se tuvo en cuenta cuales son los signos vitales más dicientes para
que el equipo de neonatología pueda determinar las condiciones de salud de
un paciente y cuáles son los rangos típicos de un recién nacido saludable.
Los signos vitales son mediciones de las funciones más básicas del cuerpo.
Los cuatro signos vitales principales que los médicos y los profesionales de
salud examinan de forma rutinaria son los siguientes:
Los signos vitales son muy útiles para detectar o monitorizar problemas de
salud. De los anteriores mencionados, la temperatura del cuerpo y el pulso
pueden ser simulador de forma simple, sin embargo, a respiración y la
presión sanguínea requiere de un sistema más complejo. Los rangos
normales e un recién nacido se encuentran en la tabla a continuación.
Tabla 3. Signos vitales de un neonato sano
Rango
Típico Min Max
Temp.bloo
Temperatura de la sangre d 37,2 35,5 38
Pulso Heart Rate 120 95 170
Arterial blood pressure ABP 75 70 120
Pulmonary Artery pressure PAP 8 0 20
• Pulso cardiaco
• Temperatura corporal
• Rubicundez
Para encontrar estos datos se deben tener en cuenta los siguientes datos:
• Concentración de la ampolleta: es la proporción o relación que hay
entre la cantidad de soluto y la cantidad de disolvente, donde el soluto
es la sustancia que se disuelve, el disolvente la sustancia que
disuelve al soluto, y la disolución es el resultado de la mezcla
homogénea de las dos anteriores.9 Se debe especificar cuántos
miligramos de la ampolleta deben suministrarse al neonato de
acuerdo al su peso.
• Peso del neonato: Un bebe puede tener talla grande o talla pequeña,
en la gráfica 1 se encuentra un gráfico que muestra cuál son los
pesos normales de acuerdo a las edades gestacionales de un
neonato que se considera dentro del rango normal.
9
http://es.wikipedia.org/wiki/Concentraci%C3%B3n
10
www.doschivos.com/trabajos/quimica/541.htm
G
Gráfica1. Peso
P vs. Ed
dad gestaciional del be
ebe
Un neonato
o de talla pequeña puede
p pesa
ar entre 15
500 y 2700
0 gramos, un
u
b
bebe de ta
alla grande puede pessar entre 30
000 y 4200
0 gramos. Para nuesttro
p
proyecto y según re
ecomendaciones del doctor, el neonato será
s de talla
p
pequeña y podrá pesar 1 Kg, 2 Kg o 3 Kg
g, dependie
endo de la selección
s d
del
p e o del médico.
practicante
T
Tabla4. Tabla de med
dicamentos selecciona
ados y su do
osis
Am
mpolla Dilución ml por peso
p
m
mg/ml m
mg/Kg 1K
Kg 2Kg
g 3Kg
Adenosin
na 3 1a9 0,05 0,1
17 0,333
33 0,5
Adrenalin
na 1 1a9 0,02 0,2
20 0,4
4 0,6
Atropina 1 1a9 0,02 0,20 0,4 0,6
0,3 → 1ml
0,05 → x
0,05
x= = 0,17ml
0,3
Las dosis varían desde los 0,1 ml hasta los 0,6 ml. Ahora ya se conocen los
medicamentos y las dosis apropiadas, a continuación se presentaran el
funcionamiento del módulo y el tratamiento de ésta información para lograr el
objetivo planteado.
4. BLOQUES DE FUNCIONAMIENTO DEL MÓDULO A
IMPLEMENTAR
4.1 BLOQUE 1: PROGRAMADOR DE MEDICAMENTOS.
Para poder acceder al TAG es necesario enviarle algunas palabras de
control por medio del módulo lector.Por ello, es necesario acercar la jeringa
al bloque programador para poder efectuar de manera correcta el envío de
información desde el dispositivo escritor al TAG. Gracias a que el dispositivo
cuenta con una interfaz RS232, ésta será utilizada para establecer la
comunicación con el computador.
El tipo de medicamento será seleccionado directamente en el ordenador, es
decir, el practicante podrá escoger cuál medicina es la indicada para mejorar
la salud del neonato. La dosis podrá será visualizada en el computador de
acuerdo del movimiento de carga de la jeringa y ésta será programada de
acuerdo con la información recibida de la estación del aplicador
específicamente de la señal del sensor que varía una vez que el estudiante
efectúa movimientos de carga de la inyección.
Un proceso similar al mencionado anteriormente se lleva a cabo para que el
ordenador pueda recibir la información acerca del neonato. Es decir, desde el
bloque 3 del identificador que se encuentra en el maniquí o simulador físico
se enviarán señales que indican cuál es la reacción del maniquí de acuerdo
con la medicina que se le aplicó. La comunicación es inalámbrica
nuevamente, sin embargo, es necesario resaltar que los módulos utilizados
operan a una frecuencia de 418MHz, esto con el fin de no generar
interferencias en las comunicaciones establecidas entre los bloques 1 y 2
(434MHz), y entro los bloques 1 y 3 (418MHz).
bloque en otro). Como se ha mencionado previamente, para el caso concreto
de almacenamiento de datos en la tarjeta de RFID, se utilizaron las
operaciones de escritura del valor de un bloque (“write value”), así pues,
debido a que en la tarjeta de RFID se utilizaron 3 tipos de datos (tipo de
medicina, cantidad de medicina, peso del neonato) se utilizaron 3 bloques.
Vale la pena recordar, que la memoria de 1024 X 8 bits del chip de la tarjeta
de RFID se organiza en 16 sectores con 4 bloques de 16 Bytes cada uno, y
además, que el acceso a cada uno de los sectores necesita de una
secuencia de autenticación en la cual el módulo lector/escritor especifica el
sector a ser accesado y escoge la clave de ingreso, (que puede ser la A o la
B). Luego, hay una verificación de información entre la tarjeta y el dispositivo
lector y finalmente, se recibe una respuesta por parte del chip de la tarjeta en
la cual se autoriza o no a realizar modificaciones en el valor de sus bloques.
de lectura los comandos siguientes para escribir los valores de los bloques,
serían inútiles.
Tabla 5. Parámetros para almacenar la información en el TAG
Sector a Bloques a Significad
acceder acceder Info Almacenada Valor o
“00000002
” Adenosina
“00000003
” Adrenalina
8 Tipo de medicina
“00000004
” Atropina
“00000005
” Terbutalina
“00001000
” 1 Kg
“00002000
A Peso del neonato
” 2 Kg
“00003000
” 3 Kg
Comando ASCII
Selección Tarjeta “s”
Sector Clave A
Acceder al Sector
“l” “02” “AAAAAAAAAAAA”
Bloque Valor
Escribir Valor del “wv” “08” “0000000#”
bloque “wv” “09” “00000#00”
“wv” “0A” “0000#000”
De acuerdo a esto la instrucción completa de caracteres que se envía a la
tarjeta de RFID por medio del módulo lector tendría la siguiente forma
ssL02AAAAAAAAAAAwv080000000#wv0900000#00wvA0000#000
donde # corresponde al carácter correspondiente dependiendo de la
selección del estudiante que utiliza el módulo.
En esta estructura, y para los 4 casos posibles, es importante resaltar la
presencia de los caracteres que hacen parte de los comandos de la
selección de la tarjeta y de instrucción de acceso, que contiene tanto el
sector a ser accedido, como la clave de acceso. Esto significa que siempre
que se ejecute el programa, se cumple con los requisitos de seguir la
secuencia de autentificación para realizar adecuadamente al acceso a la
memoria de la tarjeta de RFID.
microcontrolador que procesa la información del sensor en el aplicador). Esta
señal, es de tipo numérico y puede tener los valores enteros entre 0 y 10. De
acuerdo a esto, se le hace un tratamiento previo para garantizar la correcta
elaboración de la instrucción.
Para la cadena de caracteres en la que se escribe el valor del bloque A (de
acuerdo a la selección del peso), se utiliza una estructura de programación
similar a la de la figura 22. En la figura 24 se observa esta estructura.
Una vez que se elaboran las instrucciones que modifican cada uno de los
valores de cada bloque del sector 2, se concatenan en una sola cadena de
51 caracteres. En la figura 25 se observa la concatenación de las 3
instrucciones descritas previamente.
Figura 25. Concatenación de las cadenas que forman la instrucción final que
se envía al módulo lector de RFID para escribir la información en la tarjeta de
RFID.
de la tarjeta, este dato entra en una estructura tipo caso que se rige por la
tabla 8.
Figura 26. Elementos que permiten realizar la lectura de la Tarjeta DAQ.
Figura 27. Proceso de envío de la instrucción al puerto RS232.
Así que una vez el usuario presiona el botón PROGRAMAR que se observa
en la interfaz de programación de la figura 21, debe esperar alrededor de 1.5
segundos para que el TAG sea programado, momento en el cual el LED de
indicación denominado como LISTO se encenderá y se apagará nuevamente
indicando que es posible realizar una nueva programación.
Figura 28. Proceso para reconocer el estado futuro del neonato de acuerdo a
la medicina programada.
información correspondiente al estado de salud del neonato que resulta de
la combinación de parámetros (medicina, dosis , peso y estado de salud
actual) que son modificados luego de la selección realizada por el usuario del
módulo, usuario que en este caso será un estudiante de medicina.
Los programas realizados utilizan lenguaje C++, esto se debe a que las
operaciones que se desean realizar con el microprocesador no son muy
extensas y por ello no es necesario utilizar assembler que permite un mejor
uso del espacio en memoria. Además, es necesario mencionar que C++ es
un lenguaje de alto nivel que actualmente se encuentra muy difundido en el
mundo y que es fácilmente entendible, en cambio con assembler es
necesario analizar las instrucciones propias de cada microcontrolador para
poder captar qué operación es realizada en cada línea con el fin de
comprender el código en general.
Los dispositivos utilizados tienen como función realizar una conversión serial-
paralela. Las señales convertidas son transmitidas a la tarjeta de adquisición
de datos de LabView®. Para hacer esto posible fue necesario establecer un
protocolo de comunicaciones entre el microcontrolador de envío y de
recepción de datos, esto es posible gracias al uso de los módulos USART
(universal synchronous asynchronous receiver transmitter) cuyas
características son las siguientes:
Una trama serial comienza por un bit de inicio seguido por el bit de datos
menos significativo, y opcionalmente un bit de paridad para chequear el error
de envío. Después se encuentran los siguientes bits de datos y termina aquel
más significativo. En caso de encontrarse activo, el bit de paridad se inserta
después del dato y antes de los bits de stop. Cuando una trama completa es
transmitida, es seguida por una nueva trama inmediatamente, o la línea de
comunicaciones de puede poner en estado inactivo (alto).
(n)Æ Bits de datos (0 a 8)
PÆ Bits de paridad, pueden ser pares o impares.
SpÆ Bit de parada, siempre alto
IDLEÆ No hay transferencia en la línea de comunicación, este estado
siempre es alto.
Figura 30. Registros del USART en ATmega8
UCSRA
• U2X: Duplica la velocidad de transmisión. Cuando el bit se encuentra
activo, duplica la velocidad. Esto solo tiene efecto para las
transmisiones asíncronas.
• PE: Error de paridad.
• DOR (Data Over Run): Este bit se activa si se detecta que el buffer de
recepción esta lleno.
• FE (Frame Error): Este bit se activa cuando el primer bit de stop del
siguiente carácter enviado se encuentra en nivel bajo, es decir,
cuando hay un mal envío de datos según el protocolo establecido.
• UDRE (USART Data Register Empty): Esta bandera indica si el buffer
UDR se encuentra listo para recibir un nuevo dato, si es ‘1’, significa
que el buffer esta desocupado y listo para ser escrito, a su vez, esta
bandera puede generar una interrupción en el bit UDRIE.
• TXC (USART Transmit Complete): Esta bandera se activa cuando la
totalidad de la trama a transmitir ha sido enviada y no hay dato en el
buffer UDR, esta bandera se desactiva automáticamente cuando la
interrupción de transmisión se ejecuta, también puede desactitvarse
por procesos de escritura y puede generar una activación de la
interrupción de transmisión completa en el bit TXCIE.
• RXC (USART Transmit Complete): esta bandera se activa cuando hay
datos que no han sido leídos en el buffer de recepción.
USCRB
• TXB8 (Transmit Data Bit 8): Este es el noveno bit de datos que se
transmite en una comunicación serial.
• RXB8 (Receive Data Bit 8): Este es el noveno bit de datos que se
recibe en una comunicación serial.
• UCSZ2 (Character Size): Junto con el UCSZ1 y el UCSZ0 se
especifica el tamaño de la trama de datos a ser enviada.
• TXEN (Transmiter Enable): Al activar este bit se habilitan las
transmisiones por USART.
• RXEN (Receiver Enable): Al activar este bit se habilitan las
recepciones por USART.
• UDRIE (USART Data Register Empty): Al activar este bit se habilita
la interrupción en la bandera UDRE.
• TXCIE (TX Complete Interrupt Enable): Al activar ete bit se habilitan
las interrupciones sobre la bandera TXC.
• RXCIE (RX Complete Interrupt Enable): Al activar ete bit se
habilitan las interrupciones sobre la bandera RXC.
UCSRC
Tabla 9. Configuraciones posibles UCSZ en ATmega8
Figura 31. Registro UDR en ATmega8
Por ultimo hay que hablar de dos registros que almacenan la tasa de
transmisión de bits (USART Baud Rate Registers – UBRRL and UBRRH). EL
bit URSEL en los registros señala si se selecciona el registro UBRRH o el
UCSRC. Cuando se encuentra inactivo, quiere decir que se desea acceder al
registro UBRRH. En UBBRH (los 4 bits mas significativos) y UBRRL (los 8
bits menos significativos) se almacena el “baudaje”.
c
comunicación serial que
q se enccuentra en los anexoss. Allí recom
miendan qu
ue
p
para los módulos la velocidad
v m
máxima de transmisión
n sea de 4800 baudio
os.
Por ello, ca
ada uno de los pares transmite
t a 2400 baud
dios. MICR
RO 1 recibe la
i
información
n por medio
o de un mó
ódulo de re
ecepción co
on referenccia RLP418
8A,
m
mientras qu
ue MICRO 2 recibe la información gracias al
a módulo co
on referenccia
RLP434.
En la figura 32 se
s encuen
ntra un diagrama
d d
del flujo que explica
d
detalladam ente el pro ada uno de los microccontroladores
oceso realizzado en ca
c el fin de obtener el
con e dato enviiado desde los bloque
es 2 y 3.
El código comentado
o se encuentra en los
l anexoss. La comu
unicación se
s
r
realiza pro medio de polling, essto quiere decir
d que se
s realiza una consulta
c
constante, generalme
ente hacia un dispositivo de harrdware, pa
ara crear un
na
a
actividad sincrónica sin
s el uso de
d interrupciones. Entonces, en el momen
nto
e que se
en n dato, el microcontro
e reciba un olador lo almacenará
a á para lueg
go
ponerlo en el puerto B. Este puerto es conectado directamente a la tarjeta de
adquisición de datos de LabView® donde se realiza un procesamiento de la
información recibida.
inalámbrica a la primera estación por medio del transmisor de RF con
referencia TLP434.
de 2.56V. El tipo de referencia se escoge configurando el registro ADMUX
del módulo ADC.
• MUX4:0 (Analog Chanel and Gain Selection): el valor de estos bits
selecciona cuales combinaciones de entradas son conectadas al
conversor. En la siguiente tabla se presentan alguno de los valores.
Para nuestro caso en particular escogimos la combinación de ADC0
para la entrada individual que proviene de la señal del sensor.
• REFS1:0 (REFERENCE SELECTION BIT): con estos bits se
selecciona el voltaje de referencia para el conversor, en la
siguiente tabla se observa cual es el voltaje seleccionado
dependiendo de su configuración. Para nuestro caso, escogimos
que el voltaje en el pin AREF sería nuestro voltaje de referencia,
este voltaje es de 5V en la práctica.
• ADPS2:0 (ADC Prescaler Select Bits): Estos bits determinan el
factor de división entre la frecuencia XTAL y el clock de entrada al
conversor, es decir configuran el valor del Prescaler, en nuestro
caso escogimos un valor de 8. La siguiente tabla muestra los
posibles valores que se pueden configurar.
señal causante se selecciona configurando el bit ATS en el registro
SFIOR.
• ADCSC (ADC Start Conversion): en modo de conversión simple, se
configura este bit en 1 para empezar cada conversión, un modo
“Free Running” se pone este bit en uno para empezar la primera
conversión. Este bit permanece en uno mientras que se realiza la
conversión, una vez que esta se ha completado vuelve a su valor
inicial (0).
• ADEN (ADC Enable): Cuando se pone este bit en 1, se habilita el
conversor, si se pone en cero durante una conversión que está en
proceso, cancela dicha conversión.
• ADTS2:0 (ADC Auto Trigger Source): Si el bit ADATE en el registro
ADCSRA se configure en 1, el valor en estos bits selecciona que
fuente producirá una conversión. Como y se mencionó antes la
conversión se producirá con un flanco positivo de la fuente
seleccionada. En la siguiente tabla se especifican cuáles son las
distintas fuentes y modos que se seleccionan con estos bits
encontró que se obtenían errores muy grandes teniendo en cuenta la
sensibilidad de la medición y que en algunas ocasiones el valor enviado no
arribaba bien al destino debido a una mala comunicación en los módulos de
RF.
Figura 35. Diagrama de flujo de MICRO 3.
Arritmia
Atropina Revertir Bradicardia sinusal Fiebre
severa
Una vez se pueden observar los efectos de las medicinas sobre el maniquí
se procede a enviar esta información hacia el ordenador nuevamente de
forma inalámbrica con un módulo de RF de referencia TLP418.
4.3.1.1 Frecuencia cardiaca La reacción más frecuente frente a la
aplicación de los fármacos recomendados es el cambio de la frecuencia
cardiaca. El estudiante puede detectar las variaciones por medio de dos
formas: palpando el movimiento de alguna arteria que pase cerca de la piel,
en el caso de los neonatos se realiza en su cordón umbilical; o se puede
auscultar el corazón por medio de un fonendoscopio. Simular ambos efectos
es bastante complicado, sin embargo, se pensó en que emular el sonido del
corazón por medio del circuito LM555 es sencillo si se logra activarlo para
que suene de acuerdo a la frecuencia cardiaca.
Figura 36. Circuito preliminar
En este modo de operación, el capacitor se carga y se descargar entre
1/3Vcc y 2/3Vcc. La frecuencia de oscilación es independiente del voltaje de
alimentación del circuito integrado y para poder calcularla es necesario tener
en cuenta la siguiente ecuación:
Figura 38. Circuito implementado que simula sonido del corazón
4.3.1.2 Temperatura corporal Por otro lado, el neonato puede sufrir cambios
en la temperatura, debido a que es muy complejo lograr una calentamiento
del maniquí, se opto por mostrar en una pantalla de cristal liquido la
temperatura corporal del bebe de acuerdo a su estado actual. En el momento
de aplicar un medicamento que le produzca fiebre, se podrá observar un
cambio en el LCD, en este caso, se utilizará una de 16x2.
Entonces, es necesario tener en cuenta todos los comandos que hacen que
el funcionamiento del display sea el adecuado.
operar correctamente el display. Algunos de estos comandos son los
descritos en la tabla 19.
procedimiento se realiza por medio de un decremento o incremento
del contador de la dirección.
• Display ON/OFF control: Se encarga de encender o pagar el display
(D), apagar o encender el cursor (C), y además de controlar el
parpadeo del carácter o cursor en determinada posición (B).
• Cursor and Display Shift: Mueve el cursor o el display sin modificar el
contenido de la DDRAM
• Function Set: Configura el tamaño del dato (DL), el número de líneas
que se van a utilizar en el display (L), y la fuente del carácter (F).
Tabla 20. Instrucciones varias LCD 16x2.
4.3.2 Programación microcontrolador (Control lector) Antes de comenzar
a explicar cómo se programó el microcontrolador, es importante mencionar
que fue necesario utilizar un MAX232 para lograr la comunicación entre el
lector de RFID que posee una interfaz RS232 y el ATmega16. El circuito
integrado MAX232 cambia los niveles TTL a los del estándar RS-232 cuando
se hace una transmisión, y cambia los niveles RS-232 a TTL cuando se tiene
una recepción. El circuito típico se muestra en la siguiente figura:
Cuando el TAG se encuentra en el campo de detección del lector de RFID,
éste inmediatamente se identifica, lo que quiere decir que el microcontrolador
recibirá constantemente una cifra de 8 símbolos y cada uno se puede
representar en código ASCII o hexadecimal, en este caso la cifra recibida es:
44CD92CD. Debido a que se está usando un ATmega16, es más sencillo
discriminar la cifra en código hexadecimal, para ello, se utilizó la siguiente
tabla en donde se encuentran las diferentes conversiones.
Así pues, en hexadecimal la cifra “44CD92CD” es 34-34-43-44-39-32. En el
momento en que el microcontrolador reciba un “4”, quiere decir que el TAG
está listo para ser leído. Por ello, en ese momento se debe enviar la cadena
“ssl02AAFFFFFFFFFFFF” para acceder al sector dos. Inmediatamente, el
TAG responderá nuevamente con una “L” que en hexadecimal equivale a 4C,
lo que quiere decir que se ha loggeado correctamente en el TAG y se
pueden comenzar a leer cada uno de los bloques de este sector que han
sido programados con anterioridad por medio del programador de RFID que
está ubicado en el bloque 1 y que ya ha sido explicado anteriormente.
En la figura
a a continua
ación se en
ncuentra un
n diagrama de flujo qu
ue describe el
p
proceso de
e lectura de datos en el
e TAG.
reacción se produce de acuerdo al procesamiento de los datos obtenidos del
TAG.
En cuanto a la dosis, al indicar: vector2:00002000 o menos, quiere decir que
se acepta los valores menores a éste, por ejemplo: vector2:00001000. Lo
mismo cuando se indica: vector2:00003000 o más, pues se refiere por
ejemplo a vector2:00004000.
Para lograr almacenar éste estado, se creó una variable entera global en el
programa, que permite controlar el ritmo cardiaco en el que se encuentra el
neonato. La variable se denomina: cardio_bebe. A partir de su valor, se
puede determinar la frecuencia cardiaca que debe activarse, una vez se ha
reconocido el medicamento. En la tabla a continuación se puede observar a
partir del estado actual y al medicamento inyectado, cuál debe ser su estado
futuro y algunos casos especiales que incluyen fiebre y rubicundez.
Tabla 23. Tabla estados futuros con base en estado actual.
ESTADO ACTUAL
0 1 2 3 4
Indicada 0 0 1 2 3
Adenosina
Sobredosis 0 0 1 1 1
Indicada 1 2 3 4 4
Adrenalina
Sobredosis 2 4 4 4 4
Indicada 1 2 3 4 4
Atropina
Sobredosis 2 4 4 4 4
Indicada 1 2 3 4 4
Terbutalina
Sobredosis 2 4 4 4 4
Frecuencia cardiaca
Estados (pulsaciones por minuto)
4 220
3 140
2 80
1 40
0 PARO
Fiebre
Rubicundez
realizar en un solo dispositivo ya que su capacidad de memoria es muy
limitada.
4.3.3 Programación microcontrolador (Reacciones) Para programar este
microcontrolador es importante leer el puerto A del microcontrolador
anteriormente descrito, pues a partir de estos cambios se determina la acción
que debe producirse en el maniquí. Por ello, el puerto B del dispositivo que
controla las reacciones se conectará a aquel del puerto A del dispositivo que
las identifica.
en nuestro controlador las palabras de control enviadas en la inicialización
son las siguientes:
el sonido sea periódico hasta que el PIN B2 tenga un estado bajo en
su entrada, lo que indica que va a producirse una nueva reacción. En
este caso, el ciclo es el siguiente:
_delay_ms(10);//(NO suena)
_delay_ms(100);//(suena)
_delay_ms(30);//(NO suena)
_delay_ms(150); //(suena)
• PIN B6Æ El neonato se encuentra normal (pulso 140). En el LCD se
podrá observar inmediatamente que la frecuencia cardiaca cambia a
140 y además se podrá escuchar la simulación del sonido del corazón
del neonato. Esto se realiza por medio del circuito anteriormente
explicado, primero se activa el sonido más agudo, es decir se pone un
nivel bajo en la salida del pin A0 o pin 40 del ATmega16 e
inmediatamente se pone un nivel bajo en la salida del pin A1 o pin 39
del ATmega16. Este ciclo se repite constantemente, lo que hace que
el sonido sea periódico hasta que el PIN B2 tenga un estado bajo en
su entrada, lo que indica que va a producirse una nueva reacción. En
este caso, el ciclo es el siguiente:
_delay_ms(150);//(NO suena)
_delay_ms(100);//(suena)
_delay_ms(30);//(NO suena)
_delay_ms(150); //(suena)
• PIN B5Æ El neonato sufre de bradicardia alta (pulso 80). En el LCD se
podrá observar inmediatamente que la frecuencia cardiaca cambia a
80 y además se podrá escuchar la simulación del sonido del corazón
del neonato. Esto se realiza por medio del circuito anteriormente
explicado, primero se activa el sonido más agudo, es decir se pone un
nivel bajo en la salida del pin A0 o pin 40 del ATmega16 e
inmediatamente se pone un nivel bajo en la salida del pin A1 o pin 39
del ATmega16. Este ciclo se repite constantemente, lo que hace que
el sonido sea periódico hasta que el PIN B2 tenga un estado bajo en
su entrada, lo que indica que va a producirse una nueva reacción. En
este caso, el ciclo es el siguiente:
_delay_ms(150);//(NO suena)
_delay_ms(170);//(NO suena)
_delay_ms(180);//(suena)
_delay_ms(30);//(NO suena)
_delay_ms(220); //(suena)
• PIN B4Æ El neonato sufre de bradicardia baja (pulso 40). En el LCD
se podrá observar inmediatamente que la frecuencia cardiaca cambia
a 40 y además se podrá escuchar la simulación del sonido del corazón
del neonato. Esto se realiza por medio del circuito anteriormente
explicado, primero se activa el sonido más agudo, es decir se pone un
nivel bajo en la salida del pin A0 o pin 40 del ATmega16 e
inmediatamente se pone un nivel bajo en la salida del pin A1 o pin 39
del ATmega16. Este ciclo se repite constantemente, lo que hace que
el sonido sea periódico hasta que el PIN B2 tenga un estado bajo en
su entrada, lo que indica que va a producirse una nueva reacción. En
este caso, el ciclo es el siguiente:
_delay_ms(250);//(NO suena)
_delay_ms(250);//(NO suena)
_delay_ms(250);//(NO suena)
_delay_ms(250);//(NO suena)
_delay_ms(250);//(suena)
_delay_ms(50);//(NO suena)
_delay_ms(250); //(suena)
_delay_ms(50); //(suena)
• PIN B3Æ El neonato sufre de paro (pulso 24). En el LCD se podrá
observar inmediatamente que la frecuencia cardiaca cambia a 24 y
además se podrá escuchar la simulación del sonido del corazón del
neonato. Esto se realiza por medio del circuito anteriormente
explicado, primero se activa el sonido más agudo, es decir se pone un
nivel bajo en la salida del pin A0 o pin 40 del ATmega16 e
inmediatamente se pone un nivel bajo en la salida del pin A1 o pin 39
del ATmega16. Este ciclo se repite constantemente, lo que hace que
el sonido sea periódico hasta que el PIN B2 tenga un estado bajo en
su entrada, lo que indica que va a producirse una nueva reacción. En
este caso, el ciclo es el siguiente:
_delay_ms(250);//(NO suena)
_delay_ms(250);//(NO suena)
_delay_ms(250);//(NO suena)
_delay_ms(250);//(NO suena)
_delay_ms(250);//(NO suena)
_delay_ms(250);//(NO suena)
_delay_ms(250);//(NO suena)
_delay_ms(250);//(suena)
_delay_ms(50);//(NO suena)
_delay_ms(250); //(suena)
_delay_ms(50); //(suena)
• PIN B2Æ Este pin se utiliza para indicar que hay un cambio= ‘1’
• PIN B1Æ El neonato sufre de fiebre. En estado normal, el neonato
tiene una temperatura corporal de “35.5°” lo que puede ser
comprobado en la pantalla de cristal liquido, mientras que cuando
sufre de fiebre, se escribirá cobre la misma que el maniquí tiene una
temperatura de “38.5°”.
• PIN B0Æ El neonato sufre de rubicundez. Se activan los 6 LEDs que
se encuentran en el puerto A del microcontrolador.
aplicado. De tal forma que cuando el PIN B2 se activa (‘1’), se envía una
palabra de control (0x0C) al computador gracias al modulo RF que también
ha sido mencionado anteriormente. Esta información es recibida por el
MICRO 1 que se encuentra sincronizado con este microcontrolador pues
tienen los mismos parámetros dentro de su protocolo. De acuerdo al tipo de
medicamento, la dosis y el peso del neonato que anteriormente habían sido
programados en el primer bloque, el ordenador sabrá que reacción debe
continuar una vez se ha producido el cambio en el maniquí y está se podrá
observar en el recuadro de indica ESTADO DE SALUD DEL NEONATO.
Este recuadro se puede observar en la figura a continuación.
Figura 42. Diagrama de flujo miccrocontrolador REACC
CIONES
5. HARDWARE IMPLEMENTADO
El primer circuito, es básicamente una extensión de los pines del de
transmisión, recepción y referencia del puerto RS232 del computador,
conectados a la interfaz RS232 del módulo lector de RFID.
Figura 43. Dimensiones y conectores del módulo lector de RFID.
Figura 44. Circuito Impreso del circuito que alimenta y comunica al módulo de
RFID con el computador.
Figura 45. Circuito en 3D del circuito que alimenta y comunica al módulo de
RFID con el computador.
Figura46. Layout del circuito que receptor de la información proveniente del
aplicador o del maniquí.
Figura 48. Tarjeta de adquisición de datos utilizada (De National
Instruments).
Figura 49. Esquemático del circuito implementado en el aplicador (Jeringa)
Figura 51. Circuito del aplicador en 3D
Con respecto al circuito que controla al lector de RFID, está compuesto por
los siguientes elementos:
palabras de control hacia el circuito encargado de producir las señales de
reacción.
Figura 52. Esquemático del circuito controlador del módulo lector de RFID en
el maniquí.
Figura 53. PCB del circuito controlador del módulo lector de RFID en el
maniquí.
Figura 54. PCB del circuito controlador del módulo lector de RFID en el
maniquí.
Por su parte, el circuito donde se generan las señales de reacción está
compuesto por los siguientes elementos: Una batería de 9 V, un regulador de
5 V (7805), un ATMEGA16, el circuito utilizado para la generación de
sonidos del corazón (monoestable 555, condensadores y resistencias y
compuerta CMOS), 6 diodos emisores de luz (rojos) para emular la
rubicundez, el transmisor de RF (4 pines) y un conector de 8 pines
correspondientes a las entradas de donde provienen las palabras de control
que indican que reacciones son las que deben ser producidas. En este
circuito se incluye la pantalla de cristal líquido, por ello se hace necesaria la
presencia de un conector de 14 pines desde los cuales se accede a dicha
pantalla.
Figura 56.PCB del circuito de las reacciones.
6. RESULTADOS
La interfaz del programador de medicamentos se puede observar en la figura
58, en ella se encuentra la selección del peso del neonato y la selección de
medicamento, esto se realiza manualmente desplegando la lista de opciones
por cada ítem. Cabe anotar que en el caso del peso hay tres opciones: 1 Kg,
2 Kg y 3 Kg. Mientras que por el lado de la selección del medicamento hay 4
opciones, entre ellas: Adenosina, Adrenalina, Atropina y Terbutalina. Por otro
lado, también se encuentra la visualización de la carga del medicamento que
puede llegar hasta 1 ml, cómo se dijo anteriormente, esta carga se realiza en
el bloque 2 pero el efecto de su movimiento puede verse en la pantalla del
ordenador. Una vez estos 3 elementos han sido seleccionados de acuerdo a
la decisión del practicante del equipo de neonatología, se procede a
programar el TAG que se encuentra en el aplicador, para ello se oprime el
botón de programar y una vez se ha culminado exitosamente ésta operación,
se encenderá el botón de listo. Finalmente se podrá acercar la jeringa al
maniquí y una vez éste ha reaccionado, llegará un mensaje a la pantalla y
aparecerá en la sección que se denomina: ESTADO DE SALUD DEL
NEONATO, en esta pantalla pueden aparecer los siguientes mensajes:
• Taquicardia 220
• Normal 140
• Bradicardia 80
• Bradicardia 40
• Paro
• Taquicardia 220 y fiebre
• Paro y rubicundez
Figura 58. Interfaz del programador de medicamentos en LabView ®
Figura 59. Caja del programador de RFID
compuesta por la tarjeta de adquisición de datos de LabView ®, dos circuitos,
cada uno tiene un receptor de RF (cada uno de diferente frecuencia como se
ha explicado anteriormente), un microcontrolador ATmega8 (MICRO 1 y
MICRO 2 en la figura 20) y un regulador de 5 V.
Figura 62. Caja de adquisición de datos.
El Aplicador de compone de una jeringa, su circuito y el TAG. El circuito de
este bloque se compone de un transmisor de RF que opera a 434 MHz, un
sensor de efecto hall y un microcontrolador (MICRO 3) que se encarga de
realizar la conversión análoga-digital de la señal que llega del sensor. La
Jeringa posee una medida de 1 ml a escala, que esta a su vez dividida en 10
divisiones, por ello, cada división corresponde a una decima de mililitro. El
funcionamiento detallado de este bloque ya fue explicado anteriormente y su
imagen se encuentra en la figura 64.
Figura 65. Escala de la jeringa.
Finalmente se encuentra el bloque del identificador que se compone del
maniquí que reacciona de acuerdo a la información que contiene el TAG.
Para que el lector pueda leer el TAG adecuadamente se debe acercar la
jeringa al abdomen simulando una cateterización umbilical pues esta vía
permite la fácil administración de fármacos y líquidos intravasculares. Para
ello, el practicante debe ubicar la vena umbilical y su arteria. Un recién
nacido puede cateterizarse después de 4 o 5 días de su nacimiento. El modo
de administración se puede ver en la figura 67.
es decir, el hecho de aplicar un medicamento implicaría un cambio en la
salud del neonato de forma inmediata.
Figura 69. Rubicundez en el recién nacido.
Las luces en la imagen anterior tienen un color rojo intenso para llamar la
atención del practicante de medicina.
Tabla 24. Costo módulo implementado
TOTAL $ 8.314.500,00
7. CONCLUSIONES
Inicialmente RFID nace como una necesidad para reemplazar los códigos de
barras en la detección de objetos con el fin de poder almacenar una mayor
cantidad de datos que identifiquen al producto en una etiqueta electrónica y
que a su vez, estos puedan ser reprogramados cuando se requiera. Este tipo
de aplicaciones de producción y uso masivo de TAG’s son lo más conocidos
y utilizados en el mundo. Sin embargo, durante la realización de este
proyecto se ha podido evidenciar que la tecnología de identificación por
radiofrecuencia puede tener otro tipo de aplicaciones específicas con el uso
de una o varias etiquetas, en distintos campos, en este caso, en el de
instrumentación médica para entrenamiento de estudiantes.
que la dosis dependiera directamente del peso del neonato, esta variable es
de gran consideración pues de lo contrario el proceso no seria consecuente
con la realidad.
8. RECOMENDACIONES
Por otro lado, en caso de poder trabajar con microcontroladores con más
capacidad de memoria, se espera que e pueda extender la cantidad de
medicinas simuladas, y que también se puedan generar otras reacciones en
el maniquí para asemejar en mayor medida el comportamiento del simulador
con la vida real y de esta forma se pueda mejorar significativamente el
entrenamiento del equipo de neonatología.
BIBLIOGRAFÍA
ANEXO A
#include <avr/io.h>
#include <util/delay.h>
UCSRC |= (1 << URSEL) | (1 << UCSZ0) | (1 << UCSZ1);// Tamaño de los datos de 8
bits
// Se cargan los 8 bits menos signifiativos del baud rate en el registro UBRRL
(Low)
UBRRL = 0x00;
// Se cargan los 8 bits mas signifiativos del baud rate en el registro UBRRH (High)
UBRRH = 0x19;
UCSRB |= (1 << RXCIE); // Enable the USART Recieve Complete interrupt (USART_RXC)
}
return UDR;
}
ANEXO B
#include <avr/io.h>
#include <util/delay.h>
UCSRC |= (1 << URSEL) | (1 << UCSZ0) | (1 << UCSZ1);// Tamaño de los datos de 8
bits
// Se cargan los 8 bits menos signifiativos del baud rate en el registro UBRRL
(Low)
UBRRL = 0x00;
// Se cargan los 8 bits mas signifiativos del baud rate en el registro UBRRH (High)
UBRRH = 0x19;
UCSRB |= (1 << RXCIE); // Enable the USART Recieve Complete interrupt (USART_RXC)
}
return UDR;
}
ANEXO C
#include <avr/io.h>
#include <util/delay.h>
UCSRC |= (1 << URSEL) | (1 << UCSZ0) | (1 << UCSZ1);// Tamaño de los datos de 8
bits
// Se cargan los 8 bits menos signifiativos del baud rate en el registro UBRRL
(Low)
UBRRL = 0x00;
// Se cargan los 8 bits mas signifiativos del baud rate en el registro UBRRH (High)
UBRRH = 0x0C;
UCSRB |= (1 << RXCIE); // Enable the USART Recieve Complete interrupt (USART_RXC)
void ADC_init()
{
void proceso1() {
//Start conversion
ADCSRA |= (1<<ADSC);
x = ADCH;
// output the higher 8 bits
PORTB = x;
PORTB = var;
UDR = var;
while(!(UCSRA & (1<<TXC)));
UCSRA=0x40;
usart_init ();
for(;;)
{
proceso1();
}}
ANEXO D
#include <avr/io.h>
#include <avr/boot.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <avr\sfr_defs.h>
#include <util/delay.h>
/* variables globales */
unsigned int cuenta;
unsigned char rx;
unsigned char *cadena = "ssl02AAFFFFFFFFFFFF";
unsigned char *cadena1 = "rv08";
unsigned char *cadena2 = "rv09";
unsigned char *cadena2a = "rv0A";
unsigned char *cadena3 = "Aden";
unsigned char *cadena4 = "Adre";
unsigned char *cadena6 = "Atro";
unsigned char *cadena7 = "Terb";
unsigned char *cadena8 = "Est0";
unsigned char *cadena9 = "Est1";
unsigned char *cadena10 = "Est2";
unsigned char *cadena11 = "Est3";
unsigned char *cadena12 = "Est4";
unsigned char *cadena13 = "Pesa1";
unsigned char *cadena14 = "Pesa2";
unsigned char *cadena15 = "Pesa3";
unsigned char *cadena16 = "Pesa4";
unsigned char *cadena5 = "ss";
unsigned char vector[];
unsigned char vector1[];
unsigned char vector2[];
unsigned int k=0;
unsigned int t=0;
unsigned int j=0;
unsigned int i=0;
unsigned int cardio_bebe=4;
UBRRH=0x00;
UBRRL=0x33; //Baud rate = 9600
UCSRA=0x00;
UCSRB=0x18; //TXEN=1 y RXEN=1 (Habilitacion Transmision y Recepcion)
UCSRC=0x86; //1 bit Stop. 8 bits por Caracter
DDRA=0xFF;
PUERTO_CARDIO=0xFF;
cuenta=0;
DDRB=0x00;
PORTB=0xFF;
PUERTO_CARDIO=0b11111111;//OJOOOOOOOOO esta puerto controla estado del
bebe(taquicardia, bradicardia, normal o paro)
bucle();
}
{
unsigned char i;
return UDR;
}
// Este proceso se realiza para esperar hasta que el lector indique que se ha realizao
una identificación exitosa
void buclei(void)
{
while(1)
{
rx = uart_recibir();
if (rx==0x4C) //recibe L
{
PORTA=0x01;
uart_enviar(cadena1, strlen(cadena1) );
bucle1();
}
if (rx==0x46) // Caracter F (Failure)
{
uart_enviar(cadena5, strlen(cadena5) );
bucle();
}
if (rx==0x4E) // Caracter N (No Tag Found)
{
uart_enviar(cadena5, strlen(cadena5) );
bucle();
}
if (rx==0x3F) // Caracter ? (What?)
{
uart_enviar(cadena5, strlen(cadena5) );
bucle();
}
}
}
// Este proceso se realiza para esperar al envio del valor por parte del lector9
void bucle1(void)
{
while(1)
{
rx = uart_recibir();
if (rx==0x4C)
{
uart_enviar(cadena1, strlen(cadena1) );
}
if (rx==0x30)// si el caracter recibido es 0 entonces que comience a
almacenar el valor
{
//uart_enviar(cadena3, strlen(cadena3) );
almacenar_valor();
}
if (rx==0x46) // Caracter F (Failure)
{
uart_enviar(cadena5, strlen(cadena5) );
bucle();
}
if (rx==0x4E) // Caracter N (No Tag Found)
{
uart_enviar(cadena5, strlen(cadena5) );
bucle();
}
if (rx==0x3F) // Caracter ? (What?)
{
uart_enviar(cadena5, strlen(cadena5) );
bucle();
}
}
}
if (rx==0x4E) // Caracter N (No Tag Found)
{
uart_enviar(cadena5, strlen(cadena5) );
bucle();
}
if (rx==0x3F) // Caracter ? (What?)
{
uart_enviar(cadena5, strlen(cadena5) );
bucle();
}
}
}
}
}
}
void almacenar_valor2(void)
{
unsigned char n;
while(1)
{
rx = uart_recibir();
//uart_enviar(cadena4, strlen(cadena4) );
vector2[j]=rx;
j++;
if (j==8){ // no se alcanza a almacenar el valor 8 llega hasta
vector1[7]
//uart_enviar(cadena2, strlen(cadena2) );
buscar_medicina();
if (rx==0x46) // Caracter F (Failure)
{
uart_enviar(cadena5, strlen(cadena5) );
bucle();
}
if (rx==0x4E) // Caracter N (No Tag Found)
{
uart_enviar(cadena5, strlen(cadena5) );
bucle();
}
if (rx==0x3F) // Caracter ? (What?)
{
uart_enviar(cadena5, strlen(cadena5) );
bucle();
}
}
}
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=0;//Paro
PUERTO_CARDIO=0b00001100;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=1;//Paro
PUERTO_CARDIO=0b00001100;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=1;//Bradicardia1
PUERTO_CARDIO=0b00010100;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==4) { //Taquicardia
cardio_bebe=1;// Bradicardia1
PUERTO_CARDIO=0b00010100;
uart_enviar(cadena12, strlen(cadena12) );
}
}
}
if (vector[6]==0x33) //Adrenalina
{
//1Kg
uart_enviar(cadena4, strlen(cadena4) );
if(vector1[7]==0x30 || vector1[7]==0x31||vector1[7]==0x32)
//Adrenalina OK ( Es menor a 0.2ml)
{
if (cardio_bebe==4) { //Taquicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena12, strlen(cadena12) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=3;//Normal
PUERTO_CARDIO=0b01000101;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=2;//Bradicardia
PUERTO_CARDIO=0b00100101;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==0) { //Paro
cardio_bebe=1;//Bradicardia1
PUERTO_CARDIO=0b00010101;
uart_enviar(cadena8, strlen(cadena8) );
}
}
else // Adrenalina Sobredosis (Es mayor a 0.2ml)
{
if (cardio_bebe==4) { //Taquicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena12, strlen(cadena12) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==0) { //Paro
cardio_bebe=2;//Bradicardia
PUERTO_CARDIO=0b00100101;
uart_enviar(cadena8, strlen(cadena8) );
}
}
}
if (vector[6]==0x34) //Atropina
{
uart_enviar(cadena6, strlen(cadena6) );
if(vector1[7]==0x30 ||
vector1[7]==0x31||vector1[7]==0x32) //Atropina OK ( Es menor a 0.2ml)
{
if (cardio_bebe==4) { //Taquicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena12, strlen(cadena12) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=3;//Normal
PUERTO_CARDIO=0b01000101;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=2;//Bradicardia
PUERTO_CARDIO=0b00100101;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==0) { //Paro
cardio_bebe=1;//Bradicardia1
PUERTO_CARDIO=0b00010101;
uart_enviar(cadena8, strlen(cadena8) );
}
}
else // Atropina Sobredosis (Es mayor a 0.2ml)
{
if (cardio_bebe==4) { //Taquicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena12, strlen(cadena12) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==0) { //Paro
cardio_bebe=2;//Bradicardia
PUERTO_CARDIO=0b00100101;
uart_enviar(cadena8, strlen(cadena8) );
}
}
}
if (vector[6]==0x35) //Terbutalina
{
uart_enviar(cadena7, strlen(cadena7) );
if(vector1[7]==0x30 || vector1[7]==0x31) //Terbutalina
OK ( Es menor a 0.1ml)
{
if (cardio_bebe==4) { //Taquicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000111;
uart_enviar(cadena12, strlen(cadena12) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000111;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=3;//Normal
PUERTO_CARDIO=0b01000101;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=2;//Bradicardia
PUERTO_CARDIO=0b00100101;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==0) { //Paro
cardio_bebe=1;//Bradicardia1
PUERTO_CARDIO=0b00010101;
uart_enviar(cadena8, strlen(cadena8) );
}
}
else // Terbutalina Sobredosis (Es mayor a 0.1ml)
{
if (cardio_bebe==4) { //Taquicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000111;
uart_enviar(cadena12, strlen(cadena12) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000111;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000111;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000111;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==0) { //Paro
cardio_bebe=2;//Bradicardia
PUERTO_CARDIO=0b00100101;
uart_enviar(cadena8, strlen(cadena8) );
}
}
}
}
//2Kg
//====================================================================================
=========
if (vector2[7]==0x32) //¨2Kg
{
uart_enviar(cadena14, strlen(cadena14) );
if (vector[6]==0x32) //Adenosina
{
//2Kg
uart_enviar(cadena3, strlen(cadena3) );
if(vector1[7]==0x30 ||
vector1[7]==0x31||vector1[7]==0x32||vector1[7]==0x33||vector1[7]==0x34) //Adenosina OK
(Es menor a 0.4ml)
{
if (cardio_bebe==0) { //Paro
cardio_bebe=0;//Paro
PUERTO_CARDIO=0b00001100;
uart_enviar(cadena8, strlen(cadena8) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=0;//Paro
PUERTO_CARDIO=0b00001100;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=1;//Bradicardia1
PUERTO_CARDIO=0b00010101;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=2;//Bradicardia
PUERTO_CARDIO=0b00100101;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==4) { //Taquicardia
cardio_bebe=3;//Normal
PUERTO_CARDIO=0b01000101;
uart_enviar(cadena12, strlen(cadena12) );
}
}
else// Adenosina Sobredosis (Es mayor a 0.4ml)
{
if (cardio_bebe==0) { //Paro
cardio_bebe=0;//Paro
PUERTO_CARDIO=0b00001100;
uart_enviar(cadena8, strlen(cadena8) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=0;//Paro
PUERTO_CARDIO=0b00001100;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=1;//Paro
PUERTO_CARDIO=0b00001100;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=1;//Bradicardia1
PUERTO_CARDIO=0b00010100;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==4) { //Taquicardia
cardio_bebe=1;// Bradicardia1
PUERTO_CARDIO=0b00010100;
uart_enviar(cadena12, strlen(cadena12) );
}
}
}
if (vector[6]==0x33) //Adrenalina
{
//2Kg
uart_enviar(cadena4, strlen(cadena4) );
if(vector1[7]==0x30 ||
vector1[7]==0x31||vector1[7]==0x32||vector1[7]==0x33||vector1[7]==0x34) //Adrenalina
OK ( Es menor a 0.4ml)
{
if (cardio_bebe==4) { //Taquicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena12, strlen(cadena12) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=3;//Normal
PUERTO_CARDIO=0b01000101;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=2;//Bradicardia
PUERTO_CARDIO=0b00100101;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==0) { //Paro
cardio_bebe=1;//Bradicardia1
PUERTO_CARDIO=0b00010101;
uart_enviar(cadena8, strlen(cadena8) );
}
}
else // Adrenalina Sobredosis (Es mayor a 0.4ml)
{
if (cardio_bebe==4) { //Taquicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena12, strlen(cadena12) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==0) { //Paro
cardio_bebe=2;//Bradicardia
PUERTO_CARDIO=0b00100101;
uart_enviar(cadena8, strlen(cadena8) );
}
}
}
if (vector[6]==0x34) //Atropina
{
uart_enviar(cadena6, strlen(cadena6) );
if(vector1[7]==0x30 ||
vector1[7]==0x31||vector1[7]==0x32||vector1[7]==0x33||vector1[7]==0x34) //Atropina OK
( Es menor a 0.4ml)
{
if (cardio_bebe==4) { //Taquicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena12, strlen(cadena12) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=3;//Normal
PUERTO_CARDIO=0b01000101;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=2;//Bradicardia
PUERTO_CARDIO=0b00100101;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==0) { //Paro
cardio_bebe=1;//Bradicardia1
PUERTO_CARDIO=0b00010101;
uart_enviar(cadena8, strlen(cadena8) );
}
}
else // Atropina Sobredosis (Es mayor a 0.4ml)
{
if (cardio_bebe==4) { //Taquicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena12, strlen(cadena12) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==0) { //Paro
cardio_bebe=2;//Bradicardia
PUERTO_CARDIO=0b00100101;
uart_enviar(cadena8, strlen(cadena8) );
}
}
}
if (vector[6]==0x35) //Terbutalina
{
uart_enviar(cadena7, strlen(cadena7) );
if(vector1[7]==0x30 || vector1[7]==0x31||
vector1[7]==0x32) //Terbutalina OK ( Es menor a 0.2ml)
{
if (cardio_bebe==4) { //Taquicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000111;
uart_enviar(cadena12, strlen(cadena12) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000111;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=3;//Normal
PUERTO_CARDIO=0b01000101;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=2;//Bradicardia
PUERTO_CARDIO=0b00100101;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==0) { //Paro
cardio_bebe=1;//Bradicardia1
PUERTO_CARDIO=0b00010101;
uart_enviar(cadena8, strlen(cadena8) );
}
}
else // Terbutalina Sobredosis (Es mayor a 0.2ml)
{
if (cardio_bebe==4) { //Taquicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000111;
uart_enviar(cadena12, strlen(cadena12) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000111;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000111;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000111;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==0) { //Paro
cardio_bebe=2;//Bradicardia
PUERTO_CARDIO=0b00100101;
uart_enviar(cadena8, strlen(cadena8) );
}
}
}
}
//3Kg
//====================================================================================
=========
if (vector2[7]==0x33) //¨3Kg
{
uart_enviar(cadena15, strlen(cadena15) );
if (vector[6]==0x32) //Adenosina
{
//3Kg
uart_enviar(cadena3, strlen(cadena3) );
if(vector1[7]==0x30 ||
vector1[7]==0x31||vector1[7]==0x32||vector1[7]==0x33||vector1[7]==0x34||vector1[7]==0x
35||vector1[7]==0x36) //Adenosina OK (Es menor a 0.6ml)
{
if (cardio_bebe==0) { //Paro
cardio_bebe=0;//Paro
PUERTO_CARDIO=0b00001100;
uart_enviar(cadena8, strlen(cadena8) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=0;//Paro
PUERTO_CARDIO=0b00001100;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=1;//Bradicardia1
PUERTO_CARDIO=0b00010101;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=2;//Bradicardia
PUERTO_CARDIO=0b00100101;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==4) { //Taquicardia
cardio_bebe=3;//Normal
PUERTO_CARDIO=0b01000101;
uart_enviar(cadena12, strlen(cadena12) );
}
}
else// Adenosina Sobredosis (Es mayor a 0.6ml)
{
if (cardio_bebe==0) { //Paro
cardio_bebe=0;//Paro
PUERTO_CARDIO=0b00001100;
uart_enviar(cadena8, strlen(cadena8) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=0;//Paro
PUERTO_CARDIO=0b00001100;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=1;//Paro
PUERTO_CARDIO=0b00001100;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=1;//Bradicardia1
PUERTO_CARDIO=0b00010100;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==4) { //Taquicardia
cardio_bebe=1;// Bradicardia1
PUERTO_CARDIO=0b00010100;
uart_enviar(cadena12, strlen(cadena12) );
}
}
}
if (vector[6]==0x33) //Adrenalina
{
//3Kg
uart_enviar(cadena4, strlen(cadena4) );
if(vector1[7]==0x30 ||
vector1[7]==0x31||vector1[7]==0x32||vector1[7]==0x33||vector1[7]==0x34||vector1[7]==0x
35||vector1[7]==0x36) //Adrenalina OK ( Es menor a 0.6ml)
{
if (cardio_bebe==4) { //Taquicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena12, strlen(cadena12) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=3;//Normal
PUERTO_CARDIO=0b01000101;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=2;//Bradicardia
PUERTO_CARDIO=0b00100101;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==0) { //Paro
cardio_bebe=1;//Bradicardia1
PUERTO_CARDIO=0b00010101;
uart_enviar(cadena8, strlen(cadena8) );
}
}
else // Adrenalina Sobredosis (Es mayor a 0.6ml)
{
if (cardio_bebe==4) { //Taquicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena12, strlen(cadena12) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==0) { //Paro
cardio_bebe=2;//Bradicardia
PUERTO_CARDIO=0b00100101;
uart_enviar(cadena8, strlen(cadena8) );
}
}
}
if (vector[6]==0x34) //Atropina
{
uart_enviar(cadena6, strlen(cadena6) );
if(vector1[7]==0x30 ||
vector1[7]==0x31||vector1[7]==0x32||vector1[7]==0x33||vector1[7]==0x34||vector1[7]==0x
35||vector1[7]==0x36) //Atropina OK ( Es menor a 0.6ml)
{
if (cardio_bebe==4) { //Taquicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena12, strlen(cadena12) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=3;//Normal
PUERTO_CARDIO=0b01000101;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=2;//Bradicardia
PUERTO_CARDIO=0b00100101;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==0) { //Paro
cardio_bebe=1;//Bradicardia1
PUERTO_CARDIO=0b00010101;
uart_enviar(cadena8, strlen(cadena8) );
}
}
else // Atropina Sobredosis (Es mayor a 0.6ml)
{
if (cardio_bebe==4) { //Taquicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena12, strlen(cadena12) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==0) { //Paro
cardio_bebe=2;//Bradicardia
PUERTO_CARDIO=0b00100101;
uart_enviar(cadena8, strlen(cadena8) );
}
}
}
if (vector[6]==0x35) //Terbutalina
{
uart_enviar(cadena7, strlen(cadena7) );
if(vector1[7]==0x30 || vector1[7]==0x31||
vector1[7]==0x32|| vector1[7]==0x33) //Terbutalina OK ( Es menor a 0.3ml)
{
if (cardio_bebe==4) { //Taquicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000111;
uart_enviar(cadena12, strlen(cadena12) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000111;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=3;//Normal
PUERTO_CARDIO=0b01000101;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=2;//Bradicardia
PUERTO_CARDIO=0b00100101;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==0) { //Paro
cardio_bebe=1;//Bradicardia1
PUERTO_CARDIO=0b00010101;
uart_enviar(cadena8, strlen(cadena8) );
}
}
else // Terbutalina Sobredosis (Es mayor a 0.3ml)
{
if (cardio_bebe==4) { //Taquicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000111;
uart_enviar(cadena12, strlen(cadena12) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000111;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000111;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000111;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==0) { //Paro
cardio_bebe=2;//Bradicardia
PUERTO_CARDIO=0b00100101;
uart_enviar(cadena8, strlen(cadena8) );
}
}
}
}
/*//4Kg
//====================================================================================
=========
if (vector2[7]==0x34) //¨4Kg
{
uart_enviar(cadena16, strlen(cadena16) );
if (vector[6]==0x32) //Adenosina
{
//4Kg
uart_enviar(cadena3, strlen(cadena3) );
if(vector1[7]==0x30 ||
vector1[7]==0x31||vector1[7]==0x32||vector1[7]==0x33||vector1[7]==0x34||vector1[7]==0x
35||vector1[7]==0x36||vector1[7]==0x37||vector1[7]==0x38) //Adenosina OK (Es menor a
0.8ml)
{
if (cardio_bebe==0) { //Paro
cardio_bebe=0;//Paro
PUERTO_CARDIO=0b00001100;
uart_enviar(cadena8, strlen(cadena8) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=0;//Paro
PUERTO_CARDIO=0b00001100;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=1;//Bradicardia1
PUERTO_CARDIO=0b00010101;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=2;//Bradicardia
PUERTO_CARDIO=0b00100101;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==4) { //Taquicardia
cardio_bebe=3;//Normal
PUERTO_CARDIO=0b01000101;
uart_enviar(cadena12, strlen(cadena12) );
}
}
else// Adenosina Sobredosis (Es mayor a 0.8ml)
{
if (cardio_bebe==0) { //Paro
cardio_bebe=0;//Paro
PUERTO_CARDIO=0b00001100;
uart_enviar(cadena8, strlen(cadena8) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=0;//Paro
PUERTO_CARDIO=0b00001100;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=1;//Paro
PUERTO_CARDIO=0b00001100;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=1;//Bradicardia1
PUERTO_CARDIO=0b00010100;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==4) { //Taquicardia
cardio_bebe=1;// Bradicardia1
PUERTO_CARDIO=0b00010100;
uart_enviar(cadena12, strlen(cadena12) );
}
}
}
if (vector[6]==0x33) //Adrenalina
{
//4Kg
uart_enviar(cadena4, strlen(cadena4) );
if(vector1[7]==0x30 ||
vector1[7]==0x31||vector1[7]==0x32||vector1[7]==0x33||vector1[7]==0x34||vector1[7]==0x
35||vector1[7]==0x36||vector1[7]==0x37||vector1[7]==0x38) //Adrenalina OK ( Es menor
a 0.8ml)
{
if (cardio_bebe==4) { //Taquicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena12, strlen(cadena12) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=3;//Normal
PUERTO_CARDIO=0b01000101;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=2;//Bradicardia
PUERTO_CARDIO=0b00100101;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==0) { //Paro
cardio_bebe=1;//Bradicardia1
PUERTO_CARDIO=0b00010101;
uart_enviar(cadena8, strlen(cadena8) );
}
}
else // Adrenalina Sobredosis (Es mayor a 0.8ml)
{
if (cardio_bebe==4) { //Taquicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena12, strlen(cadena12) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==0) { //Paro
cardio_bebe=2;//Bradicardia
PUERTO_CARDIO=0b00100101;
uart_enviar(cadena8, strlen(cadena8) );
}
}
}
if (vector[6]==0x34) //Atropina
{
uart_enviar(cadena6, strlen(cadena6) );
if(vector1[7]==0x30 ||
vector1[7]==0x31||vector1[7]==0x32||vector1[7]==0x33||vector1[7]==0x34||vector1[7]==0x
35||vector1[7]==0x36||vector1[7]==0x37||vector1[7]==0x38) //Atropina OK ( Es menor a
0.8ml)
{
if (cardio_bebe==4) { //Taquicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena12, strlen(cadena12) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=3;//Normal
PUERTO_CARDIO=0b01000101;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=2;//Bradicardia
PUERTO_CARDIO=0b00100101;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==0) { //Paro
cardio_bebe=1;//Bradicardia1
PUERTO_CARDIO=0b00010101;
uart_enviar(cadena8, strlen(cadena8) );
}
}
else // Atropina Sobredosis (Es mayor a 0.8ml)
{
if (cardio_bebe==4) { //Taquicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena12, strlen(cadena12) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==0) { //Paro
cardio_bebe=2;//Bradicardia
PUERTO_CARDIO=0b00100101;
uart_enviar(cadena8, strlen(cadena8) );
}
}
}
if (vector[6]==0x35) //Terbutalina
{
uart_enviar(cadena7, strlen(cadena7) );
if(vector1[7]==0x30 || vector1[7]==0x31||
vector1[7]==0x32|| vector1[7]==0x33|| vector1[7]==0x34) //Terbutalina OK ( Es menor a
0.4ml)
{
if (cardio_bebe==4) { //Taquicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000111;
uart_enviar(cadena12, strlen(cadena12) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000111;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=3;//Normal
PUERTO_CARDIO=0b01000101;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=2;//Bradicardia
PUERTO_CARDIO=0b00100101;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==0) { //Paro
cardio_bebe=1;//Bradicardia1
PUERTO_CARDIO=0b00010101;
uart_enviar(cadena8, strlen(cadena8) );
}
}
else // Terbutalina Sobredosis (Es mayor a 0.4ml)
{
if (cardio_bebe==4) { //Taquicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000111;
uart_enviar(cadena12, strlen(cadena12) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000111;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000111;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000111;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==0) { //Paro
cardio_bebe=2;//Bradicardia
PUERTO_CARDIO=0b00100101;
uart_enviar(cadena8, strlen(cadena8) );
}
}
}
}*/
void esperar(void){
if (bit_is_clear(PINB, 7)){
uart_enviar(cadena5, strlen(cadena5) );
bucle();
PORTA |= (0<<2);
}
else {
esperar();}
}
ANEXO E
#include<avr/io.h>
#include <util/delay.h>
#include <math.h>
// Definición de contsantes y puertos
#define CLEAR_DISPLAY 0x01
#define CURSOR_HOME 0x02
#define LCD_PORT PORTC
#define LCD_DDR DDRC // Asignación de pines para el LCD
#define LCD_RS 4
#define LCD_EN 5
DDRB=0x00;
PORTD=0xFF;
// se habilita el pullup interno para PB0-PB3
PORTB=0xFF;
//PORTA &= ~(1<<0);
//PORTA &= ~(1<<1);
PORTA &= ~(1<<2);
PORTA &= ~(1<<3);
PORTA &= ~(1<<4);
PORTA &= ~(1<<5);
PORTA &= ~(1<<6);
PORTA &= ~(1<<7);
PORTA &= ~(1<<1);
PORTA |= (1<<0);
_delay_ms(150); //(suena)
PORTA |= (1<<0);
PORTA |= (1<<1);}
}
if (bit_is_set(PINB, 5)) // Bradicardia 2 80
{
set_cursor(12,2);
lcd_string("80 ");
while (bit_is_set(PINB, 2)){
_delay_ms(150);
_delay_ms(170);
PORTA &= ~(1<<0);
PORTA |= (1<<1);
_delay_ms(180);
PORTA |= (1<<0);
PORTA |= (1<<1);
_delay_ms(30);
PORTA &= ~(1<<1);
PORTA |= (1<<0);
_delay_ms(220);
PORTA |= (1<<0);
PORTA |= (1<<1);}
}
if (bit_is_set(PINB, 4)) // Bradicardia 2 40
{
set_cursor(12,2);
lcd_string("40 ");
while (bit_is_set(PINB, 2)){
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
PORTA &= ~(1<<0);
PORTA |= (1<<1);
_delay_ms(250);
PORTA |= (1<<0);
PORTA |= (1<<1);
_delay_ms(50);
PORTA &= ~(1<<1);
PORTA |= (1<<0);
_delay_ms(250);
_delay_ms(50);
PORTA |= (1<<0);
PORTA |= (1<<1);}
}
if (bit_is_set(PINB, 3)) // Paro 20
{
set_cursor(12,2);
lcd_string("PARO");
if (bit_is_set(PINB, 0)) // Rojo
{
PORTA &= ~(1<<2);
PORTA &= ~(1<<3);
PORTA &= ~(1<<4);
PORTA &= ~(1<<5);
PORTA &= ~(1<<6);
PORTA &= ~(1<<7);
}
if (bit_is_clear(PINB, 0))
{
PORTA |= (1<<2);
PORTA |= (1<<3);
PORTA |= (1<<4);
PORTA |= (1<<5);
PORTA |= (1<<6);
PORTA |= (1<<7);
}
while (bit_is_set(PINB, 2)){
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
PORTA &= ~(1<<0);
PORTA |= (1<<1);
_delay_ms(250);
PORTA |= (1<<0);
PORTA |= (1<<1);
_delay_ms(50);
PORTA &= ~(1<<1);
PORTA |= (1<<0);
_delay_ms(250);
_delay_ms(50);
PORTA |= (1<<0);
PORTA |= (1<<1);}
}
}
//============================================================================
// PROCESO PRINCIPAL
//============================================================================
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
}
}
//=============================================================================
// Procesos del LCD
//=============================================================================
// Inicializacion del display
void lcd_init(void)
{
LCD_DDR = LCD_DDR | 0x0F | (1<<LCD_RS) | (1<<LCD_EN);
_delay_ms(100);
LCD_PORT &= 0xF0;
LCD_PORT |= 0x03;
LCD_PORT &= ~(1<<LCD_RS); // RS auf 0
lcd_enable();
_delay_ms(20);
lcd_enable();
_delay_ms(10);
lcd_enable();
// 4 Bit MODO
LCD_PORT &= 0xF0;
LCD_PORT |= 0x02;
lcd_enable();
// INCREMENTAR A LA DERECHA
lcd_command(0x06);
}
_delay_ms(100);
}
_delay_ms(100);
}
void lcd_enable(void)
{
LCD_PORT |= (1<<LCD_EN);
_delay_us(100);
LCD_PORT &= ~(1<<LCD_EN);
}
void lcd_clear(void)
{
lcd_command(CLEAR_DISPLAY);
_delay_ms(500);
Tempfrec();
void lcd_home(void)
{
lcd_command(CURSOR_HOME);
_delay_ms(20);
}