208006 Sistemas Embebidos I-2010

November 21, 2016 | Author: Gerardo Avendaño Plata | Category: N/A
Share Embed Donate


Short Description

Download 208006 Sistemas Embebidos I-2010...

Description

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA PROGRAMA DE INGENIERIA ELECTRONICA

208006 – SISTEMAS EMBEBIDOS OSCAR IVAN VALDERRAMA ARIAS (Director Nacional)

JUAN CARLOS VESGA FERREIRA Acreditador

SOGAMOSO Diciembre de 2009

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

ASPECTOS DE PROPIEDAD INTELECTUAL Y VERSIONAMIENTO

El presente módulo fue diseñado en el año 2008 por el Ing. Armando Portela Duarte, docente de la UNAD, y ubicado en el CEAD de Barranquilla, el Ing. Portela es Ingeniero Electrónico. El presente módulo ha tenido una actualización, echa en el año 2009 por el Ing. OSCAR IVAN VALDERRAMA ARIAS, quien ha sido tutor de la UNAD en el CEAD SOGAMOSO, desde año 2005 y que se desempeña actualmente como director del cuso a nivel nacional. Este mismo año el Ing. JUAN CARLOS VESGA FERREIRA, tutor del CEAD Bucaramanga, Coordinador Nacional Tecnología e Ingeniería en Telecomunicaciones, apoyó el proceso de revisión de estilo del módulo y dio aportes disciplinares, didácticos y pedagógicos en el proceso de acreditación de material didáctico desarrollado en el mes de ENERO de 2010.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

INTRODUCCIÓN

El presente curso sobre sistemas embebidos se trata de un curso metodológico al cual le han sido asignados 3 créditos que de acuerdo al sistema de créditos académicos, consistente en 144 horas de trabajo académico: 96 horas promedio de estudio independiente y 48 horas promedio de acompañamiento tutorial enmarcadas en un campo de formación disciplinario en áreas de la ingeniería básica. Con el curso se pretende que los estudiantes se adentren en el mundo de los sistemas embebidos analizando sus características y capacidades, concentrando el estudio en las herramientas de desarrollo tanto software como hardware inherentes a este tipo de sistemas de manera que se familiaricen con los procesos de diseño, programación y desarrollo de sistemas autónomos. Los sistemas embebidos conforman un área de la electrónica en continuo crecimiento y desarrollo, debido a la creciente demanda de sistemas autónomos y aplicaciones “inteligentes”. Cada día son fabricados millones de circuitos integrados, microprocesadores, microcontroladores etc. que a su vez serán empleados en la fabricación de productos y equipos en una variedad de sectores como por ejemplo aplicaciones militares, electrodomésticos, juguetes, en la industria, el transporte, etc. La importancia de este curso radica en que se brindan las herramientas al estudiante para que maneje de manera suficiente el diseño y desarrollo de aplicaciones empleando estos dispositivos teniendo en cuenta que día a día se requiere cada vez más de nuevas aplicaciones autónomas específicas o la mejora continua de las existentes. El curso de divide en tres unidades didácticas; 1ª Unidad: Conceptos Generales sobre Sistemas Embebidos, en esta se realizará una introducción general sobre los sistemas embebidos y sus principales características enfocando el estudio a los microcontroladores 68HC08 de FreeScale (Motorola); 2ª Unidad: Desarrollo de Software para Sistemas Embebidos, en esta unidad se sentarán las bases para la programación de sistemas embebidos empleando tanto lenguajes de programación de bajo (assembler) como de alto nivel enfocando el estudio al lenguaje de programación C; 3ª Unidad: Sistemas Operativos Orientados a Sistemas Embebidos, en esta unidad final se analizan los conceptos referentes a sistemas operativos y su aplicación en sistemas embebidos enfocándose en el sistema operativo embebed Linux. Para el desarrollo del curso se procederá a introducir, a través de la plataforma, los conceptos y problemáticas que se plantean al trabajar con sistemas embebidos, el estudiante se encargará de analizar y ampliar estos contenidos con una visión crítica durante su tiempo de estudio independiente de manera que

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

cualquier duda que resulte de este ejercicio pueda ser disipada por el tutor a través de foros y cesiones de Chat previamente definidas. Debido a la naturaleza de los contenidos se realizarán una serie de actividades y talleres tanto individuales como en grupo, en los que se plantean problemáticas que sean susceptibles de ser resueltas con el empleo de los sistemas embebidos en conjunción con la aplicación práctica de los contenidos vistos, obteniendo así una aplicación funcional. La evaluación de los contenidos dependerá de la activa participación de los estudiantes en las diferentes actividades planteadas sumada a las calificaciones automáticas de revisión de conceptos realizadas en línea. Las temáticas planteadas en el presente curso a manera introductoria son de gran relevancia puesto que los desarrollos que incluyen sistemas embebidos se encuentran a la orden del día en cualquier tipo de aplicación por lo tanto conforman un área de la electrónica muy interesante para enfocar estudios más profundos.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

INDICE DE CONTENIDO Unidad

Capítulos

Lecciones 1. Definición e Historia

1. Introducción a los sistemas embebidos

2. Importancia y áreas de aplicación 3. Características 4. Preconceptos 5. Fases de diseño 6. Diagrama de bloques de un sistema embebido.

1. Conceptos generales sobre sistemas embebidos

7. Entradas: Sensores, muestreadores y 2. Componentes principales conversores A/D. de un sistema embebido 8. Comunicación 9. Unidades de Procesamiento y Memoria 10. Salidas y conversores D/A 11. Componentes de una CPU 12. Arquitecturas más comunes 3. Unidades centrales de procesamiento

13. Comparación de los dispositivos más comunes 14. Microcontroladores HC08 15. Microprocesadores ColdFire y tarjetas de desarrollo 1. Diagramas de flujo 2. Programación en lenguaje Ensamblador (Assembler)

4. Introducción a la programación de sistemas 3. Notaciones y sintaxis embebidos 4. Tipos de instrucciones

5. Escribiendo un pequeño programa

2. Desarrollo de software para sistemas embebidos 5. Prácticas básicas y aplicaciones

6. Programación y puesta en marcha 7. Modo de ejecución

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

8. Desarrollo de tarjeta de programación universal 9. Software 10. Software Code Warrior 11.Generalidades de C 12. Fases de procesamiento de un programa en C 6. Introducción a la programación en C y microcontrolador HC08

13. Ejemplos de manejo de módulos del HC08 14. Programación en Assembler del HC08 15. Programación en C del HC08 1. Consideraciones sobre el hardware 2. Conceptos generales sobre sistemas operativos

7. Visión general

3. Componentes del sistema operativo 4. Arranque de un programa 5. Memoria virtual 6. Visión general 7. Tipos de sistemas que utilizan Linux embebido

3. Sistemas operativos orientados a sistemas embebidos

8. Sistema operativo embedded Linux

8. Arquitectura genérica de un sistema con Linux embebido 9. Características del kernel de Linux 10. Arranque del sistema 11. Metodología de diseño e implementación 12. uCLinux

9. Implementación de embedded Linux

13. Pasos básicos para comenzar con uCLinux 14. Términos relacionados 15. Primeros pasos con uCLinux

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

LISTADO DE TABLAS

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

LISTADO DE GRÁFICOS Y FIGURAS

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

UNIDAD 1 Nombre de la Unidad Introducción Justificación

Intencionalidades Formativas

Denominación de capítulos

Conceptos generales sobre sistemas embebidos Estudio y discusión de algunos temas y conceptos relacionados con sistemas embebidos. Al estudiante del curso de sistemas embebidos es necesario introducirlo en los conceptos básicos de los sistemas embebidos.  Reconocer los conceptos básicos de los sistemas embebidos  Reconocer los componentes básicos  Reconocer los elementos básicos de la unidades centrales de procesamiento 1. Introducción a los sistemas embebidos 2. Componentes principales de un sistema embebido 3. Unidades centrales de procesamiento

CAPITULO 1: INTRODUCCIÓN A LOS SISTEMAS EMBEBIDOS Lección 1: Definición e Historia. Los sistemas embebidos son sistemas computacionales aplicados, posiblemente compuestos también por otro tipo de elementos mecánicos i/o electromecánicos, aunque están constituidos por la unión hardware – software, se diferencian de otros sistemas como por ejemplo los computadores personales por el hecho de estar diseñados para cumplir funciones específicas. Es decir, un sistema embebido puede pensarse como: “Un sistema cuya función principal no es computacional, pero independientemente de esto es controlado por un computador embebido en su interior”1 se entiende por embebido o empotrado como “oculto” por tanto estos dispositivos de cómputo no son visibles ni programables por el usuario final. Otro autor define el término con simpleza: “un sistema embebido es un computador oculto en el interior de otro producto” 2. A pesar de que se pueden tomar como ciertos los enunciados del párrafo anterior, es complicado sentar una definición definitiva para los sistemas embebidos, puesto que gracias al constante desarrollo tecnológico que ha influido en el aumento de las prestaciones de los diferentes circuitos integrados y a su vez en el incremento del nivel de integración y complejidad cada vez en espacios más reducidos, sumando esto a la disminución de los costos de implementación por economías de escala, se hace posible en la actualidad la existencia de pequeños computadores (PDA´s, celulares, etc) que pueden realizar una gran cantidad de aplicaciones y que por ser dispositivos integrados de tamaño reducido podrían 1 2

Wilmshurst Tim. Designing Embedded Systems with PIC Microcontrollers. Elsevier, 2007. p 3. Sutter Ed. Embedded Systems Firmware Demystified. CMP Books. 2002. p 2.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

también ser clasificados como sistemas embebidos. Aunque existen discrepancias entre diferentes autores en incluir o no este tipo de dispositivos en la clasificación de sistemas embebidos. Se observa que los microcontroladores de 8 bits dominan la mayoría de las aplicaciones. Un microcontrolador es el núcleo de un sistema electrónico versátil, de bajo coste y reducido tamaño que es capaz de detectar las señales de entrada y generar las salidas de un determinado equipo, sistema o instrumento. Los microcontroladores por su reducido tamaño y costo además del hecho de que son los dispositivos semiconductores más abundantes de todos en la actualidad, permiten la fácil implantación de sistemas con “inteligencia” distribuida a lo largo de sistemas más complejos. Durante los años 30 y 40‟s los primeros computadores fueron dedicados a tareas muy definidas, además eran máquinas extremadamente grandes, costosas y complicadas, tanto en implementación como en funcionamiento en comparación de las prestaciones, tamaño y costo de los computadores actuales. Con el transcurrir de los tiempos conceptos como Computadoras, Controladores Lógicos Programables (PLC), etc. fueron evolucionando de los arreglos de dispositivos electromecánicos secuenciados tradicionales, pasando por máquinas basadas en tubos de vacío, llegando a sistemas más modernos y funcionales basados en tecnologías de cómputo desarrolladas a partir de los avances en dispositivos de estado sólido. Figura 1. Vista superficial de un circuito integrado.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

El desarrollo de los sistemas embebidos tiene sus raíces en la invención del circuito integrado, el desarrollo constante en el campo de la electrónica digital ha dado lugar a dispositivos cada vez más complejos. Entre ellos los microprocesadores y los microcontroladores, núcleos principales de cualquier sistema embebido. La historia de los microcontroladores inicia en el año 1969, un equipo de ingenieros japoneses de la compañía BUSICOM llegó a Estados Unidos con una idea, ellos deseaban usar para sus proyectos menos circuitos integrados de los que se usaban en las calculadoras. La proposición se hizo a la compañía INTEL. La solución propuesta presumía el desarrollo de circuito integrado cuyo funcionamiento sería determinado por un programa almacenado en el mismo dispositivo. Eso significaba que la configuración sería más simple, pero que requeriría mucho más memoria de lo que requería el proyecto que propusieron los ingenieros japoneses. Después de un tiempo, aunque los ingenieros japoneses probaron soluciones más sencillas, la idea propuesta por INTEL termino por ser implementada, entonces nace primer microprocesador. Para transformar esta idea en un producto ya fabricado, transcurrieron sólo 9 meses para lograr el éxito. INTEL obtuvo los derechos para vender este "bloque integrado" en 1971. Primero, compraron la licencia de la compañía BUSICOM, que no tenía idea del tesoro que poseían. Durante ese año, apareció en el mercado un microprocesador que se llamó 4004, este fue el primer microprocesador de 4 bits con velocidad de 6 000 operaciones por segundo. No mucho tiempo después de eso, la compañía americana CTC pidió a INTEL y a la Texas Instruments que hiciera un microprocesador de 8 bits. Aunque después a CTC no le interesó mas la idea, Intel y Texas Instruments siguieron trabajando en el microprocesador logrando primero de abril de 1972 desarrollar el microprocesador de 8 bits apareciendo en el mercado con el nombre de 8008. Podía direccionar 16 Kb de memoria, con un set de 45 instrucciones y una velocidad de 300.000 operaciones por segundo. Este microprocesador es el predecesor de todos los microprocesadores de hoy. Intel mantuvo sus desarrollos y saco al mercado el procesador de 8 bits bajo el nombre 8080, el cual podía direccionar 64Kb de memoria, con 75 instrucciones, a un precio de 360 dlls por unidad. En otra compañía americana, Motorola, comprendieron rápidamente lo que estaba sucediendo, así que ellos sacaron al mercado su microprocesador de 8 bits, el 6800 y junto con el procesador, Motorola fue la primera compañía en hacer otros periféricos como el 6820 y el 6850. En ese momento muchas compañías reconocieron importancia de los microprocesadores y empezaron sus propios desarrollos.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

Un evento muy importante tuvo lugar en la historia de microprocesadores en una exhibición de WESCON en 1795 en Estados Unidos. La Tecnología MOS anunció que estaba comercializando los microprocesadores 6501 y 6502 a 25 dlls. cada uno, y que los compradores podrían adquirirlos inmediatamente. Esto era tan extraordinario, que algunas personas creyeron que era una estafa, considerando que los competidores estaban vendiendo el 8080 y el 6800 a 179 dlls. cada uno. Intel y Motorola bajaron sus precios en el primer día de la exhibición como una respuesta a su competidor, 69.95 por microprocesador. Motorola reclama a la Tecnología de MOS el haberles copiado su 6800. La Tecnología MOS suspende la fabricación del 6501, pero siguen produciendo el 6502. Los 6502 eran microprocesadores de 8 bits, 56 instrucciones y la capacidad de direccionar 64Kb de memoria directamente. Para reducir el costo, el 6502 se vuelve muy popular, así que se instala en las computadoras tales como: KIM-1, Apple I, Apple II, Atari, Comodore, Acorn, Oric, Galeb, Orao, Ultra, y muchas otras. Y muy pronto aparecieron varios fabricantes del 6502 (Rockwell, Sznertek, GTE, NCR, Ricoh, y Comodore quienes toman la Tecnología MOS) el cual estaba en su momento de apogeo y se vendía a una velocidad de 15 millones de procesadores por año. Otros, sin embargo, no se rindieron. Federico Faggin deja Intel, y empieza su propio Zilog Inc. En 1976, Zilog anuncia el Z80. Durante la fabricación de este microprocesador, Faggin toma una decisión giratoria. Sabiendo que ya se han desarrollado muchos programas para 8080, Faggin sabia que muchos se quedarían fieles a ese microprocesador. Así que decide diseñar un nuevo procesador que pueda ser compatible con 8080, o que sea capaz de desarrollar todos los programas que ya se habían escrito para el 8080. Además de estas características, se agregaron muchas otras para que el Z80 fuera un microprocesador muy poderoso. Podía direccionar 64 Kb de memoria, tenía 176 instrucciones, un gran número de registros, una opción para refresco de memoria dinámica de la RAM, mayor velocidad de trabajo etc. El Z80 fue un gran éxito y todos cambiaron del 8080 al Z80. Puede decirse que el Z80 fue el microprocesador comercializado más exitoso de ese tiempo. Además de Zilog, también aparecieron otros nuevos fabricantes como Mostek, NEC, SHARP, y SGS. Z80 estaba en el corazón de muchas computadoras como en Spectrum, Partner, TRS703, Z-3 etc. En 1976, INTEL propone una versión mejorada del microprocesador de 8 bits, al cual nombró 8085. Sin embargo, el Z80 era tan bueno que Intel perdió la batalla. Aunque más procesadores aparecían en el mercado (6809, 2650, SC/MP etc.), ya todo estaba decidido. Ya no había grandes mejoras departe de los fabricantes para hacer algo nuevo, así que el 6502 y el Z80 junto con el 6800 permanecieron como los representantes principales de los microprocesadores de 8 bits de ese tiempo. Con los avances hechos en microprocesadores se logró desarrollar computadoras cada vez más poderosas versátiles y económicas lo cual además despertó el

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

interés en desarrollar sistemas computacionales aplicados a unas pocas tareas específicas que agregarían eficiencia y economía a multitud de aplicaciones específicas por ejemplo los controles por inyección electrónica para motores de gasolina que redujeron en gran medida las emisiones de contaminantes. Fue posible entonces construir equipos electrónicos que incluían además unos pocos circuitos accesorios y un software implementado. Los diseños electrónicos comenzaron a ser mucho más pequeños y simplificados, los diseñadores de equipos electrónicos podían realizar mayor cantidad de tareas en menos tiempo y el tamaño de los equipos se redujo considerablemente; sin embargo, después de cierto tiempo apareció una nueva tecnología, llamada microcontrolador que simplifico aun mas el diseño electrónico, al incluir en un mismo encapsulado el núcleo microprocesador, la memoria y las entradas/salidas. Un microcontrolador cuesta mucho menos que un circuito equivalente construido a partir de circuitos integrados “comunes” y además es muy sencillo agregar o modificar las prestaciones de un dispositivo construido con base en un microcontrolador simplemente modificando su programa, sin tener que reconfigurar la electrónica del sistema. El desarrollo de microcontroladores lo inició la Texas Instruments al realizar su modelo TMS1000 (1971) diseñado para propósitos de control y automatización, fue el primer “computador en un chip” puesto que combinaba la existencia de un MCU (Micro-computer Unit) con otro tipo de dispositivos de soporte como memorias RAM, ROM, contadores, temporizadores e interfaces de entrada/salida todos integrados en un solo chip de silicio. Figura 2. Primera familia de microcontrolador TMS 1000.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

En 1976 Intel introdujo la familia de microcontroladores MCS-48 de 8 bits que fueron los primeros microcontroladores que ganaron fama y un uso bastante extendido, fueron integrados en teclados de computadoras personales. Después de 4 años de continua investigación y desarrollo surge el Intel 8051, un microcontrolador de 8 bits con memoria EPROM integrada muy comercial, surgiendo también la familia de Motorola 68HCXX y una serie de fabricantes incursionaron en el mercado con diferentes familias de microcontroladores, entre las que se encentran: Hitachi 630x, Zilog Z8, Fairchild F8 (3850), Toshiba TLCS47, NEC V25, MOS Technology 6500. Por otro lado en los años 70‟s también surgen los denominado circuitos o arreglos de lógica programable que paralelamente son desarrollados como respuesta a la necesidad de implementación de circuitos de propósito especifico en aplicaciones de sistemas embebidos. Dado a los alcances del curso la investigación sobre este tipo de dispositivos se deja a criterio del estudiante. Lección 2: Importancia y áreas de aplicación. Los sistemas embebidos son considerados como el área de aplicación de mayor importancia de la tecnología de la información en el transcurso de los años venideros gracias a esta expectativa que ha venido creciendo alrededor de estos sistemas, surge un término conocido como la era post-PC, éste denota el hecho de que en el futuro los computadores personales estándares se convertirán en los sistemas hardware menos dominantes. Los desarrollos en software y hardware serán empleados cada vez en sistema más pequeños en muchos casos invisibles al usuario en el orden de facilitar al máximo el empleo de los diferentes productos. En la actualidad el número de microprocesadores embebidos en un producto determinado excede la cantidad de los que se pueden encontrar en computador personal, se espera que esta tendencia continúe en incremento a tal punto que se predice a manera de ley de Moore, que “para muchos productos en el área de electrónica de consumo la cantidad de código empleado será doblada cada dos años”. [Vaandrager, 1998]3. Este aumento vertiginoso tanto de aplicaciones como en complejidad para los sistemas embebidos resulta en necesidades de diseño de tecnologías que soporten el desarrollo de los mismos. Por ejemplo aun es necesaria la mejora continua tanto de los lenguajes de programación como de las diferentes herramientas de desarrollo, desarrollar técnicas de diseño e implementación más óptimas enfocadas en soportar las constantes variaciones y mejoras que se requieren en las diferentes aplicaciones.

3

Marwedel Peter. Embedded System Design. Springer. 2006. p 9.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

La intencionalidad es entonces que el estudiante se empape de los conceptos y técnicas actuales que envuelven el desarrollo de sistemas embebidos para que entre a detectar las falencias y posibles mejoras que puedan ser aportadas en la optimización del diseño y desarrollo de estos sistemas. Las aplicaciones de los sistemas embebidos se pueden clasificar básicamente en los siguientes sectores: Audio, Automotor, comunicaciones (alambricas y móviles), computadores y periféricos, control de movimiento, edificios inteligentes, electrónica de consumo, Industrial, imagen y video, Medico, Militar y aero-espacial, procesamiento digital de señales, robótica, seguridad, sistemas de autenticación, sistemas de propósito general y misceláneo. Se deja la tarea para los estudiantes la investigación de ejemplos de aplicaciones específicas para los diferentes sectores. Lección 3: Características. Los sistemas embebidos son en su mayoría sistemas reactivos es decir que su funcionamiento depende de la continua interacción con un determinado ambiente el cual determina las posibles respuestas del sistema, para tal efecto se emplean determinados sensores o transductores que miden variables físicas y son convertidas en señales estándar que puedan ser entendidas por el sistema ante las cuales realizan algún tipo de respuesta empleando distintos tipos de actuadores dependiendo de la aplicación. Entre las diferentes características que pueden poseer tenemos: Confiabilidad: Una de las principales características que deben cumplir los sistemas embebidos es la confiabilidad, la implementación de un sistema confiable debe ser considerada desde un comienzo, no puede dejarse en segundo plano, dependiendo de la aplicación este aspecto puede llegar a ser primordial, por ejemplo en aplicaciones aero-espaciales o médicas es imperante la necesidad de evitar el porcentaje de fallas al máximo. La confiabilidad de un sistema embebido se mide analizando los siguientes aspectos:   

Confiabilidad en el tiempo (Reliability): mide la probabilidad de que el sistema trabaje correctamente en un instante dado que funciona en el instante t = 0. Mantenibilidad, (Maintainability): probabilidad que el sistema vuelva a trabajar correctamente d unidades de tiempo después de una falla. Disponibilidad (Availability): probabilidad que el sistema esté funcionando en el tiempo t, para que esto se dé la confiabilidad y mantenibilidad deben ser altas.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

Seguridad personal: es la propiedad en la que dado el caso de una falla, el sistema no causará daño. Seguridad informática: comunicación efectiva, confidencial y autenticada (encriptación). Eficiencia: Otra característica que deben cumplir los sistemas embebidos es la eficiencia en diferentes aspectos como en el manejo de la energía suministrada, tamaño reducido del dispositivo, tamaño reducido del código que gobierna el sistema, minimización del peso, y sobre todo reducir los costos para su producción masiva. Tiempo Real: El término tiempo real se refiere a la reacción “inmediata” del sistema ante estímulos externos predefinidos ya sea que provengan del objeto de control o mediante interfaces de usuario. Donde se entiende por inmediato a un lapso de tiempo lo suficientemente corto como para que se dé el correcto funcionamiento del sistema, una reacción correcta pero tardía no es aceptable. Existen las llamadas restricciones de tiempo real “duras” (Hard restriction) en las que su incumplimiento puede resultar en catástrofe. Otro tipo de restricción de tiempo se puede considerar como blanda (Soft restriction). Interfaces de usuario: La mayoría de los sistemas embebidos poseen alguna manera de interactuar con el usuario como pantallas gráficas, botones, teclados alfanuméricos, sensores, etc. Lección 4: Preconceptos. Para abordar la temática del presente curso el estudiante de ingeniería electrónica debe manejar previamente una serie de conceptos que ha aprendido durante el transcurso de su carrera, entre los cuales tenemos: -

Nociones Matemáticas y Físicas. Electrónica Análoga. Sistemas Digitales. Informática y Nociones de Programación.

Lección 5: Fases de diseño. Existen diferentes formas de abordar el diseño y desarrollo de sistemas embebidos, es importante seguir ciertas pautas de trabajo y tener en cuenta factores muy diversos para que el diseño pueda terminarse a tiempo y funcione

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

correctamente, por razones prácticas se observará un enfoque general que puede ser aplicado en el desarrollo de cualquier sistema embebido. Para tal efecto se parte analizando la siguiente figura. Figura 3. Diagrama de flujo general para el diseño de sistemas embebidos.

La metodología desplegada en la figura 3 se encuentra dividida en cuatro fases principales que van desde la concepción de la idea hasta el funcionamiento final del dispositivo diseñado y sientan las bases para:   

Diseñar un dispositivo libre de defectos de manufactura, que funciona de manera adecuada y se integra con el sistema. Diseñar el dispositivo de manera eficiente, sin malgastar recursos ni tiempo. Planificar el diseño de manera eficiente, crear un cronograma razonable y asignar los recursos necesarios para las diferentes tareas de manera ordenada.

Toda actividad de diseño comienza con la identificación y especificación de una problemática a resolver tomando en consideración los requerimientos software y

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

hardware, esta especificación es muy importante para definir bien los límites de lo que se quiere implementar. A partir de la especificación se puede definir una arquitectura con los diferentes componentes que implementan cada función del sistema. Para el diseño se debe definir el funcionamiento de cada uno de esos componentes. Una especificación completa debería comprender los siguientes puntos:         

Diagrama en bloques del sistema externo, que muestra como y donde encaja el dispositivo dentro de un sistema completo. Diagrama de bloques interno que muestra los principales bloques funcionales del dispositivo a implementar. Descripción de las entradas/salidas, incluyendo, interfaces lógicas, eléctricas, de adquisición y protocolos de comunicación. Estimaciones de tiempos que se deben cumplir, incluyendo tiempos de "setup" y "hold" para las entradas/salidas y frecuencias de reloj. Estimación de la del dispositivo dependiendo del número de elementos electrónicos necesarios para su implementación. Especificación física del dispositivo. Tamaño, empaquetamiento, conectores, etc. Estimación del consumo de potencia del dispositivo. Precio estimado del dispositivo. Procedimientos definiendo el banco de pruebas para la verificación y validación para el dispositivo.

Después de escribir las especificaciones es importante hacer una revisión con todos los miembros del equipo. De esta revisión podrán surgir aspectos relevantes que no fueron tenidos en cuenta individualmente incorporándolos a las especificaciones. La especificación también incluye la metodología de verificación del dispositivo o banco de pruebas. Estas muchas veces se dejan para el final del proyecto y no se definen ni llevan a cabo de manera adecuada. La especificación es un documento que se presta para ser modificado de acuerdo con los cambios de requerimientos y a medida que se tiene más información sobre el proyecto. Una vez que se escribe la especificación se puede utilizar para seleccionar componentes y tecnologías que se utilizarán para el proyecto. El proceso de diseño es en general un ciclo, e incluye varios pasos intermedios como la verificación del diseño que engloba varios pasos menores, y al revisar pueden surgir detalles que obligan a volver a realizar pasos anteriores. Dependiendo del dispositivo y tecnología utilizada, pero en general se siguen los siguientes pasos: Simulación: es en general un proceso continuo, ya que al simular se pueden encontrar problemas que hacen volver sobre el diseño y hacer cambios. Las simulaciones se hacen sobre pequeñas partes del sistema y sobre el sistema

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

completo. Se debe llevar a cabo una simulación funcional, pero también puede incluir simulaciones de temporizado, consumo de potencia y otros parámetros. Revisión: En este paso se revisan los resultados de la simulación y se analiza el comportamiento del dispositivo. Una vez que se ha quedado satisfecho con el comportamiento del diseño en las simulaciones se lleva a cabo la implementación física final del dispositivo. En este punto se verifica la implementación física para asegurarse que su funcionamiento coincide con las simulaciones hechas anteriormente. En este paso se deben también evaluar los tiempos, consumo de potencia y cualquier otro parámetro de importancia. Si todos los pasos se siguieron correctamente la revisión final debería ser solo una formalidad. Se verifica que el dispositivo está listo para ser entregado o integrado a un sistema dado. La integración y verificación en el contexto del sistema general es muy importante. Si los pasos se siguieron correctamente, cualquier modificación que surja de esta integración será en general pequeña y no requerirá grandes cambios. Cualquier problema o falla que se encuentre debe documentarse y ser analizada así como los diseños en sí tanto del hardware como del software del dispositivo, para poder hacer mejoras y/o correcciones en una próxima versión del dispositivo a partir de esta completa documentación.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

CAPITULO 2: COMPONENTES PRINCIPALES DE UN SISTEMA EMBEBIDO Lección 6: Diagrama de bloques de un sistema embebido. Figura 4. Diagrama de bloques de un sistema embebido, Editado de (Designing Embedded HW)

