IEL2-II-04-34 IEL2-II-04-12
1
DISPOSITIVO ELECTRÓNICO PARA APOYO DE TERAPÍA DE REHABILITACIÓN DEL PACIENTE CON HEMIPARESIA
Alejandro Tello Molano
Federico Escobar
Informe de Proyecto de Grado
Fredy Enrique Segura Quijano
Asesor de Proyecto
UNIVERSIDAD DE LOS ANDES
DEPARTAMENTO DE INGENIERÍA ELECTRICA Y ELECTRÓNICA
BOGOTÁ
ENERO DE 2005
IEL2-II-04-34 IEL2-II-04-12
2
CONTENIDO
Página
INTRODUCCIÓN 6
OBJETIVOS 8
1. MARCO TEÓRICO 9
1.1 DESCRIPCIÓN DEL ACV 9
1.1.1 DEFINICIÓN DEL PROBLEMA 9
1.1.2 TRATAMIENTO DE REHABILITACIÓN 13
1.1.3 DISPOSITIVOS EN EL MERCADO 14
1.2 DESCRIPCIÓN DEL SISTEMA 19
1.2.1 BLOQUES DEL SoC 19
1.2.2 CARACTERÍSTICAS DE LA PANTALLA 26
1.2.3 TARJETA DE DESARROLLO PARA EL SISTEMA COMPLETO 28
2. METODOLOGÍA DE SOLUCIÓN 43
2.1 ACERCAMIENTO AL IOIR 43
2.2 INVESTIGACIÓN DE ELEMENTOS EN EL MERCADO 47
2.3 PROTOTIPOS ELECTRÓNICOS 47
2.4 COMPROBACIONES DEL ELEMENTO 56
3. PRUEBAS Y RESULTADOS 57
3.1 CONFIGURACIÓN DE REGISTROS 57
3.2 RESULTADOS 64
IEL2-II-04-34 IEL2-II-04-12
3
4. SOFTWARE UTILIZADO 66
5. DIAGRAMA CIRCUITAL 67
6. CONCLUSIONES 69
7. ANEXOS 70
7.1 PROGRAMA PARA GENERAR SEÑALES DE CONTROL 70
7.2 PROGRAMAS REALIZADOS EN VISUAL BASIC 6.0. 71
7.3 PROGRAMAS REALIZADOS EN LENGUAJE C. 81
8. REFERENCIAS 82
IEL2-II-04-34 IEL2-II-04-12
4
LISTA DE FIGURAS
Página
Figura 1. Origen del accidente Cerebro Vascular. 10
Figura 2. Dispositivo Model 30014A Photoelectric Rotary Pursuit. 15
Figura 3. Dispositivo Model 20017 Automatic Tally Maze. 15
Figura 4. Dispositivo Schunfried VTS. 16
Figura 5. Diagrama de pines del LH79520. 18
Figura 6. Diagrama de bloques del LH79520. 19
Figura 7. Mapeo de memoria física. 20
Figura 8. Modos de operación del LH79520. 24
Figura 9. Diagrama de pines de la pantalla SX19V001-ZZA. 27
Figura 10. Diagrama de pines del CCFL. 27
Figura 11. Diagrama de pines del panel de toque. 28
Figura 12. Diagrama de bloques de la pantalla SX19V001-ZZA. 28
Figura 13. Tarjeta de desarrollo de la tarjeta RMS101 SBC. 29
Figura 14. Ubicación de componentes de la tarjeta RMS101 SBC. 30
Figura 15. Tabla de verdad de la SDRAM. 31
Figura 16. Diagrama de bloques de la SDRAM. 31
Figura 17. Diagrama de pines de la SDRAM. 32
Figura 18. Tabla de verdad de la flash. 33
Figura 19. Diagrama de bloques de la flash. 33
Figura 20. Diagrama de pines de la flash. 34
Figura 21. Tabla de verdad del ADS7843 en modo single ended. 35
Figura 22. Tabla de verdad del ADS7843 en modo differential. 35
Figura 23. Diagrama de pines del ADS7843. 35
Figura 24. Diagrama de una célula básica Boundary-Scan. 36
IEL2-II-04-34 IEL2-II-04-12
5
Figura 25. Arquitectura de un componente JTAG. 36
Figura 26. Máquina de estados de la señal de control de un JTAG. 38
Figura 27. Un ejemplo de célula JTAG. 39
Figura 28. Célula usada como reloj. 39
Figura 29. Registro de corrimiento interno. 40
Figura 30. Registro de 1 solo bit. 41
Figura 31. Módulo Laberinto. 48
Figura 32. Módulo sensor de presión. 49
Figura 33. Módulo Luces Secuenciales. 50
Figura 34. Módulo Software. 51
Figura 35. Plantilla de Pirbhai del sistema global. 52
Figura 36. Diagrama de tiempo de las señales de la pantalla LCD. 53
Figura 37. Diagrama de flujo para señales de control y datos. 54
Figura 38. Diagrama de bloques de la FPGA 54
Figura 39. Diagrama de bloques del controlador de video del LCD. 55
Figura 40. Diagrama de bloques final del sistema. 56
Figura 41. Registros de Configuración utilizados en el proyecto. 61
Figura 42. Diagrama de flujo de el controlador de pantalla de toque. 64
Figura 43. Diagrama esquemático de la tarjeta que contiene al SoC. 67
Figura 44. Diagrama esquemático de la tarjeta que contiene memorias. 68
IEL2-II-04-34 IEL2-II-04-12
6
INTRODUCCIÓN
Actualmente, gracias a los avances tecnológicos, se pueden encontrar en el
mercado una gran variedad de dispositivos electrónicos los cuales pueden llegar a
facilitar algunos procesos que se realizaban anteriormente de forma menos óptima.
Podemos encontrar ejemplos claros y sencillos al observar nuestro alrededor:
Computadores Portátiles, Calculadoras, Teléfonos celulares, entre otros.
El campo de la salud se ha visto ampliamente beneficiado por dichos
avances tecnológicos, mencionados anteriormente. De hecho, existen empresas
especializadas en fabricar dispositivos electrónicos, en pro de facilitar la vida de los
pacientes, tanto en la etapa de convalecencia, como en la parte de rehabilitación.
Sin embargo, debido a que vivimos en un país en vía de desarrollo, gran parte de
esta tecnología no esta a nuestro alcance, por a su elevado costo. Este es el claro
ejemplo de lo que sucede con el Instituto de Ortopedia Infantil Roosevelt (IOIR),
el cual ofrece a sus pacientes, terapias de rehabilitación, utilizando una tecnología
muy precaria, sin desmeritar los resultados que se pueden llegar a lograr de dicha
forma.
Basados en lo mencionado anteriormente, nos surgió la inquietud de realizar
un proyecto de grado enfocado en las necesidades que encontramos al asistir a
diferentes terapias de rehabilitación en el IOIR, utilizando las herramientas que
hemos adquirido a través del aprendizaje ofrecido por la Universidad de los Andes.
Además, nos dimos cuenta que podíamos obtener una ganancia adicional, debido a
que es un proyecto que involucra varias disciplinas: Medicina, Diseño Industrial y,
por supuesto, Ingeniería Electrónica. Pensamos que es una ganancia adicional,
puesto que en nuestra vida laboral deberemos desarrollar actividades
multidisciplinarias.
IEL2-II-04-34 IEL2-II-04-12
7
Para dicho proyecto, ha sido de suma importancia tener en cuenta el factor
económico, para que esté al alcance de Instituciones, tales como el IOIR, las
cuales cuentan con recursos limitados. De hecho, después de investigar diferentes
empresas especializadas en fabricar este tipo de ayudas médicas, llegamos a la
conclusión que los precios son muy elevados para el presupuesto con el que
cuentan instituciones de salud en nuestro país. Además se debe tener en cuenta,
que dichos elementos son muy poco flexibles para cubrir las necesidades que se
presentan en el proceso de rehabilitación.
En el proceso de investigación, nos dimos cuenta que teníamos en nuestras
manos la capacidad suficiente de adaptar tecnología actual para suplir las
necesidades mencionadas anteriormente a un costo razonable y con alta
flexibilidad.
Después de asesorarnos con los doctores y terapeutas del IOIR, surgió la
idea de crear un componente enfocado a pacientes con Accidente Cerebro
Vascular, ya que es una lesión que aqueja a una gran parte de la población
mundial, generando secuelas, tanto a nivel mental como físico, como lo veremos
más adelante.
IEL2-II-04-34 IEL2-II-04-12
8
OBJETIVOS
Objetivo general:
• Diseñar un dispositivo de bajo costo para la rehabilitación en terapia
ocupacional y del lenguaje, de pacientes con hemiparesia, mediante un
trabajo interdisciplinario entre diseño industrial, medicina e ingeniería
electrónica.
Objetivos Específicos:
1. Diseñar un dispositivo funcional tanto en la parte electrónica como en la
parte de diseño, que apoye la rehabilitación de pacientes con secuelas de
ACV en la parte de terapia ocupacional y del lenguaje.
2. Fabricar un prototipo de dispositivo electrónico para el fin mencionado.
3. Mejorar las habilidades cognitivas del paciente con ACV tales como:
seguimiento de instrucciones, atención y elementos para lecto-escritura,
manejo de lateralidad izquierda-derecha, arriba-abajo, entre otros.
4. Apoyar las medidas de terapia ocupacional como: manejo del espacio y el
renglón e integración bilateral del paciente, así como el tono muscular.
5. Realizar las comprobaciones del dispositivo a través de pruebas en
pacientes reales.
IEL2-II-04-34 IEL2-II-04-12
9
1. MARCO TEÓRICO
1.1 DESCRIPCIÓN DEL ACV
1.1.1 DEFINICIÓN DEL PROBLEMA
El ACV (Accidente cerebro Vascular) “es la lesión neurológica aguda que se
produce como resultado de un infarto cerebral o de una hemorragia”1.
Según las estadísticas en EE.UU. ocurren 500 000 casos nuevos de ACV
entre los cuales 300 000 de ellos sobreviven con disfunciones neurológicas. Dichas
personas pueden presentar un gran número de secuelas dependiendo de la zona
del cerebro que ha sufrido dicho accidente.
Una vez ocurrido el ACV, el paciente entra en rehabilitación. La terapia
ocupacional y la terapia en fonoaudiología forman parte de esta rehabilitación. De
hecho, este tipo de terapia se realiza para que el paciente vuelva a aprender a
escribir, a leer, etc. Es decir que se busca que el paciente logre la mayor
autonomía posible.
En el mercado encontramos muchos dispositivos electrónicos, los cuales se
utilizan en dichas terapias de rehabilitación. Estos dispositivos se dividen en
diferentes grupos según el fin que cumplen.
Podemos hablar de dispositivos que sirven para evaluación. Hacen parte de
este grupo los dispositivos que evalúan la fuerza, el rango de los movimientos,
evaluación antropométrica, la sensibilidad, etc. 1 Acosta, Abel - Paiz, Marta - Jiménez, Mariel-Karatanasopuloz, Ricardo - Haydar, Yamila - Levy, Gustavo. Accidente cerebrovascular en terapia intensiva
IEL2-II-04-34 IEL2-II-04-12
10
Existen otros tipos de dispositivos los cuales se utilizan para observar el
comportamiento motor y otros dispositivos que son herramientas cognitivas.
Como podemos observar, existen una gran variedad de dispositivos para la
rehabilitación de las secuelas del ACV. Sin embargo, dichos dispositivos tienen la
gran desventaja de ser muy costosos. Es debido a esto que nos hemos interesado
en el diseño, la fabricación y la evaluación de un tipo de dispositivo de bajo costo
que ayude en la rehabilitación de la hemiparesia (una de las secuelas del ACV).
Para poder llevar a cabo este dispositivo, además de la parte electrónica, debemos
tener en cuenta que debe tener una parte de diseño. Es por esto que pensamos
trabajar con el CIFAD (Centro de Investigaciones de la Facultad de Arquitectura y
Diseño) dirigido por el profesor Mario Pinilla y conformado por algunos estudiantes
de Diseño Industrial, para que nos ayuden y asesoren en lo que concierne a la
parte estética y física del dispositivo.
Figura 12
2 Tomado de http://www.tuotromedico.com/temas/accidente_cerebro_vascular.htm
IEL2-II-04-34 IEL2-II-04-12
11
Definición: “El Accidente Cerebro Vascular (ACV) o Ictus es una enfermedad
que afecta a las arterias del cerebro o que llegan al cerebro. Por diversas causas
las células del cerebro quedan sin oxígeno y pierden su función, apareciendo
cuadros de parálisis de medio cuerpo, trastornos de habla, etc…”3
Causas: Los ACV pueden ser generados de dos formas: coágulos de sangre
y sangrado en el cerebro.
Los Coágulos De Sangre4: Una causa muy común de un accidente cerebro
vascular es la aterosclerosis en la cual se acumulan depósitos de grasa y plaquetas
en la pared de las arterias formando placas. Con el paso del tiempo, las placas
comienzan a bloquear lentamente el flujo de sangre. La placa en sí puede bloquear
la arteria lo suficiente para causar un accidente cerebro vascular.
Con frecuencia, la placa hace que la sangre fluya de manera anómala, lo
que produce un coágulo sanguíneo, el cual puede permanecer en el sitio del
estrechamiento e impedir que la sangre circule hacia todas las arterias más
pequeñas que irriga (este tipo de coágulo que no se desplaza se denomina
trombo). En otros casos, el coágulo puede viajar y detenerse en un vaso más
pequeño. (Un coágulo que viaja se denomina embolia).
Los accidentes cerebro vasculares causados por embolia tienen como causa
más común trastornos cardíacos. Una embolia se puede originar en un vaso
sanguíneo grande a medida que se ramifica desde el corazón. Igualmente, un
coágulo se puede formar en otra parte del cuerpo por diferentes razones y luego
viajar al cerebro y provocar un accidente cerebro vascular.
3 Tomado de http://www.tuotromedico.com/temas/accidente_cerebro_vascular.htm 4 Tomado de http://www.nlm.nih.gov/medlineplus/spanish/ency/article/000726.htm#Definición
IEL2-II-04-34 IEL2-II-04-12
12
Las arritmias cardíacas, como la fibrilación auricular, se pueden asociar con
este tipo de accidente cerebro vascular y pueden contribuir a la formación de
coágulos. Otras causas de accidente cerebro vascular embólico incluyen
endocarditis (una infección de las válvulas cardíacas), o el uso de una válvula
cardiaca mecánica. Se puede formar un coágulo en la válvula artificial,
desprenderse y viajar hacia el cerebro; por esta razón, las personas con una
válvula cardiaca mecánica tienen que tomar anticoagulantes.
Sangrado En El Cerebro: Una segunda causa importante de accidente
cerebro vascular es el sangrado en el cerebro (accidente cerebro vascular
hemorrágico), que puede ocurrir cuando pequeños vasos del cerebro se debilitan y
se rompen. Algunas personas tienen defectos en los vasos sanguíneos del cerebro
que hacen que esto sea más probable. El flujo de sangre después de la ruptura del
vaso sanguíneo daña las células cerebrales.
Complicaciones: Las principales secuelas que presentan los pacientes que
han sufrido ACV son:
• Parálisis: Hemiplejia (Parálisis de un lado del cuerpo), hemiparesia
(debilidad en un lado del cuerpo). Dicha parálisis o debilidad puede afectar
ya sea un miembro o un lado de la cara o todo un lado del cuerpo.
• Déficit Cognitivo: Problemas de raciocinio, conciencia, atención, juicio y
memoria. Puede no tener conciencia de la parte de su cuerpo afectada.
• Déficit del lenguaje: Afasia (pérdida de las habilidades comunicativas
previamente aprendidas), disartria (alteración en el aspecto fonético del
lenguaje, en la cual se afecta la organización prosódica, el flujo sonoro, el
matiz fonético de los sonidos o la realización incorrecta de los signos fónicos
del aspecto sonoro del lenguaje.).
• Déficit emocional: Problemas para controlar emociones o expresar
emociones de manera inadecuada.
IEL2-II-04-34 IEL2-II-04-12
13
• Dolor: Dolor central (Mezcla de calor, frío, ardor, hormigueo, falta de
sensibilidad, punzadas agudas y dolor intenso).
1.1.2 TRATAMIENTO DE REHABILITACIÓN5
• Fase inicial o aguda:
Debe acudirse lo antes posible a un Hospital, ya que el ahorro de tiempo
en comenzar el tratamiento mejora el pronóstico.
Control de la vía aérea, oxigenación y tensión arterial, para asegurar una
óptima oxigenación y perfusión de las células cerebrales.
Medicamentos que impidan la agregación plaquetaria (ácido
acetilsalicílico, ticlopidina, clopidogrel, dipiridamol, triflusal). En algunos
países se usan trombolíticos por vía intravenosa para revertir
rápidamente la obstrucción.
Si el problema es un embolismo a distancia (desde el corazón), se puede
precisar de una anticoagulación permanente.
Control de la hipertensión arterial.
Control de las complicaciones: convulsiones, edema cerebral, etc ...
Si el cuadro es hemorrágico puede precisar de su evacuación quirúrgica
(no en todos los casos).
• Fase de seguimiento:
En los cuadros de isquemia cerebral por arteriosclerosis de la arteria
carótida se realiza la endarterectomía de la arteria afectada. Esta
intervención se realiza a través de una incisión en el cuello, para acceder
hasta la arteria carótida, se abre y se realiza una limpieza de las placas
de ateroma que hay en su interior.
5 Tomado de http://www.tuotromedico.com/temas/accidente_cerebro_vascular.htm
IEL2-II-04-34 IEL2-II-04-12
14
En los últimos años se han desarrollado técnicas endovasculares para
corregir la estenosis carótida sin necesidad de cirugía abierta. Son la
angioplastia transluminal percutánea y la colocación de stents. La
angioplastia es la dilatación de una arteria inflando un balón, a través de
un catéter especial insertado por punción percutánea, a través de la
arteria femoral. El paciente está despierto y puede regresar a su
domicilio en pocos días. El stents es una prótesis metálica, en forma de
muelle que se coloca en la zona estrechada y al ejercer presión sobre la
pared vascular mantiene la apertura de la luz.
Los aneurismas, malformaciones arteriovenosas, etc ... que provocan
una hemorragia intracerebral, pueden precisar una intervención
quirúrgica posterior o una técnica endovascular para su tratamiento
definitivo y evitar las recidivas.
Medicamentos antiagregantes o anticoagulantes como los mencionados
en la fase aguda. Se están investigando nuevos antitrombóticos cuyo
mecanismo de acción suma a su acción antiagregante efectos
anticoagulantes y fibrinolít icos.
Rehabilitación de las funciones afectadas, tanto motoras como de otro
orden.
Control de hipertensión arterial, hipercolesterolemia, tabaquismo,
diabetes, obesidad, etc ...
1.1.3 DISPOSITIVOS EN EL MERCADO
Para la rehabilitación de las funciones afectadas, se encuentran empresas
especializadas que producen diferentes tipos de dispositivos. Una de estas
empresas es Lafayette Instrument Company. Los dispositivos que fabrican están
divididos en: Cognitivos, De evaluación, De fisioterapia.
IEL2-II-04-34 IEL2-II-04-12
15
Los dispositivos que más nos interesaron fueron6:
Model 30014A Photoelectric Rotary Pursuit
Model 30105A Replacement Stylus
Model 30108 Circle Template (Not Shown)
Model 30109 Square Template (Not Shown)
Model 30110 Triangle Template
(Estos 5 modelos corresponden a accesorios de un solo dispositivo)
Este dispositivo consiste de una luz que gira a
una velocidad determinada, por el terapeuta,
la cual el paciente tiene que seguir por medio
de un lápiz especial
Figura 2
Model 20017 Automatic Tally Maze
Como se puede apreciar, este dispositivo
consta de un laberinto cuya trayectoria tiene
que ser seguida por el paciente sin tocar los
bordes de dicho camino.
Figura 3
6 Tomado de Motor Behavior & Cognitive Tools ver Anexo cognitivcat.pdf
IEL2-II-04-34 IEL2-II-04-12
16
Este dispositivo, llamado el
Schunfried VTS permite
aplicaciones asistida por
computador de un gran número de
pruebas de diagnóstico psicológico
y procedimientos de evaluación.
Figura 4
Como se puede apreciar, existen un sin número de sistemas tanto para la
rehabilitación como para la evaluación de pacientes. Sin embargo, como lo dijimos
anteriormente, estos sistemas tienen un costo bastante elevado.
Debido a que buscábamos desarrollar un sistema que fuera muy flexible,
empezamos a indagar sobre tecnología que estuviera saliendo al mercado. Fue de
esta manera como llegamos a los SoC (System-on-a-Chip). Esta es una tecnología
que está siendo muy utilizada actualmente pero ha sido poco implementada en La
Universidad de Los Andes. De esta manera, al utilizar la tecnología SoC, estamos
tratando de involucrar a los estudiantes para que empiecen a desarrollar sistemas
basados en dicha tecnología. Asimismo, decidimos utilizar una pantalla LCD de
toque a color para poder realizar actividades solo con hacer contacto con la
pantalla.
A continuación vamos a describir el corazón del proyecto, es decir el SoC,
para luego describir el funcionamiento de la pantalla LCD de toque que utilizamos.
La tecnología SoC se puede definir como la integración de todos los
componentes electrónicos necesarios para desarrollar un propósito específico,
IEL2-II-04-34 IEL2-II-04-12
17
unificado en un solo circuito integrado. Entre las ventajas que presenta esta
tecnología están:
- Ahorro de espacio (Reducción de componentes).
- Ahorro de Potencia.
- Integración de funciones tanto digitales como análogas.
- Mejora en el desempeño (Mayor confiabilidad).
- Disminución en requerimientos de memoria (Memoria integrada).
Para llevar a cabo nuestro proyecto de grado, decidimos utilizar un SoC de
SHARP, LH795207. EL LH79520 es un SoC de 32 Bits totalmente integrado basado
en un microprocesador ARM720T como núcleo. Incluye además, un controlador de
pantalla LCD a color, un controlador de acceso directo a memoria (DMA),
controlador de interrupciones vectoriales, SRAM interna de 32KB y 8 puertos de
propósito general. Por ser un diseño estático, el voltaje de operación es bajo.
El núcleo basado en el microprocesador ARM720T provee un set de
instrucciones muy completo, e incluye memoria Cache (RAM), buffer de escritura,
unidad de manejo de memoria entre otros.
Este SoC consta también de interfaces Serial y Paralela, Contadores,
Temporizadores, Reloj en Tiempo Real, Temporizador Watchdog, PWM´s, soporte
de puerto infrarrojo y PLL integrado. Además soporta JTAG para simplificar
debugging.
En la Figura 5 podemos ver el diagrama de pines del LH79520
7 Tomado de SHARP Preliminary Data Sheet ver Anexo [email protected]
IEL2-II-04-34 IEL2-II-04-12
18
Figura 5
En la Figura 6 podemos ver el diagrama de bloques
IEL2-II-04-34 IEL2-II-04-12
19
Figura 6
1.2 DESCRIPCIÓN DEL SISTEMA:
1.2.1 BLOQUES INTERNOS DEL SoC
Procesador ARM720T:
El ARM720T contiene un bus avanzado de alto desempeño (AHB por sus
siglas en inglés Advanced High-Performance Bus), procesador RISC de 32-bit
ARM7TDMI, 8KB de memoria cache y una unidad de manejo de memoria (MMU
por sus siglas en inglés Memory Management Unit).
IEL2-II-04-34 IEL2-II-04-12
20
La MMU del LH7950 ofrece el medio para acceder a las direcciones de la
memoria virtual (SDRAM externa) por medio de la memoria física (Memoria interna
del SoC). Cuando se habilita la MMU, se debe construir un código utilizando las
direcciones virtuales, de tal forma que la MMU las traduce a direcciones físicas.
Arquitectura de la memoria:
Este sistema consta de un controlador de SDRAM y un controlador de
memoria estática que facilita el manejo de memorias externas SDRAM, Flash,
SRAM, ROM, entre otras. Se tienen tres formas de mapear la memoria física por
medio de software como se puede apreciar en la Fig. 7
Figura 7
Controlador de SDRAM: Este controlador provee una interfase
entre el bus interno y los dispositivos externos de SDRAM.
IEL2-II-04-34 IEL2-II-04-12
21
Controlador de memoria estática (SMC): Este controlador provee
una interfase entre el bus interno y los dispositivos externos.
Controlador de Acceso Directo a Memoria (DMA): El controlador
de DMA sirve como soporte para periféricos con esta
característica. El controlador de LCD contiene su propio puerto
DMA, conectado a la memoria para desplegar los datos.
Controlador de LCD a Color (CLCDC):
Este tipo de controlador provee todo las señales necesarias para conectar
directamente una gran variedad monitores LCD a color y monocromáticos.
Tiene soporte para STN monocromático y a color con interfaces de 4
y 8 bits.
Tiene soporte para monitores TFT a color.
Resolución programable hasta de 800x600.
15 niveles de escala de grises con monitores monocromáticos, 3
375 con monitores STN, 64K en monitores TFT.
1, 2 ó 4 Bits Por Píxel (BPP) para monitores STN monocromáticos.
1, 2, 4 u 8 Bits Por Píxel para monitores STN y TFT a Color.
Tiempos programables para diferentes tipos de monitores.
Paleta RAM de acceso rápido de 16 bits con 256 entradas.
Señales de reloj de píxel, Frame (“Pantallazo”) y Line (línea).
Señal AC bias para modo STN o señal de habilitación de datos para
modo TFT.
Algoritmo patentado para escala de grises.
Eventos de generación de interrupción.
FIFO´s dobles de 16 bits de ancho por 32 bits de largo, que sirven
como buffer para los datos de entrada.
IEL2-II-04-34 IEL2-II-04-12
22
Interfase de Conversión de Periféricos de LCD (LCDICP):
La LCDICP sirve para convertir señales TFT que vienen del CLCDC a señales
HR-TFT. Existen dos modos de operación: Modo Bypass (Para manejar monitores
TFT, STN, CSTN) y modo HR-TFT.
Puerto Serial Sincrónico (SSP):
El SSP es una interfase para comunicación serial sincrónica con periféricos
esclavos que soporta protocolos para Motorola SPI, National Semiconductor
MICROWIRE, o interfase serial sincrónica de Texas Instruments.
Trasmisor y Receptor Universal Asincrónico (UART):
El LH79520 contiene 3 UART´s.
FIFO´s de 16 bytes separadas de transmisión y recepción para
reducir interrupciones en la CPU.
Generador programable para ajustar la velocidad de transmisión.
Detección de bit falso de Inicio.
Características de interfase serial programables.(Palabra de datos de
5, 6, 7 u 8 bits; detección y generación de paridad par, impar ó
nula.).
Modulador de Ancho de Pulso (PWM):
Tiene como características generales: Dos canales de salida independientes
con entradas de reloj separadas, hasta 16 bits de resolución, soporte de modo
sincrónico de programación, ancho de pulso (Ciclo útil), intervalo (frecuencia) y
polaridad programables.
IEL2-II-04-34 IEL2-II-04-12
23
Controlador de Interrupciones Vectorizado (VIC):
Este controlador combina 20 interrupciones internas y 8 externas, las
enmascara y les asigna prioridades para luego ser enviadas a las entradas de
interrupción IRQ y FIQ del microprocesador.
Controlador de Alimentación, Reloj y Reset (RCPC):
El RCPC genera las diferentes señales de reloj que son necesarias para el
funcionamiento del LH79520. Asimismo, maneja la secuencia de encendido y la
secuencia de operación durante los modos de ahorro de energía.
Este Controlador permite por medio del software, seleccionar
individualmente cada una de las frecuencias de las diferentes señales de reloj que
se generan en el chip para configurar el modo más eficiente de operación.
Las características generales son:
Oscilador de cristal de 14.7456 MHz y PLL para la generación de la
señal de reloj.
Entrada externa de la señal de reloj si no se utilizan el oscilador de
cristal ni el PLL.
Oscilador de cristal de 32.768 KHz para generar un reloj de 1 Hz el
cual genera el reloj en tiempo real. (Real Time Clock)
Relojes controlados individualmente para los periféricos y la CPU.
El reloj de la UART se puede seleccionar entre 14.7546 MHZ ó un
reloj externo.
Relojes de la UART y del PWM preescalables.
Cinco modos globales de manejo de alimentación disponibles :
Activo, Espera, Inactivo, Detenido 1 y Detenido 2.
IEL2-II-04-34 IEL2-II-04-12
24
Figura 8
Las frecuencias de la CPU y del Bus se pueden cambiar en cualquier
momento.
Selección de la salida del reloj.
Reset por Hardware (nRESETIN) y reset por software.
Reloj en Tiempo Real (RTC):
El RTC provee una función básica de alarma o un contador con una base
tiempo larga. Esto se logra ya que se genera una señal de interrupción una vez se
hayan contado un número de ciclos del RTC. Cada ciclo del RTC equivale a 1
segundo gracias a la entrada del RTC de 1Hz.
Temporizador Watchdog:
El temporizador watchdog protege al hardware de errores de
funcionamiento. Es un temporizador programable el cual se reinicia por medio de
software en intervalos periódicos. Si no se puede reiniciar el temporizador, se
genera una interrupción FIQ. Si no se puede atender la interrupción FIQ, se
reinicia todo el sistema.
Temporizador:
El LH79520 contiene dos temporizadores, y cada uno de estos
temporizadores contienen a su vez otros 2 temporizadores de 16 bits programables
IEL2-II-04-34 IEL2-II-04-12
25
independientemente. Es decir que se tienen en total 4 temporizadores
programables independientes.
Sistema de Configuración de Entrada/Salida:
Los registros del IOCON permiten que el usuario controle directamente la
multiplexación de pines.
Entradas/Salidas de Propósito General:
EL LH79520 provee hasta 64 bits de entradas/salidas programables. Este
SoC consta de 8 puertos desde el puerto A hasta el H cada uno de 8 bits, los
cuales están multiplexados con otras señales.
Características Eléctricas del LH79520:
• Voltaje DC de alimentación del microprocesador: 1.8 V.
• Voltaje DC de alimentación de Entadas/Salidas: 3.3 V.
• Frecuencia de la señal del reloj: 14.7456 MHz.
• Corriente Activa (Ejecutando una aplicación típica): 55 mA.
• Corriente en modo Stand by (Ejecutando una aplicación típica): 35
mA.
• Corriente en modo Sleep: 5.5 mA.
• Corriente en modo Stop1: 500 uA.
• Corriente en modo Stop2: 34uA.
IEL2-II-04-34 IEL2-II-04-12
26
1.2.2 CARACTERÍSTICAS DE LA PANTALLA
Como vimos anteriormente este SoC tiene un controlador para manejo de
LCD, el cual es compatible con la pantalla que se uso en el proyecto, la cual fue
una Hitachi SX19V001-ZZA8, esta tiene las siguientes características:
Resolución de (640 x 3 (R,G,B)) (ancho) x 480 (alto) píxeles
Tamaño del modulo: 197.0 mm (ancho) x 145.0 mm (alto) x 11.0 mm
(profundo).
Tamaño del LCD: 181.0 mm (ancho) x 143.0 mm (alto).
Voltaje lógico de alimentación del circuito: 3.3 V.
Corriente lógica de alimentación del circuito: 16 mA.
Voltaje de alimentación para manejar el cristal líquido: 36.6 V.
Corriente de alimentación para manejar el cristal líquido: 20 mA.
La pantalla necesita un Inversor para la lámpara fluorescente de cátodo frío
(CCFL) Además de esto incluye un panel sensible al tacto, el cual es resistivo y de
4 cables (four wire resistance).
8 Tomado de SX19V001-ZZA ver Anexo SX19V001ZZA.pdf
IEL2-II-04-34 IEL2-II-04-12
27
Diagrama de pines de la pantalla es:
Figura 9
Diagrama de pines del CCFL:
Figura 10
IEL2-II-04-34 IEL2-II-04-12
28
Diagrama de pines del panel de toque:
Figura 11
El diagrama de bloques de la pantalla es:
Figura 12
1.2.3 TARJETA DE DESARROLLO PARA EL SISTEMA COMPLETO
Al seleccionar el SoC LH79520, llegamos a la conclusión que la mejor
decisión, era desarrollar una tarjeta de desarrollo, el cual quedo conformado por:
IEL2-II-04-34 IEL2-II-04-12
29
SDRAM MT48LC4M32B2 de 1Mega x 32 bits x 4 bancos.
Memoria flash TC58FVM6T2AFT-65 de 64 Mbits.
Controlador de panel de toque ADS7843.
Puerto JTAG.
2 puertos seriales RS232 (Para aplicación y pruebas seriales).
Esta tarjeta de desarrollo se baso en la tarjeta RMS101 SBC de Revely9, la
cual tiene las siguientes características:
Salida análoga VGA.
Puerto serial RS232.
Puerto PS/2.
SDRAM.
Tarjeta de sonido.
Ranura para tarjeta multimedia.
Figura 13 9 Tomado de Anexo RMS101 SBC Technical Manual ver Anexo RMS101 SBC Technical Manual 1-04.pdf
IEL2-II-04-34 IEL2-II-04-12
30
Figura 14
SDRAM MT48LC4M32B210:
La SDRAM de 128Mb es una memoria dinámica de acceso aleatorio, CMOS
de alta velocidad, contiene 134.217.728 bits. Internamente esta configurada por 4
bancos DRAM con interfase sincrónica (todas las señales son evaluadas en flanco
positivo de la señal de reloj). Cada uno de los bancos de 33.554.432 bits esta
divido entre 4.096 filas por 256 columnas de 32 bits.
Para acceder a la memoria primero se debe enviar un comando de ACTIVE,
luego del cual se envía el comando de READ o WRITE. El comando ACTIVE se usa
para seleccionar el banco y la fila a ser accedido (BA0, BA1 seleccionan el banco,
10 Tomado de SYNCHRONOUS DRAM ver Anexo SDRAM
IEL2-II-04-34 IEL2-II-04-12
31
A0-A11 seleccionan la fila). Los bits de direcciones contenidos en el comando
READ o WRITE, son usados para seleccionar la columna de inicio para el acceso.
La SDRAM de 128Mb esta diseñada para operar a 3.3 V, sistemas de
memoria de baja potencia. Tiene varios modos de operación, ellos son: Auto
refresco, ahorro de energía y apagado.
Figura 15 Tabla de verdad de la SDRAM
Figura 16 Diagrama de bloques de la SDRAM
IEL2-II-04-34 IEL2-II-04-12
32
Figura 17 Diagrama de pines de la SDRAM
Memoria flash TC58FVM6T2AFT-6511:
La memoria flash de 67.108.864 bits, 3.0 V, es una memoria programable
de solo lectura y se puede borrar de manera eléctrica. Esta divida en 8.388.608
palabras x 8 bits o en 4.194.304 palabras x 16 bits. Esta memoria tiene: comandos
de lectura y operaciones de programación y borrado para permitir fácil
interconexión con microprocesadores. Los comandos están basados en el estándar
JEDEC. Las operaciones de programación y borrado son ejecutadas
automáticamente en el chip. La TC58FVM6T2AFT-65 también presenta operaciones
simultaneas de lectura y escritura, para poder leer un dato mientras se ejecuta una
operación de escritura o borrado.
11 Tomado de CMOS FLASH MEMORY ver Anexo FLASH.pdf
IEL2-II-04-34 IEL2-II-04-12
33
Figura 18 Tabla de verdad de la flash
Figura 19 Diagrama de bloques de la flash
IEL2-II-04-34 IEL2-II-04-12
34
Figura 20 Diagrama de pines de la flash
Controlador de panel de toque ADS784312:
El ADS7843 es un conversor análogo digital (ADC) de 12 bits de muestreo,
con una interfase serial sincrónica e interruptores de baja resistencia para
conducción al panel de toque. La disipación de potencia típica es de 750 uW, a una
tasa de 125 KHz y 2.7 V de alimentación. El voltaje de referencia ( REFV ) puede
variar desde 1 V hasta CCV+ , entregando un rango de voltaje inicial
correspondiente a 0 V hasta REFV . El dispositivo incluye un modo de apagado, el
cual reduce la disipación de potencia típica hasta por debajo de 0.5 uW.
La baja potencia, alta velocidad e interruptores externos, hacen que el
ADS7843 sea un dispositivo ideal para sistemas tales como paneles de toque
resistivos.
El ADS7843 tiene 2 modos de funcionamiento: single-ended y el differential.
En el modo single ended la disipación de potencia es menor, esto se debe a que
12 Tomado de TOUCH SCREEN PANEL ver Anexo ads7843.pdf
IEL2-II-04-34 IEL2-II-04-12
35
sólo en la adquisición de datos los interruptores internos están encendidos, pero
este modo tiene un porcentaje mas elevado de error. En el modo differential la
disipación de potencia es mayor ya que durante el proceso completo de conversión
el ADS7843 esta con los interruptores internos encendidos, pero su porcentaje de
error es menor.
Figura 21 Tabla de verdad del ADS7843 en modo single ended
Figura 22 Tabla de verdad del ADS7843 en modo differential
Figura 23 Diagrama de pines del ADS7843
Puerto JTAG13:
La arquitectura JTAG se compone por células de memoria llamadas
Boundary-Scan.
13Tomado de http://www.chez.com/jtag
IEL2-II-04-34 IEL2-II-04-12
36
Figura 24
Cada elemento de memoria puede capturar datos por su puerto de entrada,
actualizar datos por su salida, examinar serialmente los datos de su vecino y
comportarse de forma transparente.
Estos elementos de memoria Boundary-Scan están configurados en un
registro de corrimiento de entrada/salida.
Figura 25
En la figura 25 podemos observar la arquitectura de un componente JTAG
con la norma IEEE 1149.1. Esta figura nos muestra los siguientes elementos:
IEL2-II-04-34 IEL2-II-04-12
37
Cuatro pines de prueba: Test Data In (TDI), Test Data Out (TDO),
Test Mode Select (TMS), Test Clock (TCK). Además existe un pin
opcional: Test Reset (TRST). Estos pines conforman el Test Access
Port.
Una célula JTAG de cada uno de los pines de entrada y salida del
componente la cual está unida de manera interna a un registro
Boundary-Scan serie.
Una máquina de estados que controla el TAP por medio del TCK y el
TMS.
Un registro de instrucciones (IR) de n bits (n=2) el cual guarda las
instrucciones actuales.
Un registro de Bypass de 1 bit (Bypass).
Un registro opcional de identificación de 32 bits el cual puede ser
cargado con un código de identificación del componente.
Un solo registro puede ser conectado desde el TDI hacia el TDO
seleccionando dicho registro por medio del registro de instrucciones (IR).
Test Access Port:
Como lo dijimos anteriormente, este puerto tiene 4 señales y una señal
adicional opcional:
• Test Data In (TDI): Señal de prueba de entrada la cual tiene 1
como por valor por defecto.
• Test Data Out (TDO): Señal de prueba de salida la cual tiene Z
como valor por defecto. Esta señal solo está activa durante el
corrimiento.
• Test Mode Select (TMS): Señal de entrada de control serial la cual
tiene 1 como valor por defecto.
IEL2-II-04-34 IEL2-II-04-12
38
• Test Clock(TCK): Señal de reloj.
• Test Reset (TRST): Señal activa baja que controla la puesta en
cero del TAP.
TMS, TCK y TRST pertenecen a una máquina de estados la cual genera los
cambios de estado de la señal de control. Estas señales también permiten
controlar el registro de instrucciones y los diferentes registros de datos.
En la Figura 26 se puede apreciar la máquina de estados. La señal que
permite el cambio de estados es TMS y este cambio de estados esta sincronizado
con los flancos de subida del reloj.
Figura 26
IEL2-II-04-34 IEL2-II-04-12
39
El registro Boundary-Scan:
Al observar las células JTAG nos damos cuenta que están interconectadas
para formar el registro Boundary-Scan. El registro Boundary-Scan se selecciona por
medio del registro de instrucciones escogiendo una de las siguientes instrucciones:
Instructions ExTest, Sample/Preload o Intest las cuales explicaremos más
adelante.
Supongamos que tenemos la célula JTAG de la figura 27.
Figura 27
Esta célula solo permite capturar y realizar corrimiento. Esta célula podría
ser utilizada para el reloj, por ejemplo.
Figura 28
IEL2-II-04-34 IEL2-II-04-12
40
La célula de la figura 28 es una célula de entrada/salida clásica la cual
permite tres modos de operación: capture, corrimiento y update. Este tipo de
arquitectura permite tener Flip-Flops tipo D individuales para las funciones de
corrimiento y para la función de mantener el dato. Los datos se pueden transferir a
través del registro Boundary-Scan sin interferir con el valor de la función de
mantener el dato. Esto se hace por medio del puerto de datos de salida por
intermedio del multiplexor de salida.
El registro de Instrucciones:
Este registro está compuesto por un registro de corrimiento, el cual puede
estar conectado al TDI o al TDO y una sección de almacenamiento que guarda las
instrucciones actuales tal como se ve en la figura 29.
Figura 29
La señal de control del registro de instrucciones se deriva del TAP y permite
ya sea realizar corrimientos en los valores de entrada/salida hacia el registro de
corrimiento del registro de instrucciones o ya sea cargarlos directamente hacia la
sección de almacenamiento.
El tamaño del registro de instrucciones debe ser de por lo menos 2 bits para
permitir las diferentes instrucciones: Bypass, Sample/Preload, ExTest. La
IEL2-II-04-34 IEL2-II-04-12
41
instrucción de Bypass permite de pasar a través de los componentes con 1 bit de
corrimiento. Todos los bits deben de ser 1 para que sea ejecutada. La instrucción
de ExTest selecciona el registro de Boundary-Scan desconectando el componente
JTAG y configura las conexiones para los diferentes tipos de test. Todos los bits
deben de ser igual a 0 para poder ejecutarla. La instrucción de Sample/Preload
selecciona el registro de Boundary-Scan pero sin desconectar el JTAG.
El IEEE 1149.1 permite un cierto número de instrucciones opcionales las
cuales son:
• Intest instrucción que selecciona el registro de Boundary-Scan para
prepararlo para el test del núcleo interno.
• Idcode la cual selecciona el registro de identificación que está entre TDI
y TDO para prepararlo para la carga del código Idcode y para la lectura
a través de puerto TDO.
• Rubinst es la instrucción que inicializa una rutina de test interna y carga
el resultado en el registro que se encuentra entre TDI y TDO.
El registro Bypass:
Este es un registro de 1 solo bit el cual se selecciona con la instrucción
bypass que proviene de la función de corrimiento. Este registro no tiene salida
paralela.
Figura 30
IEL2-II-04-34 IEL2-II-04-12
42
El registro de instrucciones:
Este registro opcional es de 32 bits que contiene las operaciones de
corrimiento y de captura. Una vez que la operación de captura ha sido realizado, el
código de identificación de 32 bits puede ser cargado a través TDO para una
inspección.
IEL2-II-04-34 IEL2-II-04-12
43
2. METODOLOGÍA DE SOLUCIÓN
2.1 ACERCAMIENTO AL IOIR
Asistir a las diferentes áreas de rehabilitación para una observación inicial y
así poder orientar el diseño del dispositivo según los requerimientos que se puedan
detectar en los pacientes. Además, con este acercamiento también se busca
diferenciar las diferentes secuelas que presentan los pacientes que han sufrido de
un ACV, para poder cumplir con los objetivos planteados. Los resultados obtenidos
luego de este acercamiento fueron:
Sujeto:
Isabel: Sufrió hemiparesia en el lado derecho de su cuerpo luego
de un post operatorio para la extirpación de un tumor. Las secuelas de esto
fueron:
1. Parálisis facial.
2. Perdida de fuerza y precisión en la mano derecha.
3. Problemas respiratorios a causa de la separación de la
cuerdas vocales, por lo cual el aire sale más rápido al hablar
produciendo fatiga.
Elsi: Tiene secuelas del accidente cerebrovascular (ACV) las
cuales son:
1. Hemiparesia (debilidad de un lado del cuerpo)
2. Disartria (Problemas para construir frases).
3. Problemas en la extremidad inferior derecha.
4. Problemas de pronunciación.
Jaime: Sufre de Ataxia de Friedrich, enfermedad degenerativa de
origen neurológico que genera incoordinación.
IEL2-II-04-34 IEL2-II-04-12
44
Gladis: Tiene secuelas del ACV las cuales son:
1. Presenta Disartria.
2. Déficit cognitivo (problemas de raciocinio, conciencia,
atención, juicio y memoria).
3. Hemiparesia
4. Déficit emocional (problemas para controlar sus emociones o
expresar emociones inapropiadas en determinadas
situaciones).
Edilberto: Tiene secuelas del ACV las cuales son:
1. Presenta afasia (problemas para comprender), además
pronuncia repetitivamente la palabra “ok”.
2. Déficit cognitivo.
3. Hemiparesia.
Clara: Tiene secuelas del ACV las cuales son:
1. Presenta afasia.
2. Déficit cognitivo.
3. Hemiplejia.
Obdulia: Tiene secuelas del ACV las cuales son:
1. Déficit cognitivo.
2. Hemiplejia.
3. Negación de su estado.
Abraham: Tiene secuelas del ACV las cuales son:
1. Presenta afasia.
2. Déficit cognitivo.
3. Presenta disartria.
4. Hemiplejia.
IEL2-II-04-34 IEL2-II-04-12
45
María Helena: Secuela de meningitis:
1. Presenta disartria.
2. Déficit cognitivo.
Contexto:
Instituto Roosevelt – Terapia ocupacional
Objeto:
Técnicas de facilitación neuromuscular:
1. Masaje descendente en manos: Sirve para distensionar la
Hemiplejia en la mano.
2. Masaje ascendente en manos: Sirve para incrementar el tono
(tonificar) muscular debido a la debilidad producida por la
hemiparesia.
Ejercicios de motricidad gruesa (movimientos relacionados con la
articulación del hombro) y fina (coordinación, agarre, precisión en manos):
1. Dibujos sobre plano inclinado: se trabaja tanto motricidad
gruesa (al extender el brazo para dibujar) como fina (al
colorear y dibujar).
2. Crayolas adaptadas rudimentariamente con espuma para
facilitar agarre en trabajos de motricidad fina.
3. Rompecabezas: se realiza trabajo a nivel de motricidad
gruesa (al alcanzar las piezas) y a nivel de motricidad fina (al
encajar las piezas).
4. Trabajo con pesas en muñecas: ayuda a fortalecer los
músculos superiores del brazo.
Trabajo cognitivo:
1. Rompecabezas: se trabaja la percepción, la concentración.
IEL2-II-04-34 IEL2-II-04-12
46
2. Ejercicios de escritura basados en raciocinio. (i.e. buscar
objetos que empiecen por cierta letra y escribir el nombre de
dichos objetos).
Contexto:
Instituto Roosevelt –Fonoaudiología
Objeto:
SPC: Símbolos Pictográficos para la Comunicación no vocal.
Movimientos Articulatorios:
1. Sacar e introducir la lengua.
2. Mover la lengua dentro de la boca cerrada siguiendo un
patrón.
3. Inflar las mejillas y no dejar que se salga el aire al
oprimirlas.
Movimientos para coordinación fonorespiratoria (coordinar hablar
y respirar evitando fatigas y grandes pausas):
1. Soplar vela.
2. Repetir el “Padre Nuestro”.
3. Utilización de Espirómetro.
4. Ejercicios de respiración repitiendo letra “G”.
5. Ejercicios de respiración con pesas en las manos.
Incrementar velocidad del habla y mejorar habilidades
interactivas:
1. Realizar lecturas en voz alta y luego comentar sobre ellas.
2. Generar y responder preguntas.
IEL2-II-04-34 IEL2-II-04-12
47
Conciencia fonológica: Discriminar sonidos para facilitar
reproducirlos.
1. Estrategia utilizando tablero y fichas con letras para formar
las palabras (Se utiliza lenguaje concreto ya que se utiliza en
pacientes con afasia).
2.2 INVESTIGACIÓN DE ELEMENTOS EN EL MERCADO
Investigación de los distintos elementos existentes en el mercado, para así,
establecer las funciones del elemento que se va a diseñar y poder hacerlo muy
funcional en términos de la rehabilitación del paciente14.
2.3 PROTOTIPOS ELECTRÓNICOS
Diseño de prototipo electrónico en base a los resultados obtenidos en las
etapas de acercamiento e investigación. Es importante aclarar que en el diseño del
prototipo se debe tener en cuenta varios factores:
Ser de bajo costo.
De fácil replicación.
Debe ser muy funcional.
Para lograr esta etapa, seguimos con la tutoría de Mario Pinilla y se llevo
acabo el método de ”Lluvia de Ideas”, del cual surgió el primer dispositivo, la
descripción de este es:
14 Ver anexos Cognitivcat.pdf , Evalcat.pdf, Physiocat.pdf y Motor_Behavior_Product_review.pdf
IEL2-II-04-34 IEL2-II-04-12
48
Módulos:
1. Laberinto.
2. Sensor de Presión.
3. Luces Secuenciales.
4. Software
Descripción de Módulos:
Laberinto: Consta de una cuadricula a la cual se le sobreponen
acetatos con diferentes tipos de laberintos, variando el grado de
dificultad. Por medio de un teclado integrado se ingresará el número
del laberinto que se piensa utilizar. Dicho dispositivo tendrá un
display en donde aparecerá el número de errores cometidos además
de medir el tiempo utilizado para realizar la prueba.
Figura 31
IEL2-II-04-34 IEL2-II-04-12
49
Sensor de Presión: El sensor de presión se incorporaría en la
parte superior del modulo tomando así una medida más exacta de
toda la presión ejercida por la mano. Una vez ejercida la presión,
esta medida se desplegaría en el display incorporado en el
dispositivo. Este sensor serviría para que el médico evalúe al
paciente.
Figura 32
Luces secuenciales: Estas luces secuenciales se pensaron
incorporar en la parte que involucra la mano. En dicha parte irían
unas luces secuenciales que se prenderían de forma aleatoria. Dicha
secuencia tendrá que ser repetida por el paciente. Además cada
secuencia tendrá un grado de dificultad según el paciente.
IEL2-II-04-34 IEL2-II-04-12
50
Figura 33
Software: El dispositivo tendría un puerto por medio del cual se
podría conectar a un computador. Dicho computador tendría un
software con el cual se podrán realizar otro tipo de ejercicios.
(Rompecabezas, ejercicios de lógica). Estos juego finalmente se
realizaron como un anexo y nos basamos en el test de Frostig15 para
realizar 4 subpruebas16 de este, e implementarlas como ejercicios de
rehabilitación para los pacientes, además de un juego de laberinto
con varios niveles. Como estos juegos necesitaban imágenes,
finalmente decidimos usar estas mismas para cargar la memoria
flash, que tiene nuestro kit de desarrollo.
15 Ver Anexo Test de Frostig. 16 Ver Anexo juegos.zip
IEL2-II-04-34 IEL2-II-04-12
51
Figura 34
Luego de analizar el aporte electrónico de este dispositivo, nos dimos
cuenta que no cumplía con los objetivos. Por esta razón se descartó y de nuevo
recurrimos a la lluvia de ideas, de la cual surgió la idea de usar un panel sensible al
tacto. Sin embargo complementamos esta idea y llegamos a una pantalla LCD a
color que incorporaba un panel sensible al tacto.
Basados en este último dispositivo se generó la siguiente plantilla de
Pirbhai:
IEL2-II-04-34 IEL2-II-04-12
52
Figura 35 Plantilla de Pirbhai del sistema global
En un principio, comenzamos a realizar pruebas basándonos en la
arquitectura FPGA. Se buscaba generar todas las señales de control y de datos
utilizando una tarjeta XSA V1.2 la cual tiene una FPGA Xilinx Spartan XC2S50.
En la Figura 36 podemos apreciar el diagrama de tiempo de las señales que
son necesarias para manejar la pantalla LCD.
IEL2-II-04-34 IEL2-II-04-12
53
Figura 36 Diagrama de tiempos de las señales de la pantalla LCD17
Teniendo en cuenta este diagrama de tiempos, se diseñó un diagrama de
flujos para generar las señales de reloj.(CL1 y CL2) y enviar los datos a la pantalla
(Ver Figura 37).
17 Tomado de SX19v001-ZZA, ver Anexo SX19V001ZZA.PDF.
IEL2-II-04-34 IEL2-II-04-12
54
Figura 37 Diagrama de flujo para señales de control y datos.
Este diagrama de flujos se basó en el siguiente diagrama de bloques para la
FPGA:
Figura 38 Diagrama de bloques de la FPGA
IEL2-II-04-34 IEL2-II-04-12
55
El diagrama de bloques de todo el sistema se muestra en la figura 39.
Figura 39 Diagrama de bloques del controlador de video del LCD.
Basados en este sistema se generaron las señales por medio del programa
conta (Ver anexo 7.1), teniendo como prueba los resultados del analizador lógico
el cual fue usado para corroborar los tiempos exactos de encendido y apagado de
la pantalla. Pero dado que no se tenía una memoria ROM, para poder desplegar
imágenes la pantalla no fue encendida. Según el planteamiento inicial las gráficas
generadas para el despliegue en la pantalla, se tomarían de los programas
diseñados en Visual Basic 6.0 (Ver Anexo 7.2 para los programas realizados en
Visual Basic 6.0).
Finalmente, nos dimos cuenta que existía un SoC que incorporaba los
bloques anteriormente mencionados y que además tenía otras características que
en un futuro podrían ser utilizadas para complementar el diseño original, como por
IEL2-II-04-34 IEL2-II-04-12
56
ejemplo la salida de audio digital. Sin embargo el diagrama de bloques no varió
mucho como se puede ver en la figura 40.
Figura 40 Diagrama de bloques final del sistema
2.4 COMPROBACIONES DEL ELEMENTO
Esto se logró sometiendo el elemento a pruebas en pacientes reales del
IOIR, con los resultados obtenidos en estas pruebas se podría llegar a otra etapa,
la cual sería de mejoras al elemento para verificar su efectividad, y así observar la
evolución del paciente.
IEL2-II-04-34 IEL2-II-04-12
57
3. PRUEBAS Y RESULTADOS
3.1 CONFIGURACIÓN DE REGISTROS
Para poder llegar a las pruebas definitivas primero debemos describir como
se hizo la programación del SoC. El lenguaje que se usó para la programación fue
lenguaje C. El LH79520 tiene registros de configuración de 32 bits cada uno18, los
cuales al ser programados, cambian las características iniciales de funcionamiento
del SoC. Para nuestro caso en especial, los registros utilizados dependían de la
función a realizar.
Para nuestro proyecto, necesitamos utilizar los siguientes Bloques del SoC:
el controlador de LCD a color, el trasmisor y receptor universal asincrónico (UART),
el controlador de SDRAM, el controlador de memoria estática, el controlador de
alimentación, reloj y reset y el sistema de configuración de entrada/salida. Estos
bloques se deben configurar según su aplicación, por medio de registros:
Controlador de LCD a color:
Este tipo de controlador provee todo las señales necesarias para conectar
directamente una gran variedad de monitores LCD a color y monocromáticos:
Tiene soporte para STN monocromático y a color con interfaces de 4 y 8 bits,
tiene soporte para monitores TFT a color, resolución programable hasta de
800x600, 15 niveles de escala de grises con monitores monocromáticos, 3 375
con monitores STN, 64K en monitores TFT, 1, 2 ó 4 Bits Por Píxel (BPP) para
monitores STN monocromáticos, 1, 2, 4 u 8 Bits Por Píxel para monitores STN y
TFT a Color, tiempos programables para diferentes tipos de monitores, paleta RAM
de acceso rápido de 16 bits con 256 entradas, señales de reloj de píxel, Frame
(“Pantallazo”) y Line (línea), señal AC bias para modo STN o señal de habilitación 18 Tomado de LH79520 User´s Guide Manual ver Anexo LH79520 User's Guide.pdf
IEL2-II-04-34 IEL2-II-04-12
58
de datos para modo TFT, algoritmo patentado para escala de grises, eventos de
generación de interrupción y FIFO´s dobles de 16 bits de ancho por 32 bits de
largo, que sirven como buffer para los datos de entrada.
Los registros programados de este bloque fueron:
-- Registro Timing0 del LCD:
-- Registro Timing1 del LCD:
-- Registro Timing2 del LCD:
-- Registro de control del LCD:
Trasmisor y receptor universal asincrónico (UART):
El LH79520 contiene 3 UART´s con las siguientes características: FIFO´s de
16 bytes separadas de transmisión y recepción para reducir interrupciones en la
CPU, generador programable para ajustar la velocidad de transmisión, detección
de bit falso de inicio, características de interfase serial programables.(Palabra de
datos de 5, 6, 7 u 8 bits; detección y generación de paridad par, impar ó nula.).
Los registros programados de este bloque fueron:
-- Registro de datos de la UART.
-- Registro de estado de recepción de la UART.
-- Registro de borrado de banderas de estado de la UART.
-- Registro de banderas de la UART.
-- Registro de división entera de la tasa de baudios de la UART.
-- Registro de línea de control de la UART.
-- Registro de control de la UART.
IEL2-II-04-34 IEL2-II-04-12
59
Controlador de SDRAM:
Este controlador provee una interfase entre el bus interno y los dispositivos
externos de SDRAM.
Los registros programados de este bloque fueron:
-- Registro de configuración 0.
-- Registro de configuración 1.
-- Registro de refresco del temporizador.
Controlador de memoria estática:
Este controlador provee una interfase entre el bus interno y los dispositivos
externos.
Los registros programados de este bloque fueron:
-- Registro de configuración del banco 0.
Controlador de alimentación, reloj y reset:
El RCPC genera las diferentes señales de reloj que son necesarias para el
funcionamiento del LH79520. Asimismo, maneja la secuencia de encendido y la
secuencia de operación durante los modos de ahorro de energía.
Este Controlador permite por medio del software, seleccionar
individualmente cada una de las frecuencias de las diferentes señales de reloj que
se generan en el chip para configurar el modo más eficiente de operación.
IEL2-II-04-34 IEL2-II-04-12
60
Las características generales son: Oscilador de cristal de 14.7456 MHz y PLL
para la generación de la señal de reloj, entrada externa de la señal de reloj si no
se utilizan el oscilador de cristal ni el PLL, oscilador de cristal de 32.768 KHz para
generar un reloj de 1 Hz el cual genera el reloj en tiempo real (Real Time Clock),
relojes controlados individualmente para los periféricos y la CPU, el reloj de la
UART se puede seleccionar entre 14.7546 MHZ ó un reloj externo, relojes de la
UART y del PWM preescalables, cinco modos globales de manejo de alimentación
disponibles : Activo, Espera, Inactivo, Detenido 1 y Detenido 2, las frecuencias de
la CPU y del Bus se pueden cambiar en cualquier momento, selección de la salida
del reloj y reset por Hardware (nRESETIN) y reset por software.
Los registros programados de este bloque fueron:
-- Registro de Control de reset, alimentación y reloj.
-- Registro de preescalamiento.
-- Registro de control de reloj de periféricos 2.
-- Registro de selección de reloj de periféricos 2.
-- Registro de control del reloj AHB.
Sistema de configuración de entrada/salida:
Los registros del IOCON permiten que el usuario controle directamente la
multiplexación de pines.
Los registros programados de este bloque fueron:
-- Registro de multiplexación de interfase con la memoria.
-- Registro de multiplexación de interfase con la pantalla LCD.
IEL2-II-04-34 IEL2-II-04-12
61
En la Figura 41 se pueden ver los registros a configurar para nuestro
proyecto y sus funciones respectivas, además del bloque del SoC, al cual cada uno
pertenece.
Figura 41. Registros de Configuración utilizados en el proyecto.
Lo primero fue generar una función que configurara los registros que
controlan las señales de reloj, CL1,CL2 y multiplexación de pines. La función es
videoinit (Ver anexo 7.3)
Nombre del Bloque Nombre del Registro Definición del Registro
Timing0 del LCDConfigura tiempos horizontales de Front Porch, Back Porch,Synchronization Pulse Width, Pixeles por Línea
Timing1 del LCDConfigura tiempos verticales de Front Porch, Back Porch,Synchronization Pulse Width, Líneas por Pantalla
Timing2 del LCDConfigura la generación de los relojes del controlador del LCDa color para la pantal la LCD
Control de LCDConfigura el modo de operac ión del controlador del LCD acolor
Datos de la UART Doble uso: Almacenar datos a transmitir por la UART, leerdatos recibidos por la UART
Estado de recepción de la UART Devuelve el estado de las banderas, asociados con los datosque se acaban de leer del regis tro de datos
Bor rado de banderas de estado de la UART Reinicia las banderas de estadoBanderas de la UART Contiene estado de operaciones de la UART y de la FIFO
Divisón entera de la tasa de baudios de la UARTEn este registro se ingresa el valor entero por el cual se divideel reloj de 14.7456MHZ, para obtener la tasa de baudiosdeseada
Línea de control de la UART Configura el número de bits a enviarControl de la UART Habilita o deshabilita los periféricos de al UART
Configuración0 Configura el funcionamiento de la SDRAM
Configuración1Contiene un bit de solo lec tura, del estado del controlador dela SDRAM y otros campos para la configurac ión de los Buffersde escr itura y lectura del controlador
Refresco del temporizadorEstablece el intervalo de tiempo de refresco como func ión delreloj AHB
CONTROLADOR DE MEMORIA ESTÁTICA
(FLASH)Configuracón del banco 0
Indica como funciona la memoria externa manejada por el
CS0
Control de Reset, alimentac ión y relojHabilita el PLL y maneja el bloqueo de escr itura, la seleccióndel reloj y los modos de alimentac ión.
Preescalamiento de relojLos valores almacenados en este registro, seleccionan ladiv isión en frecuenc ia para producir el HCLK.
Selecc ión de reloj de periféricos 2 Determina la señal de reloj que al imenta el CLCDC
Control de reloj de periféricos 2 Activa o desactiva los relojes aliementados a los periféricosCLCDC y SSP
Control de reloj AHBActiva y desactiva los relojes para los dispositivos conectadosal AHB
Multiplexación de interfase con la memoriaReconfigura los pines de interfase con la memoria como pinesde entrada/salida de propós ito general
Multiplexación de interfase con la pantal laReconfigura los pines de entrada/salida de propósito generalcomo pines de interfase con la pantalla LCD
SISTEMA DE CO NFIGURACIÓN DE
ENTRADA/SALIDA (IOCON)
CONTROLADOR DE LCD A COLOR (CLCDC)
TRANSMISOR Y RECEPTOR UNIVERSAL ASINCRÓ NICO (UART)
CONTROLADOR DE MEMORIA DINÁMICA
(SDRAM)
CONTROLADOR DE ALIMENTACIÓN, RELOJ
Y RESET (RCPC)
IEL2-II-04-34 IEL2-II-04-12
62
Una vez se han configurados los registros de manera que podamos obtener
las señales correctas para manejar la pantalla de LCD, necesitamos configurar los
registros para obtener las señales necesarias que controlan la memoria SDRAM.
Esta función tiene el nombre de InitSDRAM (Ver anexo 7.3)
Secuencia de inicialización:
1. Esperar 100us. En esta parte, lo que se hace es igualar al registro
SDRCCONFIG1 a 0x03 de tal forma que se genera un NOP. Esto se
realiza dos veces para poder cumplir con este retardo. Además, se
forzan los bits 2 y 3 de tal forma que se deshabilita la escritura y la
lectura en la SDRAM mientras se configura.
2. Esperar 200us. Esto se lleva a cabo por medio de la función
Memtimer, la cual genera un retardo en milisegundos igual al
parámetro de entrada.
3. Se configura el registro SDRCCONFIG en 0x01 de tal forma que la
SDRAM se auto-precargue.
4. Configurar el registro SDRCREFTIMER para que la memoria se
refresque cada 16 ciclos de reloj.
5. Esperar 250 us.
6. Configurar el registro SDRCREFTIMER con el valor operacional para
que la memoria se refresque cada 800 ciclos de reloj.
IEL2-II-04-34 IEL2-II-04-12
63
7. Se configura de nuevo el SDRCCONFIG1 para habilitar el modo
SDRAM.
8. Se espera hasta que la SDRAM esté lista. Se configura el
SDRCCONFIG0 de manera que cumpla con las especificaciones de la
SDRAM. En nuestro caso, el número que escribimos en este registro
es 0x01A40088.
9. Esperar hasta que la SDRAM esté lista.
10. Configurar SDRCCONFIG1 asignándole 0X0C de tal forma que se
pone los bits M e I en operación normal y se habilita la lectura y la
escritura de la SDRAM.
11. Se espera hasta que la SDRAM esté lista.
12. Finalmente se genera un retardo de 100us antes de utilizar la
memoria.
Antes de comenzar con el direccionamiento para la lectura y escritura de los
datos, debemos programar la memoria Flash externa, esto se hace configurando
sólo el registro SMCBCR0 del SoC.
Por ultimo configuramos los registros de la UART, para controlar el
controlador de pantalla de toque, bajo el siguiente diagrama de flujo:
IEL2-II-04-34 IEL2-II-04-12
64
Figura 42. Diagrama de flujo del controlador de pantalla de toque
3.2 RESULTADOS
Las gráficas que se obtuvieron al realizar los programas en Visual Basic 6.0
sirven para ser almacenadas en la memoria Flash y cargarlas en la memoria
SDRAM para ser luego desplegadas en la pantalla y poder realizar las actividades
propuestas. Estos programas tuvieron el visto bueno por parte del grupo médico y
los pacientes del IOIR en cuanto a complejidad, actividades propuestas, colores e
interfase gráfica.
En cuanto al diseño de la tarjeta de desarrollo, nos hemos dado cuenta que
su flexibilidad es muy alta gracias a que el SoC posee características que pueden
ser utilizadas en el desarrollo de nuevos proyectos.
IEL2-II-04-34 IEL2-II-04-12
65
Nos hemos dado cuenta que la tecnología SoC facilita mucho el diseño de
cualquier tipo de aplicación debido a que incorporan una gran cantidad de bloques
que se adaptan fácilmente a la gran mayoría de diseños. Esto se pudo comprobar,
haciendo un paralelo con la tecnología FPGA, ya que esta, aunque es flexible,
exige mayor tiempo de diseño y el lenguaje de programación (VHDL) es mas
limitado que el lenguaje de programación del SoC (C ).Aunque el SoC es mas
limitado en cuanto a recursos, debido a que sus bloque internos no son
reconfigurables, este presenta ventajas en cuanto a consumo de potencia, tamaño
y eficiencia.
IEL2-II-04-34 IEL2-II-04-12
66
4. SOFTWARE UTILIZADO
Para poder programar los registros utilizamos el lenguaje C. Una vez
realizados estos programas, la plataforma que usamos para compilar los
programas fue Cygwin (existe también un programa llamado vide con una
interfase gráfica para Windows) por medio de la cual generamos los archivos que
se programaron en el SoC. Luego, usamos la aplicación OcDemon para trabajar
con el protocolo JTAG y poder subir los programas al SoC, utilizando como
interfase física un Wiggler. Este último es un buffer bidireccional que protege el
puerto paralelo del computador, debido a que estamos enviando y recibiendo
datos.
Para la programación de las diferentes subpruebas y el juego del laberinto,
se uso el lenguaje Basic. El programa que se utilizo fue Visual Basic v6.0.
Para generar las señales de encendido y apagado de la pantalla y envío de
datos a esta, por medio de la FPGA, el lenguaje usado fue VHDL. El programa que
se utilizó fue Xilinx ISE 6.
IEL2-II-04-34 IEL2-II-04-12
67
5. DIAGRAMA CIRCUITAL
El resultado final de la tarjeta de desarrollo consta de básicamente de dos
tarjetas de doble capa las cuales se unen por cuatro conectores. En una tarjeta se
encuentran el SoC y la parte de alimentación además de los puertos seriales y
JTAG, como se puede ver en el diagrama esquemático (Figura 43).
Figura 43. Diagrama esquemático de la tarjeta que contiene al SoC
En la otra tarjeta se encuentran las memorias SDRAM y Flash y el
controlador de la pantalla de tacto. Esto se realizó de esta forma para que se
aproveche al máximo las ventajas del SoC y se le puedan interconectar otro tipo
de circuitos para otras aplicaciones. El diagrama esquemático de la otra tarjeta se
puede observar en la Figura 44.
IEL2-II-04-34 IEL2-II-04-12
68
GND
LCDVD1
D25
LCDVD4
D31
nBLE2
CLKOUT
D0
VDD
D0
A10
SDCLK
A24
R17
10K
D11
DQM1
GNDGND
C14
10p
D5
D12
DQM1
D18
LCDVD9
D3
A2
VDD
VDD
D27
A0
SDCK
E
DQM1
R6
10K
DQM0
nDCS1
LCDLP
DQM0
VDD
D3
LCDVD11
D7
TDO
A2
DQM2
DEOT1
A6D6
C15
1n
D24
INT3
SSICLK
nBLE3
LCDVD4
A9
XTALOUT
A19
LCDVD0
U2
TC58FVM6T2AFT-65
25242322212019188765432148171691013
4737
2746
29313335384042443032343639414345
112628
121514
A0A1A2A3A4A5A6A7A8A9A10A11A12A13A14A15A16A17A18A19A20A21
nBYTEVDD
VSS1VSS2
D0D1D2D3D4D5D6D7D8D9
D10D11D12D13D14D15
nWEnCEnOE
nRSTRY/nBY
nWP
D14A8
C4100n
LCDVD5
LCDCLK
Y+
D15
JP112
DREQ0DACK1
INT3X-
D6
C11100n
D19
LCDVD6
LCDVD16
nBLE1
nOE
A19
C7100n
nTRST
D10
A23
D5
X+
C13100n
TMS
D23
D14
VDD
D8
D17
D27
LCDVD7
GND
C3100n
nWE
R3100K
12
JP2 12
JP4 12
nRESETI
D1
D7
D31
D0
A13A3
D29
CLKSEL
TEST1
D21
CLKIN
D8
C5100n
A8
A6
AMP528P1123456789101112131415
16171819202122232425262728 FLM
GNDCL1GNDCL2GND
D0D1D2D3D4D5D6D7DISP.OFF
VDDVDDGNDVLCDGNDTS1TS2NCNCNCNCNCNC
INT1
A20
LCDVD7
D26
nDCS0
nRESETI
GND
A20
SDCKE
A14 D13
VDD
A4
nRESETO
A5
D28
A6
D26
GND
GND
D1
D30
GND
D23
A18
JP5 12
LCDENAB
DEOT0
A4
D13
GND
LCDVD2
UORXD
nRESETO
C6100n
A1
A5
A12
DQM3
nWE
A7
R7
100K
VDD
R5
100K
A2
A1
A18
GND
nRAS
DQM2
A8
A11A9
A4
C1100n
A12
GND
VDD
LCDLP
D3
SSIFRM
A10
VCC
SSIOUT_U2TXD
SDCLK
LCDFP
VDD
D6
nDCS0
LCDVD3
DQM3
A0
X+
D13
A11
SDCLK
D20
A22
LCDVD1
LCDVD8
D1
VLCDD11
U6A
74HC141 2
J11
CON40A
1 23 45 67 89 1011 1213 1415 1617 1819 2021 2223 2425 2627 2829 3031 3233 3435 3637 3839 40
nCS5
X-
R1100K
12
D4
LCDVD12
VDD
TEST2
D5
D22
A1
J12
CON40A
1 23 45 67 89 10
11 1213 1415 1617 1819 2021 2223 2425 2627 2829 3031 3233 3435 3637 3839 40
nCS1
U1RXD
LCDVDDEN
LCDVD14
Y+
U3
AMP5 16P
123456789
10111213141516 NC
NCNCNC
X+Y+X-Y-NC
NCNCNCNCNCNCNC
LCDVD17
LCDVD6
A21
LCDCLK
GND
M2
BSS84/PLP
1
23
U6B
74HC143 4
D2
SSIEN
VDD
D9D12
A25
GND
XTAL32OUT
LCDVD3
LCDVD15
nOEnCS6
VDD
VDD
J9
CON40A
1 23 45 67 89 1011 1213 1415 1617 1819 2021 2223 2425 2627 2829 3031 3233 3435 3637 3839 40
D12
INT0
C2100n
ADS7843?
12345678 9
10111213141516
+VccX+Y+X-Y-GNDIN3IN4 VRef
+VccPENIRQ
DOUTBUSY
DINCS
DCLK
D22
GND
R2100K
12
LCDVD10
A16
SDCKE A22
A9
SDCL
K
D8
A21
TDI
D21
nBLE0
VDD
INT1
VDD
D16
D25
A17
A15
D4
LCDVD5
D9
D30
A3
nCS0
XTAL32IN
D2
VDD
D1
D1N1190
D29
LCDVDDEN
R8
100K
TCLK
LED
U1TXD
GND
R4100K
12
D18
nCAS
GND
nCS2
nCS3GND
A13
CONECTORVLCD1
conectorVLCD
1234
VLCDNCNCGND
D24
nDWE
U0TXD
D9D10
A16
A7
D4
LCDVD13
A17
C12100n
C8100n
U1
MT48LC4M32B2
2526276061626364656624
1918
2017
22236867
16712859
14
21
3057697073
1 3 9 15 29 35 41 43 49 55 75 81
24578101113747677798082838531333436373940424547485051535456
6 12 32 38 44 46 52 58 72 78 84 86
A0A1A2A3A4A5A6A7A8A9A10
/RAS/CAS
/CS/WE
BA0BA1CLKCKE
DQM0DQM1DQM2DQM3
NC1
A11
NC3NC4NC5NC6NC7
VDD1
VDD2
VDD3
VDD4
VDD5
VDD6
VDD7
VDD8
VDD9
VDD1
0VD
D11
VDD1
2
DQ0DQ1DQ2DQ3DQ4DQ5DQ6DQ7DQ8DQ9
DQ10DQ11DQ12DQ13DQ14DQ15DQ16DQ17DQ18DQ19DQ20DQ21DQ22DQ23DQ24DQ25DQ26DQ27DQ28DQ29DQ30DQ31
VSS1
VSS2
VSS3
VSS4
VSS5
VSS6
VSS7
VSS8
VSS9
VSS1
0VS
S11
VSS1
2
LCDVD2
JP3 12
D15
GND
VDD
A12
INT2
nWP
VLCD
A13
D28
CLKEN
nCS4
D11
GND
DREQ1
A5
INT0
LCDVD0
D16
Y-
nDWE
nDCS
0
D2
nRAS
A15
D10
D15
LCDCLKIN
J10
CON40A
1 23 45 67 89 10
11 1213 1415 1617 1819 2021 2223 2425 2627 2829 3031 3233 3435 3637 3839 40
D17
SSIIN U2RXD
D7
C9100n
nWP
LCDFP
D20
nCAS INT2INT4
A7
nCS0
Y-
C10100n
XTALIN
UOTXD
U0RXD
nTESTA
D14
D19A10
DACK0
A3
A11
GND
A14
Figura 44. Diagrama esquemático de la tarjeta que contiene memorias.
IEL2-II-04-34 IEL2-II-04-12
69
6. CONCLUSIONES
Al ser un proyecto interdisciplinario, pudimos ver desde distintos puntos de
vista la manera de abordar los problemas y de solucionarlos. Esto ha sido muy
valioso, debido a que a futuro, nuestro entorno estará lleno de personas cuya
forma de ver las cosas será totalmente distinta a la nuestra.
Tuvimos bastantes dificultades para poder compilar los programa del SoC
debido a que la plataforma necesaria para dicho fin es poco conocida dentro de la
Universidad de los Andes, por lo cual esperamos que nuestro proyecto incentive la
aplicación de este tipo de tecnología y además se dispongan de los distintos
elementos para poder ser llevado a cabo. Es este el caso de los componentes
superficiales, que para poder ser soldados necesitan gran exactitud y la
Universidad no cuenta con recursos tales como soldadura líquida y hornos.
Actualmente, los sistemas embebidos están desplazando poco a poco
tecnologías tales como microcontroladores, FPGA`s, entre otros. Esto lo pudimos
comprobar ya que redujimos costos y tiempo de diseño. Asimismo, nos dimos
cuenta, que es más fácil configurar bloques predeterminados que diseñar estos
mismos.
IEL2-II-04-34 IEL2-II-04-12
70
7. ANEXOS
7.1 PROGRAMA PARA GENERAR LAS SEÑALES DE CONTROL, CON LENGUAJE VHDL library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity conta is Port ( clk : in std_logic; reset : in std_logic; enable : in std_logic; clk1 : out std_logic; pulse2 : out std_logic); end conta; architecture Behavioral of conta is signal contador : std_logic; signal aux : std_logic; type estados is (s0, s1, s2); SIGNAL State : estados; begin process(clk, reset) variable cont: integer range 0 to 242; begin if reset = '1' then aux <= '0'; State <= s0; cont := 0; contador <= '1'; elsif clk'event and clk = '1' then case State is when s0 => pulse2 <= '0'; cont := 0; if enable = '1' then State <= s1; else State <= s0; end if; when s1 => pulse2 <= '1'; cont := 1; contador <= not(contador); clk1 <= contador; aux <= not(aux); if aux >= '1' then aux <= '0' ; if enable = '1' then State <= s2; else State <= s0; end if; else State <= s1; end if; when s2 => cont := cont + 1; contador <= not(contador); clk1 <= contador; if enable = '1' then
IEL2-II-04-34 IEL2-II-04-12
71
if cont >= 241 then State <= s1; else pulse2 <= '0'; State <= s2; end if; else State <= s0; end if; when others => pulse2 <= '0'; cont := 0; State <= s0; end case; end if; end process; end Behavioral;
7.2 PROGRAMAS REALIZADOS EN VISUAL BASIC 6.0
Laberinto:
Option Explicit Public i As Integer Public Error As Integer Dim Var As Integer Dim Nivel As String Dim archivo As String Dim Mens_feli As Integer Dim Mens_error As Integer Private Sub Abajo_Click() Rutina i, "Abajo" End Sub Private Sub Arriba_Click() Rutina i, "Arriba" End Sub Private Sub Derecha_Click() Rutina i, "Derecha" End Sub Private Sub Form_Load() Var = 0 Timer1.Enabled = False i = 1 archivo = App.Path Izquierda.Enabled = False Derecha.Enabled = False Abajo.Enabled = False Arriba.Enabled = False While i < 22 If i = 1 Or i = 2 Or i = 6 Or i = 7 Then Image1(i).Picture = LoadPicture(archivo & "/" & "Up.bmp") ElseIf i = 3 Or i = 4 Or i = 5 Or i = 8 Or i = 9 Or i = 10 Or i = 16 Or i = 17 Or i = 18 Or i = 19 Or i = 20 Then Image1(i).Picture = LoadPicture(archivo & "/" & "Right.bmp") ElseIf i = 13 Then Image1(i).Picture = LoadPicture(archivo & "/" & "Left.bmp") ElseIf i = 11 Or i = 12 Or i = 14 Or i = 15 Then
Image1(i).Picture = LoadPicture(archivo & "/" & "Down.bmp") End If i = i + 1 Wend i = 1 Error = 0 Label1 = Error Text1 = "" End Sub Private Sub Inicio_Click() Izquierda.Enabled = True Derecha.Enabled = True Abajo.Enabled = True Arriba.Enabled = True Timer1.Interval = 1 Timer1.Enabled = True Timer1.Interval = 1000 Image1(0).Picture = LoadPicture(archivo & "/" & "Inicio_opri.bmp") End Sub Private Sub Izquierda_Click() Rutina i, "Izquierda" End Sub Private Sub Rutina(Cont As Integer, Flecha As String) If Flecha = "Arriba" Then Select Case Cont Case 1 To 2 Image1(i).Picture = LoadPicture(archivo & "/" & "Up_opri.bmp") Cont = Cont + 1 i = Cont GoTo eti Case 6 To 7
IEL2-II-04-34 IEL2-II-04-12
72
Image1(i).Picture = LoadPicture(archivo & "/" & "Up_opri.bmp") Cont = Cont + 1 i = Cont GoTo eti Case Else GoTo eti2 End Select ElseIf Flecha = "Abajo" Then Select Case Cont Case 11 To 12 Image1(i).Picture = LoadPicture(archivo & "/" & "Down_opri.bmp") Cont = Cont + 1 i = Cont GoTo eti Case 14 To 15 Image1(i).Picture = LoadPicture(archivo & "/" & "Down_opri.bmp") Cont = Cont + 1 i = Cont GoTo eti Case Else GoTo eti2 End Select ElseIf Flecha = "Derecha" Then Select Case Cont Case 3 To 5 Image1(i).Picture = LoadPicture(archivo & "/" & "Right_opri.bmp") Cont = Cont + 1 i = Cont GoTo eti Case 8 To 10 Image1(i).Picture = LoadPicture(archivo & "/" & "Right_opri.bmp") Cont = Cont + 1 i = Cont GoTo eti Case 16 To 20
Image1(i).Picture = LoadPicture(archivo & "/" & "Right_opri.bmp") Cont = Cont + 1 i = Cont GoTo eti Case Else GoTo eti2 End Select ElseIf Flecha = "Izquierda" Then Select Case Cont Case 13 Image1(i).Picture = LoadPicture(archivo & "/" & "Left_opri.bmp") Cont = Cont + 1 i = Cont GoTo eti Case Else GoTo eti2 End Select End If eti2: Mens_error = MsgBox("ERROR, INTENTELO DE NUEVO", vbCritical, "Error") Error = Error + 1 eti: Label1 = Error If i = 21 Then Timer1.Enabled = False Mens_feli = MsgBox("FELICITACIONES, HAS TERMINADO EN " & Var & " SEGUNDOS", vbExclamation, "¡FELICITACIONES!") Beep Izquierda.Enabled = False Derecha.Enabled = False Abajo.Enabled = False Arriba.Enabled = False Form_Load End If End Sub Private Sub Salir_Click() End End Sub Private Sub Text1_Change() Nivel = Text1 End Sub Private Sub Timer1_Timer() Var = Var + Timer1.Interval / 1000 Label2 = Var & " Seg" End Sub
• Cuenta Cuadros Option Explicit Dim Tiempo1 As Integer Dim Tiempo2 As Integer Private Felicitaciones As String Private Error As String Dim Nivel As Integer Private Hab As Boolean Private Errores_Var As Integer Private Sub Check1_Click()
If Hab = True Then Hab = False Else: Hab = True End If End Sub Private Sub Form_Load() Dim i As Integer Tiempo_Nivel.Visible = False Tiempo_Nivel_Eti.Visible = False
Nivel = 0 Nivel_Text = Nivel Tiempo1 = 0 Tiempo_Nivel = 0 & " Seg" Tiempo_Tot = 0 & " Seg" Timer1.Enabled = False 'Inicio.Enabled = False Timer2.Interval = 0 Timer2.Enabled = False While i < 10 Numeros(i).Enabled = False
IEL2-II-04-34 IEL2-II-04-12
73
Shape1(i).Shape = 1 Shape1(i).Top = 0 Shape1(i).Left = 0 Shape1(i).Width = 0 Shape1(i).Height = 0 i = i + 1 Wend End Sub Private Sub Inicio_Click() Dim i As Integer Errores_Var = 0 Errores = Errores_Var Timer1.Interval = 1 Timer1.Enabled = True Timer1.Interval = 1000 Timer2.Interval = 1 Timer2.Enabled = True Timer2.Interval = 1000 Rutina If Hab = True Then Tiempo_Nivel.Visible = True Tiempo_Nivel_Eti.Visible = True End If While i < 10 Numeros(i).Enabled = True i = i + 1 Wend i = 0 End Sub Private Sub Nivel_x_Nivel_Click() If Hab = False Then Hab = True Else: Hab = True End If End Sub Private Sub Nivel_Text_Click() Nivel = Nivel_Text End Sub Private Sub Numeros_Click(Index As Integer) If (Nivel_Text = 0 And Index = 2) Or (Nivel_Text = 1 And Index = 3) Or (Nivel_Text = 2 And Index = 3) Or (Nivel_Text = 3 And Index = 4) Or (Nivel_Text = 4 And Index = 5) Or (Nivel_Text = 5 And Index = 5) Or (Nivel_Text = 6 And Index = 4) Or (Nivel_Text = 7 And Index = 4) Then Felicitaciones = MsgBox("FELICITACIONES, LO HAS LOGRADO!", vbExclamation, "FELICITACIONES") Timer2.Enabled = False Tiempo2 = 0 If Hab = True Then Rutina Else Form_Load End If Else
Error = MsgBox("LO SIENTO, INTENTALO DE NUEVO", vbCritical, "ERROR") Errores_Var = Errores_Var + 1 Errores = Errores_Var End If End Sub Private Sub Reini_Click() Tiempo1 = 0 Tiempo_Nivel = 0 & " Seg" Tiempo_Tot = 0 & " Seg" Tiempo2 = 0 Form_Load End Sub Private Sub Salir_Click() End End Sub Private Sub Timer1_Timer() Tiempo1 = Tiempo1 + Timer1.Interval / 1000 Tiempo_Tot = Tiempo1 & " Seg" End Sub Private Sub Rutina() Dim i As Integer If Nivel = 0 Then Timer2.Enabled = True While i < 10 If i = 0 Then Shape1(i).Shape = 1 Shape1(i).Top = 30 Shape1(i).Left = 500 Shape1(i).Width = 2000 Shape1(i).Height = 2000 Shape1(i).FillColor = vbYellow ElseIf i = 1 Then Shape1(i).Shape = 1 Shape1(i).Top = 400 Shape1(i).Left = 3000 Shape1(i).Width = 1500 Shape1(i).Height = 1500 Shape1(i).FillColor = vbBlue Else Shape1(i).Shape = 1 Shape1(i).Top = 0 Shape1(i).Left = 0 Shape1(i).Width = 0 Shape1(i).Height = 0 End If Nivel_Text = Nivel i = i + 1 Wend Nivel = 1 GoTo Fin ElseIf Nivel = 1 Then Timer2.Enabled = True While i < 10 If i = 0 Then Shape1(i).Shape = 1 Shape1(i).Top = 1000 Shape1(i).Left = 5000 Shape1(i).Width = 1000 Shape1(i).Height = 1000
Shape1(i).FillColor = vbRed ElseIf i = 1 Then Shape1(i).Shape = 1 Shape1(i).Top = 400 Shape1(i).Left = 2000 Shape1(i).Width = 500 Shape1(i).Height = 500 Shape1(i).FillColor = vbWhite ElseIf i = 2 Then Shape1(i).Shape = 1 Shape1(i).Top = 2050 Shape1(i).Left = 100 Shape1(i).Width = 1800 Shape1(i).Height = 1800 Shape1(i).FillColor = &HC0C0FF ElseIf i = 3 Then Shape1(i).Shape = 2 Shape1(i).Top = 2050 Shape1(i).Left = 3000 Shape1(i).Width = 1000 Shape1(i).Height = 1000 Shape1(i).FillColor = &HFF8080 Else Shape1(i).Shape = 0 Shape1(i).Top = 0 Shape1(i).Left = 0 Shape1(i).Width = 0 Shape1(i).Height = 0 End If Nivel_Text = Nivel i = i + 1 Wend Nivel = 2 GoTo Fin ElseIf Nivel = 2 Then Timer2.Enabled = True While i < 10 If i = 0 Then Shape1(i).Shape = 1 Shape1(i).Top = 3000 Shape1(i).Left = 5000 Shape1(i).Width = 1000 Shape1(i).Height = 1000 Shape1(i).FillColor = &HFF00FF ElseIf i = 1 Then Shape1(i).Shape = 2 Shape1(i).Top = 400 Shape1(i).Left = 1000 Shape1(i).Width = 500 Shape1(i).Height = 500 Shape1(i).FillColor = vbWhite ElseIf i = 2 Then Shape1(i).Shape = 1 Shape1(i).Top = 2050 Shape1(i).Left = 2000 Shape1(i).Width = 800 Shape1(i).Height = 800
IEL2-II-04-34 IEL2-II-04-12
74
Shape1(i).FillColor = &HC0C0FF ElseIf i = 3 Then Shape1(i).Shape = 2 Shape1(i).Top = 1 Shape1(i).Left = 6000 Shape1(i).Width = 1000 Shape1(i).Height = 1000 Shape1(i).FillColor = &HFFFF00 ElseIf i = 4 Then Shape1(i).Shape = 1 Shape1(i).Top = 1 Shape1(i).Left = 1 Shape1(i).Width = 1000 Shape1(i).Height = 1000 Shape1(i).FillColor = &HFF80FF Else Shape1(i).Shape = 0 Shape1(i).Top = 0 Shape1(i).Left = 0 Shape1(i).Width = 0 Shape1(i).Height = 0 End If Nivel_Text = Nivel i = i + 1 Wend Nivel = 3 GoTo Fin ElseIf Nivel = 3 Then Timer2.Enabled = True While i < 10 If i = 0 Then Shape1(i).Shape = 1 Shape1(i).Top = 1500 Shape1(i).Left = 100 Shape1(i).Width = 1000 Shape1(i).Height = 1000 Shape1(i).FillColor = &HC0C000 ElseIf i = 1 Then Shape1(i).Shape = 2 Shape1(i).Top = 1800 Shape1(i).Left = 1500 Shape1(i).Width = 500 Shape1(i).Height = 500 Shape1(i).FillColor = vbWhite ElseIf i = 2 Then Shape1(i).Shape = 1 Shape1(i).Top = 2550 Shape1(i).Left = 200 Shape1(i).Width = 400 Shape1(i).Height = 400 Shape1(i).FillColor = &HC0C0FF ElseIf i = 3 Then Shape1(i).Shape = 2 Shape1(i).Top = 1500 Shape1(i).Left = 5000 Shape1(i).Width = 1000 Shape1(i).Height = 1000
Shape1(i).FillColor = &HFFFF00 ElseIf i = 4 Then Shape1(i).Shape = 1 Shape1(i).Top = 1 Shape1(i).Left = 6000 Shape1(i).Width = 1000 Shape1(i).Height = 1000 Shape1(i).FillColor = &HFF80FF ElseIf i = 5 Then Shape1(i).Shape = 1 Shape1(i).Top = 1 Shape1(i).Left = 3000 Shape1(i).Width = 200 Shape1(i).Height = 200 Shape1(i).FillColor = &HC0E0FF ElseIf i = 6 Then Shape1(i).Shape = 3 Shape1(i).Top = 3000 Shape1(i).Left = 3000 Shape1(i).Width = 1000 Shape1(i).Height = 1000 Shape1(i).FillColor = &HFFFFC0 End If Nivel_Text = Nivel i = i + 1 Wend Nivel = 4 GoTo Fin ElseIf Nivel = 4 Then Timer2.Enabled = True While i < 10 If i = 0 Then Shape1(i).Shape = 1 Shape1(i).Top = 1250 Shape1(i).Left = 100 Shape1(i).Width = 900 Shape1(i).Height = 900 Shape1(i).FillColor = &HFF80FF ElseIf i = 1 Then Shape1(i).Shape = 1 Shape1(i).Top = 450 Shape1(i).Left = 4000 Shape1(i).Width = 500 Shape1(i).Height = 500 Shape1(i).FillColor = vbRed ElseIf i = 2 Then Shape1(i).Shape = 1 Shape1(i).Top = 2550 Shape1(i).Left = 200 Shape1(i).Width = 400 Shape1(i).Height = 400 Shape1(i).FillColor = vbWhite ElseIf i = 3 Then Shape1(i).Shape = 2 Shape1(i).Top = 200 Shape1(i).Left = 5000
Shape1(i).Width = 1000 Shape1(i).Height = 1000 Shape1(i).FillColor = vbGreen ElseIf i = 4 Then Shape1(i).Shape = 1 Shape1(i).Top = 3000 Shape1(i).Left = 3000 Shape1(i).Width = 1000 Shape1(i).Height = 1000 Shape1(i).FillColor = vbBlue ElseIf i = 5 Then Shape1(i).Shape = 1 Shape1(i).Top = 2000 Shape1(i).Left = 3000 Shape1(i).Width = 200 Shape1(i).Height = 200 Shape1(i).FillColor = &HC0E0FF ElseIf i = 6 Then Shape1(i).Shape = 3 Shape1(i).Top = 3000 Shape1(i).Left = 3000 Shape1(i).Width = 1000 Shape1(i).Height = 1000 Shape1(i).FillColor = &HFFFFC0 End If Nivel_Text = Nivel i = i + 1 Wend Nivel = 5 GoTo Fin ElseIf Nivel = 5 Then Timer2.Enabled = True While i < 10 If i = 0 Then Shape1(i).Shape = 1 Shape1(i).Top = 10 Shape1(i).Left = 4000 Shape1(i).Width = 800 Shape1(i).Height = 800 Shape1(i).FillColor = &HFF80FF ElseIf i = 1 Then Shape1(i).Shape = 1 Shape1(i).Top = 250 Shape1(i).Left = 5000 Shape1(i).Width = 800 Shape1(i).Height = 800 Shape1(i).FillColor = &HFFFF& ElseIf i = 2 Then Shape1(i).Shape = 2 Shape1(i).Top = 3100 Shape1(i).Left = 2150 Shape1(i).Width = 600 Shape1(i).Height = 600 Shape1(i).FillColor = vbWhite ElseIf i = 3 Then Shape1(i).Shape = 1 Shape1(i).Top = 680
IEL2-II-04-34 IEL2-II-04-12
75
Shape1(i).Left = 1500 Shape1(i).Width = 1000 Shape1(i).Height = 1000 Shape1(i).FillColor = &HC0E0FF ElseIf i = 4 Then Shape1(i).Shape = 1 Shape1(i).Top = 3000 Shape1(i).Left = 3000 Shape1(i).Width = 200 Shape1(i).Height = 200 Shape1(i).FillColor = vbRed ElseIf i = 5 Then Shape1(i).Shape = 2 Shape1(i).Top = 1000 Shape1(i).Left = 400 Shape1(i).Width = 200 Shape1(i).Height = 200 Shape1(i).FillColor = &HC0C0C0 ElseIf i = 6 Then Shape1(i).Shape = 3 Shape1(i).Top = 200 Shape1(i).Left = 3000 Shape1(i).Width = 1000 Shape1(i).Height = 1000 Shape1(i).FillColor = &HFFFFC0 ElseIf i = 7 Then Shape1(i).Shape = 1 Shape1(i).Top = 500 Shape1(i).Left = 500 Shape1(i).Width = 100 Shape1(i).Height = 100 Shape1(i).FillColor = &HFF0000 End If Nivel_Text = Nivel i = i + 1 Wend Nivel = 6 GoTo Fin ElseIf Nivel = 6 Then Timer2.Enabled = True While i < 10 If i = 0 Then Shape1(i).Shape = 2 Shape1(i).Top = 350 Shape1(i).Left = 2100 Shape1(i).Width = 600 Shape1(i).Height = 600 Shape1(i).FillColor = &HE0E0E0 ElseIf i = 1 Then Shape1(i).Shape = 1 Shape1(i).Top = 999 Shape1(i).Left = 6000 Shape1(i).Width = 800 Shape1(i).Height = 800 Shape1(i).FillColor = &HC0C0FF
ElseIf i = 2 Then Shape1(i).Shape = 2 Shape1(i).Top = 2000 Shape1(i).Left = 150 Shape1(i).Width = 1000 Shape1(i).Height = 1000 Shape1(i).FillColor = &HFFC0FF ElseIf i = 3 Then Shape1(i).Shape = 1 Shape1(i).Top = 680 Shape1(i).Left = 3550 Shape1(i).Width = 2000 Shape1(i).Height = 2000 Shape1(i).FillColor = &HFFC0FF ElseIf i = 4 Then Shape1(i).Shape = 1 Shape1(i).Top = 3100 Shape1(i).Left = 3100 Shape1(i).Width = 700 Shape1(i).Height = 700 Shape1(i).FillColor = vbRed ElseIf i = 5 Then Shape1(i).Shape = 2 Shape1(i).Top = 1000 Shape1(i).Left = 400 Shape1(i).Width = 200 Shape1(i).Height = 200 Shape1(i).FillColor = &HC0C0C0 ElseIf i = 6 Then Shape1(i).Shape = 3 Shape1(i).Top = 200 Shape1(i).Left = 3000 Shape1(i).Width = 1000 Shape1(i).Height = 1000 Shape1(i).FillColor = &HFFFFC0 ElseIf i = 7 Then Shape1(i).Shape = 1 Shape1(i).Top = 500 Shape1(i).Left = 500 Shape1(i).Width = 500 Shape1(i).Height = 500 Shape1(i).FillColor = &HFF0000 ElseIf i = 8 Then Shape1(i).Shape = 2 Shape1(i).Top = 1000 Shape1(i).Left = 500 Shape1(i).Width = 900 Shape1(i).Height = 400 Shape1(i).FillColor = &HC0C0& ElseIf i = 9 Then Shape1(i).Shape = 3 Shape1(i).Top = 200 Shape1(i).Left = 200 Shape1(i).Width = 150 Shape1(i).Height = 150
Shape1(i).FillColor = &H80FF80 End If Nivel_Text = Nivel i = i + 1 Wend Nivel = 7 GoTo Fin ElseIf Nivel = 7 Then Timer2.Enabled = True While i < 10 If i = 0 Then Shape1(i).Shape = 1 Shape1(i).Top = 3000 Shape1(i).Left = 2500 Shape1(i).Width = 800 Shape1(i).Height = 800 Shape1(i).FillColor = &HFFFF& ElseIf i = 1 Then Shape1(i).Shape = 2 Shape1(i).Top = 3000 Shape1(i).Left = 2500 Shape1(i).Width = 800 Shape1(i).Height = 800 Shape1(i).FillColor = &HC0C0FF ElseIf i = 2 Then Shape1(i).Shape = 1 Shape1(i).Top = 10 Shape1(i).Left = 6500 Shape1(i).Width = 800 Shape1(i).Height = 800 Shape1(i).FillColor = &HFF00& ElseIf i = 3 Then Shape1(i).Shape = 1 Shape1(i).Top = 3500 Shape1(i).Left = 6400 Shape1(i).Width = 1000 Shape1(i).Height = 1000 Shape1(i).FillColor = &H80FF80 ElseIf i = 4 Then Shape1(i).Shape = 2 Shape1(i).Top = 3500 Shape1(i).Left = 6400 Shape1(i).Width = 1000 Shape1(i).Height = 1000 Shape1(i).FillColor = vbRed ElseIf i = 5 Then Shape1(i).Shape = 0 Shape1(i).Top = 2000 Shape1(i).Left = 5000 Shape1(i).Width = 800 Shape1(i).Height = 1000 Shape1(i).FillColor = &HC0C0C0 ElseIf i = 6 Then Shape1(i).Shape = 0 Shape1(i).Top = 200
IEL2-II-04-34 IEL2-II-04-12
76
Shape1(i).Left = 3000 Shape1(i).Width = 1000 Shape1(i).Height = 1500 Shape1(i).FillColor = &HFFFFC0 ElseIf i = 7 Then Shape1(i).Shape = 1 Shape1(i).Top = 3000 Shape1(i).Left = 500 Shape1(i).Width = 500 Shape1(i).Height = 500 Shape1(i).FillColor = &HFF0000 ElseIf i = 8 Then
Shape1(i).Shape = 2 Shape1(i).Top = 2000 Shape1(i).Left = 1000 Shape1(i).Width = 900 Shape1(i).Height = 400 Shape1(i).FillColor = &HFFC0FF ElseIf i = 9 Then Shape1(i).Shape = 3 Shape1(i).Top = 200 Shape1(i).Left = 200 Shape1(i).Width = 150 Shape1(i).Height = 150 Shape1(i).FillColor = &H80FF80
End If Nivel_Text = Nivel i = i + 1 Wend Nivel = 0 GoTo Fin End If Fin: End Sub Private Sub Timer2_Timer() Tiempo2 = Tiempo2 + Timer2.Interval / 1000 Tiempo_Nivel = Tiempo2 & " Seg" End Sub
• Subprueba 2 Nivel 25 Option Explicit Dim archivo As String Dim Mens_feli As Integer Dim Mens_error As Integer Dim Var As Integer Public Error As Integer Private Sub Form_Load() Var = 0 Error = 0 Label2 = Error boton1.Enabled = False boton2.Enabled = False boton3.Enabled = False boton4.Enabled = False boton5.Enabled = False Timer1.Enabled = False archivo = App.Path End Sub Private Sub boton1_Click() boton1.Picture = LoadPicture(archivo & "/" & "gr1_opr.bmp") Mens_error = MsgBox("ERROR, INTENTELO DE NUEVO", vbCritical, "Error") Error = Error + 1 Label2 = Error End Sub Private Sub boton2_Click() boton2.Picture = LoadPicture(archivo & "/" & "gr2_opr.bmp") Mens_error = MsgBox("ERROR, INTENTELO DE NUEVO", vbCritical, "Error") Error = Error + 1 Label2 = Error End Sub Private Sub boton3_Click() boton3.Picture = LoadPicture(archivo & "/" & "gr3_opr.bmp") Mens_error = MsgBox("ERROR, INTENTELO DE NUEVO", vbCritical, "Error")
Error = Error + 1 Label2 = Error End Sub Private Sub boton4_Click() boton4.Picture = LoadPicture(archivo & "/" & "gr4_opr.bmp") Mens_feli = MsgBox("FELICITACIONES, HAS TERMINADO EN " & Var & " SEGUNDOS", vbExclamation, "¡FELICITACIONES!") Label2 = Error Timer1.Enabled = False boton1.Enabled = False boton2.Enabled = False boton3.Enabled = False boton4.Enabled = False boton5.Enabled = False boton1.Picture = LoadPicture(archivo & "/" & "gr1.bmp") boton2.Picture = LoadPicture(archivo & "/" & "gr2.bmp") boton3.Picture = LoadPicture(archivo & "/" & "gr3.bmp") boton4.Picture = LoadPicture(archivo & "/" & "gr4.bmp") boton5.Picture = LoadPicture(archivo & "/" & "gr5.bmp") Form_Load End Sub Private Sub boton5_Click() boton5.Picture = LoadPicture(archivo & "/" & "gr5_opr.bmp") Mens_error = MsgBox("ERROR, INTENTELO DE NUEVO", vbCritical, "Error") Error = Error + 1 Label2 = Error End Sub Private Sub Inicio_Click() boton1.Enabled = True boton2.Enabled = True boton3.Enabled = True boton4.Enabled = True boton5.Enabled = True Timer1.Interval = 1 Timer1.Enabled = True Timer1.Interval = 1000 End Sub
IEL2-II-04-34 IEL2-II-04-12
77
Private Sub Salir_Click() End End Sub
Private Sub Timer1_Timer() Var = Var + Timer1.Interval / 1000 Label1 = Var & " Seg" End Sub
• Subprueba 4 nivel 18
Option Explicit Dim archivo As String Dim Mens_feli As Integer Dim Mens_error As Integer Dim Var As Integer Public i As Integer Public j As Integer Public Error As Integer Public Aciertos As Integer Private Sub boton_Click(Index As Integer) If Index = 0 Then i = 1 ElseIf Index = 1 Then i = 2 ElseIf Index = 2 Then i = 3 ElseIf Index = 3 Then i = 4 ElseIf Index = 4 Then i = 5 ElseIf Index = 5 Then i = 6 ElseIf Index = 6 Then i = 7 ElseIf Index = 7 Then i = 8 ElseIf Index = 8 Then i = 9 ElseIf Index = 9 Then i = 10 End If Rutina i End Sub
Private Sub Form_Load() Var = 0 Error = 0 Aciertos = 0 Label2 = Error Label5 = Aciertos j = 0 While j < 10 boton(j).Enabled = False j = j + 1 Wend archivo = App.Path End Sub Private Sub Inicio_Click() j = 0 While j < 10 boton(j).Enabled = True j = j + 1 Wend Timer1.Interval = 1 Timer1.Enabled = True Timer1.Interval = 1000 End Sub Private Sub Salir_Click() End End Sub Private Sub Timer1_Timer() Var = Var + Timer1.Interval / 1000 Label1 = Var & " Seg" End Sub Private Sub Rutina(sel As Integer) If sel = 1 Or sel = 3 Or sel = 4 Or sel = 6 Then Mens_feli = MsgBox("FELICITACIONES, ACERTASTE", vbExclamation, "¡FELICITACIONES!") Label2 = Error Aciertos = Aciertos + 1 Label5 = Aciertos If sel = 1 Then boton(0).Picture = LoadPicture(archivo & "/" & "gr1_opr.bmp") End If
IEL2-II-04-34 IEL2-II-04-12
78
If sel = 3 Then boton(2).Picture = LoadPicture(archivo & "/" & "gr3_opr.bmp") End If If sel = 4 Then boton(3).Picture = LoadPicture(archivo & "/" & "gr4_opr.bmp") End If If sel = 6 Then boton(5).Picture = LoadPicture(archivo & "/" & "gr6_opr.bmp") End If If Aciertos = 4 Then j = 0 Mens_feli = MsgBox("FELICITACIONES, HAS TERMINADO EN " & Var & " SEGUNDOS", vbExclamation, "¡FELICITACIONES!") Timer1.Enabled = False While j < 10 boton(j).Enabled = False j = j + 1 Wend boton(0).Picture = LoadPicture(archivo & "/" & "gr1.bmp") boton(1).Picture = LoadPicture(archivo & "/" & "gr2.bmp") boton(2).Picture = LoadPicture(archivo & "/" & "gr3.bmp") boton(3).Picture = LoadPicture(archivo & "/" & "gr4.bmp") boton(4).Picture = LoadPicture(archivo & "/" & "gr5.bmp") boton(5).Picture = LoadPicture(archivo & "/" & "gr6.bmp") boton(6).Picture = LoadPicture(archivo & "/" & "gr7.bmp") boton(7).Picture = LoadPicture(archivo & "/" & "gr8.bmp") boton(8).Picture = LoadPicture(archivo & "/" & "gr9.bmp") boton(9).Picture = LoadPicture(archivo & "/" & "gr10.bmp")
Form_Load End If Else Error = Error + 1 Label2 = Error Label5 = Aciertos Mens_error = MsgBox("ERROR, INTENTELO DE NUEVO", vbCritical, "Error") If sel = 2 Then boton(1).Picture = LoadPicture(archivo & "/" & "gr2_opr.bmp") End If If sel = 5 Then boton(4).Picture = LoadPicture(archivo & "/" & "gr5_opr.bmp") End If If sel = 7 Then boton(6).Picture = LoadPicture(archivo & "/" & "gr7_opr.bmp") End If If sel = 8 Then boton(7).Picture = LoadPicture(archivo & "/" & "gr8_opr.bmp") End If If sel = 9 Then boton(8).Picture = LoadPicture(archivo & "/" & "gr9_opr.bmp") End If If sel = 10 Then boton(9).Picture = LoadPicture(archivo & "/" & "gr10_opr.bmp") End If End If End Sub
• Subprueba 6 nivel 10 Option Explicit Dim archivo As String Dim Mens_feli As Integer Dim Mens_error As Integer Dim Var As Integer Public i As Integer Public Error As Integer
Public Aciertos As Integer Private Sub Form_Load() Var = 0 Error = 0 Label2 = Error
IEL2-II-04-34 IEL2-II-04-12
79
boton1.Enabled = False boton2.Enabled = False boton3.Enabled = False boton4.Enabled = False boton5.Enabled = False Timer1.Enabled = False archivo = App.Path End Sub Private Sub boton1_Click() i = 1 Rutina i End Sub Private Sub boton2_Click() i = 2 Rutina i End Sub Private Sub boton3_Click() i = 3 Rutina i End Sub Private Sub boton4_Click() i = 4 Rutina i End Sub Private Sub boton5_Click() i = 5 Rutina i End Sub Private Sub Inicio_Click() boton1.Enabled = True boton2.Enabled = True boton3.Enabled = True boton4.Enabled = True boton5.Enabled = True Timer1.Interval = 1 Timer1.Enabled = True Timer1.Interval = 1000 End Sub Private Sub Salir_Click() End End Sub Private Sub Timer1_Timer() Var = Var + Timer1.Interval / 1000 Label1 = Var & " Seg" End Sub
Private Sub Rutina(sel As Integer) If sel = 2 Then Label2 = Error boton2.Picture = LoadPicture(archivo & "/" & "gr2_opr.bmp") Mens_feli = MsgBox("FELICITACIONES, HAS TERMINADO EN " & Var & " SEGUNDOS", vbExclamation, "¡FELICITACIONES!") Timer1.Enabled = False boton1.Enabled = False boton2.Enabled = False boton3.Enabled = False boton1.Picture = LoadPicture(archivo & "/" & "gr1.bmp") boton2.Picture = LoadPicture(archivo & "/" & "gr2.bmp") boton3.Picture = LoadPicture(archivo & "/" & "gr3.bmp") boton4.Picture = LoadPicture(archivo & "/" & "gr4.bmp") boton5.Picture = LoadPicture(archivo & "/" & "gr5.bmp") Form_Load Else Error = Error + 1 Label2 = Error Mens_error = MsgBox("ERROR, INTENTELO DE NUEVO", vbCritical, "Error") If sel = 1 Then boton1.Picture = LoadPicture(archivo & "/" & "gr1_opr.bmp") End If If sel = 3 Then boton3.Picture = LoadPicture(archivo & "/" & "gr3_opr.bmp") End If If sel = 4 Then boton4.Picture = LoadPicture(archivo & "/" & "gr4_opr.bmp") End If If sel = 5 Then boton5.Picture = LoadPicture(archivo & "/" & "gr5_opr.bmp") End If End If End Sub
IEL2-II-04-34 IEL2-II-04-12
80
• Subprueba 8 nivel 7 Option Explicit Dim archivo As String Dim Mens_feli As Integer Dim Mens_error As Integer Dim Var As Integer Public i As Integer Public Error As Integer Public Aciertos As Integer Private Sub Form_Load() Var = 0 Error = 0 Label2 = Error boton1.Enabled = False boton2.Enabled = False boton3.Enabled = False boton4.Enabled = False Timer1.Enabled = False archivo = App.Path End Sub Private Sub boton1_Click() i = 1 Rutina i End Sub Private Sub boton2_Click() i = 2 Rutina i End Sub Private Sub boton3_Click() i = 3 Rutina i End Sub Private Sub boton4_Click() i = 4 Rutina i End Sub Private Sub boton5_Click() i = 5 Rutina i End Sub Private Sub Inicio_Click() boton1.Enabled = True boton2.Enabled = True boton3.Enabled = True boton4.Enabled = True Timer1.Interval = 1 Timer1.Enabled = True Timer1.Interval = 1000
End Sub Private Sub Salir_Click() End End Sub Private Sub Timer1_Timer() Var = Var + Timer1.Interval / 1000 Label1 = Var & " Seg" End Sub Private Sub Rutina(sel As Integer) If sel = 4 Then Label2 = Error boton4.Picture = LoadPicture(archivo & "/" & "gr4_opr.bmp") Mens_feli = MsgBox("FELICITACIONES, HAS TERMINADO EN " & Var & " SEGUNDOS", vbExclamation, "¡FELICITACIONES!") Timer1.Enabled = False boton1.Enabled = False boton2.Enabled = False boton3.Enabled = False boton1.Picture = LoadPicture(archivo & "/" & "gr1.bmp") boton2.Picture = LoadPicture(archivo & "/" & "gr2.bmp") boton3.Picture = LoadPicture(archivo & "/" & "gr3.bmp") boton4.Picture = LoadPicture(archivo & "/" & "gr4.bmp") Form_Load Else Error = Error + 1 Label2 = Error Mens_error = MsgBox("ERROR, INTENTELO DE NUEVO", vbCritical, "Error") If sel = 1 Then boton1.Picture = LoadPicture(archivo & "/" & "gr1_opr.bmp") End If If sel = 2 Then boton2.Picture = LoadPicture(archivo & "/" & "gr2_opr.bmp") End If If sel = 3 Then boton3.Picture = LoadPicture(archivo & "/" & "gr3_opr.bmp")
IEL2-II-04-34 IEL2-II-04-12
81
End If If sel = 4 Then boton4.Picture = LoadPicture(archivo & "/" & "gr4_opr.bmp")
End If End If End Sub
7.3 PROGRAMAS REALIZADOS EN LENGUAJE C • Función Videoinit
void VideoInit(PWORD pV1, PWORD pV2) { HRTFTSETUP = 0x0000; HRTFTCONT = 0x0000; // Set up LCD I/O Pins LCDMUX = 0x1f7dbd5d; // Setup LCD Controller RCPCCTRL = 0x00000263;
HCLKPRE = 0x00000003; //50 MHz para reloj PERCLKCTRL2 &= 0xfffffffe; PERCLKSEL2 &= 0xfffffffe; LCDCLKPRE = 0x00000000; LCDTIMING0 = 0x0505039c; LCDTIMING1 = 0x000001df; LCDTIMING2 = 0x00EF0001; LCDCONTROL = 0x00000801; // STN, 1 bit/pix, GO !! }
• Función InitSDRAM
#define SDRAM_INIT_NOP 0x03 #define SDRAM_INIT_MODE 0x02 #define SDRAM_INIT_PALL 0x01 #define SDRAM_INIT_NORMAL 0x0c #define SDRAM_STATUS 0x20 static void Memtimer (WORD wDuration); void InitSDRAM(void) { volatile WORD tmp; MEMMUX |= 0x00ff; AHBCLKCTRL &= 0xfffffffd; Memtimer (200); SDRCCONFIG1 = SDRAM_INIT_NOP; SDRCCONFIG1 = SDRAM_INIT_NOP; Memtimer (200); SDRCCONFIG1 = SDRAM_INIT_PALL; Memtimer (250); SDRCREFTIMER = 16;
Memtimer (250); SDRCREFTIMER = 800; Memtimer (250); SDRCCONFIG1 = SDRAM_INIT_MODE; while (SDRCCONFIG1 & SDRAM_STATUS); SDRCCONFIG0 = 0x01a40088; while (SDRCCONFIG1 & SDRAM_STATUS); SDRCCONFIG1 = SDRAM_INIT_NORMAL; while (SDRCCONFIG1 & SDRAM_STATUS); Memtimer (100); } static void Memtimer (WORD wDuration) { volatile WORD wTemp, wTime; for (wTime=0; wTime < wDuration; wTime++) { for (wTemp=0 ; wTemp < 500; wTemp++); }
IEL2-II-04-34 IEL2-II-04-12
82
8. REFERENCIAS Acosta, Abel - Paiz, Marta - Jiménez, Mariel-Karatanasopuloz, Ricardo -
Haydar, Yamila - Levy, Gustavo. Accidente cerebrovascular en terapia intensiva
Motor behaviour and cognitive tools, Lafayette Instruments Company, Lafayette, IN, 2001.
www.revely.com, Revely Microsistems LH79520 System-On-Chip User´s Guide, SHARP Microelectronics of
the Americas, Carnas, WA, 2002-2004. Customer’s Acceptance Specifications, Kaohsiung Hitachi Electronics Co.
LTD, Kaohsiung, Taiwan, 2000. Synchronous DRAM, Micron Technology Inc, 2002. Cmos flash memory, Toshiba America Inc, New York, NY, 2003. Touch Screen Controller, Texas Instruments Incorporated, Dallas, TX,
2003.