Los sistemas embebidos más sencillos emplean microcontroladores como elemento de procesamiento con la ventaja de que el procesador incorpora muchas de las características y funcionalidades de un computador en un solo integrado, en la figura 4 se presenta un sistema embebido genérico. La diferencia radica en las capacidades de estos dispositivos puesto que su CPU (Unidad Central de Proceso) es mas reducida, poseen una cantidad menor de memoria tanto RAM como ROM y algunos elementos de Entrada Salida (E/S) que pueden ser observados en la figura como bloques o subsistemas, éstos le agregan las funcionalidades requeridas al procesador para diversidad de aplicaciones. Ver figura 4. A continuación se analizan rápidamente los diferentes componentes de la figura 4, para luego entrar a describir de manera mas profunda cada uno de los bloques. Para comenzar tenemos los dispositivos de E/S (I/O Input-Output en Ingles), los más comunes son los puertos de E/S digital, normalmente llamados de propósito general o GPIO (General Purpose I/O), estos puertos se pueden configurar por software, pin por pin, como entradas o salidas digitales, como entradas se suelen emplear para leer el estado de interruptores, pulsadores o leer estados digitales de otro dispositivo. Como Salidas éstos pueden ser empleados para encender o apagar relés u otros dispositivos o para transportar un estado lógico a otros dispositivos. Usados conjuntamente tanto entradas como salidas se puede sintetizar e implementar un protocolo dado para comunicarse con otro integrado. La mayoría de los microcontroladores poseen otros subsistemas aparte del los puertos de E/S pero tienen la característica de poder ser convertidos al puertos

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

GPIO si las funcionalidades de estos subsistemas no son requeridas, este hecho añade gran versatilidad para el uso de microcontroladores en una aplicación dada. En la figura 4 se observan también un bloque con entradas análogas permitiendo recibir y muestrear señales provenientes de sensores que miden señales de diferentes tipos, para propósitos de grabación o simplemente se puede monitorear señales de voltaje para asegurar el correcto desempeño de un sistema. Los puertos seriales habilitan al dispositivo para interconectarse con un computador personal, un módem, otro sistema embebido o de pronto con una red, existen formas especializadas de comunicación serial conocidas como SPI i I2C, que proveen una manera simple de expandir las capacidades y funcionalidades de los microcontroladores, a través de éstas se puede interconectar periféricos como relojes/calendarios, memorias externas, sensores con interfaces digitales entre otras. Los contadores y temporizadores son utilizados para generar interrupciones internas, regular intervalos para diferentes tareas que se puedan estar ejecutando, generar señales de reloj para controlar la operación y sincronización de dispositivos externos, pulsos de control para motores, alternativamente también pueden ser utilizados para contar pulsos provinentes de otros dispositivos. Algunos dispositivos incluyen también interfaces de red como puertos USB, Ethernet o CAN. Los microcontroladores más completos también incluyen buses de datos trayendo los buses de direcciones internas para el control y manejo de datos hacia el mundo exterior, esa funcionalidad le agrega al microcontrolador una gran versatilidad para la interconexión de una vasta variedad de posibles periféricos de manera muy similar a lo que lo haría un procesador convencional. Existe una amplia variedad de microcontroladores (en el orden de los miles, provenientes de docenas de fabricantes), con capacidades y subsistemas que varían dependiendo de la aplicación para la cual serán empleados. Lección 7: Entradas: Sensores, muestreadores y conversores A/D. Los dispositivos de entrada de los sistemas embebidos juegan un papel primordial para agregar la funcionalidad requerida ya que gracias a estos el dispositivo de procesamiento puede entrar a interactuar con el mundo exterior mediante la obtención de las diferentes señales y datos empleados para su procesamiento y posterior respuesta o señal de salida. 1. Sensores: Son dispositivos que al interactuar con alguna variable física normalmente generan una señal análoga continua proporcional a la magnitud de la variable

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

medida, aunque existen también sensores que entregan información digital. Los sensores pueden ser diseñados para medir virtualmente cualquier variable física, peso, aceleración, corriente eléctrica, diferencias de potencial, temperatura presión, proximidad, movimiento, sensores para medir variables en sustancias químicas, entre muchos otros. El diseño y desarrollo de sensores de diversos tipos en las últimas décadas a posibilitado en gran medida el desarrollo de sistemas inteligentes en muchos infinidad campos. 2. Muestreadores: El termino computador digital implica que éste trabaja en el dominio de tiempo discreto, esto quiere decir que solo puede procesar información discreta en instantes de tiempo definidos, por lo tanto para que un procesador pueda manipular señales provenientes de un sensor que entrega información continuamente (señales análogas) primero debe convertirse estas señales en el domino del tiempo continuo al dominio de tiempo discreto, éste es el propósito de los muestreadores, en la fig. 5 se presenta un ejemplo típico de un circuito para este propósito y la correspondiente señal muestreada. Figura 5. Circuito de muestreo.

Como se aprecia en la figura el circuito consta esencialmente de un transistor en cuya base es aplicada una determinada señal de reloj y un condensador. El transistor básicamente actúa como un interruptor que permite que el condensador se cargue con el valor del voltaje de entrada Ve (señal análoga) en instantes definidos por la señal de reloj, el voltaje en el condensador permanecerá virtualmente sin cambio hasta que el interruptor sea serrado de nuevo. Los valores almacenados en el condensador se pueden considerar como un elemento discreto de valores Vx generados a partir de la señal de entrada Ve. Para que esto sea posible se debe asegurar que el circuito tenga la característica de poder cambiar el valor de la carga del condensador casi de manera instantánea, en la práctica lo que ocurre es que el transistor demora un tiempo suficiente para que el condensador se cargue o descargue y la carga en el condensador corresponderá al voltaje promedio de entrada durante este periodo.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

3. Conversores A/D: Siguiendo con el esquema de trabajo digital se tiene que una vez se han tomado muestras de la señal de entrada en tiempos discretos, estas señales pueden tomar infinidad de valores en un determinado rango, es decir siguen siendo señales análogas, el paso a seguir es convertir los valores análogos de entrada a valores discretos, esta tarea es realizada por los conversores A/D (Análogo a Digital). La conversión a digital se realiza en dos fases: cuantización y codificación. Durante la primera se toma la señal muestreada y a cada uno de los diferentes niveles o variaciones de voltajes que contiene la señal analógica original se asigna un valor o nivel de voltaje discreto que depende de la resolución (porción más pequeña de señal que produce un cambio apreciable en la salida) del conversor, en este punto la señal pasa a tomar valores discretos en un rango definido de valores, aproximados a los de la señal original, el valor cuantificado se codifica en binario en una palabra digital, cuyo número de bits depende de las líneas de salida del conversor A/D. Existen diferentes métodos de conversión A/D que varían dependiendo de la velocidad y la resolución requerida a continuación se expondrá dos esquemas de conversión representativos para comprender los mecanismos de conversión. Una conversión A/D directa es realizada empleando un conversor A/D FLASH (FLASH A/D Converter), éste está conformado por un arreglo de comparadores, cada uno de los cuales tienen dos entradas (+ y -). Si el voltaje en la entrada positiva excede el voltaje de referencia en la entrada negativa, la salida de dicho comparador corresponderá con un valor lógico „1‟ en caso contrario o cualquier otro caso el valor a la salida del comparador será „0‟ Ver fig. 6. Figura 6. Esquema del Conversor A/D FLASH.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

Se observa de la figura 6 que el valor de referencia de cada una de las entradas () de los comparadores corresponde a un divisor de voltaje a partir de un valor de referencia estándar, éste enmarca el rango de los posibles valores de entrada que el conversor puede codificar. El codificador genera valores digitales correspondientes a la entrada Vx identificando la salida „1‟ más significativa, siendo el caso en que Vx > Vref, el máximo valor de salida posible independiente de que tanto excede Vx a Vref en magnitud. En el caso de que Vx es menor que Vref pero mayor que

3

4

Vref, entonces el

comparador mas significativo (el de mas arriba) genera un „0‟ a la salida y el siguiente si generará un „1‟ entonces el codificador entregará el valor digital para el segundo valor mas largo del conversor y así sucesivamente. Otro esquema de conversión utilizado es el llamado conversor de aproximaciones sucesivas, el proceso de conversión para este tipo de convertidores se basa en la realización de comparaciones sucesivas de manera descendente, hasta que se encuentra la combinación que iguala la tensión entregada por el D/A y la de entrada, consiste como se puede apreciar en la figura 7 en un comparador en cuya terminal positiva se encuentra la señal de entrada Vx, en esencia el funcionamiento de este conversor es la de generar valores binarios en el bloque lógico de control almacenándolos en el registro de aproximaciones sucesivas, la operación inicia asignando „1‟ al bit mas significativo de este registro y a los demás se les asigna „0‟, este valor se introduce al conversor Digital/Análogo (D/A) para generar un nivel de voltaje análogo correspondiente al valor binario generado, este voltaje es enviado terminal negativo del comparador. Figura 7. Esquema del Conversor de Aproximaciones Sucesivas. (editado de embedded system design)

Si la magnitud de Vx es mayor que la de la señal generada en el conversor D/A se conserva el valor „1‟ en el registro más significativo, de otra forma se asigna a este bit un valor „0‟, este proceso se repite con el siguiente bit y así sucesivamente. Las ventajas de este esquema es la eficiencia del Hardware, la desventaja es la velocidad puesto que la identificación de cada valor de entrada (Vx) no es

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

instantánea, puesto que para cada valor se requiere que el conversor realice una serie de aproximaciones antes de encontrar el valor adecuado. Lección 8: Comunicación. Los diferentes datos manejados en un sistema embebido deben estar disponibles para ser comunicados a través de diferentes canales, los canales son entidades abstractas caracterizadas por propiedades esenciales de los sistemas de comunicación como la capacidad máxima de transferencia de información y parámetros de ruido, existen además técnicas y teorías de comunicaciones que se emplean para hallar la probabilidad de errores en la comunicación pero estos son temas de otro curso. Para que exista la comunicación se requiere de un medio físico por el cual se propagara la información entre los que se tienen medios cableados, medios ópticos (Fibra óptica), medios inalámbricos (medios de radiofrecuencia, infrarrojos, etc.). 1. Requerimientos: Existe una variedad de requerimientos para que se dé la comunicación entre sistemas embebidos entre los que se tienen los siguientes: Comportamiento en tiempo real: En muchas de las aplicaciones es imperante la comunicación inmediata entre los sistemas como en el caso de procesos industriales de control y automatización en cambio existen otras en las que no es tan primordial este hecho como en el caso del Ethernet. Eficiencia: Este requerimiento tiene su sentido económico en la implementación de la comunicación entre diferentes sistemas embebidos por lo tanto es necesario el desarrollo de diseños eficientes para la conexión de diferentes componentes de un sistema de control y sus componentes externos. Ancho de banda apropiado: Los requerimientos de ancho de banda pueden variar dependiendo de la aplicación no obstante normalmente es importante evitar al máximo retrasos en la comunicación, no obstante se debe evitar hacer demasiado costoso el sistema implementado. Robustez:

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

Dependiendo de la aplicación los sistemas embebidos pueden encontrarse en ambientes con temperaturas elevadas e interferencias electromagnéticas, los sistemas deben poseer la suficiente robustez para mantener una comunicación confiable. Tolerancia a Fallas: Es necesario que los sistemas se recuperen de fallas de comunicación de forma rápida, deben existir mecanismos para reintentar la comunicación en caso de fallas, no es aceptable el reinicio del sistema como en el caso de los computadores. Privacidad: Este requerimiento se realiza en caso de que se necesite privacidad en la comunicación, para tal efecto existen diferentes técnicas de encriptación. 2. Métodos de transmisión cableada. Estos métodos son empleados para lograr la suficiente robustez eléctrica de las señales transmitidas entre los diferentes integrados de un sistema dado, uno de los métodos es conocido como señalización de terminal simple (single-ended signaling) o asimétrica, en éste las señales se propagan a través de un solo cable (ver figura 8). Figura 8. Señalización de terminal simple o asimétrica.

El otro terminal se conecta a un nivel de referencia, normalmente se conecta a tierra; las señales que llevan la información están representadas por diferencias de potencial con respecto a la referencia. La ventaja de éste método es que una sola referencia sirve para diferentes señales asimétricas, la principal desventaja es la susceptibilidad al ruido externo, la información puede ser fácilmente afectada por interferencias de tipo electromagnético. Otro método se conoce como señalización diferencial o simétrica, en éste se requiere un par de hilos por cada señal (ver figura 9).

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

Figura 9. Señalización design).

diferencial o simétrica (editado de embedded system

La señal es codificada de manera que si el voltaje del primer hilo al llegar al comparador es positivo con respecto al segundo entonces se trata de un „1‟ en caso contrario se trata de un „0‟. Normalmente cada par de hilos viene entorchado, es decir, cada par se entrelaza para mantener estable las propiedades eléctricas a lo largo de toda la longitud de los hilos, reduciendo así, las interferencias creadas por elementos adyacentes. Algunas ventajas de este método de transmisión consisten en que el ruido normalmente se añade de igual forma a ambos hilos y es eliminado casi en su totalidad en la entrada del comparador, además el valor lógico de la señal solo depende de la polaridad, no de la magnitud, ya que esta puede variar por factores como la distancia y la resistencia del hilo y este hecho no afecta la señal decodificada, no se requiere la existencia de tierras comunes puesto que se trata de señales diferenciales por lo tanto para comunicar grandes cantidades de dispositivos por este método no es necesario implementar tierras de mayor calidad. La señalización diferencial es empleada por ejemplo en la implementación de redes basadas en Ethernet. Lección 9: Unidades de procesamiento y Memorias. Unidades de procesamiento Para abordar el tema de procesamiento de información se tendrán en cuenta los ASIC (Aplication-Specific Integrated Circuit), los dispositivos de lógica programable y los procesadores. Estas tecnologías presentan un desempeño distinto hablando del número de operaciones que pueden desempeñar con respecto a su consumo de energía, siendo primeros en desempeño los ASIC, los segundos son los dispositivos de lógica programable y por último los procesadores, en contra prestación los procesadores son los más flexibles en lo que a programación software se trata, los dispositivos de lógica programable presentan cierta flexibilidad y los ASIC no son nada flexibles.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

1. ASIC (Aplication-Specific Integrated Circuit) Los ASICs son circuitos diseñados y desarrollados para aplicaciones específicas por lo tanto una vez desarrollados no pueden ser modificados, a diferencia de otros dispositivos como los microcontroladores concebidos para propósitos de uso general, un ejemplo de este tipo de dispositivos puede ser un integrado diseñado específicamente para manejar la modulación en un teléfono celular. Los ASICs son costosos tanto de diseñar como de fabricar pero si la aplicación requiere un uso realmente eficiente de la energía, procesamiento a una velocidad superior y además si el mercado se encuentra dispuesto a afrontar los costos o el producto final se presta para ser vendido en grandes producciones entonces se justifica su empleo. Con los avances en la miniaturización y en las herramientas de diseño, la complejidad máxima, y por ende la funcionalidad, en un ASIC ha crecido desde 5.000 puertas lógicas a más de 100 millones. Los ASIC modernos a menudo incluyen procesadores de 32-bit, bloques de memoria RAM, ROM, EEPROM y Flash, así como otros tipos de módulos. Este tipo de ASIC frecuentemente es llamado Sistema en un Chip, o SoC (System on a Chip), por sus siglas en inglés. Los diseñadores de ASIC digitales usan lenguajes descriptores de hardware (HDL), tales como VERILOG o VHDL, para describir la funcionalidad de estos dispositivos 2. Dispositivos de Lógica programable. Existen aplicaciones en donde no se justifica el costo de emplear ASICs, por el costo de desarrollo o por la existencia de un mercado reducido para dicha aplicación, aunque tampoco es suficiente el empleo de aplicaciones basadas en software (Microprocesadores), por velocidad o consumo de energía. Los dispositivos de lógica programable representan una buena solución, si los algoritmos son implementados de manera eficiente las aplicaciones desarrolladas pueden llegar a ser tan rápidas como un ASIC, La gran diferencia radica en que la funcionalidad de éstos puede cambiar por medio de la reprogramación del dispositivo. Gracias a las características intrínsecas de los dispositivos de lógica programable, éstos se pueden emplear en aplicaciones de prototipado rápido, permitiendo los correspondientes ciclos de diseño, prueba y depuración, obteniendo así un dispositivo que se comportará de forma similar al sistema final, así no cumpla con los requisitos de espacio y consumo de potencia deseables, normalmente estos prototipos se toman como punto de partida para desarrollar aplicaciones finales. 3. Procesadores.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

La ventaja principal de estos dispositivos es su flexibilidad, ya que el comportamiento del sistema embebido puede cambiarse por completo solo cambiando el software que rige el sistema, estos cambios se realizan con la intención de corregir errores de diseño, realizar actualizaciones, mejoras o añadir funciones al sistema. En esencia es esta la razón de la gran popularidad de estos dispositivos. Los procesadores para sistemas embebidos deben ser eficientes, no se necesita que su set de instrucciones sea compatible con el de un procesador para PC de hecho se trata de arquitecturas diferentes, por lo tanto manejan un set de instrucciones mas reducido, a continuación se analizan las diferentes características que deben tenerse en cuenta para lograr la eficiencia. Eficiente manejo de la energía: para tal efecto las diferentes variedades de procesadores abordan el tema empleando diversas técnicas en las que se tiene en cuenta la operación del sistema, es pues como el sistema puede pasar a modos de bajo consumo suspendiendo la operación de relojes internos, bloqueando las salidas o suspendiendo por completo las actividades internas, dado el caso de que el procesador entre en periodos de inactividad o marcha lenta. Tamaño de Código: es muy importante minimizar el tamaño del código de los programas que gobiernan el funcionamiento del procesador por el hecho de que los procesadores para sistemas embebidos generalmente no cuentan con discos duros y además la capacidad de las memorias con las que se cuenta normalmente es reducida, también hay que tener en cuenta que cada comando y ciclo de ejecución extra requiere un consumo de potencia y como se vio en anteriormente es necesario mantener un consumo eficiente de energía. Tiempo de ejecución eficiente: dependiendo de la aplicación se puede requerir que el sistema embebido ejecute alguna función con limitantes de tiempo extremas sin la necesidad de emplear elevadas frecuencias de operación, para tal motivo las arquitecturas pueden ser optimizadas para ciertas aplicaciones, como en el caso de los DSP (Digital Signal Processor). O se puede ir más allá y desarrollar lo que se conoce como procesadores de sets de instrucciones específicos. ASIPs (Application Specific Instruction Set Processor). Memorias. Las memorias son dispositivos electrónicos empleados para almacenar información (datos) y software (programas) con las que el dispositivo de procesamiento interactúa. Contienen en su interior una tabla que almacena información en cada uno de sus compartimentos. 1. Funcionamiento.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

Como toda tabla, es preciso saber dos de sus dimensiones: el tamaño de cada uno de sus elementos y el número de elementos de los que dispone. Normalmente, las memorias convencionales almacenan la información en elementos de tamaño 1 byte (8 bits). Por lo tanto una memoria se puede ver como una tabla que contiene un determinado número de bytes. Los elementos de esta tabla están numerados con números naturales comenzando por el cero. El número correspondiente a cada una de los elementos se denomina “dirección de memoria” y se suele representar de forma abreviada por el símbolo “@”. Al conjunto de números que representan las direcciones de una memoria se le denomina su “espacio de direcciones”. A manera de ejemplo, la figura 10 ilustra la estructura, contenido y direcciones de una memoria RAM. Figura 10. Estructura de la memoria RAM.

Una computadora de 8 bits con 10 líneas de dirección ve a la memoria como una columna continua de 1024 (ó 2 a la 10) valores de 8 bits. La dirección de la primer posición de memoria es 00 0000 0000 (2) y la de la última es 11 1111 1111 (2). La dirección de diez bits se expresa normalmente como dos números de 8 bits que se vuelcan en cuatro dígitos hexadecimales. En notación hexadecimal, el rango de estas direcciones va desde $0000 a $03FF.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

El acceso a los datos internos de la memoria viene determinado por el tamaño de sus celdas o elementos. Tal y como está estructurada, la memoria no ofrece acceso directo a cualquiera de sus bits, sino que es preciso primero obtener un byte y posteriormente acceder al bit pertinente. Los procesadores incluyen en su lenguaje máquina las instrucciones necesarias para poder manipular los bits de un byte. Si se quiere, por tanto cambiar un bit de un byte de memoria se debe leer el byte entero, utilizar instrucciones para cambiar su valor, y escribirlo de nuevo en memoria. El tamaño de la memoria se mide en múltiplos que no siguen las reglas convencionales de multiplicación por potencias de 10 sino por potencias de 2. Así, un kilobyte son 210 bytes o 1024 bytes. Las unidades de medida del tamaño de memoria así como sus exponentes y los prefijos de su nomenclatura se presentan en la Tabla 1. Tabla 1. Unidades de almacenamiento de información en bytes Prefijo Símbolo Potencia kilo

K

210

mega

M

220

giga

G

230

tera

T

240

peta

P

250

exa

E

260

zetta

Z

270

yotta

Y

280

Los chips de memoria pueden ser organizados de dos formas o esquemas por palabras o por bits. En el esquema de organización por palabras se almacenan por completo nibbles (4 bits), bytes (8 bits), o palabras de un tamaño determinado son almacenadas en un mismo componente, mientras que en el esquema de organización por bits, cada bit de una palabra dada se encuentra localizado en un dispositivo distinto. (ver figura 11) Figura 11. Dispositivos organizados por bits de 8x1 y organizados por palabras de 8x8.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

Internamente las memorias son implementadas por un conjunto de transistores diseñados de tal forma que pueden almacenar información. La unidad responsable de almacenar un bit de información se denomina “celda”. Un chip de memoria no es más que un circuito que contiene un determinado número de celdas en cuyo interior se almacena un bit. EL funcionamiento de la memoria es similar al método utilizado para ordenar la correspondencia en una oficina postal, a cada byte o palabra de datos se le es asignada una dirección única y a cada dirección corresponde un solo espacio de almacenamiento en la memoria. El proceso para almacenar la información en la memoria se da de la siguiente forma: la unidad de procesamiento envía al dispositivo la dirección para los datos, el controlador de la memoria encuentra la ubicación adecuada, por último, el procesador envía los datos a escribir en dicha dirección o posición de memoria. La lectura de la información se realiza mediante un proceso semejante: El procesador envía a la memoria la dirección de los datos solicitados, El controlador de la memoria encuentra los bits de información contenidos en dicha dirección, posteriormente los envía al bus de datos al procesador. (ver figura 12). Además de los buses de dirección y datos el procesador debe notificar a la memoria el tipo de operación que se va a realizar, para tal efecto deben añadirse las correspondientes líneas de control que dependen del tipo de memoria y de la implementación realizada. Figura 12. Esquema de conexión Unidad de Procesamiento – Memoria

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

Normalmente las memorias se encuentran disponibles con la interfase paralela estándar (bus de datos y direcciones), también se pueden encontrar en interfaces seriales, existe una variedad de dispositivos que cuentan con interfaces como la I2C (Inter-IC) o la interfaz SPI (Serial Peripheral Interface) que son protocolos estándar empleados para la comunicación con diferentes dispositivos, este tema será tratado en capítulos posteriores. 2. Almacenamiento de datos. La estructura que ofrece la memoria normalmente es la organización de sus elementos en bytes. Por tanto, para almacenar los datos que manipula un procesador es imprescindible saber de antemano su tamaño. El tamaño de algunos datos básicos viene definido por la arquitectura del propio procesador. Por ejemplo, el lenguaje máquina de algunas arquitecturas contiene instrucciones máquina para operar enteros de 32 bits. Esto no quiere decir que el procesador no pueda manejar enteros de otros tamaños, sino que el dispositivo manipulará estos de forma mucho más rápida y eficiente. Números de otros tamaños pueden ser manipulados igualmente pero con un costo mayor en tiempo de ejecución. Los lenguajes de programación de alto nivel como Java, C o C++ definen un conjunto de datos denominados “básicos” y un conjunto de mecanismos para definir datos complejos en base a ellos. Como los programas escritos en estos lenguajes deben ejecutar en diferentes equipos con diferentes procesadores, es difícil definir el tamaño de los datos tal que se ajuste a todos ellos. El compilador se encarga de transformar las operaciones escritas en lenguaje de alto nivel en las instrucciones más adecuadas para manipular los datos en el procesador pertinente. La tabla 2 muestra los tipos de datos básicos definidos en C y C++ así como su tamaño. Tabla 2. Tipos de datos básicos en el lenguaje C y C++

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

Tipo

Tam. Dígitos de Bits precisión

Rango Min

Max

Bool

8

0

0

1

Char

8

2

-128

127

signed char

8

2

-128

127

unsigned char

8

2

0

255

short int

16

4

-32,768

32,767

unsigned short int

16

4

0

65,535

Int

32

9

-2,147,483,648

2,147,483,647

unsigned int

32

9

0

4,294,967,295

long int

32

9

-2,147,483,648

2,147,483,647

unsigned long int long long int

32

9

0

4,294,967,295

64

18

-9,223,372,036,854,775,808

9,223,372,036,854,775,807

unsigned long long int

64

18

float

32

6

1.17549e-38

3.40282e+38

double

64

15

2.22507e-308

1.79769e+308

long double 96

18

3.3621e-4932

1.18973e+4932

0 18,446,744,073,709,551,615

La regla para almacenar datos en memoria es utilizar tantos bytes como sean necesarios a partir de una dirección de memoria. En adelante, la posición a partir de la cual está almacenado un dato se denominará su dirección de memoria. De forma análoga, cuando se dice que un dato está en una posición de memoria lo

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

que significa es que está almacenado en esa posición y las siguientes que se precisen. 3. Métodos de direccionamiento. Generalmente (aunque no necesariamente) una instrucción consta de una parte de operación y una de dirección, la parte de dirección puede contener la dirección de un operando utilizado en la ejecución de la instrucción. En otras ocasiones la parte dirección de la instrucción puede no contener la dirección donde se encuentra el operando, sino otra dirección donde se encuentra la dirección del operando. En los diferentes sistemas se emplea una amplia gama de modos de direccionamiento de los que se consideran algunos a continuación: 

DIRECTO. El operando se encuentra en alguno de los registros internos de la CPU o en la memoria principal. En el direccionamiento directo, la instrucción indica el registro o la dirección de memoria absoluta que contiene el operando o donde se debe almacenar el resultado de una operación.



INDIRECTO. El operando se encuentra en la memoria principal del sistema. La dirección de memoria de este operando no es dada directamente por la instrucción, sin embargo, ésta informa del registro o posición de memoria donde se encuentra almacenada la dirección del operando. En algunos procesadores, se soportan operaciones tales como post-incremento, postdecremento, pre-incremento, pre-decremento en el valor almacenado en el registro de direcciones o en la memoria que contiene la dirección del operando.



RELATIVO. En este caso el operando está en memoria principal, es decir, por fuera de la CPU. La dirección del operando ha de ser calculada como la suma del contenido de cierto registro con un valor de desplazamiento. Normalmente el registro actúa como apuntador. El valor del desplazamiento va en el formato de instrucción como un valor constante. En el direccionamiento relativo la parte dirección de la instrucción contiene el número N. En memoria la dirección del operando se encuentra sumando el numero N al número del contador del programa.



INDEXADO. Permite tomar un registro interno que le será sumado al registro base para calcular la dirección de memoria donde se encuentra el operando. Algunas CPUs permiten tener un valor de desplazamiento, el cual está almacenado en el formato de instrucción. En el direccionamiento indexado como en el relativo, la parte dirección de la instrucción contiene un número N que puede ser positivo o negativo. Sin embargo para utilizar el direccionamiento indexado, el computador debe estar equipado con un registro especial empleado para permitir direccionamiento indexado, y

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

denominado naturalmente registro índice. La posición de memoria donde se localiza el operando se encuentra mediante la suma I + N. 

REGISTRO INDIRECTO. Algunos computadores que incorporan la facultad del direccionamiento de registro indirecto tienen un registro especial, a menudo llamado registro (P). Este registro contiene la dirección de memoria del operando. Una instrucción que invoque realmente direccionamiento de registro indirecto no tiene bits significativos en su parte dirección. En lugar de ello, la instrucción completa se incluye en los bits asignados a la parte de operación de la instrucción. Una instrucción típica que use un registro de direccionamiento indirecto debería especificar "cargar" el acumulador con el operando localizado en la dirección de memoria dada en el registro (p).



INMEDIATO. En el direccionamiento inmediato, la parte de dirección de la instrucción contiene no la dirección del operando sino el mismo operando. Se usa cuando el operando es un valor constante. El tamaño o cantidad de bits para este operando depende de la cantidad reservada en el formato de instrucción.



INHERENTE. Ordinariamente una dirección que es parte de una instrucción se refiere a una posición de memoria. Cuando una instrucción indica una fuente o un destino de datos y no se direcciona específicamente, ya no se hace referencia a la posición de memoria, se dice que la instrucción tiene una dirección inherente.

Lección 10: Salidas y Conversores D/A. Para las salidas de los sistema embebidos se emplean dispositivos tanto análogos como digitales, para el caso de dispositivos análogos, las salidas digitales deben pasar primero por los correspondientes conversores Digital a Análogos (D/A). Entre los elementos de salida que normalmente son empleados en sistemas embebidos tenemos: 1. Elementos de Visualización. Estos son de gran importancia para los sistemas embebidos, son empleados para desplegar información relevante al usuario, dependiendo de la aplicación pueden desplegar señales medidas, operaciones, servir de interfaz para la programación de determinados dispositivos, entre otros. Existe una gran variedad de dispositivos de visualización gracias al continuo desarrollo tecnológico en esta área, los más comunes son los displays de 7 segmentos o alfanuméricos fabricados a partir de leds, También se encuentra en el mercado matrices de leds displays de cristal líquido, llegando a desarrollarse pantallas táctiles que pueden servir para interactuar directamente con el sistema, los últimos desarrollos e investigaciones en el tema han arrojado una nueva

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

tecnología conocida como displays orgánicos, a diferencia de tecnologías como LCD que requieren de luz trasera o Backlight, éstos generan su propia iluminación. 2. Dispositivos electromecánicos. Estos son actuadores que modifican su entorno, puede tratarse de relays, motores, electroimanes, cerraduras electromecánicas, electro-válvulas, bobinas, servomecanismos etc. En muchos casos las señales de control hacia este tipo de dispositivos debe pasar por una etapa de potencia para evitar el deterioro del dispositivo de control. Conversores D/A. Un conversor Digital a Análogo se encarga, como su nombre lo dice, de convertir señales digitales en señales analógicas (Corriente Voltaje o carga eléctrica). Todos los conversores D/A poseen entradas digitales provinentes de buses de microprocesadores, SPI o I2C, y pueden proveer uno o más canales de salidas análogas. Este tipo de conversores se utiliza en reproductores de sonido de todo tipo, dado que actualmente las señales de audio son almacenadas en forma digital (por ejemplo, MP3 y CDs), y para ser escuchadas a través de los parlantes, los datos se deben convertir a una señal analógica. Los conversores digital-analógico también se pueden encontrar en reproductores de CD, reproductores de música digital, tarjetas de sonidos de PC, etc. Como se trata del proceso inverso a la conversión A/D se puede pensar en los valores digitales discretos a la entrada de conversor, como números obtenidos a partir de un proceso de muestreo, que se actualizan constantemente en intervalos determinados por la correspondiente frecuenta de muestreo, obteniéndose a la salida del conversor voltajes (normalmente) que son una función lineal de dichos números de entrada. Dado que a cada instante se actualizan los números, la salida del conversor se mantiene constante entre conversiones, cambiando automáticamente el voltaje dependiendo del valor digital de cada entrada, esta operación genera una señal constante por partes (ver figura 13). Figura 13. Señal de salida de un conversor D/A.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

Por su puesto la señal reconstruida no posee las mismas características en el dominio de la frecuencia que la señal original. Los conversores Digital a Análogo (D/A) no son dispositivos muy complejos, entre la variedad de esquemas que existen para la conversión D/A a continuación se expone uno de los más comunes. En la figura 14 se puede observar el esquema de un conversor D/A básico de 4 bits. Figura 14. Conversor D/A.

Este conversor consta de una red de resistencias conectadas a la entrada negativa de un amplificador operacional configurado como sumador, la tensión de referencia es introducida por medio de diferentes conmutadores de entrada los cuales se cierran dependiendo del valor de la entrada digital. Es de tener en cuenta que los valores de las resistencias varían desde la del bit más significativo que es la de menor valor, doblándose por cada bit hasta llegar al bit menos significativo, LSB (Less Significant Bit). El incremento en la tensión de salida del conversor D/A se presenta por la acción que tienen las resistencias de las entradas sobre la resistencia de realimentación del circuito amplificador; la tarea de la red de resistencias es asignar niveles de voltaje adecuados a la entrada del amplificador. La acción del amplificador operacional es graduar o ajustar la tensión analógica de salida de acuerdo con una tabla de correspondencia definida para el conversor, teniendo en cuenta obviamente el valor de las entradas binarias y la configuración de la red de resistencias. Para que este conversor D/A sea preciso hay que tener en cuenta que: Los valores de resistencia deben ser bastantes precisos. La tensión de alimentación también debe ser precisa.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

CAPITULO 3: UNIDADES CENTRALES DE PROCESAMIENTO

En el presente capítulo se analizarán diferentes unidades o núcleos de procesamiento y sus componentes, con la intención de llegar a obtener un entendimiento básico de las estructuras que forman parte de las diversas arquitecturas disponibles para así compararlas, justificando el enfoque del curso al emplear de microcontroladores en especial los HC08 de Motorola como dispositivos para la correspondiente asimilación y aterrizaje del bagaje teórico adquirido en los primeros capítulos, también para la realización de las diferentes prácticas del presente curso. Lección 11: Componentes de una CPU. En la siguiente figura se presenta un diagrama de bloques simple para una unidad de procesamiento en el que se puede apreciar los diferentes componentes que serán explicados de una forma más amplia a lo largo del presente capitulo. Figura 15. Diagrama de bloques simple de una unidad de procesamiento.

1. Unidad Aritmético Lógica La Unidad Aritmético-Lógica (UAL) o ALU (Arithmetic and Logical Unit) como su nombre lo indica es la encargada de realizar operaciones aritméticas y lógicas sobre operandos que provienen de la memoria principal y que pueden estar

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

almacenados de forma temporal en algunos de los registros de diversos propósitos que hacen parte de la propia unidad. Existen deferentes tipos de ALU dependiendo de la aplicación para la cual se encuentran especializadas; las hay especializadas en operaciones con números enteros o en operaciones con números en punto flotante, entre otros. 2. Registros. Un registro es una memoria de alta velocidad y poca capacidad, integrada al microprocesador, que generalmente permite guardar y acceder a valores muy utilizados en operaciones matemáticas. Los registros son la manera más rápida que tiene un sistema de almacenar datos, su capacidad se mide generalmente por el número de bits que almacenan; por ejemplo, un "registro de 8 bits" o un "registro de 32 bits". Generalmente son implementados en un banco de registros, antiguamente se usaban flip flops individuales, memoria SRAM u formas de almacenamiento aun más primitivas. Los registros pueden ser directamente indexados como operandos de una instrucción, como esta definido en el set de instrucciones. También existen muchos otros registros que son empleados con propósitos específicos, por ejemplo el contador de programa. 2.1. Tipos de registros. Registros de datos: son empleados para guardar números enteros. En algunas computadoras antiguas, existía un único registro donde se guardaba toda la información, llamado acumulador. Registros de memoria: se emplean para guardar exclusivamente direcciones de memoria. Eran muy usados en la arquitectura Harvard, ya que muchas veces las direcciones tenían un tamaño de palabra distinto que los datos. 

  

Registros de propósito general GPRs: (General Purpose Registers) pueden guardar tanto datos como direcciones. Son fundamentales en la arquitectura Von Neumann. La mayoría de dispositivitos modernos usa GPRs. Registros de punto flotante: se empelan para guardar datos en formato de punto flotante. Registros constantes: tienen valores creados por hardware de solo lectura. Registros de propósito específico guardan información específica del estado del sistema, como el puntero de pila, el registro de estado, el contador de programa, el registro de instrucción, entre otros.

3. Unidad de Control

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

La unidad de control es la parte de la unidad de procesamiento encargada de leer las instrucciones en lenguaje de máquina almacenadas en la memoria principal, además genera las señales de control necesarias para el manejo y coordinación del resto de las unidades funcionales de un determinado sistema con el fin de ejecutar las instrucciones leídas. La unidad de control está conformada por: 

Contador de programa o PC (Program Counter): es un registro interno del microprocesador en el que se almacena la dirección de la instrucción que se está ejecutando. De esta manera, la unidad de procesamiento conoce cuál es la siguiente instrucción que debe ejecutar. El PC va incrementándose dependiendo del tamaño de las instrucciones, esto se mide en espacios de memoria y puede aumentar valores como 1, 2, 3, … también puede pasar que la instrucción que se ejecute en ese instante cambie el flujo del programa, saltando a otra dirección distinta.



Registro de instrucción: Al igual que el PC, el registro de instrucción forma parte de la unidad de control y contiene la instrucción que se está ejecutando en cada momento.



Decodificador de instrucciones: Se encarga de decodificar la instrucción para interpretar el tipo de instrucción a ejecutar que se encuentra en el registro de instrucción, las instrucciones pueden ser de suma, multiplicación, comparación, entre otros.



Reloj Interno: Señal de reloj a una frecuencia específica que marca cada ciclo de ejecución del procesador, este junto con otros elementos que dependen de la arquitectura le proporcionan la velocidad característica a cada dispositivo.



Secuenciador: Encargada de generar señales de control para la ejecución de una instrucción que se ha decodificado previamente y comparado con las instrucciones disponibles de la CPU que se encuentran almacenadas en una Memoria ROM de la misma CPU.

4. Unidad de Ejecución o Datapath Es un elemento de la CPU que realiza operaciones y cálculos invocados por programas en ejecución. A menudo posee su propia unidad de control, registros y otros componentes, tales como una unidad aritmético-lógica, tambien puede poseer una unidad de punto flotante. Es común que las CPUs modernas incluyan múltiples unidades de ejecución, el arreglo más simple es utilizar una para manejar la interfase de memoria (administración del bus) y otras para realizar deferentes cálculos.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

5. Memorias. Existe una variedad de memorias y es posible que exista una combinación de diferentes tipos de estas en un mismo sistema, dependiendo de las diversas características que pueda presentar una memoria se analizan a continuación los diferentes tipos disponibles: 5.1. RAM (Random Access Memory): Las memorias de acceso aleatorio normalmente son las memorias de trabajo de los computadores, donde el procesador puede fácilmente almacenar datos temporalmente, la lectura/escritura en este tipo de memorias se puede hacer en cualquier posición, es decir, el acceso a cualquier registro para lectura/escritura implica el mismo tiempo y no depende de lecturas/escrituras previas. Generalmente son volátiles, esto quiere decir que los datos almacenados durante el funcionamiento del computador se borrarán al des-energizar o apagar el sistema. Existen dos categorías de RAM las estáticas (SRAM) y las dinámicas (DRAM); las estáticas emplean pares de compuertas lógicas para almacenar cada bit de datos son las más rápidas, funcionan con una circuitería de soporte simple y tienen un consumo de energía relativamente bajo. Debido a su baja capacidad se requiere implementar mayor cantidad de chips dependiendo de la aplicación. Si un computador personal moderno fuese construido con base en este tipo de memoria aunque sería bastante rápido resultaría de un tamaño considerable y demasiado costoso. Figura 16. Memoria SRAM (Static Random Acces Memory ).

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

DRAM utiliza arreglos de lo que en esencia son la combinación de un capacitor y un transistor, juntos forman una celda (que representa un bit). El capacitor almacena el bit de información (0 cuando esta descargado o 1 cuando esta cargado) mientras que el transistor actúa como switch, esto permite "leer" el capacitor o cambiar su estado (de 0 a 1 o viceversa). La desventaja es que la carga se almacena por un periodo reducido antes de empezar a descargarse, es por esto que se necesita refrescar constantemente los datos en intervalos en el orden de los milisegundos, este hecho hace que se requiera un soporte adicional para este tipo de memorias además retraza al microprocesador en el acceso de los datos. Figura 17. Memoria DRAM (Dynamic Random Acces Memory ).

A pesar de esto las memorias dinámicas poseen una gran capacidad de almacenamiento, existe una gran variedad de subespecies de este tipo de memorias. Acceder a los datos de estas memorias mediante un microcontrolador generalmente no es viable y ciertamente no es práctico. Para tal efecto hay microprocesadores que poseen soporte para la conexión de RAM dinámico o se puede valer de integrados diseñados para cumplir esta función de manera muy simple. Los tipos de DRAM que se encuentran actualmente son:

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS











Fast Page Mode DRAM: La idea es tener procesos de lectura/escritura sucesivos en la misma fila sin tener que realizar por cada lectura/escritura un procesamiento de la fila como se hace con las anteriores memorias DRAM. Extended Data Out (EDO) DRAM: Es similar a la anterior con una característica adicional, la cual permite que un nuevo ciclo de acceso pueda ser iniciado mientras se mantiene el dato en la salida del ciclo anterior. Esto mejora en un 5% la eficiencia de estas memorias. Synchronous Dynamic RAM (SDRAM): Las memorias vistas hasta el momento tienen una interfaz de comunicación asíncrona con los demás periféricos, incluyendo la CPU. Una memoria sincrónica, trabajará con el reloj del bus del sistema, resultando esto más eficiente. Por cada pulso de reloj en el bus, se realiza internamente una operación en la memoria. Estas memorias se conocen con referencias como PC66, PC100 y PC133, donde el número representa la frecuencia del reloj del bus. Double Data Rate SDRAM (DDR-SDRAM): La memoria anterior utiliza la señal de reloj para realizar las diferentes operaciones. Estas operaciones se dan cuando existe una transición de bajo a alto en la señal de reloj solamente, es decir, en un flanco de subida. La idea de DDR es realizar operaciones tanto estimuladas por la transición bajo a alto como por la transición alto a bajo, es decir, en flancos de subida y bajada, permitiendo que con la misma señal de reloj, se puedan realizar el doble de operaciones. Se sigue trabajando con frecuencias de bus de 100, 133, 166 y 200, donde la frecuencia efectiva será 200, 266, 333, 400 respectivamente, por eso el nombre de DDR200, DDR266, DDR333 y DDR400. En un computador que tiene un bus de datos de 64bits, la tasa de transferencia en bytes estará dada por 2x(frecuencia_bus)x8 teniendo velocidades de 1600Mbytes/seg, 2133Mbytes/seg, 2667Mbytes/seg y 3200MBytes/seg para memorias DDR200, DDR266, DDR333 y DDR400 respectivamente. Otras memorias disponibles son el RAMBUS DRAM, Video RAM, SGRAM, PSRAM.

5.2. Memoria Caché. Muchos microprocesadores incluyen en su interior o tienen acceso a lo que se conoce como caché de datos, se trata de un tipo de memoria que está ubicada entre el procesador y la memoria RAM y se emplea para almacenar datos que se utilizan frecuentemente así como algunas instrucciones que serán ejecutadas se para agilizar este proceso. Normalmente el caché se implementa en memorias estáticas de alta velocidad y su función principal es ayudar a compensar la lentitud de las DRAM para darle velocidad al sistema. 5.3. ROM (Read Only Memory).

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

Las memorias ROM son OTP (One Time Programmable) es decir solo pueden ser programadas una sola vez, este tipo de memorias no son volátiles puesto que no requieren la existencia de alimentación para retener los datos, normalmente son más lentas que las memorias RAM. Muchos microcontroladores contienen memoria ROM integrada al chip este hecho reduce los elementos requeridos para desarrollar sistemas embebidos simplificándose también su diseño. El propósito principal de la ROM en un sistema dado es el de mantener el código necesario y en algunos casos datos que se requiere que estén presentes al arrancar o iniciar un sistema dado. Dicho software generalmente conocido como firmware es simplemente un programa de computador que se encuentra embebido en un sistema y contiene la aplicación que hace funcional al sistema, por ejemplo en un computador el firmware que se encuentra en la BIOS (Basic Input/output System) normalmente implementado en memorias ROM, contiene el código necesario que se encarga de inicializar todos los dispositivos de E/S a un estado conocido. Los fabricantes de computadores normalmente las emplean en sistemas de soporte o placas madre en los que el firmware es estable y se presenta la ventaja de reducir los costos de producción. Figura 18. Memoria ROM (Read Only Memory).

Las memorias ROM en esencia son fabricadas a partir de grandes arreglos de diodos como se puede apreciar en la figura 18, el estado inicial de la memoria es como si todos sus elementos de almacenamiento se encontrasen en 1‟s, cada byte se leerá como 0xFF, el proceso para cargar la información en la memoria se conoce como “quemar” la ROM por el hecho de que consiste en suministrar la

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

corriente suficiente en los diodos apropiados para “volarlos” o “quemarlos” entonces se crearán ceros en estas posiciones. 5.4. PROM (Programmable Read-Only Memory). Muy similares a las ROM con la diferencia de que se trata del mismo arreglo de diodos pero a cada diodo es conectado en serie un fusible que será el elemento fundido en el proceso de quemado. Figura 19. Esquema de los componentes internos de las Memorias PROM (Programmable Read Only Memory).

5.5. EPROM (Erasable Programmable Read-Only Memory). Las OTP-ROMs son buenas para la producción en masa de productos completamente terminados pero en etapas de diseño y depuración resultan un desperdicio puesto que a cada cambio realizado se requeriría quemar una nueva memoria y desechar otra. Para tal efecto las memorias EPROM presentan la característica que pueden ser borradas mediante el efecto de la incidencia de rayos ultravioleta sobre la superficie del integrado gracias a una ventana ubicada en el chip (ver figura 20), su desventaja radica en la necesidad de remover el integrado de su ubicación en el sistema para borrar su contenido, además este proceso demora muchos minutos dependiendo del dispositivo, luego hay que volver a quemar el dispositivo y volver a probar el funcionamiento del circuito, resultando este proceso en tiempos muy lentos de depuración de errores. Figura 20. Memoria EPROM (Erasable Programmable Read Only Memory).

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

Tanto las memorias EPROM como sus predecesoras OTP son raramente utilizadas en la actualidad además sus capacidades normalmente no exceden 1 Mb. 5.6. EEPROM (Electrically Erasable Programmable Read-Only Memory). Las memorias de solo lectura eléctricamente borrables también conocidas como E2PROM son dispositivos que pueden ser borrados y programados “en circuito” (in-circuit) es decir en la posición en que están implementadas su capacidad es significativamente menor que la ROM estándar (típicamente algunos Kb) por lo tanto no están habilitadas para almacenar firmware. En lugar de esto se emplean normalmente para almacenar parámetros y datos que deben ser retenidos en los sistemas durante los tiempos de apagado. Comúnmente los microcontroladores incorporan pequeñas memorias EEPROM para almacenar diferentes parámetros, esto es de gran utilidad en sistemas embebidos y puede ser empleado para almacenar parámetros de configuración, direcciones de red, números seriales, etc. 5.7. Memorias FLASH. Es la tecnología ROM mas actualizada y es la dominante en el mercado actual, poseen características de reprogramación como la EEPROM y la gran capacidad de la ROM, También son conocidos como “FLASH-ROM” o “FLASH-RAM” pero siendo rigurosos no pertenece a ninguno de estos grupos. Las memorias FLASH almacenan información en arreglos de celdas de memoria hechos a partir de transistores de compuerta flotante éstos tienen la capacidad de almacenar pequeñas cargas durante periodos extendidos de tiempo así no exista una fuente de energía. Las memorias FLASH internamente se encuentran divididas por sectores que pueden ser borrados y programados sin afectar el contenido de los demás, normalmente para que un sector sea escrito primero debe ser borrado a diferencia de las RAM que pueden ser sobre-escritas por lo tanto no pueden ser de acceso aleatorio. Las celdas de memoria tradicionales single-level cell (SLC) manejan un solo nivel es decir que solo pueden almacenar un bit de información, algunas mejoras se han implementado obteniendo lo que se conoce como multi-level cell (MLC) estas pueden almacenar mas de 1 bit por celda seleccionando entre múltiples niveles de carga aplicada a las compuertas flotantes de dichas celdas.

Figura 21. Memoria FLASH

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

5.8. MMU (Memmory Management Unit). Es un dispositivo empleado para el manejo y acceso a memoria de datos que son requeridos por el procesador, entre sus funciones se encuentran la traducción de direcciones virtuales a direcciones físicas, protección de la memoria, control del caché y administración de los buses tanto de datos como de direcciones. 6. Bus de datos, direcciones y control. En una arquitectura dada, el bus es el conjunto de conductores eléctricos en forma de pistas metálicas impresas sobre una tarjeta, por donde circulan las señales que corresponden a los datos binarios del lenguaje máquina con que opera la unidad de procesamiento. Son los encargados de las transferencias internas de datos en un sistema en funcionamiento. En un bus todos los nodos reciben los datos aunque éstos se dirijan a nodos específicos, los nodos a los que no van dirigidos los datos simplemente ignoran dichos datos. Hay tres clases de buses: Bus de Datos, Bus de Direcciones y Bus de Control. El primero mueve los datos entre los dispositivos periféricos del sistema, en un computador por ejemplo hay dispositivos de entrada como el Teclado, el Escáner, el Ratón, etc.; de salida como la Impresora, el Monitor o la tarjeta de Sonido; y de Almacenamiento como el Disco Duro, el Diskette o la Memoria-Flash. El Bus de Direcciones, por otra parte, está vinculado al bloque de Control de la CPU para tomar y colocar datos en el Sub-sistema de Memoria durante la ejecución de los procesos de cómputo. El Bus de Control transporta señales de estado de las operaciones efectuadas por el CPU con las demás unidades. El número de pistas dedicado a cada uno de los buses está relacionado con el ancho de canal. Ancho de canal se refiere a la cantidad de bits que pueden ser

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

transferidos al mismo tiempo, es decir, al número de líneas disponibles para mover datos, controlar dispositivos o direccionar memoria. Una CPU como el MC68000 usa 24 líneas (24 bits) para direccionar la memoria y 16 líneas (16 bits) para mover datos entre la CPU y la memoria. Es decir, se tiene un ancho de canal de direcciones de 24 bits y un ancho de canal de datos de 16 bits. Un bus de datos con n bits, implica que n bits pueden ser transferidos al mismo tiempo, es decir, en paralelo. Con lo anterior, el procesador MC68000 podrá mover 16 bits a la vez (equivalente a 2 bytes ó 1 word) El ancho de canal establece también el valor mínimo y máximo que se puede enviar o transferir al tiempo. Para el bus de direcciones, el "ancho de canal" explica la cantidad de ubicaciones o direcciones diferentes que el microprocesador puede alcanzar. Si se tiene una cantidad m de bits o líneas de direcciones, la cantidad de ubicaciones resulta de elevar 2 a la m potencia. "2" porque son dos las señales binarias, los bits 1 y 0; y "m potencia" porque las m pistas del bus de direcciones son, en un instante dado, un conjunto de m bits. En el MC68000 se puede tener una cantidad de posiciones de memoria direccionables de: 224 = 16777216. Al número de direcciones que la CPU puede emplear se le conoce con el nombre de espacio de direcciones de la CPU. Lección 12: Arquitecturas más Comunes. La arquitectura de un sistema embebido es una abstracción del dispositivo, esto significa que se trata de una generalización del sistema que normalmente no detalla información de implementación ni códigos fuente o diseños de hardware, a nivel de arquitectura los componentes software y hardware son representados por elementos ya sea internos o externos al sistema embebido que describen comportamientos propiedades e interacciones que se pueden dar entre los diferentes elementos. Dentro del término arquitectura se engloban aspectos como formato de instrucción, modos de direccionamiento, conjunto de instrucciones, entre otros. La información a nivel de arquitectura es representada como estructuras, una estructura es una representación que contiene un conjunto de información de diversos elementos, propiedades e interacciones, podría decirse que se trata de una especie de imagen que enmarca el hardware y el software durante el diseño y/o puesta en marcha, dadas unas condiciones y un grupo de elementos. Puesto que es complicado recoger en una sola imagen toda la complejidad de un sistema, la arquitectura de un sistema embebido normalmente está conformada por más de una estructura que inherentemente se encuentran relacionadas unas con otras. Todo sistema embebido cuenta con los siguientes componentes:

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

   

Una Unidad Central de Procesamiento (CPU) encargada de procesar la información. Memoria para el almacenamiento de Instrucciones y Datos que serán procesados por la CPU. Medios de comunicación entre la CPU y la memoria (Buses de Direcciones, Datos y Control). Medios de comunicación entre la CPU y el mundo exterior (Buses de Direcciones, Datos y Control).

La forma en que estos elementos están conectados vienen definidos por las denominadas arquitecturas Von Neumann y Harvard. 1. Arquitectura Von Neumann. La arquitectura Von Neumann debe a su nombre al conocido matemático John Von Neumann, que propuso el concepto de programa almacenado. La idea principal de esta arquitectura es el empleo del mismo dispositivo de almacenamiento tanto para las instrucciones como para los datos. Los sistemas con la arquitectura Von Neumann constan de cinco partes: La unidad aritméticológica o ALU, la unidad de control, la memoria, dispositivo de entrada/salida y el bus de datos que proporciona un medio de transporte de los datos entre las distintas partes. Un dispositivo con arquitectura Von Neumann realiza o emula los siguientes pasos secuencialmente:    

Al encender el sistema se llama la instrucción desde la memoria en la dirección indicada por el contador de programa y la guarda en el registro de instrucción. Se aumenta el contador de programa dependiendo de la longitud de la instrucción para apuntar a la siguiente. Se decodifica la instrucción mediante la unidad de control. Ésta se encarga de coordinar el resto de componentes del ordenador para realizar una función determinada. Se ejecuta la instrucción. Ésta puede cambiar el valor del contador del programa, permitiendo así operaciones repetitivas. El contador puede cambiar también cuando se cumpla cierta condición aritmética, haciendo que el ordenador pueda 'tomar decisiones', que pueden alcanzar cualquier grado de complejidad, mediante la aritmética y lógica anteriores. Luego, vuelve a ejecutarse el primer paso.

Hoy en día, la mayoría de ordenadores están basados en esta arquitectura, aunque pueden incluir otros dispositivos adicionales, (por ejemplo, para gestionar las interrupciones de dispositivos externos como ratón, teclado, etc).

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

2. Arquitectura Harvard. A diferencia de la arquitectura Von Neuman, la Harvard se caracteriza por la existencia de dispositivos de almacenamiento diferentes para programas y para datos, el término proviene de la computadora Harvard Mark I, que almacenaba las instrucciones en cintas perforadas y los datos en interruptores. La idea es la existencia de dos buses de datos distintos, uno que controla el acceso a la memoria donde se almacenan las instrucciones que son ejecutadas por la unidad de procesamiento y el otro que sirve para acceder a los datos u operandos de dichas instrucciones. Una ventaja de esta arquitectura sobre la Von Neumann radica en el empleo de memorias de acceso de alta velocidad (SRAM) utilizadas como caché tanto para datos como para instrucciones para mejorar le eficiencia del acceso a estos por parte del procesador. Por otro lado, tiene el inconveniente de tener que dividir la cantidad de caché entre los dos, por lo que funciona mejor sólo cuando la frecuencia de lectura de instrucciones y de datos es aproximadamente la misma. Esta arquitectura suele utilizarse en DSPs. 3. Arquitectura de la CPU. Referida propiamente al diseño de la CPU. Normalmente este diseño se basa en la filosofía CISC (Complex Instruction Set Computer) o RISC (Reduce Instruction Set Computer). Antes de entrar en detalle de estas filosofías de diseño, conviene ver algunas definiciones previas. 3.1. Formato de Instrucciones. Cada procesador puede realizar muchas operaciones con datos que se encuentran en la memoria. Ellos tienen un conjunto de instrucciones ISA (Instruction Set Architecture), las cuales sirven para indicarle la realización de una determinada operación. El procesador toma de la memoria un código que le indica la operación a realizar, además de tomar de allí otros códigos que le indican de donde tomar los operandos y más. A este conjunto de códigos se le denomina formato de instrucción. Cada formato de instrucción incluye:  

Operación a realizar, contenida en un código denominado OpCode (Código de Operación). Longitud de la instrucción.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

 

Registro o dirección de memoria donde se encuentran los datos. (Modo de direccionamiento a usar). Extensiones en el formato de instrucción que sirven para o Colocar valores de desplazamiento. o Indicar extensiones en el modo de direccionamiento. o Colocar valores inmediatos o direcciones absolutas.

3.2. Conjunto de Instrucciones. Un conjunto de instrucciones, repertorio de instrucciones o arquitectura del conjunto de instrucciones (ISA) es una especificación que detalla las instrucciones que una CPU de un ordenador puede entender y ejecutar, o el conjunto de todos los comandos implementados por un diseño particular de una CPU. El término describe los aspectos del procesador generalmente visibles a un programador, incluyendo los tipos de datos nativos, las instrucciones, los registros, la arquitectura de memoria y las interrupciones, entre otros aspectos. La arquitectura del conjunto de instrucciones (ISA) se emplea a veces para distinguir este conjunto de características de la microarquitectura, que son los elementos y técnicas que se emplean para implementar el conjunto de instrucciones. Entre estos elementos se encuentran las microinstrucciones y los sistemas de caché. Procesadores con diferentes diseños internos pueden compartir un conjunto de instrucciones; por ejemplo el Intel Pentium y AMD Athlon implementan versiones casi idénticas del conjunto de instrucciones x86, pero tiene diseños internos completamente distintos. 3.3. Modos de direccionamiento. Mecanismo que permite conocer la ubicación de un dato o instrucción, es decir, le dice a la CPU como obtener la dirección efectiva (E.A. = Effective Address) donde se encuentra el operando. Se definen los siguientes parámetros dentro del modo de direccionamiento:   

Objeto: dato o instrucción que se desea direccionar. Una CPU dispone de varios modos de direccionamiento. Objetivos de los modos de direccionamiento: o Reducir el espacio ocupado en memoria por las instrucciones. o Permitir la reubicación del código. o Facilitar el manejo de las estructuras de datos.

3.3.1. Modos de direccionamiento en las instrucciones.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

Los operandos y el resultado de una instrucción son accedidos a través de los modos de Direccionamiento que la CPU posee. Algunos campos del formato de instrucción, contienen información acerca del modo de direccionamiento empleado para conocer la E.A. del operando. En la sección 2.6.1 se explicaron los diferentes métodos de direccionamiento de las direcciones por lo que a continuación solo serán nombrados a manera de repaso: inmediato, directo, indirecto, relativo, indexado. 3.4. Filosofía CISC de diseño de CPUs. Del inglés Complex Instruction Set Computer. Conjunto de microprocesadores cuyo conjunto de instrucciones se caracteriza por ser muy amplio y permitir operaciones complejas entre operandos situados en la memoria o en los registros internos, en contraposición a la arquitectura RISC. Este tipo de arquitectura dificulta el paralelismo entre instrucciones, por lo que, en la actualidad, la mayoría de los sistemas CISC de alto rendimiento implementan un sistema que convierte dichas instrucciones complejas en varias instrucciones simples del tipo RISC, llamadas generalmente microinstrucciones. Los CISC pertenecen a la primera corriente de construcción de procesadores, antes del desarrollo de los RISC. Ejemplos de ellos son: Motorola 68000, Zilog Z80 y toda la familia Intel x86 usada en la mayoría de ordenadores personales del planeta. Hay que hacer notar, sin embargo que la utilización del término CISC comenzó tras la aparición de los procesadores RISC como nomenclatura despectiva por parte de los defensores/creadores de éstos últimos. 3.5. Filosofía RISC de diseño de CPUs. En arquitectura computacional, RISC del inglés Reduced Instruction Set Computer (Computadora de Conjunto de Instrucciones Reducido). Tipo de microprocesadores con las siguientes características fundamentales:   

Instrucciones de tamaños fijos y presentadas en un reducido número de formatos (modos de direccionamiento simples). Sólo las instrucciones de carga y almacenamiento acceden a memoria por datos. Además, estos procesadores suelen disponer de muchos registros de propósito general.

El objetivo de diseñar máquinas con esta arquitectura es posibilitar la segmentación y el paralelismo en la ejecución de instrucciones y reducir los accesos a memoria. Las máquinas RISC protagonizan la tendencia actual de

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

construcción de microprocesadores. PowerPC, DEC Alpha, MIPS, ARM... son ejemplos de algunos de éstos. RISC es una filosofía de diseño de CPU para computadora que esta a favor de conjuntos de instrucciones pequeños y simples que toman menor tiempo para ejecutarse. El tipo de procesador más comúnmente utilizado en equipos de escritorio, el x86, está basado en CISC en lugar de RISC, aunque las versiones más nuevas traducen instrucciones basadas en CISC x86 a instrucciones más simples basadas en RISC para uso interno antes de su ejecución. La idea fue inspirada por el hecho de que muchas de las características que eran incluidas en los diseños tradicionales de CPU para aumentar la velocidad estaban siendo ignoradas por los programas que eran ejecutados en ellas. Además, la velocidad del procesador en relación con la memoria de la computadora que accedía era cada vez más alta. Esto conllevó a la aparición de numerosas técnicas para reducir el procesamiento dentro del CPU, así como de reducir el número total de accesos a memoria. Lección 13: Comparación de los dispositivos más comunes. A la hora de escoger un dispositivo para desarrollar una determinada aplicación se deben tener en cuenta diferentes aspectos que incluyen la revisión de requerimientos técnicos, presupuestos, etc. La idea es seleccionar un dispositivo que reúna todas las características que un diseño requiera sin necesidad de emplear dispositivos sobredimensionados para dicha aplicación. Para facilitar este hecho a continuación se presentan las características, ventajas y desventajas que representan los diferentes dispositivos. 1. Arreglos de Compuertas Programables. Para definir este tipo de dispositivos se puede pensar en un hardware que es configurado para ser convertido en un sistema digital específico, describiendo su arquitectura mediante un lenguaje de programación de alto nivel. Existe una amplia variedad de este tipo de dispositivos entre los que se encuentran: PLAs (Program Logic Arrays), PAL (Programmable Array Logic), GALs (Generic Logic Arrays), FPGA (Field Programmable Gate Arrays). El hardware configurable puede consistir en arreglos múltiples de compuertas AND de entrada configuradas para alimentar arreglos múltiples de compuertas OR esto permite la implementación de complejos circuitos de lógica combinacional utilizando la representación estándar en productos de sumas. Muchos de estos dispositivos programables además están habilitados para la implementación de circuitos secuenciales puesto que contienen bloques con flip-flops. Para diseños

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

mucho más avanzados las PFGA pueden ser programadas con algoritmos extremadamente complejos en el desarrollo de aplicaciones específicas, normalmente estos sistemas digitales complejos son programados empleando VHDL (Verilog Hardware Descriptive Language), como su nombre lo dice se trata de un lenguaje de programación de alto nivel empleado para la descripción de este tipo de hardware. Aunque son dispositivos que presentan grandes ventajas y funcionalidades, los sistemas de desarrollo son un poco costosos sumado al hecho de que sería sobredimensionado utilizar este tipo de dispositivos en aplicaciones pequeñas que no requieran una cantidad importante de procesamiento o que no requiera una cantidad muy grande de pines de entrada/salida. 2. Microprocesadores: Los microprocesadores son conocidos por ser los principales circuitos integrados en el interior de los computadores personales, empleados normalmente para resolver una amplia cantidad de tareas. Los microprocesadores interpretan las diferentes instrucciones y procesa los datos contenidos en los programas de los computadores, además se encargan de coordinar las diferentes funciones internas de los PC, manejo de memoria, manejo de puertos y periféricos, de realizar los diferentes cómputos requeridos, etc. El microprocesador por si solo no maneja todo el funcionamiento de un PC, se requiere la existencia de una serie de integrados a los que entrega instrucciones para que estos se encarguen de ejecutar acciones dependiendo de su función en el sistema. Desde la aparición de los microcontroladores se emplean en menor medida en sistemas embebidos teniendo en cuenta los costos puesto que se requerirían una serie extra de integrados por ejemplo memorias, conversores A/D, etc, para obtener la misma funcionalidad de los microcontroladores. 3. Procesadores digitales de Señal (DSPs): Como su nombre lo indica, un DSP (Digital Signal Processor) es empleado cuando se requiere realizar complejos análisis de señales en volúmenes considerables y en tiempos reducidos, también manejan procesamiento de información en punto flotante de manera eficiente, un ejemplo de este tipo de aplicaciones es el procesamiento y acondicionamiento de señales de audio en telefonía celular. Para efectos del curso este tipo de dispositivos son demasiado sobredimensionados puesto que las aplicaciones que se realizarán a manera de prácticas y proyectos no requieren toda la velocidad ni el volumen de procesamiento que un dispositivo de estos puede brindar.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

4. Microcontroladores: Un microcontrolador (MCU) es un sistema con varios de los subsistemas que posee un computador, integrados en un solo chip, entre los que se encuentran puertos de entrada/salida, sistemas de temporización, memorias, una unidad aritmetico-lógica (ALU) que provee la capacidad de realizar operaciones aritméticas y lógicas así como la generación de señales de control. Normalmente, un microcontrolador se considera como un computador integrado en un solo chip pero con unas prestaciones bastante reducidas, siendo éste optimizado para aplicaciones específicas, son empleados cuando se requiere una moderada cantidad de inteligencia local para una determinada aplicación, aunque es posible realizar operaciones en punto flotante con un microcontrolador, está mejor calificado para trabajar con números enteros. Dependiendo de la casa fabricante y de la familia a la que pertenecen los componentes de los microcontroladores pueden variar, donde por familia se entiende como grupos de MCUs que se especializan en aplicaciones de diferente complejidad, entre los elementos que contiene un MCU más comunes se tiene:    

Unidad central de procesamiento o CPU. Normalmente con unas prestaciones muy reducidas a las de un procesador tradicional. Memoria tanto de programa como de datos. La cantidad es muy reducida pero suficiente para manejar una aplicación específica. Se incluye memoria RAM, EPROM, EEPROM y/o FLASH. Generador de reloj para el funcionamiento y sincronía de todo el MCU. Periféricos de E/S tales como: o Puertos de Entrada/Salida. o Líneas de interrupción externa. o Conversores A/D y D/A. o Generadores de base de tiempo. o Comunicación serial mediante protocolos UART, SPI, I2C, USB, CAN, LIN, etc. o Temporizadores de propósito específico, captura de eventos y generadores de señal PWM. o Controladores de LCD gráficos y de caracteres.

Como se puede observar, los microcontroladores son los dispositivos mas completos y mejor dimensionados para el desarrollo de sistemas embebidos de propósitos específicos que no requieran mayor cantidad de procesamiento. Por lo tanto desempeñan un papel importante para el desarrollo del presente curso puesto que forman la base de partida para el entendimiento general de los diferentes dispositivos y sistemas digitales vistos hasta ahora.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

5. Mezcla de procesamiento con microcontrolador y FPGA: Debido a que es importante poner en una balanza la complejidad del diseño a implementar y el hecho de escoger la tecnología mas adecuada para una aplicación dada, no siempre escoger una sola tecnología es la mejor opción. Las tendencias actuales en diseños digitales es la de utilizar mezclas como en el caso de el acople de una FPGA con un microcontrolador. Lección 14: Microcontroladores HC08

El 68HC08 también conocido como HC08 es una familia de microcontroladores de 8 bits de la casa fabricante Freescale (compañía creada a partir de la división de semiconductores de Motorola en 2004). Su arquitectura es Von Neumann, es decir con un solo bloque de memoria. Los HC08 son microcontroladores de propósito general, cada miembro de esta familia cuenta con una CPU común que controla diferentes periféricos, facilitando con ello el diseño de aplicaciones. Entre los periféricos internos que cuentan estos microcontroladores están: conversores análogos-digitales, módulo de control de tiempos y sistemas de comunicación como SPI, I²C, USB o SCI o UART entre otros. Freescale implementó mejoras a esta familia de microcontroladores resultando la familia HCS08 que ofrece mejoras en algunas de las instrucciones y agrega otras nuevas, además en esta mejora los programas que corren en los microcontroladores pueden ser corregidos empleando un puerto dedicado llamado BDM (Backgound Debug Module) , que mejora la versatilidad y amplia la gama de aplicaciones posibles. Existen infinidad de entornos de desarrollo tanto pagos como libres, para compilar programas realizados en assembler existe un compilador gratuito de la firma P&E Micro, para compilar en C los compiladores más utilizados son Freescale Codewarrior (licenciado) o SDCC, un proyecto muy interesante y funcional que permite compilar código escrito en C para múltiples plataformas de microcontroladores. 1. Arquitectura. En la figura 22 se observa los dispositivos de la familia HC08 presentan muchos de los elementos ya vistos a lo largo de esta unidad otros serán explicados mas adelante; por el momento basados en la figura 22 solo serán enumeradas las características generales que presentan esta familia de dispositivos. Figura 22: Esquema de componentes de la arquitectura de la familia HC08.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS



Control de estado del sitema: (SIM:System Integration Module). o Modos de bajo consumo (Wait, Stop ). o LVI (Low Voltaje Inhibit), monitor de VDD Bajo. o COP(Computer Operating Properly), perro guardian o Watch Dog. o Detección de Código de operación ilegal. o Detección de direccionamiento no válido. o POR: Power On Reset. o Control de reset interno o externo. o Retardo de encendido temporizado. o Control de interrupciones y prioridades.



Memoria: o Mapeada en su totalidad en un único espacio. o Indiferencia para guardar datos y programa en cualquier espacio. o Modo de bajo consumo para almacenamiento en RAM. o Flash y EEPROM programables internamente. o 10.000 ciclos de escritura y borrado. o 10 Años de retención de datos.



Temporización: o Temporizadores (Timers) de 16 bits multicanal y multifunción.  Entradas de captura.  Salidas por comparación.  Salidas PWM. o Generadores de base de tiempos para aplicaciones en tiempo real. o Módulo PLL para trabajar con cristales de baja frecuencia:  Reducción de EMI (Electro-Magnetic Interference).  Control de consumo. o Opcionalmente versiones con reloj interno (minimización de elementos de montaje).



Comunicaciones: o UART 7, 8, 9 Bits velocidad programable y detección de errores.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

o o o o 

Interfase serie sincrónica SPI hasta 4 MHz (Fbus/2). USB a 1.5Mbps. Soporte de Bus CAN. Buffers de transmisión/recepción.

Entradas y Salidas: o Conversores A/D de 8/10 bits de aproximaciones sucesivas. o Puertos de E/S Configurables. o Pines independientes configurables.  Pull/ups internos activos/desactivos. o Interfaz para teclado externo por interrupción, función Wake-up.

A continuación se entra a analizar deferentes aspectos de la arquitectura de los microcontroladores de la familia HC08: 2. Temporización. Una fuente de reloj de alta frecuencia (típicamente derivada de un cristal conectado al MCU) se usa para controlar las secuencias de instrucciones de la CPU. La mayoría de los HC08 incluyen un circuito PLL en su interior cuya función es generar frecuencias mas grandes a partir de la frecuencia del cristal, los MCUs típicos dividen la frecuencia base del cristal por dos o más para obtener un reloj de frecuencia de bus. Cada lectura o escritura de memoria toma un período (ciclo) de la frecuencia de bus, por ejemplo, con un cristal de 4 MHz dividido por 2 obtiene la frecuencia interna de reloj del procesador de frecuencia de bus de 500 nS. La mayoría de las instrucciones toman de dos a cinco de estos periodos; como resultado , la CPU es capaz de ejecutar más de 500.000 instrucciones por segundo. 3. Funcionamiento interno de la CPU. Todos los MCUs de la familia HC08 incluyen en su interior la CPU08 como unidad central de proceso, la diferencia entre los dispositivos de esta familia radica en la cantidad de memoria y los periféricos disponibles. La CPU08 básicamente está dividida en dos bloques principales: Unidad de Control y Unidad de Ejecución. La primera contiene una máquina de estados finita con lógica de sincronización y control. Las salidas de ésta controlan la segunda unidad, la cual contiene una ALU, registros y una interfaz hacia el bus de datos y direcciones. Internamente, la CPU utiliza cuatro fases de reloj para conformar lo que se denomina un ciclo de ejecución de la CPU o simplemente ciclo de bus, el cual tiene un periodo igual al periodo de la frecuencia del bus, siendo 4 veces el

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

periodo del cristal/oscilador externo. La frecuencia de bus es la frecuencia del cristal, oscilador externo o la salida del módulo PLL dividido por 4.

Donde CGMXCLK hace referencia a la frecuencia de entrada al módulo, la cual proviene directamente del oscilador/cristal externo. CGMVCLK es la frecuencia generada por el módulo PLL en los MCUs que disponen de él. 4. Consideraciones sobre la pila de la CPU08. La pila del sistema es una zona de memoria RAM direccionada por el puntero de pila o SP, la cual sirve para almacenar información temporalmente. El SP siempre está apuntando a una dirección libre de la pila o stack. La CPU utiliza la pila para:  

Almacenar el contenido del PC cuando se hace un llamado a subrutina (BSR o JSR) con el fin de poder retornar cuando ella finalice, es decir, cuando se encuentre la instrucción RTS (Return of Subrutine). Almacenar el contenido del PC y varios de los registros del modelo de programación cuando se produce una interrupción de manera que se pueda retomar la ejecución del programa en donde ésta se presentó. La finalización de una subrutina de atención a interrupción se da cuando se ejecuta la instrucción RTI (Return of Interrupt).

Adicionalmente, el programador puede utilizar la pila para:   

Almacenar información temporal cuando está realizando operaciones aritméticas. Enviar parámetros a las subrutinas. Retornar parámetros desde una subrutina.

La CPU08 ofrece un conjunto de instrucciones que permiten manipular el puntero de pila SP con el fin de poder colocar/tomar datos en/desde la pila, incluso, el programador en cualquier momento podrá reubicar la posición del SP haciendo uso de la instrucción TXS (transferir H:X a SP). Por compatibilidad con la familia HC05 el puntero de pila arranca en la dirección de memoria $00FF. La pila en la CPU08 trabaja como una memoria LIFO (Last Imput First Output) (último en entrar primero en salir) siendo necesario tener presente este concepto a todo momento.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

5. Mapa de Memoria del 68HC08 Para la familia HC08 el mapa de memoria se puede apreciar en la figura 23, se puede apreciar que comienza con los registros de los periféricos (64 bytes), seguido del espacio para la RAM, después existe un espacio no utilizable por el usuario empleado para realizar verificaciones de direcciones ilegales, luego sigue el espacio para la memoria ROM o FLASH, finalmente siguen otros registros de propósitos específicos (ver figura 23). Figura 23: Mapa de memoria para la familia 68HC08.

6. Juego de instrucciones. La familia 68HC05 posee un juego de instrucciones de 85 elementos, sobre esta base trabaja también la familia 68HC08 pero añadiendo 28 instrucciones que complementan a las básicas para añadir mayor funcionalidad y eficiencia a estos dispositivos; por el momento se presentan las instrucciones en la Tabla 3 para que el estudiante se familiarice con los nombres y su funcionalidad general sin entrar a especificar su sintaxis y funcionalidad específica, se resaltan en rojo las instrucciones añadidas a la familia 68HC08. Tabla 3: Juego de instrucciones de la familia 68HC08: Transferencia de Datos

LDA, LDX, STA, STX, TAX, TXA, LDHX, MOV, PSHA, PSHH, PSHX,PULA, PULH, PULX, STHX

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

Aritméticas

ADD, ADC, SUB, SUBC, MUL, DAA, DIV

Manipulación de Datos

INCA, INCX, INC, DECA, DECX, DEC, CLR, NEGA, NEGX, NEG, AIS, AIX, CLRH

Rotación y Desplazamiento

ROLA, ROLX, ROL, RORA, RORX, ROR, LSLA, LSLX, LSL, LSRA, LSRX, LSR, ASRA, ASRX, ASR

Manipulación de bits

BSET, BCLR

Lógicas

AND, ORA, EOR, COMA, COMX, COM, NSA

Comparación

CMP, CPX, BIT, TSTA,TSTX, TST, BRCLR, BRSET, CPHX

Salto condicional

BRA, BRN, BSR, BHI, BLO, BHS, BLS, BPL, BMI, BEQ, BNE, BCC, BCS, BHC, BHCC, BHCS, BMC, BMS, BIL, BIH, BGE, BGT, BLE, BLT, CBEQ, CBEQA, CBEQX, DBNZ.

Salto incondicional

JMP, JSR, RTS

De Control

SEC, CLC, SEI, CLI, SWI, RTI, RSP, NOP, WAIT, STOP, TAP,TPA, TSX, TXS

A lo largo del curso se explicarán la sintaxis y funcionalidad de algunas de las instrucciones a manera de ejemplo, es tarea del estudiante buscar en las hojas de datos y en documentos de la red la manera de utilizar las demás instrucciones para conocer su funcionalidad y que tenga las bases adecuadas en caso de que requiera utilizarlas de forma óptima en sus prácticas. El manual de referencia de la CPU HC08 detalla claramente cada una de las instrucciones que soporta, otra buena opción es el “Juego de instrucciones del HC08” [19] con explicación detallada, sintaxis y ejemplos de programación. 7. Modelo de programación. El modelo de programación de la CPU del HC08 es similar al de su predecesor el 68HC05 agregando algunas mejoras (ver figura 24), también este modelo es común a toda la familia independientemente de la cantidad de recursos que posea un dispositivo determinado. Figura 24. Modelo de programación de la familia de microcontroladores 68HC08.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

A continuación se explica el uso de cada uno de los registros del la figura 24: Acumulador (A): es un registro de 8 bit de propósito general empleado por la CPU para mantener operandos y resultados de operaciones aritméticas y lógicas. Registro Índice (H:X): es un registro de 16 bits empleado para los modos de direccionamiento indexados en el espacio de memoria de 64 Kb de la CPU, también puede ser utilizado como acumulador auxiliar. Se diferencia la parte alta o byte de de mayor peso (H) de la parte baja o byte de menor peso (X) puesto que existen diferentes comandos y operaciones para manipular cada una. En las instrucciones indexadas, el registro X provee un valor de 8 bits que es sumado a la dirección base provista por la instrucción para crear una dirección efectiva. El valor provisto por la instrucción puede ser de 0, 1 ó 2 bytes de largo. Apuntador de Pila o Stack Pointer (SP): es un registro de 16 bits que contiene la dirección de la RAM referida a la posición libre de la pila del sistema (stack) mas adelante de ahondara en éste. Después de resetear el sistema el SP es cargado con un valor de $00FF. Cuando un dato es almacenado en la pila, la dirección del registro SP es decrementa, caso contrario ocurre cuando se toma un dato de la pila. El SP siempre apunta a una posición libre de la RAM. Contador de Programa (PC): Es un registro de 16 bits que contiene la dirección de la siguiente instrucción a ser ejecutada, normalmente la dirección contenida en el PC se incrementa automáticamente cada vez que se busca una instrucción en memoria, a excepción de casos como saltos absolutos o relativos, condicional, incondicional o subrutina, en los que se carga en el PC la dirección donde el flujo de programa debe continuar su ejecución. Durante el Reset, el contador de programa (PC) se carga con la dirección contenida en el "Reset Vector" que para el MC68HC908 se encuentra en la posición $FFFE y $FFFF. La dirección

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

contenida en el vector, es la dirección de la primera instrucción a ser ejecutada después de salir del estado de RESET. Registro de Código de Condición (CCR): también conocido registro de estado de la CPU, es un registro de 8 bits que contiene una máscara de interrupciones y además almacena 5 indicadores de estado que reflejan el resultado de alguna operación previa hecha por la CPU. Algunas instrucciones usan a los bits de estado para tomar decisiones simples dependiendo de su estado. Las banderas de este registro se pueden apreciar de la figura 24 y son: Bit de Desbordamiento u Overflow (V): Bandera que indica el desbordamiento en complemento a dos del resultado de la última operación mediante un „1‟ lógico. Bit de Acarreo Medio (H): Esta bandera es empleada en operaciones aritméticas con números decimales codificados en binario o BCD y es afectada por las operaciones suma ADD o ADE. El bit H se pone en „1‟ cuando se produce un acarreo del dígito hexadecimal de menos peso en los bits 3-0 al dígito de más peso en bits 7-4. Luego de la suma binaria de dos valores de 2 dígitos BCD, este bit de semi-acarreo es parte de la información necesaria para volver el resultado a un valor BCD válido. Bit de Máscara de Interrupción (I): Este bit no es una bandera de estado, es un bit de máscara de interrupción que deshabilita todas las fuentes de interrupción enmascarables cuando el bit I está en uno. Las interrupciones están habilitadas cuando este bit está en cero. Cuando cualquier interrupción ocurre, el bit I pasa automáticamente a uno luego de haber salvado los diferentes registros en la pila, pero antes el vector de interrupción es buscado. Si una interrupción interna ocurre mientras el bit I está en uno, la interrupción es almacenada y procesada luego que el bit I se ponga en cero; de esta manera, no se pierde ninguna interrupción (IRQ) que se presente cuando el bit está en uno. Luego de haber atendido a una interrupción, la instrucción retorno desde una interrupción (RTI) provocará que los registros recuperen sus valores previos. Normalmente, el bit I permanecería en cero luego que fuese ejecutada la instrucción RTI. Luego de cualquier reset, el bit I estará en uno y sólo podrá llevárselo a cero por medio de una instrucción. Bit de Negativo (N): El bit N se pone en „1‟ cuando el resultado de la última operación aritmética, lógica o de manipulación de datos es negativo. Para los valores signados según la convención de complemento a dos, se considera que un número es negativo si el bit más significativo es un uno. El bit de Cero (Z): El bit Z se pone en „1‟ cuando el resultado de la última operación aritmética, lógica o de manipulación de datos es cero. Una operación de

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

comparación resta un valor desde la posición de memoria que está siendo evaluada. Si los valores son iguales antes de la comparación, el bit Z se pondrá en uno. Bit de Acarreo/Préstamo (C): El bit C es usado para indicar si ha habido o no acarreo de una suma o pedido de préstamo como resultado de una resta. Las instrucciones de desplazamiento y rotación operan sobre y a través del bit C para facilitar operaciones de desplazamiento de múltiples bytes. El bit C es además afectado durante las instrucciones de evaluación de bit y de bifurcación. 8. Modos de direccionamiento. La velocidad de cualquier sistema computacional radica en la habilidad de dicho sistema para acceder datos e instrucciones en la memoria, esta capacidad la brindan los diferentes modos de direccionamiento aprendidos. Cada variante de los modos de direccionamiento debe tener un único código de operación (op-code) de instrucción. A continuación se presentan los diferentes modos de direccionamiento básicos con su correspondiente ejemplo para aclarar su funcionamiento: -

Inherente: este tipo de instrucciones no tienen operando puesto que éste se define en el op-code de 8 bits. Por ejemplo si se quiere borrar el acumulador se emplea la instrucción CLRA, que es una instrucción de un solo ciclo para el HC08.

-

Inmediato: las instrucciones que manejan direccionamiento inmediato tienen dos operandos que siguen inmediatamente al op-code de 8 o 16 bits. Por ejemplo la instrucción LDA #20 es una instrucción de 2 bytes que carga el acumulador con el número 20 en dos siclos de reloj.

-

Directo; éstas no poseen la dirección de 8 bits del operando que sigue inmediatamente al op-code, por lo tanto acceden directamente a los primeros 256 bytes de la memoria (página directa o página cero). Por ejemplo la instrucción LDA $40 carga el acumulador con el dato almacenado en la posición número 40 de la memoria, es una instrucción de dos bytes y se ejecuta en tres ciclos de reloj.

-

Extendido: éstas proporcionan direccionamiento absoluto a cualquier posición de los 64Kb del mapa de memoria sin paginar, el op-code requiere tres bytes mas dos de la dirección del operando. Ejemplo LDA $4000.

-

Relativo: es empleado por las instrucciones de bifurcación condicional, si la condición de bifurcación es verdad el controlador de programa se agrega al byte con signo que sigue inmediatamente al op-code de bifurcación obteniéndose un rango de bifurcación de -128 a +127 bytes, la

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

instrucciones de salto o salto a subrutina se pueden usar para mover el contador de programa a cualquier posición del mapa de memoria. Ejemplo BIL LOOP. -

Indexado: este tipo de direccionamiento es clave para direccionar tablas y estructuras similares de datos de manera eficiente, los modos básicos para el direccionamiento indexado son: indexado sin offset por ejemplo LDA ,X, indexado con offset de 8 bits, por ejemplo LDA $40,X e indexado con offset de 16 bits, ejemplo LDA $4000,X. El indexado sin offset se conoce en la mayoría de arquitecturas como el direccionamiento del puntero indirecto.

Hasta ahora estos modos de direccionamiento son compartidos por las familias 05 y 08 a continuación se presentan los modos agregados para la familia HC08: -

Indexado: puede ser sin offset con incremento posterior o con offset de 8 bits con decremento posterior, son modos de direccionamiento indexado con post-incremento automático del puntero de índice, por ejemplo: o Indexado sin offset con incremento posterior: CBEQ X+, Label. o Indexado con offset de 8 bits con incremento posterior: CBEQ $50,X+, Label.

-

-

Stack Pointer: es un tipo de direccionamiento relativo del puntero de pila, puede ser con offset de 8 bits o con offset de 16 bits. Su trabajo es similar al modo indexado pero empleando el Stack Pointer en lugar del registro índice, Por ejemplo: o Stack Pointer con offset de 8 bits:

STA $10,SP.

o Stack Pointer con offset de 16 bits:

STA $1000,SP.

Mover de Memoria a Memoria: Para este fin se emplea el comando MOV para mover los datos directamente sin emplear el acumulador, existen diferentes formas en las que se puede ejecutar esta instrucción dependiendo del modo de origen y el modo de destino: o Inmediato a directo, por ejemplo: MOV #20,$40 o Indexado a directo con incremento posterior, por ejemplo: MOV X+, SCDR o Directo a indexado con incremento posterior, por ejemplo: MOV SCDR, X+

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

Se puede tomar por ejemplo la instrucción ADD, ésta toma un operando de memoria y lo suma con el valor del registro A. En la Tabla 4 se observa que para diferentes modos de direccionamiento el código de operación es diferente. Siempre, en un código de máquina, el primer (o primeros) byte es el código de operación, seguido de los bytes complementarios como información para el modo de direccionamiento empleado: Tabla 4. Ejemplo de diferentes modos de direccionamiento con el comando ADD Instrucción

Modo de direccionamiento

OpCode Adición

Código de Máquina

ADD #$45

Inmediato

AB

1

AB45

ADD $50

Directo

BB

1

BB50

ADD $FE00

Extendido

CB

2

CBFE00

ADD ,X

Indexado

FB

0

FB

ADD $45,X

Indexado, offset 8 bits

EB

1

EB45

ADD $79F4,X

Indexado, offset 16 bits

DB

2

DB79F4

ADD $30,SP

StackPointer, offset 8 bits

9EEB

1

9EEB30

ADD $A47B,SP

StackPointer, offset 16 bits

9EDB

2

9EDBA47B

En la “Guía Didáctica del 68HC08” [20] que se encuentra en Internet (en español) se pueden encontrar diferentes ejemplos de implementación de los modos de direccionamiento con su correspondiente explicación detallada. 9. Reset, fuentes de interrupción y enmascaramiento. La CPU del microcontrolador ejecuta instrucciones de manera secuencial, sin embargo, en muchas aplicaciones es necesario ejecutar un conjunto de instrucciones en respuesta a una petición hecha por algún periférico, la cual, normalmente se hace de manera asíncrona con el programa que se esté ejecutando. El Reset y las interrupciones son excepciones propias de la CPU08. Al conjunto de instrucciones que se deben ejecutar en respuesta a una petición de este tipo se denomina subrutina de atención a la excepción, la cual es llamada por la CPU después de detectar la excepción o evento.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

El reset es un mecanismo empleado para forzar al sistema del microcontrolador a ir a un punto de partida conocido (dirección de memoria) de igual manera los dispositivos de entrada y salida y en general todos los periféricos de un sistema pasan a un estado inicial después de un reset. Las siguientes acciones internas ocurren como resultado de cualquier reset del MCU: 1) Todos los registros de dirección de datos se colocan en cero (como entradas). 2) El puntero a la pila (SP) es forzado a $00FF. 3) El bit I del CCR se pone en uno inhibiendo a las interrupciones enmascarables. 4) El latch de interrupciones externas es borrado. 5) El latch de STOP es borrado. 6) El latch de WAIT es borrado. Cuando el sistema de computadora sale de reset, el contador de programa se carga con el contenido de las posiciones de memoria más altas; el valor que se encuentra en la segunda más alta se carga en el byte más significativo del PC y el valor que se encuentra en la mas alta se carga en el byte menos significativo del PC. Esto se denomina “búsqueda del vector de reset”. En este punto la CPU comenzará la búsqueda y ejecución de instrucciones, comenzando por la dirección almacenada en el vector de reset. Las siguientes condiciones pueden causar que el MCO se resetee:    

Externamente, una señal de entrada activa baja en el pin RESET. Internamente, al encender la fuente de alimentación (POR: Power On Reset). Internamente, expiración de tiempo del cronómetro de vigilancia del comportamiento apropiado de la computadora (COP: Computer Operating Properly o Watchdog Timed Out). Un intento de ejecutar una instrucción desde una dirección ilegal.

9.1. Pin de Reset. Un pulsador o un circuito externo pueden conectarse a este pin para permitir el reset manual del sistema. 9.2. Reset al encender la Fuente de Alimentación (Power-On Reset).

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

El reset al encender la fuente de alimentación ocurre al detectarse una transición positiva sobre VDD. Su uso es estrictamente para la condición de encendido y no podrá utilizarse para detectar caídas de la tensión de la fuente de alimentación. Podrá usarse un circuito inhibidor de baja tensión (LVI) para detectar caídas de la fuente. El circuito de power-on provee una demora de 4064 ciclos desde el momento en que el oscilador se ha activado. Si el pin de /RESET exterior permanece en bajo al expirar el tiempo de los 4064 ciclos de demora, el procesador permanecerá en la condición de reset hasta que /RESET se coloque en alto. 9.3. Reset por Watchdog Timer. El sistema de cronómetro de vigilancia del comportamiento apropiado de la computadora (COP) se propone detectar errores de programas. Cuando se activa el COP es responsabilidad del programa evitar que un cronómetro de vigilancia que corre libremente llegue al final de su cuenta. Si llega a completar su cuenta, sería una indicación de que el programa no ha sido ejecutado por un largo período de tiempo en la secuencia deseada; entonces se inicia el reset del sistema. Un bit de control del registro (no volátil) máscara de opciones (MOR) puede usarse para habilitar o deshabilitar el reset del COP. Si el COP es habilitado, la adecuada operación del programa debe periódicamente escribir un cero en el bit COPC del registro de control COPR. 9.4. Reset por Acceso a Dirección Ilegal. Si el programa es escrito incorrectamente, es posible que la CPU intente saltar o bifurcar a una dirección en la que no haya memoria. Si esto sucede, la CPU podría continuar leyendo datos (resultando ser valores impredecibles) e intentaría actuar en consecuencia si se tratase de programa. Estas instrucciones sin sentido pueden provocar que la CPU escriba datos inesperados en memoria o registros diseccionados inesperados. Esta situación se llama desbocamiento. El MCU posee un circuito detector de direcciones ilegales para evitar la condición de desbocamiento. Si la CPU trata de buscar una instrucción de una dirección que no pertenece a la EPROM ($0300 - $07CF, $07F0 - $07FF), ni a la ROM de prueba interna ($07EE - $07EF), se genera un reset que obliga al programa a comenzar nuevamente. 9.5. Interrupciones.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

Son a veces usadas para interrumpir el procesamiento normal para responder a algún evento inusual. El MCU puede ser interrumpido por las siguientes fuentes de interrupción:    

Un „0‟ lógico aplicado al pin de interrupción externa (IRQ). Un „0‟ lógico aplicado a cualquier pin PA3 - PA0 (si la función del puerto de interrupción es habilitada). Un pedido de desborde (overflow TOF) o interrupción de tiempo real (RTIF) desde el sistema de temporización por programa (SWI). La instrucción de interrupción por programa (SWI).

Si una interrupción se produce mientras la CPU está ejecutando una instrucción, ésta será completada antes que la CPU responda al pedido de interrupción. Las interrupciones pueden ser inhibidas en conjunto poniendo un uno en el bit I del CCR o bien individualmente, poniendo ceros en los bits de control de habilitación de cada fuente de interrupción. El reset fuerza el bit I a uno y a cero a todos los bits de habilitación de interrupciones locales a fin de prevenir interrupciones durante el proceso de inicialización. Cuando el bit I está en uno, ninguna interrupción (excepto SWI) es reconocida. Aunque pueda registrarse a la fuente de interrupción su pedido no será atendido hasta que el bit I se ponga en cero. 9.6. Interrupciones Externas. Las interrupciones externas proceden del pin IRQ o de los bits 3 - 0 del port A, si el puerto A se ha configurado como puerto de interrupciones. La sensibilidad del pin IRQ es programable. Disponemos de disparo sólo sensible a un flanco o bien sensible a flanco descendente y nivel. Se emplea un bit del registro máscara de opciones (MOR) para configurar la sensibilidad del pin IRQ. El pin IRQ es activo bajo y las interrupciones del puerto A son activas en alto. Los microcontroladores a veces incluyen sistemas periféricos dentro de su mismo chip que pueden generar interrupciones a la CPU. El sistema de temporización del MCU es un ejemplo de este tipo de periféricos. Las interrupciones internas trabajan del mismo modo que las externas excepto por que hay vectores de interrupción separados para cada sistema periférico incluido en el circuito integrado. 9.7. Interrupciones por Programa (SWI). La interrupción por programa es una instrucción ejecutable. La acción de la instrucción SWI es similar a la de una interrupción (bit I) del CCR. 10. Características eléctricas.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

A continuación se presenta una tabla con el resumen de las características eléctricas absolutas del los MCOs de la familia HC08, para información detallada y específica de las características eléctricas y térmicas de estos dispositivos, remitirse a la hoja de datos (data-sheet) del dispositivo de interés. Tabla 5: Características Máximas de los dispositivos de la familia HC08. Característica Fuente de Voltaje

Símbolo

Valor

Unidad

VDD

-0.3 a 6.0

V

VIN

VSS -0.3 a VDD +0.3

V

Voltaje de Entrada Todos los pines (excepto IRQ1)

Pin de IRQ1

VSS -0.3 a 8.5 I

 25

mA

Corriente Máxima de Salida para VSS

IMVSS

100

mA

Corriente Máxima de Salida para VDD

IMVDD

100

mA

Temperatura Almacenamiento

TSTG

-55 a 150

°C

Corriente Máxima por Pin (Excepto VDD y VSS)

de

Lección 15: Microprocesadores ColdFire y tarjetas de desarrollo. A manera de información se analizan las características de este dispositivo en caso de algún interés por parte del estudiante para realizar alguno de sus proyectos. Coldfire es una familia de microprocesadores de la casa fabricante de semiconductores FreeScale, La arquitectura Coldfire esta diseñada para abordar aplicaciones avanzadas tanto en el área industrial como aplicaciones generales de consumo. Está presente desde hace 15 años en el mercado y representa una de las familias de procesadores de 32 bits más extensas que se encuentra en continua investigación y desarrollo de nuevos dispositivos, posee variedad de

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

opciones de conectividad. El tamaño del núcleo es lo suficientemente reducido para permitir la alta integración de memoria y periféricos. Además su conjunto de instrucciones de longitud variable le permite una optimización de código nativo sin sacrificar de ningún modo las prestaciones del procesador. Los módulos MAC y el más avanzado EMAC forman parte del núcleo de los procesadores de la familia Coldfire V2/V3/V4, proporcionando soporte para algoritmos de procesado digital de señal. Los módulos MAC/EMAC son una extensión del multiplicador básico contenido en otras arquitecturas de 32 bits. El objetivo de esta extensión hardware es proporcionar la ejecución nativa de operaciones de procesado digital lo más rápido y eficientemente posible dentro de los límites establecidos por la aplicación. La arquitectura Coldfire no fue diseñada para procesado digital de alta velocidad, pero del mismo modo un DSP de altas prestaciones podría ser excesivo dentro de muchas aplicaciones embebidas. Coldfire con la adición del módulo MAC/EMAC ocupa el lugar intermedio entre velocidad, complejidad de diseño y funcionalidad. Los microprocesadores Coldfire son bastante empleados para aplicaciones de sistemas embebidos porque además de la economía y la facilidad en su programación, representa ventajas en su empleo como la existencia de herramientas software y fácil acceso a soporte online, documentación e infinidad de librerías con aplicaciones en diversas áreas. Tarjetas de desarrollo. Las tarjetas de desarrollo son sistemas integrados cuya razón de ser es brindar al usuario, llámese estudiante, ingeniero o desarrollador, las herramientas necesarias para diseñar y desarrollar aplicaciones. Normalmente una tarjeta de desarrollo es una placa de circuito impreso en la que se han implementado diferentes componentes de uso común a la hora de desarrollar un sistema embebido además de la electrónica de soporte para programar el dispositivo. La ventaja de emplear este tipo de trajetas de desarrollo radica en el hecho de que se cuenta con un hardware de propósito general que brinda el acceso a los diferentes periféricos del MCU entonces el desarrollo se reduce a la programación adecuada del dispositivo evitandose la realización de gran parte del hardware en cada proyecto de diseño. Entre los componentes que se pueden encontrar en una tarjeta de desarrollo están:  

Interfaces visuales como displays de 7 segmentos, Leds o LCD. Dispositivos externos para almacenamiento de datos (memorias).

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

     

Integrados para manejo de temporización (relojes). Fuentes de alimentación regulada. Dispositivos de entrada como Swiches pulsadores o teclados. Interfaces y conectores para la comunicación manejando diferentes protocolos (USB, RS232, Ethernet, etc.) Conectores que habilitan el acceso a los diferentes puertos de E/S del microcontrolador. Elementos de salida de potencia como Reles, Dirvers para motores, etc.

En la siguiente figura se presenta un ejemplo de tarjeta de desarrollo: Figura 25: ejemplo de tarjeta de desarrollo.

ACTIVIDADES DE AUTOEVALUACIÓN DE LA UNIDAD      

Que es un sistema embebido? Cuál es la importancia y la aplicación de un sistema embebido? Cuáles son las fases de diseño de un sistema embebido? Cuáles son los componentes principales de un sistema embebido? Cuáles son los componentes de una CPU? Cuáles son las características de un microcontrolador HC08?

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

BIBILIOGRAFÍA: [1]

BARRETT Steven F, Pack Daniel J.Microcontrollers Fundamentals for Engineers and Scientists. Morgan & Claypool. 2006.

[2]

NOERGAARD Tammy. Embedded Systems Architecture. Newnes. 2005.

[3]

MARWEDEL Peter. Embedded System Design. Springer. 2006.

[4]

CATSOULIS John. Designing Embedded Hardware. O'Reilly. 2005.

[5]

ZURELL Kira.(2000). C Programming for Embedded Systems. R&D Books.

[6]

BARR Michael. Programming Embedded Systems in C and GNU Development. O‟Reilly. 2006.

[7]

P. RAGHAVAN, Amol Lad, Sriram Neelakandan. Embedded Linux System Design and Development. Auerbach Publications. 2006.

LINKS [8] www.freescale.com [9] http://www.cosmic-software.com/products.php [10] http://www.uclinux.org/ports/coldfire/ [11] http://www.processorexpert.com/ [12] http://www.embedded.com [13] http://www.bairesrobotics.com.ar/data/guia68hc08.pdf [14] http://gem.win.co.nz/mario/hc08/ [15] http://akimpech.izt.uam.mx/Web_jr/ami.htm [16] http://www.it.uc3m.es/ttao/html/index.html [17] http://www.lasalle.edu.co/csi_cursos/informatica/teoria/ (Glosario) [18] http://www.depeca.uah.es/wwwnueva/docencia/ITIEI/sd/index.htm#documentos [19] www.bairesrobotics.com.ar/data/instrucc0508.pdf [20] www.bairesrobotics.com.ar/data/guia68hc08.pdf

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

UNIDAD 2 Nombre de la Unidad Introducción

Justificación Intencionalidades Formativas

Denominación de capítulos

Desarrollo de software para sistemas embebidos Ya conocidos los conceptos básicos de los sistemas embebidos se debe conocer el cómo se desarrolla software para dichos sistemas Introducir al estudiante del curso en el desarrollo de software para sistemas embebidos  Introducir al estudiante en la programación de sistemas embebidos  Reconocer el lenguaje programación Assembler  Introducir al estudiante en el desarrollo de aplicaciones en sistemas embebidos  Desarrollar una tarjeta de programación universal  Introducir al estudiante en la programación de sistemas embebidos en C  Introducir al estudiante en la programación del microcontrolador HC08 4. Introducción a la programación de sistemas embebidos 5. Prácticas básicas y aplicaciones 6. Introducción a la programación en C y microcontrolador HC08

CAPITULO 4: INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS EMBEBIDOS. En el presente capítulo se presenta la forma de planear y escribir programas para sistemas embebidos, partiendo desde la concepción misma de la funcionalidad que realizará el dispositivo a diseñar, se aprenderá a desarrollar diagramas de flujo y a partir de estos, realizar la programación correspondiente en lenguaje assembler. Lección 1: Diagramas de Flujo. Un diagrama de flujo es la representación gráfica de los pasos o etapas de un proceso describiendo las secuencias en interacciones de dicho proceso en un algoritmo, esta representación se basa en el empleo de diferentes símbolos que representan operaciones específicas, normalmente dichas operaciones se interconectan con flechas indicando una secuencia de operación, es por tanto que se conocen como diagramas de flujo, son útiles en programación puesto que representan de manera gráfica y simple de leer los algoritmos y operaciones que se requiere implementar en un sistema computacional cualquiera, sirviendo así como medio de planificación para escribir programas.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

Para evitar ambigüedades al momento de descifrar un diagrama de flujo, se han estandarizado los símbolos que en este tipo de representaciones se emplean sumado a una serie de reglas y recomendaciones (norma ISO 5807), a continuación se enumeran los símbolos más comunes y una explicación se su funcionalidad, ver figura 26: 

 



 

Ovalo: Normalmente se emplea para indicar el inicio o el fin de un proceso o algoritmo. En su interior se sitúan materiales, información o acciones para comenzar el proceso o para mostrar el resultado en el final del mismo Flecha: Indica el sentido y trayectoria del proceso de información o tarea. Rectángulo: Es el símbolo más comúnmente utilizado. Se usa para representar un evento que ocurre de forma automática y del cual generalmente se sigue una secuencia determinada. Rombo: Se utiliza para representar una condición. Normalmente el flujo de información entra por arriba y sale por un lado si la condición se cumple o sale por el lado opuesto si la condición no se cumple. El rombo además especifica que hay un salto o bifurcación. Romboide: en su interior generalmente se sitúa información de apoyo necesaria para realizar una actividad. Círculo: Representa un punto de conexión entre procesos. Se utiliza cuando es necesario dividir un diagrama de flujo en varias partes, por ejemplo por razones de espacio o simplicidad. Una referencia debe darse dentro para distinguirlo de otros. La mayoría de las veces se utilizan números en los mismos.

Ciertas reglas que hay que tener en cuenta a la hora de realizar diagramas de flujo pueden ser las siguientes:      

Debe existir siempre un camino que permite llegar a una solución (finalización del algoritmo). Solo debe existir un único inicio del proceso. Nombrar o etiquetar correctamente los procesos para evitar confusiones. Solo debe existir un único punto de fin para el flujo de proceso, salvo el caso de bifurcaciones a partir de rombos. Se deben evitar los ciclos infinitos que bloqueen el programa y las entradas que no presentan salidas. Evitar elementos de generación espontánea, es decir salidas que no son generadas a partir de una entrada, generalmente son situaciones erróneas.

Figura 26. Figuras empleadas en los diagramas de flujo.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

Ejemplo: realizar el diagrama de flujo para una rutina de retrazo de 100 ms. Figura 27. Diagrama de flujo para una rutina de retrazo de 100 ms.

Como se observa en la figura 27 un simple ejemplo de cómo realizar un diagrama de flujo para un proceso muy empleado en programación de microcontroladores como lo es una rutina de retardo, la idea general de este diagrama de flujo es representar un pedazo de código que realice la funcionalidad requerida, para tal efecto se inicia un contador que se decrementa de uno en uno hasta que dicho contador sea cero, el valor con el que se inicia el contador depende del tiempo de espera que pueda ser implementado en el dispositivo, por ejemplo si dicho tiempo

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

de espera es de 2 ms, entonces el contador se inicia en 50 así al realizar las iteraciones requeridas para decrementar este valor a cero, la rutina finaliza una vez se cumple el retrazo requerido. Se puede observar también que en el bloque con forma de rombo es donde se toma la decisión de finalizar o no el programa. Lección 2: Programación en Lenguaje Ensamblador (Assembler). El lenguaje ensamblador marca un buen punto de partida para el estudiante puesto que representa un estudio profundo de cualquier microcontrolador tanto en su estructura como en su juego de instrucciones, brindando las bases suficientes para adentrarse en el mundo de la programación y desarrollo de aplicaciones con los microcontroladores. Es recomendable tener presente el manual de referencia ‟CPU08RM.pdf‟ que puede bajarse de la página del fabricante de los MCU‟s (www.freescale.com). En él se puede encontrar toda la información relevante para reforzar algunos de los temas analizados durante el curso como el modelo de programación, instrucciones, modos de direccionamiento, etc. además se encuentran ejemplos sobre el uso de algunas instrucciones. 1. El Assembler. Como es sabido los sistemas computacionales requieren instrucciones de manera secuencial y así que puedan realizar las funciones para las cuales han sido diseñados, de otra forma serían inservibles. Estas instrucciones de forma secuencial forman lo que se conoce como programas. Existen diferentes formas de escribir programas pero independientemente de esto, los dispositivos semiconductores de procesamiento lo único que comprenden y procesan es el lenguaje de máquina. El lenguaje de máquina está conformado por códigos de instrucción que en esencia son números representados por series binarias, todos los dispositivos de procesamiento tienen un código de operación (op.code) para cada una de sus funciones. Como se ha visto anteriormente se sabe que todas las instrucciones para cualquier lenguaje de máquina tienen por lo menos dos partes; la primera es el comando u operación en si, que dice al procesador cuál es la función que se va a realizar. La segunda parte de la instrucción es el operando, que indica al procesador donde (posición en memoria) hallar o almacenar los datos y otras instrucciones que serán manipuladas. Puesto que para el ser humano manejar este tipo de códigos a la hora de realizar la programación de los dispositivos resultaría extremadamente tedioso se han desarrollado diferentes técnicas y lenguajes de programación tanto de alto como de bajo nivel.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

El lenguaje ensamblador en un lenguaje de bajo nivel ya que es la representación más directa de los códigos de instrucción mediante nemónicos, un nemónico es un vocablo que en lenguaje ensamblador representa un código de instrucción binario, los nemónicos se emplean para facilitar el aprendizaje, por parte del programador, de los diferentes códigos que soporta un determinado dispositivo. Toda programación realizada en lenguaje ensamblador debe ser compilada o traducida a código de máquina para que el dispositivo pueda entenderla. Para comprender mejor este concepto se presenta el siguiente ejemplo: Se tiene el siguiente código de máquina en Binario: 10100110 01100001 (Hexadecimal: 0xA661). La representación equivalente en lenguaje ensamblador es más fácil de recordar: MOV $61; Esta instrucción significa: cargue el acumulador con el dato almacenado en la posición 61 de la memoria. Algunos pros y contras sobre el empleo de este lenguaje se enumeran a continuación: Pros: 

Los programas hechos en lenguaje ensamblador son generalmente más rápidos en su ejecución que los hechos en lenguajes de alto nivel con iguales funcionalidades. Al programar cuidadosamente en lenguaje ensamblador se pueden crear programas que se ejecutan de 5 a 10 veces más rápido que con lenguajes de alto nivel.



Los programas hechos en lenguaje ensamblador generalmente ocupan menos espacio de memoria. Un buen programa en lenguaje ensamblador puede ocupar casi la mitad de espacio que su contraparte en lenguaje de alto nivel.



Utilizando lenguajes de alto nivel, no es un buen comienzo para aprender sobre los MCU’s, mas aún, se necesita conocer todas las características de la arquitectura para poder programar con lenguajes de alto nivel.



Con el lenguaje ensamblador se pueden crear segmentos de código imposibles de formar en un lenguaje de alto nivel.



A medida que se aprenda a programar en assembler se pueden ir creando librerías de funciones que se pueden añadir a futuros códigos inclusive implementar en otro tipo de MCU, facilitándose así mucho el trabajo.



Es bueno conocer el lenguaje ensamblador incluso si se programa en lenguajes de alto nivel puesto que muchos compiladores permiten la incrustación de código ensamblador en algún segmento de programa.

Contras:

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS



 

Programar en lenguaje ensamblador es difícil de aprender, entender, leer, escribir, depurar y mantener, por eso surgió la necesidad de los lenguajes compilados. El lenguaje ensamblador no es 100% portable. Programar en lenguaje ensamblador toma tiempo.

Lección 3: Notaciones y sintaxis. Todos los programas en assembler son creados en un editor de texto cualquiera produciéndose un archivo de texto siguiendo algunas reglas y notaciones, para empezar en las siguientes tablas se presentan las notaciones de los diferentes registros de la CPU y los bits del registro de código de condición: Tabla 6. Notación de los registros del MCU. Notación A CCR H:X SP PC

Registro Acumulador Reg. de condición Reg. Indice Puntero de Pila Contador de Programa

Tamaño del registro 8 8 16 16 16

Tabla 7. Notación de los Bits del CCR. Notación H I N Z C

Descripción Acarreo Medio, Bit 4 Máscara de Interrupción, Bit 3 Bandera de Negativo, Bit 2 Bandera de Cero, Bit 1 Bandera de acarreo, Bit 0

A continuación se realizan ciertas definiciones relevantes a la hora de escribir programas en assembler: Líneas de comentario: Son empleadas por el usuario para documentar el programa que se encuentra desarrollando, sirven para que en futuras ocasiones pueda comprender que se ha realizado o en caso de que otra persona entre a analizar el programa. Las líneas de comentario no deben afectar la programación a la hora de compilar, por lo tanto para que el compilador las identifique se debe anteponer punto y coma (;) o un asterisco en la parte mas izquierda de la línea de texto. Ejemplo:

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

****************************************************************** * Este es un comentario ****************************************************************** ;Este también es un comentario. LDA

NUM1

*

; Este también es un comentario.

Etiquetas: También conocidas como identificadores, son nombres para constantes, variables, direcciones y subrutinas definidos por el programador, los nombres pueden contener letras mayúsculas y minúsculas también pueden tener números pero no pueden tener signos de puntuación ni tener más de 10 caracteres. Los nombres son sensibles a diferencias entre mayúsculas y minúsculas; por ejemplo PuertoA y puertoA son dos etiquetas diferentes. Las etiquetas se definen colocándose en la parte más hacia la izquierda de la línea de código; el ensamblador le asigna internamente un valor igual a la dirección actual, es importante no definir las etiquetas más de una vez, de lo contrario el ensamblador registrará un error. La dirección de la memoria se va actualizando a medida que se van ocupando los bytes ya sea para programa o almacenamiento de datos. Otra forma de definir etiquetas es empleando la directiva EQU asignando entonces el valor que se encuentra en la columna de parámetros, en este caso el espacio de memoria actual permanece invariable. Ejemplo: FLASH Ten

EQU EQU

$EE00 10

Expresiones Matemáticas: El lenguaje ensamblador tiene un desempeño limitado en el campo de las expresiones matemáticas, solo una operación es permitida por expresión, para escribir expresiones se debe tener en cuenta que el operador debe estar separado de los parámetros por espacios en blanco. Los operadores válidos son: suma (+), resta (-), multiplicación (x), división (/) y módulo (%). Las anteriores operaciones aritméticas son llevadas a cabo por el ensamblador en el momento de compilar un código, es decir, el resultado de las expresiones es convertido directamente en un valor constante o una dirección de memoria. Una aplicación de las expresiones puede ser el acceso a un parámetro de varios bytes, por ejemplo, si se supone que NUM es una variable está declarada como

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

de 4 bytes, para acceder cada byte individualmente se emplearía NUM, NUM + 1, NUM + 2, NUM + 3. Ejemplo: NUM

DS LDA LDA

4 NUM + 3 NUM

; Se reserva 4 Bytes para NUM. ; Se carga el LSB en el Acumulador. ; Se carga el MSB en el Acumulador.

Es de tener en cuenta que el ensamblador asigna el primer byte para el byte más significativo (MSB), seguido por los menos significativos. Para evitar confusiones por parte del estudiante a la hora de escribir código en assembler a continuación se resumen las convenciones que se emplean a la hora de escribir la programación en assembler.     

        



Cualquier texto que se encuentre después de un símbolo (;) es considerado como un comentario. Un asterisco en la posición más hacia la izquierda define toda la línea como un comentario. Las instrucciones del juego de instrucciones de la CPU pueden ser escritas en mayúsculas o minúsculas. Todas las etiquetas son sensibles a las mayúsculas, no pueden tener más de 10 caracteres ni signos de puntuación. La definición de las etiquetas debe hacerse en la parte más hacia la izquierda de una línea de código, el uso de dos puntos (:) después de una etiqueta es opcional. Las operaciones o directivas deben ir precedidas de un espacio en blanco o TAB horizontal. Los parámetros de las instrucciones deben ir separados por espacios en blanco, comas o TAB‟s horizontales. El direccionamiento inmediato se especifica al emplear el símbolo # precediendo un parámetro constante. Las constantes Binarias son precedidas por el símbolo %. Las constantes Hexadecimales son precedidas por el símbolo $. Los números serán decimales excepto los que son precedidos por % o $. Las expresiones matemáticas se restringen a una sola operación y puede ser +, -, x, / y %. Las operaciones matemáticas deben separarse de los parámetros por espacios en blanco. Si al final de un registro se coloca una letra H o L significa que se trata de la parte alta o baja correspondientemente, es decir los 8 bits mas significativo (parte alta) o los 8 menos significativos (parte baja). Una letra „n‟ inmediatamente después de un registro indica la posición o bit „n‟ de dicho registro.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

Lección 4: Tipos de Instrucciones. En esta sección se analizarán los diferentes tipos de instrucciones que poseen los MCU‟s de la familia HC08 describiendo sus características y funcionalidades, queda como tarea para el estudiante revisar la sintaxis y funcionamiento específico de las instrucciones que emplee en sus prácticas enfatizando el estudio en las banderas que afecta una determinada instrucción y como puede emplearse este hecho para los propósitos y funcionalidad de los programas que se desean desarrollar. 1. Instrucciones de transferencia. Las instrucciones de transferencia o movimiento de datos que se pueden observar en la tabla 3 de la sección 3.4.6 se encargan de realizar movimiento de datos entre los diferentes registros y memorias del MCU, esto se realiza ya que durante la ejecución de un programa, los operandos y las direcciones se encuentran en la memoria mientras que el procesador no sabe nada de las operaciones que va a realizar, por lo tanto la función de un programa es la de cargar los datos y direcciones necesarios para que se realicen las tareas que de debe cumplir el MCU para las cuales ha sido realizado el programa. El movimiento de datos se puede realizar de 3 maneras diferentes: 1. De un registro del procesador a la memoria. 2. De la memoria a los registros del procesador 3. De un registro del procesador a otro registro del procesador. Entre las instrucciones de transferencia de datos existen: Instrucciones de Carga: Son las encargadas del movimiento de datos desde la memoria a los registros del procesador, se realiza una operación de entrada de datos mediante la lectura desde la memoria y posterior carga de uno o más bytes en el correspondiente registro del procesador, las instrucciones que copian dos bytes siguen la convención de cargar el dato más significativo primero. Entre las instrucciones de carga se tienen: LDA, LDX, LDHX. Instrucciones de Almacenamiento: Son responsables del movimiento de datos desde los registros del procesador a memoria, se realiza una operación de salida de los datos de los registros mediante la lectura desde el registro del procesador y posterior carga de uno o más bytes en la posición de la memoria correspondiente. Entre las instrucciones de almacenamiento se tienen: STA, STHX, STX.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

Instrucciones de transferencia: Se encargan del movimiento de datos de un registro del procesador a otro, entre las instrucciones de transferencia se tienen: TAX, TXA. 2. Instrucciones Aritméticas. Se trata de un sub-grupo de instrucciones que emplean la unidad aritmético-lógica para realizar operaciones aritméticas empleando como parámetros los contenidos tanto del acumulador como de alguna posición de la memoria, el resultado de dichas operaciones realizadas se almacenan en el acumulador o en la posición de memoria dependiendo de lo estipulado por la instrucción. Entre las instrucciones aritméticas existen: Instrucciones de Suma: Encargadas de sumar el contenido del acumulador con los contenidos en alguna posición de memoria o registro, los datos son guardados en el acumulador. Entre las instrucciones de suma se tienen ADC, ADD. Instrucciones de Resta: Encargadas de restar el contenido del acumulador con los contenidos en alguna posición de memoria o registro, los datos son guardados en el acumulador. Entre las instrucciones de resta se tienen: SUB, SUC. Multiplicación (MUL): Esta instrucción multiplica los 8 bits del registro índice (X) por los ocho bits del acumulador, obteniéndose un número de 16 bits sin signo encadenando el registro índice con el acumulador, después de la operación X contiene los bits mas significativos del resultado de 16 bits. División (DIV): Esta instrucción divide un número de 16 bits sin signo (dividendo) contenido entre los registros encadenados H (índice parte alta) y el acumulador, entre un número de 8 bits (divisor) contenido en X (índice parte baja). El cociente se almacena en el acumulador y el divisor queda inalterado. 3. Instrucciones de Manipulación de Datos. Son empleadas para realizar alguna operación fija o estándar sobre un dato determinado, entre este tipo de instrucciones existen: Instrucciones de Incremento: Son una clase especial de instrucciones de adición, su función es incrementar en una unidad el operando sobrescribiendo éste con el resultado de la operación. Entre las instrucciones de incremento se tienen: INCA, INCX, INC. Instrucciones de Decremento: Son una clase especial de instrucciones de resta, su función es decrementar en una unidad el operando sobrescribiendo éste con el resultado de la operación. Entre las instrucciones de incremento se tienen: DECA, DECX, DEC.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

Instrucciones de Negación: Estas instrucciones cambian en signo de un dato que se encuentre en el acumulador o en una determinada posición de memoria, este cambio de signo se realiza empleando la operación de negación binaria en complemento a dos. Específicamente estas instrucciones lo que hacen es restarle el operando a cero sobrescribiendo éste con el resultado. Entre las instrucciones de negación se tienen: NEGA, NEGX, NEG. 4. Instrucciones de Rotación y Desplazamiento. La familia HC08 soporta varios tipos de operaciones de rotación y desplazamiento de datos, tanto del tipo aritmético como del tipo lógico, las operaciones de desplazamiento están basadas en los principios de funcionamiento de los registros de desplazamiento, en donde los datos se mueven bit por bit hacia la derecha (hacia el LSB) o hacia la izquierda (hacia el MBS). El desplazamiento lógico consiste en la introducción de un „0‟ en alguno de los extremos de la palabra (dato) empujando al resto de los bits una posición hacia la dirección contraria (ver figura 28.). Por otro lado el desplazamiento aritmético es similar al lógico con la excepción de que cuando el desplazamiento es hacia la derecha (hacia el LSB) el signo se mantiene, es decir, en lugar de introducir un „0‟ se realiza una copia del bit de signo (MSB) la cual es introducida para realizar el desplazamiento, manteniéndose así el signo (ver figura 28.). La rotación de datos en una forma especial de desplazamiento, cuando se realiza lo que ocurre es que el dato a la salida del desplazamiento es retroalimentado a la entrada del registro, la rotación puede ser en ambos sentidos. Figura 28. Formas de Rotación y desplazamiento en la familia HC08.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

Entre las instrucciones de rotación y desplazamiento se tienen: ROLA, ROLX, ROL, RORA, RORX, ROR, LSLA, LSLX, LSL, LSRA, LSRX, LSR, ASRA, ASRX, ASR. 5. Instrucciones lógicas: Se trata de un sub-grupo de instrucciones que emplean la unidad aritmético-lógica para realizar operaciones lógicas empleando como parámetros los contenidos tanto del acumulador como de alguna posición de la memoria, el resultado de dichas operaciones realizadas se almacenan en el acumulador o en la posición de memoria dependiendo de lo estipulado por la instrucción. Entre las instrucciones lógicas se tienen: AND, ORA, EOR, COMA, COMX, COM, NSA. 6. Instrucciones de Comparación. Son un grupo especial de instrucciones que solamente afectan la bandera de estados (reg. CCR), ningún dato es modificado por estas instrucciones puesto que únicamente su función es la de comparar dos números y modificar las banderas de estado dependiendo de la relación que exista entre éstos. Estas instrucciones son usadas exclusivamente en conjunto con las instrucciones de bifurcación condicional como preparación para una bifurcación condicional. Dados dos números A y B; La comparación entre estos se realiza mediante una sustracción puesto que al restar dos números se puede conocer si A > B, si el resultado de A – B es un número positivo, o si son iguales si A – B = 0, o si A < B si el resultado de A - B es un número negativo. La diferencia de las instrucciones de comparación con respecto de la resta común radica en el hecho de que los operandos no son modificados como en el caso de la resta que carga el resultado en el acumulador. Hay instrucciones especiales para la comparación directa de un número con cero la ventaja de estas es que solo es necesario entregar el parámetro que se va a comparar puesto que se supone que el otro es cero. Entre las instrucciones de comparación se tienen: CMP, CPX, BIT, TSTA, TSTX, TST, BRCLR, BRSET, CPHX. 7. Instrucciones de Salto. Este tipo de instrucciones se encargan de controlar o alternar el flujo del programa cambiándolo a cualquier posición de la memoria que sea direccionable, las instrucciones de salto cargan directamente el contador de programa (PC) con una dirección de 16 bits, dirección en la cual se ubica la siguiente instrucción a ser ejecutada (dirección de destino).

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

Este tipo de saltos son incondicionales, puesto que pueden alterar el flujo del programa cada vez que son ejecutadas y son empleadas en los programas cada vez que se requiera un cambio absoluto del flujo del programa. Este tipo de instrucciones son empleadas normalmente en un código seguidas de una etiqueta que identifica la dirección a donde se realiza el salto. Entre las instrucciones de salto incondicional se tienen: JMP, JTS, RTS. 8. Instrucciones de Bifurcación (Branch). Las instrucciones conocidas como bifurcaciones, a diferencia de las de salto no cargan al PC directamente con la dirección de la memoria donde se encuentra la siguiente instrucción a ejecutar sino que esta es calculada a partir de el contador de programa, estas instrucciones emplean un modo de direccionamiento relativo. Todas las instrucciones de bifurcación realizarán una comprobación de alguna expresión de tipo booleano para determinar si la bifurcación será tomada o se continuará el flujo normal del programa, estas instrucciones generalmente vienen por pares, es decir, si por ejemplo existe una instrucción que revisa si el número es igual a cero también existe su complementaria que revisa que el número no sea igual a cero (BEQ y BNE). Las instrucciones de bifurcación se clasifican en los siguientes grupos funcionales: incondicionales, condicional simple, condicional sin signo, y condicional con signo. Las incondicionales son dos en especial; BRA (Branch Always) y BRN (Branch Never) la primera siempre pasará la comprobación por lo cual siempre realiza la bifurcación, por el contrario la segunda nunca lo hará, esta es útil en el caso que se realiza una depuración de código para reemplazar otra instrucción de bifurcación o en el caso de ciclos de temporización para realizar retardos. Las instrucciones de bifurcación condicional simple realizan la comprobación de cualquier bit de la bandera de estados (reg, CCR). Las condicionales sin signo no tienen en cuenta el bit de signo (MBS), es decir toman los valores de 8 o 16 bits como magnitudes es decir solo revisan la relación entre dos palabras de datos sin signo. Caso contrario de las instrucciones de bifurcación con signo en las que la comprobación se realiza entre parejas de datos teniendo en cuenta la perspectiva de magnitudes con signo en complemento a dos. Entre las instrucciones de bifurcación se tienen: BRA, BRN, BSR, BHI, BLO, BHS, BLS, BPL, BMI, BEQ, BNE, BCC, BCS, BHC, BHCC, BHCS, BMC, BMS, BIL, BIH, BGE, BGT, BLE, BLT, CBEQ, CBEQA, CBEQX, DBNZ. 9. Instrucciones de control.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

En algunos casos es necesario manipular los bits de la bandera de estado (registro CCR) ya sea para ponerlos en „1‟ o en „0‟ antes de realizar alguna operación para asegurar el correcto funcionamiento de otra instrucción diferente. Entre las instrucciones de control se tienen: SEC, CLC, SEI, CLI, SWI, RTI, RSP, NOP, WAIT, STOP, TAP, TPA, TSX, TXS. Lección 5: Escribiendo un pequeño programa. A continuación se realizará de forma metódica la solución a un pequeño problema de programación, comenzando con la definición de los requerimientos de la aplicación, seguido de la correspondiente documentación mediante un diagrama de flujo, hecho esto, se escribirá el programa empleando un editor de texto estándar escribiendo los nemónicos correspondientes para cada bloque del diagrama de flujo. La función del programa a realizar consiste en hacer que el microcontrolador revise un pin de alguno de sus puertos configurado como entrada, este pin estará conectado a un pulsador que pondrá el pin a tierra cuando se encuentre presionado. Cuando el microcontrolador detecte que el pulsador ha sido presionado debe poner en alto otro pin configurado como salida para encender un LED por 1 segundo, el tiempo que se mantenga presionado el pulsador no debe afectar el tiempo en que el LED es encendido por lo tanto éste solo se volverá a encender una vez el pulsador ha sido soltado y presionado de nuevo. El montaje del circuito de prueba se realiza haciendo las conexiones necesarias para que funcione el MCU (revisar sección de montaje); además se conecta el pulsador en configuración pull down al pin menos significativo (LSB) del puerto A mientras el Led es conectado al pin más significativo (MSB) empleando una configuración pull up. 1. Diagrama de flujo Programa principal. En la figura 29 se presenta el diagrama de flujo correspondiente a la aplicación que se desea programar. Como se puede apreciar el diagrama de flujo contiene la mayoría de los bloques descritos anteriormente y cumple con las reglas necesarias para evitar ambigüedades. El flujo del programa es simple pero no es algo trivial, ya que no se puede lograr la misma funcionalidad de manera sencilla con componentes discretos, se requeriría una serie de integrados externos para realizar la temporización, en ello radica la conveniencia de utilizar un microcontrolador gobernado por un programa ya que éste entra a reemplazar el empleo de diferentes integrados para realizar la misma funcionalidad. Para escribir un programa en lenguaje ensamblador a partir del diagrama de flujo, el programador debe desarrollar una serie de instrucciones que desempeñarán las

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

funcionalidades especificadas en cada bloque del diagrama. El paso a seguir con este ejemplo es tomar cada uno de los bloques presentando una opción para la programación con la correspondiente explicación de las instrucciones empleadas. Se recomienda al estudiante hacer uso de los manuales de referencia para consultar los nemónicos de los diferentes comandos. Figura 29. Diagrama de flujo de la aplicación. Revisar

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

Para empezar se debe inicializar el microcontrolador configurando los puertos del mismo de acuerdo a las necesidades de la aplicación, en este caso se configuran los pines del puerto A del MCU como entradas a excepción del pin 7 que se empleará como salida para encender el led. La primera precaución que hay que tener en cuenta es la de poner el pin configurado como salida (Bit 7, puerto A (MSB)) en „1‟ para mantener el LED apagado hasta que se detecte la condición de encendido. Los nemónicos correspondientes a esta parte del diagrama de flujo se presentan a continuación: PORTA DDRA TEMP1

EQU $00 ;Asignación Directa Dirección del puerto A EQU $04 ;Asigna Dirección control de dato, puerto A EQU $C0 ;Asigna Posición de memoria temporal(1 byte) ORG $0300 ;El Programa empezará en Dir $0300 INIT LDA #$80 ;Empieza la inicialización STA PORTA ;El LED se apagará STA DDRA ;Pone el bit 7 del puerto como salida * El resto de pines del puerto se configura como entrada El puerto A del HC08 es configurado desde dos registros; el registro de datos y el registro de configuración o control de dato, $0000 y $0004 respectivamente, el primero contiene los datos que se cargarán en cada uno de los pines del puerto y el segundo contiene los bits de configuración del puerto, es decir determina si cada pin es una entrada („0‟) o una salida („1‟). Para una información más detallada sobre los puertos se recomienda al estudiante revisar la sección de puertos I/O en las hojas de datos de la familia HC08 o del dispositivo en particular con que se encuentre trabajando. En la programación se emplean etiquetas (PORTA DDRA TEMP1) para obtener acceso directo a estas direcciones la siguiente instrucción (ORG) indica al compilador únicamente la dirección de memoria desde donde se comenzará a almacenar el programa. La instrucción LDA #$80, de acuerdo con las convenciones aprendidas y el set de instrucciones del MCU, lo que realiza es cargar el acumulador empleando direccionamiento inmediato (#) con el dato $80 (%10000000), este dato se carga en el acumulador con la intención de cargarlo posteriormente en el registro de datos y en el registro de configuraciones del puerto A. De acuerdo con el diagrama de flujo, a continuación se realiza la operación de revisión del pin que se encuentra conectado al pulsador para conocer su estado, para tal efecto se carga el puerto A en su totalidad en el acumulador y luego se realiza la operación lógica AND para comparar el bit de interés (LSB) con un valor alto („1‟ lógico).

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

TOP

LDA PORTA AND #$01

; Carga el puerto A en el acumulador ; Prueba el bit-0

La acción representada por el primer rombo del diagrama de flujo se realiza con el comando BEQ (bifurcación si es igual), si el resultado de la operación AND es „0‟ lógico es decir que al comparar el puerto A con $01 resulta que los números son iguales se realiza la bifurcación devolviéndose hacia la etiqueta TOP creándose un lazo de espera hasta que el pulsador sea presionado. En caso de que se detecte que se ha presionado el pulsador, se continúa normalmente con la siguiente instrucción. BEQ TOP ; Lazo hasta que bit0 = 1. La siguiente instrucción en caso de detectarse que el pulsador ha sido presionado es un salto a la subrutina de espera para evitar rebotes. JSR

DLY50

; Retardo de 50 ms para los rebotes

La subrutina de retardo se emplea en dos ocasiones para esta aplicación, como retardo anti-rebote y para determinar el tiempo de 1 seg que será encendido el led en caso de ser presionado el pulsador. El correspondiente diagrama de flujo y detalle de programación de esta subrutina se presenta posteriormente. A continuación del retardo anti-rebote se enciende el Led empleando el siguiente comando: BCLR 7, PORTA

; Enciende el LED (bit-7 del Puerto A)

Es de tener en cuenta que debido a la forma de conexión del Led (Pull Up) se requiere que en el pin al que se encuentra conectado sea puesto en un estado bajo o „0‟ lógico para hacer que la corriente circule por éste, encendiéndolo así. Una vez el Led es encendido, el flujo del programa indica que debe existir un retardo de un (1) segundo en el cual el Led debe permanecer encendido, para tal efecto es emplea nuevamente la subrutina de retardo pero esta vez puesto que se requiere que el retardo sea aun mayor y teniendo en cuenta que la subrutina creada genera un retardo de 50 ms, se debe realizar un lazo que se repita 20 veces para completar 1 segundo. Los comandos empleados se presentan a continuación:

DLYLP

LDA #20 JSR DLY50 DECA BNE DLYLP BSET 7,PORTA

;El Decimal 20 se carga en el acumulador ;Retardo de 50 ms ;se decrementa el acumulador en una unidad ;Si el acumulador no es cero ir a DLYLP. ;Apaga el LED

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

El programa finaliza de acuerdo con los requerimientos establecidos con una rutina de espera hasta que el pulsador sea soltado para evitar que se detecte otra orden de encendido del Led antes de haberse soltado y vuelto a presionar, los comandos son los siguientes: OFFLP BRSET 0,PORTA,OFFLP JSR DLY50 BRA TOP

; Lazo hasta interruptor abierto ; Retardo antirebote. ; Ir a espera para el siguiente cierre del ; interruptor.

2. Diagrama de Flujo Subrutina de Espera 50 ms. Como es sabido, una subrutina se trata de un programa generalmente corto que es ejecutado varias veces a lo largo de un programa mayor la intención es escribir este programa una sola vez y llamarlo desde el programa principal cada vez que sea requerido empleando los comandos bifurcación a subrutina (BSR) o salto a subrutina (JSR). Figura 30. Diagrama de flujo de la subrutina de retardo de 50 ms.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

Las instrucciones de salto y bifurcación a subrutina lo primero que hacen es guardar automáticamente en las posiciones de memoria RAM temporales de la pila la dirección de la instrucción inmediatamente siguiente con la intención de retornar con el comando RTS a esta dirección una vez se ha ejecutado la subrutina. La función RTS hace que la CPU recupere de la dirección de retorno previamente guardada. Por otro lado como se observa en el diagrama de flujo de la subrutina la primera acción es guardar el acumulador para volver a cargarlo una vez se ha terminado la subrutina, esto se realiza ya que éste puede cambiar durante la ejecución de la subrutina y generar resultados no esperados una vez se vuelve al programa principal. Como se observa en la figura 30, la subrutina de retardo involucra un lazo interno (INNRLP) dentro de otro lazo (OUTRLP). El lazo interno consiste en dos instrucciones que se ejecutan 256 veces antes que X alcance el valor de $00 nuevamente, terminando con la bifurcación BNE, esto suma 6 ciclos a 500 ns por 256 ciclos, lo que es igual a 0.768 ms para el lazo interno. Realizando los cálculos del caso se deduce que el lazo externo debe realizarse 65 veces; el tiempo total para de ejecución para el lazo externo resulta 65*(1536 + 9) o 65*(1545) = 100.425 ciclos de 500 ns es decir 50.212 ms. Sumando las demás instrucciones del lazo externo, se añaden un total de 21 ciclos así que el tiempo total de ejecución de la subrutina DYL50 es 50.223 ms incluyendo el tiempo que requiere la instrucción JSR para llamar a la subrutina. Otra opción más eficiente sería utilizar el temporizador interno con que cuenta el MCU en este caso no se requeriría realizar todos estos cálculos para cuadrar el tiempo basados en los ciclos de instrucción y además la CPU estaría libre para ejecutar otras acciones durante un retardo de este tipo.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

CAPITULO 5: PRÁCTICAS BÁSICAS Y APLICACIONES. En el presente capítulo se presentarán diferentes aplicaciones prácticas basadas en las características de microcontroladores de la familia HC08, para tal efecto primero se exponen los requerimientos necesarios para llevar a cabo el montaje y programación de los MCU‟s se presentará también el montaje de una tarjeta de programación para microcontroladores de la familia HC08, esta tarjeta de fácil realización y economía, proporcionará al estudiante una herramienta sencilla para programar y probar el funcionamiento de las diferentes aplicaciones propuestas. Seguidamente se abordará el tema del software CodeWarrior; que ha sido escogido por resultar el software mas completo que permite explorar al estudiante tanto la programación en assembler como la programación en C contando además con herramientas de simulación, compilación y depuración que apoyarán la profundización y puesta en práctica de los conceptos aprendidos durante el curso. Lección 6: Programación y Puesta en Marcha. Para programar lo MCU‟s de la Familia HC08 de freescale se deben tener en cuenta diferentes aspectos tanto físicos (hardware) como de software; en la presente sección se describe estos requerimientos y se presentan opciones funcionales entre la variedad de posibilidades existentes. 1. Programación de Microcontroladores de la Familia HC08. A continuación se darán a conocer esquemas de conexión necesarios tanto para llevar a cabo la programación del los MCU‟s de la Familia HC08 como para la puesta en marcha de dichos dispositivos. Los microcontroladores de la familia HC08 cuentan con un modo de ejecución, llamado modo usuario, el cual permite el acceso a todos los recursos del sistema es decir que se pueden manipular características como el acceso a memoria, manejo de interrupciones, entre otros. También existe un modo de trabajo especializado en la programación y depuración de los MCU‟s conocido como el Modo Monitor. 1.1. Modo monitor. El modo monitor es una aplicación desarrollada para la familia de MCU‟s de 8 Bits ubicada en la memoria ROM de los dispositivos, que permite la programación de aplicaciones en la memoria no volátil así como la depuración simple de los programas implementados por los desarrolladores, permite la ejecución de comandos provenientes del PC (Host), tales comandos son empleados para el

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

acceso a cualquier posición de memoria o para descargar los programas en la memoria Flash o RAM. Este programa se ejecuta en modo usuario y se requiere de una serie de condiciones en algunos de los pines del MCU para activarlo después de un Power On Reset (POR). Se deben tener en cuenta los siguientes aspectos a la hora de trabajar en modo monitor:    

Para la comunicación con el PC solo se emplea uno de los pines de E/S, el cual intercambia su configuración (entrada o salida) mientras emula el protocolo serial hacia el PC. Durante el modo monitor debe existir una señal de reloj externa cuya frecuencia sea suficiente para que en el MCU se pueda alcanzar la tasa de baudios con la que se comunica con el PC. Muchos de los MCU‟s de esta familia deben ser adecuadamente polarizados para su correcto funcionamiento en modo monitor. Algunas características de seguridad son deshabilitadas al entrar en modo monitor, entre las que se tiene COP (Computer Operation Properly), SWI Instruction y FLASH Protection.

Cabe aclarar que el modo monitor no es una sustitución de sistemas mas sofisticados que permiten la completa emulación de los dispositivos, pero si es una forma económica de interconectar los MCU‟s con un PC para el envío de comandos de manera serial realizando labores de lectura, escritura y depuración simple en los registros y memoria del MCU. Para entrar en modo monitor se requiere:  

Un Software adecuado en el PC que se encargue de la comunicación y programación. Un cable serial y un POD (Circuito de Polarización y de soporte para la comunicación serial) empleados para brindar la polarización y señales adecuadas así como para la transmisión de comandos desde el PC.

1.2. Señales del Modo Monitor. La interfaz física del modo monitor emplea hasta nueve pines para configurar el MCU y establecer la comunicación serial, entre los que se encuentran: VTST/IRQ: El modo monitor siempre entra después de un POR (Power On Reset) con un voltaje alto (entre 7 y 9Vdc) que se conoce como Vtest en el pin IRQ del MCU. Éste voltaje habilita la lógica de selección y demás condiciones de operación del modo monitor. COM/PTA0: Teniendo en cuenta que algunos M68HC08 no cuentan con una interfaz asíncrona serial dedicada (SCI), entonces se ha implementado en la ROM

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

de estos dispositivos un protocolo serial basado en software, diseñado específicamente para la comunicación con un PC vía puerto serial empleando el protocolo RS-232 a una tasa de baudios estándar, 9600 baudios normalmente. Para tal fin se emplea generalmente el pin PTA0 multiplexado en el tiempo como transmisor y receptor, algunos dispositivos emplean para el mismo propósito el pin PTB0. Señales de Selección de Modo: A parte del Vtest aplicado al pin de IRQ otros 4 pines son empleados para configurar el estado de operación del modo monitor. 

Dos de estos MOD0/MOD1: Estos pines se emplean para seleccionar el modo monitor y deben ser fijados a un nivel adecuado de a cuerdo con los requerimientos.



DIV4: Si este pin se encuentra en un estado lógico „alto‟ se configura la frecuencia del bus a un valor equivalente a la frecuencia externa dividida entre 4. Si por el contrario se encuentra en un estado „bajo‟ la frecuencia externa solo se divide entre dos.



SSEL: (Serial Select). Este pin decide en que forma los bytes de seguridad son transferidos al MCU. La programación siempre es serial y usualmente los bytes de seguridad son transmitidos de esta forma. Un arreglo estándar para las señales de selección de modo puede apreciarse en la siguiente figura:

Figura 31: Arreglo estándar para las señales de selección.

OSC: Teniendo en cuenta que la comunicación serial es generada por el fimware del modo monitor mas que por una interfaz serial dedicada, se requiere que el reloj interno del bus sea forzado a una frecuencia que pueda generar las tasas estándar que cualquier computador pueda „reconocer‟. La entrada OSC1 puede

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

ser manejada por un oscilador de cristal o puede emplearse una red RC conectada a los pines OSC1 y OSC2, la frecuencia del resonador requerido depende del tipo de dispositivo; por tanto se debe acudir a la hoja de datos del dispositivo específico para información mas detallada. RESET: La entrada de reset es requerida normalmente para operaciones de depuración sofisticadas, mas no para programación y depuración simple, en este caso el pin de Reset se conecta a la alimentación (Vdd) a través de una resistencia de Pull-Up. En algunos dispositivos en modo monitor se puede aplicar un voltaje Vtest después de haber entrado en modo monitor para permitir al pin de IRQ volver a su función de interrupción siendo empleado así para propósitos de depuración. Ground/Vss: El pin Vss debe ser conectado a la tierra del sistema anfitrión (PC) así suministrar el voltaje de referencia adecuado para la polarización y comunicación propias del modo monitor. Conexiones Para VDD y VSS: Los pines para la polarización de los MCU‟s HC08 son VDD y VSS correspondientemente para polarización y tierra en algunos de los MCU‟s pueden existir varios de estos pines cuya función es la de polarizar o servir de referencia para recursos del MCU como conversores A/D, generadores de reloj, etc. La forma de conexión ideal es colocar un condensador electrolítico (1uF) o de tantalio (10uF) lo mas cerca posible del pin de VDD, si se emplean condensadores electrolíticos es recomendable colocar uno cerámico (0.1uF) en paralelo, o si no se dispone de condensadores electrolíticos ni de tantalio, se recomienda al menos colocar el condensador cerámico de acuerdo con la siguiente figura. Figura 32: Polarización recomendada para pines del MCU que van a VDD.

1.3. Conexiones (Pod‟s) MON08. MON08 se conoce al hardware que conecta el PC con el circuito de la aplicación o destino, existen del tipo comercial para todos los presupuestos, incuso existen notas de aplicación del fabricante que describen la forma de implementar hardware de este tipo de forma sencilla para aplicaciones no muy sofisticadas.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

Una interfaz muy empleada para estos propósitos se presenta en la figura 33, se observa un arreglo que provee los elementos necesarios para configurar el MCU MC68HC908 en modo monitor además brinda el soporte para llevar a cabo la comunicación bi-direccional a partir del puerto PTA0 con un PC. Es posible obtener el voltaje de prueba Vtest de la bomba de carga del integrado MAX-232 sin afectar su funcionamiento ya que esta señal no consume corriente por parte del pin IRQ. Figura 33: Arreglo para habilitar el modo monitor para MCU‟s HC08.

En la tabla 8 se presentan los pines de conexión MON08 para los MCu‟s mas comunes; para MCu‟s específicos se debe acudir a la hoja de datos correspondiente. Tabla 8: Pines requeridos para el modo monitor de diferentes MCU‟s.

Vtst COM MOD0 MOD1 DIV4 SSEL

GP/GT IRQ PTA0 PTC0 PTC1 PTC3 PTA7

JL/JK IRQ PTB0 PTB1 PTB2 PTB3 NC

KX IRQ PTA0 PTB0 PTB1 NC PTA1

MR QB/QY/QT AB32 JB16 IRQ IRQ IRQ IRQ PTA0 PTA0 PTA0 PTA0 PTC3 PTA1 PTC0 PTA1 PTC4 PTA4 PTC1 PTA2 NC NC PTC3 PTA3 PTC2 NC NC PTE3

1.4. Frecuencia Vs Tasa de baudios para comunicación serial.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

Normalmente se encuentra en las hojas de datos de la familia HC08 que se emplean osciladores de 4,1952 MHz para conseguir tasas de 9600 bps con el pin DIV4 puesto a tierra, otras frecuencias de trabajo también son posibles en la siguiente tabla se presentan algunas de éstas. Tabla 9: Relación de la tasa de Baudios con respecto a la configuración del reloj externo. Frecuencia 2,4576 MHz 4,9152 MHz 4,9152 MHz 7,3728 MHz 9,8304 MHz 9,8304 MHz 14,7456 MHz 14,7456 MHz 19,6608 MHz 29,4912 MHz

Reloj de Bus Tasa de Baudios 1.2288 MHz 4800 2.4576 MHz 9600 1,2288MHz 4800 3,6864 MHz 14400 4.9152 MHz 19200 2,4576 MHz 9600 7,3728 MHz 28800 3,6864 MHz 14400 4,9152 MHz 19200 7,3728 MHz 28800

DIV4 Low Low High Low Low High Low High High High

Es posible aprovechar las conexiones existentes en un circuito o aplicación si previamente se ha realizado la adecuada planificación durante el diseño del mismo reduciendo así la cantidad de pines requeridos para entrar en modo monitor (Conexión MON08) este concepto se puede observar en la siguiente figura: Figura 34: Arreglo estándar para habilitar el modo monitor para MCU‟s HC08 en la aplicación.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

Como se puede observar las señales de selección de modo pueden ser fijadas directamente en la aplicación mediante resistencias de pull-up o pull-down según sea el requerimiento. Estos pines una vez programado el MCU en la misma aplicación pueden ser utilizadas como entradas o salidas activas en bajo o en alto dependiendo del diseño realizado. Figura 35: Arreglo de posibles osciladores que pueden ser implementados.

Una señal de reloj adecuada (Normalmente hasta de 9.8 MHz) siempre debe ser aplicada al pin OSC1 ya sea a través de la interfaz MON08 o mediante elementos fijos en el circuito de la aplicación final. La mejor forma de proporcionar la señal de reloj externa es mediante un oscilador de cuarzo (figura xxa), una forma alterna mas económica basada en un arreglo de un cristal una resistencia y un par de condensadores se puede apreciar en la figura 36b, un método poco recomendable por su baja precisión para la generación de la señal de reloj se realiza mediante un arreglo RC que puede ser encontrado en las hojas de datos de los dispositivos. En el caso de las señales de alimentación y tierra, es requisito que la interfaz comparta la señal de tierra para brindar un correcto voltaje de referencia, en caso de que la aplicación no posea su propia fuente de poder, la interfaz MON08 debe proveerla teniendo en cuenta los requerimientos de corriente de la aplicación. Lección 7: Modo de Ejecución.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

Este es el modo en el cual la CPU ejecuta normalmente el programa almacenado en la memoria FLASH, teniendo como origen la dirección almacenada en el Vector de RESET ($FFFE:$FFFF). Para la puesta en marcha de un dispositivo los requerimientos en hardware son más simples que los necesarios para la programación, éstos se presentan a continuación: 

Polarización del MCU (VDD y VSS): Se requiere el mismo esquema de conexión presentado anteriormente, es importante conectar todos los pines que requieran polarización por ejemplo en VRFEH y el VRFEL son requeridos para establecer los umbrales de comparación del conversor A/D.



OSC1 y OSC2: Son señales importantes para el funcionamiento de los MCU‟s puesto que se trata de sistemas secuenciales es primordial una señal de reloj. Se puede utilizar cualquiera de las alternativas presentadas anteriormente teniendo en cuenta siempre la hoja de datos del dispositivo en uso.



Pines de Selección de Modo (MOD0, MOD1, DIV4, SSEL): Estos pines ya no son requeridos para establecer condiciones especiales por lo tanto su comportamiento se rige conforme al lo especificado en las hojas de datos del dispositivo (módulos, interrupciones, puertos de E/S, etc.).



Pin de Reset: Si no se requiere llevar al MCU a RESET es recomendable colocar un condensador a tierra en este pin. Por ningún motivo se debe colocar a VDD puesto que puede ocasionar un corto circuito cuando se polariza en circuito o cuando se realice un Reset interno.



Pines CGMXFC y VREG: Para los MCU que disponen de módulo PLL se debe instalar un filtro en el pin CGMXFC, además en algunos MCU‟s (ver su hoja de datos) se debe colocar un condensador cerámico (0.1uF) en el pin VREG, se recomienda también que la polarización del oscilador sea VREG no VDD a menos que no funcione entonces toca utilizar VDD.

Figura 36: Configuración recomendada para los pines de VREG, RESET Y CGMXFC.

Lección 8: Desarrollo de Tarjeta de Programación Universal.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

La tarjeta de desarrollo que se presenta a continuación se encuentra basada en la sección anterior referente al Modo monitor de la familia HC08 de Free-Scale, que a su vez se encuentra basada en la nota de aplicación AN2317/D (Low-Cost Programming and Debugging Options for M68HC08 MCUs) que puede ser encontrada en el sitio Web de la empresa: www.freescale.com La implementación de la tarjeta de programación universal es sencilla puesto que se trata de un arreglo compacto que provee las señales estándar estudiadas anteriormente, necesarias para trabajar en modo monitor con diferentes microcontroladores pertenecientes a la familia HC08. La idea es que esta tarjeta pueda ser utilizada en conjunto con una regleta de montajes (Proto-Board) u otros circuitos complementarios en los que se encuentren las conexiones necesarias para las diferentes clases de microcontroladores y aplicaciones a implementar. A continuación se presenta el esquemático de la tarjeta de Programación: Figura 37: Esquemático tarjeta de programación para microcontroladores de la familia HC08.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

El circuito consta de una etapa de regulación obteniéndose 5Vdc a partir de una fuente de 12Vdc con su correspondiente interruptor y Led indicador de encendido, una etapa para la comunicación con el Pc conformada por los integrados MAX232 y 74HC125 y el conector DB-9 para poder implementar la comunicación propia del modo monitor es decir Half-Duplex empleando un solo pin del Microcontrolador. La tarjeta cuenta con dos tipos de osciladores externos que pueden ser seleccionados con el Jumper JP1; uno de una sola pieza (4 pines), éste presenta mayor estabilidad y es habilitado con un Jumper en la posición 1-2 de JP1. El otro arreglo consta de un cristal con resistencia y condensadores de acople (posición 2-3 de JP1), en lugar de un cristal fijo se pueden colocar un par de Pin Headers para ubicar cristales de diferentes valores dependiendo de la aplicación. A su vez se cuenta con un arreglo de resistencias en configuración Pull-Up y Pull-Down utilizadas para configurar el modo monitor en los pines correspondientes de acuerdo con la tabla 8. Los interruptores tipo Dip (S1) sirven para deshabilitar las señales que no sean requeridas ya sea durante la programación, depuración y/o puesta en marcha de la aplicación, por ejemplo si se utiliza el oscilador de 9.8 MHz, además de colocar el Jumper JP1 en las posiciones 1-2 se debe deshabilitar el interruptor 2 ya que éste pertenece al arreglo necesario para utilizar el otro arreglo de oscilador. El diseño del circuito impreso correspondiente al esquemático de la figura 38 se presenta a continuación: Figura 38: Diseño del circuito impreso para la tarjeta de programación.

Se puede observar en la figura que se ha habilitado un pin para el acceso a la fuente de 12 Vdc para el caso de que sea necesario este voltaje en el proyecto (Relés, motores, etc). Además se ha diseñado la tarjeta con un conector lateral de

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

12 pines en forma de regleta de una sola fila, las conexiones de pueden realizar de diferentes formas: se pueden soldar los pines para que sobresalgan por debajo de la tarjeta permitiendo el acceso de las diferentes señales mediante el montaje de la tarjeta en una Proto-Board, también se puede cablear hacia una Proto-Board o circuito mediante la soldadura de pinheads de conexión, a su vez se pueden utilizar circuitos impresos diseñados de manera que sean compatibles con este conector o también puede ser utilizado un cable configurado adecuadamente a partir de este conector para obtener una interfaz estándar MON-08 en caso de ser requerida. En la figura 39 se observa los pines requeridos para obtener el conector de la interfaz MON-08: Figura 39: Conector estándar de la interfaz MON-08.

Lección 9: Software. Para programar un MCU se requiere un programa de computador que convierta los comandos de un determinado programa realizado en ensamblador, C, C++ o Basic, entre otros, a código de máquina; este proceso se conoce como compilación. A su vez el programa debe enviar al dispositivo los códigos de máquina una vez han sido compilados a través de un POD como el descrito en la sección anterior. Existen diferentes opciones a la hora de seleccionar el software que se empleará para programar los dispositivos, algunos mas completos y con mayores prestaciones que otros, esto se ve reflejado en el costo de determinada herramienta, aunque pueden conseguirse versiones de prueba con limitación en el tamaño del programa a realizar así como también puede conseguirse software libre. Independientemente del Software seleccionado el proceso de Escribir Programas, Compilación y posterior programación de dispositivos es similar para todas las herramientas se debe acudir a la ayuda y/o tutoriales del mismo teniendo en cuenta configurar adecuadamente los diferentes parámetros para lograr programar, simular y realizar depuración satisfactoriamente en un determinado dispositivo.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

Entre los parámetros que se deben tener en cuenta a la hora de programar un dispositivo en la mayoría de herramientas están: 

Dar un nombre adecuado al proyecto.



Dirección donde se guardará dicho proyecto.



Seleccionar el dispositivo de destino (Tipo de MCU) con que se trabajará.



Especificar en el editor de texto el lenguaje de programación que será empleado.



Especificar tipo de conexión al dispositivo.

Una vez configurado el proyecto se puede empezar a escribir el programa correspondiente al proyecto y seguidamente compilar, simular, depurar y programar el dispositivo escogido, haciendo uso de los manuales y hojas de datos tanto de los dispositivos como del software. A continuación se presentan diferentes opciones de software que se puede emplear con sus características: CODE-WARRIOR: Code Warrior Development Studio es un Ambiente de Desarrollo Integrado IDE (Integrated Development Environment) que contiene todas las herramientas necesarias para completar cualquier proyecto de desarrollo de sistemas embebidos, incluye: editores de texto, compiladores tanto para assembler como para C y C++, depuradores, librerías de variadas aplicaciones. CodeWarrior es ahora desarrollado y distribuido por Freescale, existen diferentes versiones que según sus prestaciones aumenta su costo, afortunadamente hay versiones de prueba que limitan el tamaño del código que puede ser implementado pero suficientes para que los estudiantes puedan empezar a realizar sus prácticas. Para mayor información Y/O bajar el programa se puede visitar el siguiente link: http://www.freescale.com WinIDE: es también un ambiente de desarrollo integrado (IDE) para Windows (Win), el cual posee herramientas de programación para dispositivos, programación en lenguaje ensamblador, simulación en circuito o sin chip, es desarrollado por la compañía PE-micro, de manera gratuita como una herramienta de desarrollo para microcontroladores de diferentes tipos, tanto de 8-bits como de 16 y 32 bits. Para la línea de 8-bits, han desarrollado los algoritmos de casi todos los microcontroladores de la familia HC08 o por lo menos los más utilizados como los microcontroladores de la serie JK, JL, GP y los muy utilizados, serie QT y QY.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

La desventaja que presenta el uso de este programa es que para cada tipo de microcontrolador hay que bajar e instalar una versión diferente del programa. Para mayor información Y/O bajar el programa se puede visitar el siguiente link: http://www.pemicro.com CROSSWARE: es una compañía dedicada al desarrollo de software como compiladores de C y C++, simuladores de Assembler, depuradores y herramientas hardware para sistemas embebidos, posee aplicaciones para distintos tipos de dispositivos entre los que se encuentra la familia 68xxx de Motorola. El software de esta compañía tiene un costo relativamente elevado para principiantes pero de su página Web pueden bajarse versiones estudiantiles de evaluación limitadas por tiempo de hasta 12 meses. Para mayor información Y/O bajar el programa se puede visitar el siguiente link: http://www.crossware.com SDCC - Small Device C Compiler: Es un compilador de código ANSI - C que puede ser empleado para dispositivos de diferentes fabricantes entre los que se encuentran: Intel 8051, Maxim 80DS390, Zilog Z80 y la familia Motorola 68HC08. También se trabaja en la compatibilidad con los MCU‟s de Microchip de las series PIC16 y PIC18. SDCC es un programa libre de código abierto que se distribuye bajo licencia GNU General Public License (GPL). Para mayor información Y/O bajar el programa se puede visitar el siguiente link: http://sdcc.sourceforge.net/ Otras dos opciones que pueden ser tenidas en cuenta son:  

http://www.imagecraft.com/ http://www.cosmic-software.com

Lección 10: Software Code Warrior. En la presente sección se presenta de manera resumida la forma de crear, compilar y depurar un proyecto utilizando el Software Code Warrior (CW) de FreeScale. Para tal efecto el estudiante debe bajar el instalador del software de la página del fabricante (www.freescale.com) y seguidamente instalarlo, las características mínimas requeridas para el PC son:   

Procesador de 1GHz Intel Pentium o compatible. 512 MB de RAM (recomendado 1GB). Mínimo 2 GB de espacio libre en Disco Duro.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

 

Puerto Serial DB9. Sistema Operativo Microsoft Windows 2000, XP o Vista.

El software instala automáticamente la versión de evaluación, no es necesario registrarla, esta licencia permite el desarrollo de proyectos como si se tratase de la versión profesional, por un periodo de 30 días, una vez cumplido este lapso la licencia trabaja como la edición especial que es libre permanentemente pero tiene limitaciones en el tamaño del código en C que puede ser escrito (hasta 32KB para MCU‟s HC08 y 64KB para ColdFire) suficientes para aplicaciones didácticas introductorias. 1. Creando un Proyecto. Se ejecuta el Ambiente de Desarrollo Integrado (IDE) mediante la siguiente ruta: Inicio > Programas > CW For Microcontrollers Vxx. > CodeWarrior IDE. Una vez arranca el programa se despliega la siguiente ventana de dialogo:

Seguidamente se selecciona el botón para la creación de un proyecto nuevo (Create a New Project) continuación aparece una ventana de dialogo de dispositivos y conexiones (Device and Connection). Se selecciona algún dispositivo de las diferentes familias desplegadas y el tipo de conexión.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

Para efectos prácticos esta prueba y muchas de las aplicaciones serán realizadas empleando el MCU MC68HC908JL3; además para esta primera prueba se selecciona en conexiones la opción „Full Chip Simulation’ presionando a continuación el botón „siguiente‟. Seguidamente viene la ventana de parámetros del proyecto (Project Parameters); en el cuadro „Project name’ se asigna un nombre a cada proyecto creado, por defecto el CW asigna un nombre pero es conveniente asignar un nombre significativo para futuras revisiones.

El IDE asigna la extensión .mcp al proyecto automáticamente así como también crea una carpeta con el nombre del proyecto en la ubicación asignada en el cuadro „location’ esta puede ser una ubicación por defecto o la que asigne el usuario empleando el botón set…. Se selecciona como lenguaje de programación „Absolute assembly‟ para ser soportado por el proyecto de la misma forma si se va a realizar programación en „C‟ se selecciona en la casilla correspondiente. En este punto se puede seleccionar el botón „Finalizar‟ tomándose los demás parámetros por configurar por defecto. Si se opta por el botón „Siguiente‟, por el momento se deben seleccionar las opciones por defecto que presenten las siguientes ventanas de dialogo. Se recomienda leer los letreros explicativos que presenta el asistente para tener una idea de lo qué significa cada opción.

Figura 40: Ventana principal del IDE CodeWarrior.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

2. Escribiendo un programa Una vez creado el proyecto aparece la ventana principal del ambiente de desarrollo (ver Fig 40), donde el CW crea automáticamente una serie de carpetas y archivos que forman parte del proyecto proporcionando definiciones y códigos de inicialización básicos, por ejemplo se puede observar en la carpeta „includes’ un archivo con el nombre del dispositivo y la extensión .inc (MC68HC908JL3.inc) en el se encuentran contenidos los nombres de los puertos y registros asociados a las direcciones de memoria del microcontrolador guardando una correspondencia con los nombres que se encuentran en las hojas de datos y manuales de referencia del fabricante. Como ejemplo se presenta la definición del Puerto B del MCU escogido:

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

En la carpeta „sources‟ se almacenan los archivos y funciones que forman parte del programa principal en especial el CW genera el archivo „main.asm‟ que contiene por defecto una rutina con un ciclo infinito, ésta contiene un macro que alimenta el WatchDog. A continuación se realizará una rutina en el que el montaje del proyecto y sus correspondientes procesos de compilación, depuración y simulación. Para tal efecto a continuación se presenta el código que será utilizado: LOOP0 LOOP1

LOOP2

LDA #$FF INCA CMP #3 BNE LOOP1 LDA #$FF LDHX #$1234 LDHX #$4321 LDHX #0 LDX #$FF INCX CPX #4 BNE LOOP2 JMP LOOP0

; A = $FF ;A=A+1 ; A = 3? ; Salto a LOOP1 si A!=3. ; A = $FF = 255 ; H:X = $1234 ; H:X = $4321 ; H:X = $0000 ; X = $FF ;X=X+1 ; X = 4? ; Salto a LOOP1 si A!=4. ; Salto a LOOP0 (Se Repite el Ciclo)

Las líneas de código anteriores tienen el propósito de ayudar a familiarizar al estudiante con algunas de las instrucciones empleadas para la manipulación de los registros. Como se observa en los comentarios el flujo del programa es el siguiente; se inicializa A = $FF luego se incrementa hasta 3 haciendo uso de la instrucción BNE con la que compara A con 3 en caso de ser diferente (¡=) salta hasta la etiqueta LOOP1 realizando un ciclo finito hasta que A sea igual a 3 entonces el programa prosigue con la siguiente instrucción que es la de cargar de nuevo registro A con $FF, seguidamente se emplea la instrucción LDHX con 3 valores diferentes ($1234, $4321 y $0000), a continuación se carga la parte baja del registro H:X con $FF realizándose un ciclo similar al realizado con el registro A pero utilizando otro valor de comparación, al finalizar este ciclo la instrucción JMP LOOP1 vuelve a ejecutar todo de nuevo de manera indefinida. 3. Compilando y Simulando un Proyecto. Para compilar y simular este código debe ser insertado en el archivo main.asm a partir de la etiqueta llamada ‘mainLoop:’; seguidamente teniendo en cuenta que se ha escogido previamente como tipo de conexión la opción „Full Chip Simulation‟ se debe guardar el proyecto y emplear los botones „make‟ y „debug‟ en este orden, ver la Figura 41. Figura 41: Herramientas de compilación y depuración del IDE del CodeWarrior.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

Al compilar en caso de que existan errores en el código, la herramienta presenta las correspondientes alertas, con un clic sobre cada error automáticamente se indica el lugar o la línea de código que presenta el error. En caso de no presentarse errores de compilación se puede proceder con la herramienta Debug; se abre una nueva ventana llamada „True-Time Simulator & Real-Time Debugger‟ que será empleada para simular la ejecución del programa compilado. En la ventana de simulación y depuración (ver Fig 42) se cuenta con diferentes herramientas con las que se puede ejecutar el código y comprobar su correcto funcionamiento, entre otras aplicaciones con esta interfaz se puede ejecutar la aplicación paso a paso, insertar puntos de quiebre (Break Points), resetear, modificar variables registros y puertos, también se puede interactuar con los módulos TIMER, ADC, IRQ y demás módulos que posea en MCU en uso. Figura 42: Ventana de Simulación y depuración.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

Como se observa en la figura hay diferentes módulos que presentan información de diferente índole, como el mapa de memoria con la información almacenada en ella, los valores cargados en los registros, etc. En la barra de „Debug’ se observan los iconos encargados del control de la ejecución de las instrucciones durante una simulación: Run:

Correr la aplicación hasta encontrar un BreakPoint

Single Step:

Correr la aplicación paso a paso.

Step Over:

Correr una subrutina sin entrar en ella.

Step Out:

Correr hasta salir de una subrutina en curso.

Halt:

Parar la Simulación.

Reset:

Reiniciar.

Al correr la aplicación paso a paso se puede ir observando las instrucciones que se van ejecutando, así como los registros y banderas que van siendo modificados dependiendo del tipo de instrucción ejecutada. 4. Programando un dispositivo. Para programar un dispositivo se sigue un procedimiento similar al realizado para simular una aplicación; la diferencia radica en que se debe cambiar el tipo de conexión dependiendo del tipo de POD de programación que se valla a utilizar; para el caso del circuito descrito anteriormente se selecciona la opción „MON08 Interface‟ en la ventana principal del ambiente de desarrollo. Figura 43: Selección del tipo de conexión para la programación de dispositivos.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

Al ejecutar el Debug se abre una ventana de opciones en la que se configuran parámetros como la tasa de transferencia, puerto de comunicación y otros parámetros que deben ser configurados adecuadamente para la correcta comunicación entre el PC y el MCU.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

CAPITULO 6: INTRODUCCIÓN A LA PROGRAMACIÓN EN C y MICROCONTROLADOR HC08. El leguaje ensamblador es ideal cuando se desea controlar y configurar el microcontrolador en forma precisa, de manera bastante “cercana al hardware” y con la máxima eficiencia en el uso de la memoria, pero presenta la desventaja de que el hecho de actualizar o crear una mejor versión del mismo programa, se torna complicado, sobre todo si es un programa extenso. Por esta razón la mayoría de los programadores prefieren utilizar lenguajes de alto nivel como el lenguaje C, para realizar sus códigos. Este lenguaje nos permite crear rutinas, procesos matemáticos y lógicos con mayor facilidad, programas que en ensamblador son extensos, en lenguaje C se disminuye considerablemente la cantidad de líneas de código necesarias. Algunas ventajas de emplear el lenguaje de programación C:    

En C se pueden crear códigos portables. Facilita el mantenimiento del código. El código en C es fácil de entender y de escribir. Es independiente de la plataforma.

La última ventaja tiene sentido en la medida que se puede utilizar códigos o rutinas realizadas en ANSI C en diferentes dispositivos a diferencia de los códigos y rutinas en assembler ya que éstos varían en gran medida dependiendo del las diferencias en los juegos de instrucciones inherentes a los dispositivos a la hora de migrar de plataformas. Lección 11: Generalidades de C. En el presente capítulo no se pretende enseñar a programar en C, sino presentar y analizar las características más importantes del lenguaje de programación C, su sintaxis y gramática que servirán para sentar las bases necesarias a la hora de emplear los recursos y posibilidades que el C pone a disposición de los programadores de sistemas embebidos. 1. Presentación del lenguaje. En la actualidad una de las constantes en la implementación de sistemas embebidos es el lenguaje de programación C, más que ningún otro, es por tanto que se ha convertido en el lenguaje y a su vez en una especie de estándar mas empleado por infinidad de programadores en el mundo de los sistemas embebidos.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

El lenguaje C presenta muchas ventajas: es reducido y fácil de aprender, además virtualmente hay compiladores disponibles para cada tipo de procesador existente. C presenta el beneficio de independencia de procesador característica que permite al programador concentrarse más en sus aplicaciones y algoritmos que en detalles de determinada arquitectura de procesadores. Posiblemente una de las fortalezas del C sobre otros lenguajes de programación es que aunque se trata de un lenguaje del alto nivel y los beneficios que ello representa, puede considerarse también como un lenguaje de bajo nivel puesto que suministra a los programadores de sistemas embebidos el control directo sobre el hardware, esta es una característica que solo el C brinda, dejando el lenguaje ensamblador en un segundo plano, utilizándose este más como código adjunto al código en lenguaje de alto nivel, principalmente para la inicialización del sistema, para escribir pedazos de código extremadamente eficientes, ultra compactos o simplemente códigos que no pueden ser escritos de otra forma. 2. Funciones. En C se conocen como funciones a las partes elementales de un programa que se realizan con la intención de Modularizar o dividir un programa muy grande en una serie de módulos más pequeños y manejables. En los diferentes lenguajes de programación a estos módulos se conocen como subprogramas, rutinas, procedimientos, etc. La idea es que un programa grande sea dividido en un conjunto de subprogramas o funciones, además que exista una función principal (main) que „llame‟ a las demás funciones para su ejecución y estas a su vez puedan „llamar‟ funciones más específicas y así sucesivamente. Entre las ventajas de dividir un programa en funciones se tienen: 





Modularización: una función realiza una tarea muy específica manteniendo su extensión (líneas de código) reducida y manejable. Además cada función puede ser „llamada‟ varias veces en un mismo programa incluso puede ser reutilizada en otros programas. Las funciones por lo general son desarrolladas y comprobadas por separado. Ahorro: tanto de memoria como de tiempo de desarrollo en la medida que una misma función puede ser empleada varias veces en un mismo programa reduciéndose así tanto el tiempo de escritura como el de depuración. Independencia: una función mantiene una independencia del resto del programa con respecto a los datos que maneja, mediante la definición adecuada de una interfaz o comunicación con las funciones que la llaman o las que llama no teniendo acceso a información que no le compete, evitándose la introducción de errores por la modificación de variables repetidas y demás errores que pueden introducirse en códigos que se encuentran funcionando correctamente.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

2.1. Nombre, Valor de Retorno y Argumentos. Una función en C se asocia a un Nombre o Etiqueta que es empleado para referirse a esta por el resto del programa, éstas son llamadas por el programa principal o por alguna función de mayor rango, mediante la inclusión de su nombre y Argumentos en alguna de sus líneas de código. Los argumentos son datos de entrada para las funciones y son enviados a estas encerrándolos en un paréntesis al lado del nombre de una función dada. Por ejemplo se tiene la función de nombre „pot‟ que calcula la potencia de „a‟ elevado a „b‟ de dos números; para llamar esta función se puede escribir la siguiente sentencia: pot(a,b); En este ejemplo se observan los argumentos a y b entre paréntesis que constituyen los datos necesarios para hallar un resultado la función conocida como „pot‟. El resultado de esta operación se conoce como Valor de Retorno, este se encuentra disponible ya que aparece sustituyendo el nombre de la función en el mismo lugar donde se ha realizado la llamada, en el ejemplo no se hace nada con el valor de retorno. Otro ejemplo donde si es empleado el valor de retornos puede ser el siguiente: cantidad = pot(a+5,b) *unidades En este caso el primer argumento „a‟ sumado a 5 es elevado a „b‟ y el resultado (valor de retorno) es multiplicado por la etiqueta „unidades‟ el resultado obtenido finalmente es almacenado en la posición de memoria identificado por la etiqueta „cantidad‟. Para poder llamar a una función se requiere que la Definición de ésta aparezca en alguna parte del mismo archivo o de otro archivo fuente; la definición no es más que el conjunto de instrucciones necesarias para que la función realice una tarea definida cada vez que sea llamada. Además la definición incluye el tipo de valor de retorno y de cada uno de los argumentos de entrada esto se conoce con el nombre de Declaración. Siguiendo el ejemplo de la función „pot‟: double pot (double base, double exponente) { double resultado; … resultado = …; return resultado; }

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

En la primera línea la palabra double seguido del nombre de la función „pot‟ indica el tipo de valor de retorno de ésta (punto flotante con 15 cifras de precisión). Seguidamente y entre paréntesis está la definición de los argumentos (ambos double). A continuación se abren las llaves ({ }) que contienen el código de la función, en la primera sentencia se observa la declaración de la variable resultado (double) seguida de las sentencias necesarias para calcular el resultado y finalmente con la sentencia return se devuelve resultado al programa o función que ha llamado a la función „pot‟. Las variables „base‟ y „exponente‟ han sido declaradas en la cabecera por tanto no es necesario declararlas de nuevo como si es necesario hacerlo con la variable „resultado‟ puesto que no ha sido declarada. Cuando la función „pot‟ es llamada adecuadamente, los valores de los argumentos son cargados en sus correspondientes variables. Una función también debe ser Declarada antes de ser Llamada. La declaración de una función puede realizarse empleando la primera línea de la definición de la que pueden suprimirse los nombres de los argumentos mas no sus tipos incluyendo al final el punto y coma. Por ejemplo: double pot (double, double); 2.2. La función Main. Todo programa escrito en C debe incluir un programa o función Principal que es la que controla la iniciación y ejecución del programa en general, es conocida como la Función Main y presenta la siguiente forma: void main (void) { sentencia 1 sentencia 2 … } Una porción de código encerrada entre llaves ({ }) se conoce como sentencia compuesta o bloque, es un modo de agrupar sentencias individuales de modo que se comporten como sentencias únicas para tal efecto todo el cuerpo de una función debe ir comprendido entre las llaves de apertura y cierre. 3. Tokens. En el vocabulario del lenguaje C existen seis clases de componentes sintácticos (Tokens) entre los que se tienen: palabras clave, etiquetas, constantes, cadenas de caracteres, operadores y separadores. El compilador descompone el texto que encuentra en un programa dado en los diferentes Tokens ignorando ciertos

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

componentes como comentarios y separadores, entre otros, a partir de esta descomposición genera el código de máquina correspondiente. 3.1. Palabras Claves de C. Como en cualquier lenguaje de programación existe una serie de palabras reservadas o „Clave‟ que el programador no puede emplear como etiquetas (ni de variables ni de funciones). Estas palabras indican la ejecución de tareas muy específicas, teniendo un significado especial para el compilador. El lenguaje C está formado por un conjunto pequeño de palabras clave (reservadas) o comandos (keywords), y una serie de operadores. Existen 32 palabras clave, en comparación con las 150 del BASIC o 200 que poseen otros lenguajes, como el COBOL y el PASCAL. Estas palabras son: Auto, break, case, char, const, continue, default, do, double, else, enum, extern, float, for, goto, if, int, long, register, return, short, signed, sizeof, static, struct, switch, typedef, union, unsigned, void, volatile, while. 3.2. Etiquetas. Como es sabido, las etiquetas o Identificadores son nombres con los que se hace referencia a variables o funciones. En lenguaje ANSI C existen ciertas reglas a la hora de seleccionar los nombres para las variables y funciones: 1. Las etiquetas se forman solo con secuencias de letras minúsculas de la a a la z, mayúsculas de la A a la Z y dígitos del 0 al 9. 2. El carácter subrayado (_) es considerado como una letra más. 3. No pueden contener espacios en blanco ni otros caracteres diferentes de los ya citados, p.e. (* , ; . : - + , etc). 4. El primer carácter debe ser una letra o un símbolo de subrayado (_), nunca un dígito. 5. Se hace distinción entre mayúsculas y minúsculas, por tanto la etiqueta BASE es diferente de base y de Base. 6. Son permitidas etiquetas de hasta 31 caracteres de longitud. Es aconsejable seleccionar nombres que describan o permitan identificar el tipo de funciones o variables que representa, empleando tantos caracteres como sea necesario pero siguiendo las anteriores reglas, esto simplifica enormemente tanto el proceso de programación como el de depuración de errores. 3.3. Constantes.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

Las variables como su nombre lo indica pueden cambiar dependiendo de las instrucciones ejecutadas por un programa, a diferencia de éstas, las constantes se mantienen invariables durante toda la ejecución de un determinado programa, un ejemplo típico es el Número  (3.141592654) el cual puede aparecer varias veces en las instrucciones de un programa. Para declarar las constantes se emplea el cualificador const indicando que una variable no puede cambiar de valor. Ejemplo: const int i = 10 En C se encuentran distintos tipos de constantes: 

Numéricas: son valores del tipo entero o de punto flotante, también puede tratarse de constantes binarias, octales o hexadecimales.



Caracteres: cualquier carácter individual encerrado en apostrofes („‟) es considerado como un carácter constante, en realidad es tomado como un entero entre 0 y 255 o -127 y 127 dependiendo el sistema de acuerdo con la tabla de equivalencia en código ASCII.



Cadenas de Caracteres: Se trata de un conjunto de caracteres alfanuméricos encerrados en comillas p.e. “caracter” o “esto es una cadena”.



Simbólicas: éstas tienen un nombre o etiqueta como las variables pero no cambian de valor a lo largo de la ejecución del programa, es conveniente nombrarlas con textos solo en mayúsculas para distinguirlas de las variables.

3.4. Operadores. Son símbolos especiales, en algunas ocasiones conjuntos de dos caracteres que indican operaciones a realizar con las variables y/o constantes de un programa obteniéndose un resultado, entre los operadores se tienen: 

Aritméticos: (+, -, *, /, %) los operadores aritméticos son bastante intuitivos por tanto solo se explicará el operador % resto de la división entera que como su nombre lo indica solo se aplica a la división de enteros y su valor de retorno es el sobrante de una división de enteros p.e. si se tiene la expresión 23%4 el resultado será 3.



Asignación: (=, +=, -=, *=, /=) La función de estos operadores es la de escribir en el espacio de memoria de una determinada variable el resultado de alguna expresión o el valor de otra variable, es por tanto que el símbolo „=‟ no indica una igualdad matemática sino mas bien una sustitución, es importante resaltar que debido a la naturaleza de los operadores de

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

asignación, no puede existir expresiones del lado izquierdo de éstos, solo variables. Los demás operadores indican operaciones recurrentes sobre las variables al lado izquierdo de las expresiones su funcionalidad se muestra en los siguientes ejemplos: Distancia += 1 equivale a: distancia = distancia +1 rango /= 2.0 equivale a: rango = rango / 2.0 

Incrementales: (++, --) son operadores que incrementan o disminuyen en una unidad a la variable a la que afectan, en una expresión, estos operadores pueden ir antes o después de la variable a la que afectan, el significado es distinto ya que si se encuentran antes el operador actúa sobre la variable antes de ejecutar la expresión, por el contrario si se encuentran después de la variable ésta aumenta o disminuye en una unidad después de ejecutarse la expresión.



Relacionales: (==, ,=, !=) Este tipo de operadores se emplean a la hora de realizar comparaciones entre dos expresiones, el resultado obtenido de evaluar expresiones con estos operadores solo pueden ser binarios puesto que al comparar solo se pueden obtener dos soluciones; o se cumple la expresión (verdadera) o no (falsa). La forma general de empleo de estos operadores es la siguiente: expresión1 op expresión2 Donde op puede ser alguno de los operadores: == (igual que), < (menor que), > (mayor que), = (mayor o igual que), ¡= (distinto que). El procedimiento normal es evaluar primero las expresiones por aparte y luego compararlas a ver si cumplen con una determinada relación; si se cumple el resultado es 1 caso contrario el resultado es 0.



Lógicos: (&&, II, !) son operadores binarios que permiten combinar los resultados de los operadores relacionales comprobando que se cumplen diferentes condiciones o que se cumple una u otra. Los operadores lógicos disponibles en C son && conocido como and, el operador II conocido como or, y el operador ! conocido como not o negación.

3.5. Separadores. Los separadores se constituyen por uno o varios espacios en blanco, tabuladores, y caracteres de nueva línea, estos ayudan al compilador a descomponer un programa en sus diferentes Tokens así como a mejorar la organización y legibilidad de un programa.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

3.6. Comentarios. Así como en el assembler se emplean comentarios a lo largo del programa para hacerlo mas entendible, del mismo modo se puede comentar sobre la forma en que un programa es realizado ya sea para ayudar en futuras modificaciones como para el entendimiento del mismo por parte de otras personas. Es de tener en cuenta que los compiladores ignoran por completo las partes del programa que son catalogadas como comentarios. En C los comentarios son encerados entre los caracteres „/*‟ y „*/‟ a su vez todo lo que va después de los caracteres „//‟ hasta el final de la línea se considera también como comentario y es ignorado por el compilador. 3.7. Expresiones y Sentencias. Una expresión es una combinación de variables, constantes y operadores, las expresiones son equivalentes al resultado obtenido de aplicar los operadores a los operandos, es decir; en el momento de la ejecución de un programa, donde se encuentren expresiones serán sustituidas por sus resultados. Las expresiones definidas forman parte de entidades de rango superior conocidas como sentencias, las cuales pueden ser entendidas y ejecutadas como unidades completas, pueden además incorporar expresiones de distinto tipo (lógicas, aritméticas,…). Lección 12: Fases de Procesamiento de un Programa en C. A continuación se presentan las diferentes etapas que hacen parte del procesamiento de un programa en C hasta obtener el código de máquina correspondiente también conocido como código objeto. 1. El Pre-procesador. Este es un componente característico de C es decir que no lo poseen otros lenguajes de programación su tarea es actuar sobre el programa fuente antes que el compilador, convirtiéndolo en otro archivo fuente “predigerido”. En general las transformaciones realizadas por el pre-procesador incluyen:   



Eliminación de los comentarios. Sustitución se las constantes simbólicas por sus valores reales. Inclusión en el archivo fuente el contenido de los archivos declarados con las sentencias #include (a estos archivos se les suele llamar cabeceras) Sustituir en el archivo fuente las macros declaradas con sentencias #define (p.e. #define CIEN 100).

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

2. El Compilador. Su misión consiste en traducir a lenguaje de máquina el programa escrito en lenguaje C, contenido en uno o más archivos fuente entregados por el preprocesador, generando lo que se conoce como un archivo objeto, algunos compiladores pasan por una fase intermedia en lenguaje ensamblador. También puede detectar errores durante la compilación presentando un mensaje dependiendo del error. 3. El enlazador Un archivo objeto está escrito en código máquina, pero no puede ser ejecutado por si solo, puesto que le falta código que se encuentra en otros archivos que lo complementan. El enlazador se encarga de generar un ejecutable binario, a partir del contenido de los archivos objetos y de diferentes Librerías. Más específicamente el enlazador toma los archivos de código objeto, generados en los primeros pasos del proceso de compilación y la información de los demás recursos necesarios (Librerías), remueve recursos que no son necesarios y enlaza el código objeto con las librerías utilizadas produciendo finalmente un archivo ejecutable. 4. Librerías. Las Librerías no son mas que funciones precompiladas, que contienen el código necesario para realizar funciones especificas, a las que el archivo fuente llama. Estas librerías son realizadas para mantener el lenguaje lo más sencillo posible pero brindando las herramientas y funciones estándar que cualquier programador pueda necesitar. Estas funciones están agrupadas en un conjunto de librerías de código objeto, que constituyen la llamada librería Estándar. La llamada de estas librerías se realiza de la misma manera que a cualquier función por lo tanto deben ser declaradas antes de ser llamadas por el programa, para tal efecto se emplea la sentencia #include. Un ejemplo de librería es la llamada ‘stdio’ (Standar Imput/Output) que posee diferentes funciones tanto para leer como para escribir datos de diferentes dispositivos periféricos como teclados, unidades de almacenamiento, pantallas, impresoras, etc. 5. Tipos de Datos Fundamentales. Con la intención de maximizar la eficiencia del manejo de memoria en C se puede trabajar con datos de diferentes tipos dependiendo de la aplicación entre los que se tienen: caracteres alfanuméricos, números enteros, números reales con parte

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

entera y parte fraccionaria etc. Admitiéndose diferentes rangos de precisión y signo (+ o -), todo esto con la intención de que el compilador reserve espacios de memoria suficientes para las variables declaradas como alguno de los tipos. En la tabla 2 de la sección „Almacenamiento de Datos‟ de la unidad 1 se presentan los diferentes tipos de datos, rangos y signo que pueden ser empleados en C. Entre los tipos de datos que se pueden apreciar en la tabla 2 tenemos los tipos char o caracteres alfanuméricos, int o números enteros, float o números reales, también conocidos como de punto flotante. Los números enteros pueden tener signo + o - (signed) o simplemente ser no negativos (unsigned). Las palabras short y long hacen referencia al rango en que se definen los enteros; similarmente para los reales están las palabras double y long con un significado un poco distinto. Es de tener en cuenta que cuando en C hay una expresión en las que dos constantes y/o variables de distinto tipo se encuentran relacionadas mediante un operador; el compilador convierte el operando de menor rango para igualarlo con el de mayor rango teniendo en cuenta el siguiente orden: Long double > double > float > unsigned long > long > unsigned int > int > char De la misma forma el compilador asigna a la variable resultado de una expresión el tipo predominante en dicha expresión, hecho que hay que tener en cuenta cuando en una expresión predomina un tipo de menor rango puesto que se puede perder información en futuras operaciones con esta variable. Estas características del compilador son conversiones implícitas y son transparentes para el programador aunque éste puede realizar conversiones explicitas precediendo el tipo que se quiere asignar entre paréntesis a la constante, variable o expresión. Ejemplo: x = (int) 1.7 + (int) m; 6. Modos de Almacenamiento. El modo de almacenamiento de una variable en C es una característica que determina en que momento es creada una variable, en que puntos se tiene acceso a ésta y en que momento deja de existir. En C existen 4 modos de direccionamiento que serán explicados a continuación: 1. auto: o modo automático es el modo por defecto para las variables que son declaradas dentro de un bloque de código {…} por lo tanto no es necesario escribir la palabra auto. Cada variable auto se crea al iniciar a ejecutarse un bloque dado y deja de existir cuando éste termina de ejecutarse, por tanto solo son „visibles‟ en el bloque que están definidas y en otros bloques anidados en el mismo aunque pueden ser ocultadas en bloques anidados mediante la declaración de una variable dentro de estos con el mismo nombre.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

Es de tener en cuenta que estas variables no son inicializadas por defecto es decir que antes de que el programa les asigne un valor estas pueden contener datos aleatorios de operaciones anteriores en el espacio de memoria que se les ha asignado. Un ejemplo que ilustra el modo de almacenamiento automático:

{ int i=1, j=2; … { float a=6., j=3.; … j=j+a … } … …

// se declaran e inicializan i y j

// se declara j nuevamente pero tipo float // ocultando la j tipo int para este bloque // anidado. // la variable i=1 si puede ser accesada // Fuera del bloque, j tipo float no existe // la variable j=2 tipo int puede ser

accesada }

2. extern: son variables globales es decir que existen a lo largo de todo el programa y pueden ser accesadas por cualquier función que se encuentre en el archivo, son definidas al comienzo de todo el programa fuera de cualquier bloque o función. Estas variables son inicializadas en cero por defecto. Pueden ser utilizadas para transmitir valores entre funciones pero esta práctica no es recomendable, también estas variables pueden ser ocultadas mediante la declaración de una variable con el mismo nombre al interior de un bloque. 3. static: las variables static pueden ser declaradas dentro de un bloque como las auto pero conservan su valor durante distintas ejecuciones del este bloque a lo largo del programa, es decir, que no son borradas de la memoria durante la ejecución del programa como las extern. Se inicializan en cero por defecto. Se pueden definir variables static extern la cuales solo son accesibles para funciones y bloques que se encuentren desde que son definidas hasta el fin del archivo; es una forma de controlar la accesibilidad a una variable.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

Las funciones por defecto presentan un modo extern pero el acceso a éstas también puede ser controlado mediante una definición static por lo tanto solo será accesible para funciones definidas después de esta y hasta el final del archivo. 4. register: este modo es una especie de recomendación para el compilador con la intención de que solo si es posible, ciertas variables sean guardadas en los registros de la CPU para que los cálculos con éstas sean ejecutado de manera más ágil. Es de tener en cuenta que para las funciones no existen los modos de almacenamiento register ni auto. 7. Control del Flujo de ejecución. Teniendo como principio la ejecución Secuencial de los programas, es decir que sus sentencias se ejecutan una tras otra en orden desde la primera hasta la última. Algunas veces es necesario no seguir el flujo del programa en orden sino saltar a partes del programa que serán ejecutadas en casos específicos, para tal efecto C cuenta con sentencias especiales que se clasifican en dos grupos las Bifurcaciones, sentencias que según ciertas condiciones pueden ser elegidas dos o mas opciones, y por otro lado están los Bucles, sentencias que permiten la ejecución cíclica de conjuntos de instrucciones el numero de veces que sea requerido por la aplicación. 7.1. Bifurcaciones. Entre las bifurcaciones tenemos: 

Operador Condicional: Está compuesto por tres operandos que cumplen con la siguiente notación general: expresión_1 ? expresión_2 : expresión_3; Este operador se ejecuta de la siguiente forma: se evalúa la expresión_1, si el resultado de dicha expresión es trhue, se ejecuta la expresión_2; caso contrario se ejecuta la expresión_3.



Sentencia IF: esta permite la ejecución o no de una sentencia simple o compuesta dependiendo de una determinada condición. Su forma general es la siguiente: if (expresión) sentencia; Primero se evalúa la expresión si el resultado es true se ejecuta la sentencia en caso contrario se salta la sentencia a la siguiente línea del

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

programa teniéndose en cuenta que la sentencias pueden ser simples o compuestas (bloques {…}). 

Sentencia IF … ELSE: esta permite una ejecución de una parte u otra del programa dependiendo del valor de verdad de la expresión entre paréntesis. if (expresión) sentencia_1; else sentencia_2; Se evalúa la expresión si es verdadera se ejecuta la sentencia_1, saltando sentencia_2 hasta la siguiente línea de comando, si por el contrario la expresión es falsa se ejecuta la sentencia_2 directamente saltándose sentencia_1.



Sentencia IF … ELSE Múltiple: con esta sentencia se puede realizar ramificaciones múltiples ejecutando solo una de diferentes partes de un programa según se cumpla una entre „n‟ condiciones. if (expresión_1) sentencia_1; else if (expresión_2) sentencia_2; else if (expresión_3) sentencia_3; else if (…) … [else sentencia_n;]

Se evalúa expresión_1 si es verdad se ejecuta sentencia_1, si es falsa se salta sentencia_1 evaluándose expresión_2 y así sucesivamente; si ninguna de las expresiones es verdadera se ejecuta entonces la sentencia_n que se conoce como la opción por defecto que a su vez puede ser una sentencia nula (;) 

Sentencia SWITCH: Similar a la sentencia IF … ELSE múltiple pero con importantes diferencias, su forma general es la siguiente:

switch (expresión) { case expresión_cte_1: sentencia_1; case expresión_cte_2: sentencia_2; …

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

case expresión_cte_n: sentencia_n; [default sentencia] } Se evalúa expresión se tiene en consideración el resultado de esta expresión si dicho valor coincide con el valor constante expresión_cte_1 entonces se ejecuta sentencia_1, sentencia_2, … ,sentencia. Si coincide con expresión_cte_2 entonces se ejecutan todas las sentencias a partir de la sentencia_2. Si no coinciden ninguna de las expresiones constantes entonces solo se ejecuta la sentencia por defecto si solo se desea ejecutar una de las sentencia, se emplea la sentencia brake al final de cada sentencia para dar por terminada la sentencia switch. Si se desea ejecutar determinada sentencia para diferentes valores de expresión se pueden colocar varios case expresión_cte seguidos. (case expresión_cte1: case expresión_cte_2:…) 8. Bucles. Los bucles pueden repetir cíclicamente la ejecución de determinadas líneas de código de un programa bien sea un número definido de veces o hasta que se cumpla una determinada condición lógica o aritmética, las tres herramientas que presenta C para tales efectos son: 

Sentencia WHILE: Esta permite ejecutar repetidamente una instrucción o bloque de instrucciones mientras se cumpla una determinada condición, su forma general es la siguiente: while (expresión_de_control) sentencia; Sentencia se ejecutará siempre que al evaluarse „expresión_de_control‟ resulte verdadera es de señalarse que en „sentencia‟ alguna variable que también intervenga en „expresión_de_control‟ debe ir cambiando para evitar que el programa entre en un bucle infinito.



Sentencia FOR: La forma general del FOR en C es la siguiente: for (inicialización, expresión_de_control, actualización) sentencia; Al ejecutarse una sentencia FOR primeramente se inicializa una variable a conveniencia de la aplicación, seguidamente y de forma general se tienen en cuenta las variables inicializadas para evaluar la „expresión_de_control‟,

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

siempre que esta resulte verdadera se ejecutará „sentencia‟ después se realiza la actualización que puede consistir en el incremento de contadores o la actualización de variables y retornará a evaluar la „expresión_de_control‟ hasta que esta sea falsa. 

Sentencia DO WHILE: Funciona de modo similar que la sentencia WHILE con la diferencia de que la evaluación de la „expresión_de_control’ se realiza al final del bucle después de haber ejecutado una vez al menos las sentencias entre las llaves, estas se seguirán ejecutando mientras que „expresión_de_control’ sea verdadera, a continuación la forma general de esta sentencia: do sentencia; while (expresión_de_control); El punto y coma se debe colocar después del paréntesis para diferenciar esta línea de una con una sentencia WHILE normal.

9. Sentencias break, continue, goto. Como se observó anteriormente la sentencia break interrumpe el bucle donde se encuentre incluida, aunque la expresión de control correspondiente sea verdadera. La sentencia continue hace que el programa comience el siguiente ciclo del bucle donde se encuentre aunque no haya completado la ejecución completa de una sentencia compuesta o bloque. La sentencia goto etiqueta hace saltar al programa a punto donde se haya escrito la etiqueta correspondiente. Lección 13: Ejemplos de manejo de módulos del HC08. En el presente capitulo se presenta de manera ilustrativa a partir de un ejemplo específico el procedimiento a seguir para abordar el desarrollo de programas, tanto en assembler como en C, que manejarán los diferentes módulos y periféricos que ofrecen los microcontroladores de la familia HC08. El ejemplo propuesto consiste en utilizar uno de los pines de conversión Análogo/Digital del microcontrolador para introducir una señal de voltaje que varíe entre 0 y 5 voltios y a partir de esta señal definir el ciclo útil de una señal PWM generada en el Modulo TIM (TIMER INTERFACE MODULE) con la intención de conectar un LED en este y observar la variación de la intensidad dependiendo de la posición del potenciómetro. 1. Reuniendo Información de los Módulos del MCU.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

Para empezar con el desarrollo del programa, primero es necesario documentarse sobre el uso de los módulos que se vallan a implementar, en este caso el módulo de conversión análogo digital (ADC) y el módulo temporizador (TIM). Para tal efecto se acude a las hojas de datos del dispositivo a utilizar, en este caso el microcontrolador MC68HC908JK3, en capitulo anterior se presentan las características, configuraciones, registros que utiliza y descripción de funcionamiento del módulo ADC, Igualmente se encuentra la información relevante para el módulo TIM. A partir de esta información y de manera ilustrativa a continuación se extracta información esencial sobre el módulo ADC, si se desea complementar se debe acudir a la hoja de datos. 1.1. Características del ADC (MC68HC908JK3).      

12 canales de conversión con entrada multiplexada. Conversión por aproximaciones lineales. Resolución de 8 bits. Conversión única o continua. Bandera o interrupción de conversión completada. Reloj de conversión seleccionable.

1.2. Registros del ADC. Los registros empleados por el ADC son los siguientes:   

ADSCR: ADC status and control. Estado y control del ADC. ADR: ADC Data Register. Registro de datos del ADC. ADICLK: ADC Imput clock Register. Registro de entrada de Reloj.

Figura 44: Registros del ADC.

1.3. Descripción funcional del módulo. El voltaje de entrada al conversor es digitalizado empleando el método de aproximaciones sucesivas, una vez la conversión es realizada, el dato se guarda

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

en un registro especial del conversor (ADR), a su vez puede o activar una bandera o generar una interrupción dependiendo del registro de configuración del ADC (ADCR). Si el voltaje de entrada es igual que Vdd (alimentación del uC) la salida es $FF si la entrada es igual a Vss (tierra) la salida del ADC es $00, los voltajes que se encuentren entre Vdd y Vss son convertidos linealmente entre estos valores empleando una resolución de 8 bits. Es importante tener en cuenta que el voltaje de entrada al conversor nunca debe exceder el voltaje de alimentación del uC. Cuando la conversión A/D es continua, los valores digitales son guardados en el registro ADR continuamente sin importar si estos datos han sido leídos o no, después de cada conversión el Bit COCO es puesto en alto („1‟) además puede generar una interrupción en la CPU cuando este Bit se encuentra en un estado lógico bajo; la conversión continúa indefinidamente hasta que el Bit ADCO es puesto en un valor lógico bajo („0‟). 1.4. Registro de Estado y Control (ADSCR). A continuación se describen la función de los diferentes Bits del registro ADSCR: 

AIEN: ADC Interupt Enable Bit. Cuando se encuentra en „alto‟ se activa la generación de interrupciones después de cada conversión, ésta señal de interrupción cambia su estado lógico a „0‟ cuando el registro de datos es leído o cuando se ha escrito en el registro ADSCR. Una señal de reset pone en estado bajo a este Bit. 1 = Interrupción del ADC habilitada. 0 = Interrupción del ADC deshabilitada.



COCO: Conversions Complete Bit. Cuando el Bit AIEN se encuentra en „0‟ el Bit COCO es configurado como de solo lectura y es activado (puesto en „1‟) cada vez que se completa una conversión. Este Bit cambia su estado lógico a „0‟ cuando el registro de datos es leído o cuando se ha escrito en el registro ADSCR. Una señal de reset pone en estado bajo a este Bit. Cuando AIEN se encuentre en „1‟, El Bit COCO es de solo lectura y siempre se encuentra en „0‟. 1 = Se completó la conversión (AIEN = 0). 0 = No se ha completado la conversión (AIEN = 0).



ADCO: ADC Continuous Conversion Bit.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

Si se encuentra en „1‟ el ADC realizará conversión de datos de manera continua actualizando en ADR cada vez que sea realizada una conversión, en el caso de que se encuentre en „0‟, solo se realiza una conversión. Una señal de reset pone en estado bajo a este Bit. 1 = Conversión continua. 0 = Una sola conversión A/D. 

ADCH [4:0]: ADC Chanel Select Bits. Estos forman un campo de 5 Bits empleados para la selección de uno de los canales del conversor de acuerdo con la siguiente tabla: Tabla 10: Bits de selección del ADC.

Nota 1: La conversión será nula si se seleccionan canales sin uso. Nota 2: Los niveles de voltaje suministrados por nodos de referencia interna como se especifica en la tabla son empleados para verificar la operación del ADC tanto durante su producción como para aplicaciones de usuario.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

1.5. Registro de Datos (ADR). En este registro de 8 bits se cargan los valores que generados cada vez que se completa una conversión. 1.6. Registro de selección del Reloj (ADICLK). Con este registro se configura la frecuencia de reloj con la que el ADC va a trabajar. Emplea un campo de 3 Bits con los que se selecciona la razón de división con la que se genera el reloj interno del ADC. En la siguiente tabla se presentan las configuraciones disponibles. Tabla 11: Configuración de la razón de división de la Frecuencia de entrada al ADC.

Una vez se ha consultado la documentación del módulo ADC se conoce la forma de configurarlo y utilizarlo, de igual forma para este ejemplo queda como tarea para el estudiante realizar la documentación para el uso del módulo TIM, esta información puede ser encontrada en el Capitulo 8 de las hojas de datos del dispositivo en uso. Lección 14: Programación en Assembler del HC08. Haciendo uso del correcto procedimiento que incluye desarrollo de diagramas de flujo se genera el código correspondiente a resolver la problemática planteada. Dado que el estudiante debe estar familiarizado con este proceso de desarrollo a continuación solo se presenta el código realizado para esta aplicación, se debe proceder a analizarlo, haciendo uso de los comentarios y del manual de referencia del dispositivo para consultar los nemónicos utilizados y así poder comprender la función de las diferentes líneas de comando escritas. Para escribir el programa en assembler se generó un nuevo proyecto siguiendo los pasos descritos en la sección 5.3.1 referente al software CodeWarrior, es importante tener en cuenta que el software genera todos los archivos que se requieren para programar de forma sencilla y estructurada. Para escribir el código además del manual de referencia de la CPU 08, se empleó el archivo MC68HC908JK3.inc, en este archivo es realizado por el CodeWarrior ,

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

en el se encuentran declaradas las etiquetas de todos los registros de control de los diferentes módulos, vectores de interrupción, mascaras y mapa de memoria del microcontrolador en uso, facilitando la tarea del programador así que no es necesario redefinir nuevas etiquetas para asignar los espacios de memoria, registros de control, mascaras etc. que pueda utilizar el programa. Para tal efecto el Linker o enlazador se encarga de procesar todas las etiquetas empleadas. En este caso, para generar la señal PWM se debe seleccionar un valor de frecuencia fijo, basándose en la información sobre en módulo TIM en las hojas de datos, se sabe que la frecuencia de una señal PWM generada a partir del módulo temporizador depende del valor cargado en el registro TMOD, éste representa el periodo de dicha señal. Al calcular este periodo se debe tener en cuenta el valor del pre-escalador; Si se requiere generar una señal a una frecuencia de 500 Hz con un valor del pre-escalador (PS) de 4, se emplea la siguiente ecuación:

TMOD 

t  f xtal 1 / 500  4.9152 x106   153  $0099 22 PS 2 2 4

Por otro lado el ancho del pulso de la señal (Ciclo util) se debe cargar en el registro TCH0, éste depende de la posición del potenciómetro que traducido a valores digitales puede ir en el rango de 0 a 255 pero como el periodo de la señal generado por el contador es 153, se debe normalizar el valor adquirido por el ADC utilizando una simple regla de tres 153  255 como TCHO  ADR entonces:

TCHO 

ADR 153 255

Teniendo en cuenta estas observaciones a continuación se presentan las líneas de código de una forma de solucionar el problema planteado:

;******************************************************************* ;* This stationery serves as the framework for a user application. * ;* For a more comprehensive program that demonstrates the more * ;* advanced functionality of this processor, please see the * ;* demonstration applications, located in the examples * ;* subdirectory of the "Freescale CodeWarrior for HC08" program * ;* directory. * ;******************************************************************* ; Include derivative-specific definitions INCLUDE 'derivative.inc' ; Directiva para incluir texto de otros archivos. ; derivative.inc incluye la declaración de ; periféricos (MC68HC908JK3.inc)

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

; ; export symbols ; XDEF _Startup

; Directiva para definición de etiquetas globales para ; el enlazador. ABSENTRY _Startup ; Directiva que especifica el punto de entrada de la ; aplicación Assembler.

; ; variable/data section ; ORG RAMStart PER_PWM: EQU $0099 ; ; code section ; ORG ROMStart

; Insert your data definition here ; Definición de variable: Periodo.

; Directiva que fija el PC en el valor que ; representa la etiqueta adyacente.

_Startup: LDHX #RAMEnd+1 TXS ; Se Inicializa el Stack Pointer(#RAMEnd+1). CLI ; Se habilitan las Interrupciones. INICIO BSET CONFIG1_COPD, CONFIG1 ; Se desabilita el WatchDog JSR INIT_PORTS; Salto a rutina de inicialización demódulos BCLR TSC_TSTOP, TSC ; Se activa el contador ('0' en el bit TSTOP del TSC). ESPERA BRA ESPERA ; Espera mientras ocurre una interrupción. ;=========================== ; INICIALIZACIÓN DE PUERTOS ;=========================== INIT_PORTS LDA STA ADICLK. LDA STA ADSCR.

#%00100000; Configuración del Reloj del ADC (ExtCLK/2). ADICLK ; Se carga la configuración del Reloj en #%00100000; Se habilitan la conversión continua del ADC. ADSCR ; Se carga la configuración del ADC en

MOV #%00110000,TSC ; Se Reinicia y detiene el Contador del TIM.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 208006 – SISTEMAS EMBEBIDOS

LDHX #PER_PWM ; Se carga el valor del periodo de la señal PWM en H:X. STHX TMOD ; Se transfiere el valor al registro módulo contador. MOV #%11011010,TSC0; Se configura el registro de control del canal CH0 ; (PTD4). RTS ; Retorna de la subrutina.

;================================= ;INTERRUPCION DEL TIM POR OVERFLOW ;================================= TIMOvr_INT BCLR TSC_TOF, TSC ; Se reconoce la interrupción. RTI ; Retorna de la interrupción. ;==================================== ;INTERRUPCION DEL TIM POR COMPARACION ;==================================== TIMCH0_INT BCLR TSC0_CH0F,TSC0 ; Se reconoce la interrupción. LDX #ADR ; Se carga el valor del ciclo util en X. LDA #PER_PWM ; Se carga el valor del periodo en A. MUL ; Se efectua la multiplicación [X:A]
View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF