Curso sobre Microcontroladores Familia HC9S08 de Freescale Por Ing. Daniel Di Lella – EduDevices – www.edudevices.com.ar e-mail: info@edudevices.com.ar Responsable Area Educación – ELKO / ARROW – www.elkonet.com e-mail: ddilella@elkonet.com Capítulo 3. Entrega Nº 5 Puertos I/O, Keyboard Interrupt Module (KBI). En la familia HC9S08 se han implementado módulos de Puertos I/O y KBI (Keyboard Interrupt) muy similares a los de la familia HC908, pero con agregados muy interesantes en cuanto al control del bajo consumo, control de la emisión de radiación electromagnética (EMI), y configuración de resistencias de Pull – Up / Pull – Down, que hacen a esta familia muy flexible para distintas aplicaciones de bajo consumo. En este capítulo se verán con cierta profundidad las características de los módulos de puertos I/O y KBI, se explicarán algunas cuestiones comunes que surgen cuando se empieza a utilizar la familia HC9S08 y se darán “trucos” para aprovechar las características de bajo consumo que posee la familia. También se verán técnicas para reducir los errores producidos cuando se utiliza el conversor A/D que comparte líneas I/O del MCU. Características de los Puertos I/O en la familia HC9S08. Configuración Típica de un Puerto I/O en la flia. HC9S08. Destacados: • • • Los resistores de Pull – Ups son programables en forma individual en cada pin. Se puede controlar por soft el “slew rate” (pendiente) de la señal de salida de cada pin. Corriente de manejo del pin configurable por soft. En la figura superior, se puede observar la configuración típica de un puerto I/O en la familia HC9S08. Como se puede ver, existen 4 transistores MosFET por cada pin I/O, 2 controlan los estados “alto” (1) y “bajo” (0), y los otros 2 restantes activan los resistores de Pull – Up y Pull – Down respectivamente. Cada pin I/O del MCU está protegido contra sobre – excursiones de tensión por medio de diodos rápidos en polarización inversa. Los resistores de Pull – Up / Pull - Down pueden ser activados en cualquier momento por medio de registros especialmente asignados para ello. En la realidad, los transistores MosFET que controlan los estados de alto y bajo, no son simples transistores, sino múltiples transistores configurados para poder controlar la corriente final del pin I/O. De esta forma, por medio del software se puede configurar la corriente final que puede manejar un pin I/O y la pendiente (slew rate) del mismo. Controlar el Slew Rate de un puerto es muy útil cuando el diseñador necesita que la aplicación con MCUs genere la menor cantidad de emisiones electromagnéticas (EMI) con los otros elementos involucrados en el sistema. En el circuito de salida, pueden observarse resistores de limitación de corriente de pequeño valor (cada resistor del circuito es en realidad una pequeña fuente de corriente implementada en una estructura CMOS que oficia en la práctica como un resistor), que son muy efectivos para limitar los picos de corriente presentes en los puertos I/O en distintas circunstancias. Registros asociados con los puertos I/O. 5 registros están asociados con cada puerto I/O. Estos registros están divididos en 2 grupos. El primer grupo, denominada “I/O Paralelo”, incluye los registros Port Data Register (PTxD) y el Port Data Direction Register (PTxDD). El registro de Datos (PTxD) se usa para leer el valor de una entrada (Input) o escribir un valor si el puerto es configurado como salida (Output). El registro de Dirección de Datos, configura las distintas líneas del puerto como entradas o salidas. Al igual que en la familia HC908, estos dos registros son accedidos en forma muy frecuente y por ello están ubicados en la página de acceso directo del mapa de memoria de la familia HC9S08, lo que hace muy eficiente el código utilizado para acceder a los mismos. El segundo grupo de registros comprenden a los que “controlan al pin”. En cualquiera de las aplicaciones donde el pin es utilizado como un puerto I/O o está siendo controlado como por algún otro módulo, los registros que controlan al pin gobiernan el funcionamiento del mismo. Los registros de control del pin incluyen: • • • Pull – Up Enable Register (habilita resistores de Pull – Up pin a pin del puerto por medio de cada bit del registro asociado al puerto). Slew Enable Register (habilita / deshabilita el control de pendiente del puerto pin a pin por medio de cada bit del registro asociado al puerto). Drive Strength Register (habilita / deshabilita el manejo de alta / baja corriente del puerto pin a pin por medio de cada bit del registro asociado al puerto). Después del reset, los registros de Pull – Up, Slew Rate y Drive Strength, quedan configurados a sus valores por defecto, esto significa que los resistores de Pull – Up, y el control de pendiente están deshabilitados, mientras que el manejo de corriente es configurado a baja corriente. Como puede observarse en la siguiente figura, los registros de control del pin están ubicados en la página alta de memoria RAM de los MCUs de la familia HC9S08 y a ellos se accede con instrucciones de direccionamiento extendido, ya que son utilizados no tan frecuentemente como el anterior grupo. Los 5 Registros Asociados con cada Puerto I/O. Multiplexado de Funciones. Es común en los MCUs de pocos pines físicos, por ejemplo 8, 16, 20 pines, compartir funciones en un mismo pin físico. Esto se lo denomina “Multiplexado de Funciones” y se busca que un mismo pin comparta funciones que, en general, no se molesten unas con otras. Por ejemplo, en el diagrama en bloques de la figura, se ha elegido el pin “PTA0” o Puerto A0, este comparte además las siguientes funciones KBIP0 (Keyboard Interrupt Pin 0), TPMCH0 (Timer Channel 0), ADP0 (A/D Pin 0) y finalmente ACMP+ (Analog Comparator Plus input Signal). En total, estas 5 funciones comparten el mismo pin físico del MCU, para ello, existen circuitos asociados que permiten activar y desactivar cada una de las funciones en forma individual. Si una o más habilitaciones han sido activadas para un mismo pin, tendrá validez solo la de mayor prioridad de las funciones activadas. La prioridad se establece desde el rótulo de la función que figura en la extrema derecha de cada pin del MCU elegido. En nuestro ejemplo, la función ACMP+ tiene la mayor prioridad y PTA0 tiene la menor prioridad. Este sistema de prioridades se establece para evitar posibles daños en los puertos cuando más de una función es activada en forma simultanea por medio del programa del usuario. Este sistema de prioridades funciona en forma similar al de la familia HC908 y también incluye el mismo sistema de prioridades para periféricos de comunicación serial como el SPI, SCI, o I2C. En estos periféricos, pueden producirse habilitaciones parciales (SCI) o totales (SPI, I2C) de las líneas que comparten con los puertos I/O. Por ejemplo, se puede utilizar solo el pin de RX (RXD) del módulo SCI para recibir datos seriales desde el exterior y liberar el uso del pin TXD de dicho módulo para ser usado por otra de las funciones que comparten dicho pin, sin necesidad de “inmovilizar” todos las líneas compartidas por dicho periférico. Al igual que en la familia HC908, se sugiere al lector, consultar con los manuales técnicos del MCU elegido en cuanto a las distintas configuraciones, y recomendaciones impartidas para cada función implementada en cada uno de los pines físicos del MCU. Esquema de “Multiplexado” de un puerto I/O de un MCU flia. HC9S08. Características Especiales en los Puerto I/O de la Familia HC9S08. Slew Rate & Drive Strength. Como se ha mencionado en párrafos anteriores, las características de los puertos I/O de la familia HC9S08 son muy similares a las de la familia HC908 con la diferencia de algunas características especiales agregadas que permiten el control de la pendiente de la señal de salida y la corriente de manejo de un puerto I/O. Estas nuevas funcionalidades son muy útiles cuando la aplicación debe cumplir con normas de control ambiental o interferir lo menos posible con el resto del sistema, ya que tienden a mantener en niveles bajos las emisiones electromagnéticas (EMI) que generan los cambios de estado en los puertos I/O del MCU. Slew Rate. El control de la pendiente (Slew Rate) es muy importante para la disminución de armónicos generados por la “pendiente abrupta” de un señal (cambio de “0” a “1” o a la inversa) de salida de un puerto I/O. En las siguientes ilustraciones se puede observar las diferentes formas de onda de las señales de un puerto I/O con y sin control de la pendiente. Con una carga de 50 pF en un puerto I/O vemos que la pendiente de la señal de salida del mismo es 10 veces más lenta cuando tiene activado el control de pendiente (3 nS vs 30 nS). En esta figura se pueden ver dos señales de salida de distintos puertos I/O. La línea PTA0 ha sido configurada sin control de pendiente, mientras que la línea PTA1 ha sido configurada con control de pendiente. Ambas líneas tienen idénticas cargas de 1K ohms y la señal cambia en forma simultánea en ambas. Se puede observar que la línea PTA0 presenta un “sobre impulso” o “overshoot” muy pronunciado y una pendiente muy abrupta, estas dos características son las responsables principales de la generación de armónicos electromagnéticos (EMI) cuando el la placa de circuito impreso (PCB) existen pistas largas o deficiente desacople en las líneas de alimentación. La baja emisión de armónicos hace a nuestro sistema más estable ante condiciones de ruidos eléctricos, tanto internos como externos. Drive Strength. La posibilidad de controlar la corriente de manejo de un puerto I/O, es un factor muy importante cuando se quiere controlar las emisiones electromagnéticas (EMI) o bien se requiere mejorar la capacidad de manejo de corriente de un puerto en determinadas circunstancias. En las siguientes ilustraciones se puede observar las diferentes formas de onda de las señales de un puerto I/O con baja y alta corriente. En la ilustración, se puede ver como cuando se incrementa la corriente máxima de manejo del puerto I/O, si bien se mejora la tensión correspondiente al cero lógico (“0”) (VoL), también se observa un excesivo sobre – impulso producto del refuerzo del manejo de corriente. Mientras que si se combinan ambas acciones (refuerzo del manejo de corriente y control de la pendiente de la señal del puerto I/O) se puede observar en la próxima figura que se conserva la mejora de la tensión máxima del cero lógico VoL, sin que por ello se note un sobre – impulso que pueda generar EMI en la aplicación. Por lo que se concluye que el control de pendiente es fundamental para disminuir la generación de EMI y además contribuye a disminuir el consumo general del sistema. Cuidados a tener con los pines no conectados de un MCU. Tanto los dispositivos de la familia HC908 como de la familia HC9S08 están basados en tecnología CMOS de última generación, que permite altas prestaciones en tamaño de pastilla (Die) muy pequeños. Sin embargo, la tecnología CMOS tiene como una de sus características presentar alta impedancia de entrada cuando un puerto I/O es configurado como entrada (Input). Esta particularidad hace que se deba tener especial cuidado con los Puertos I/O no utilizados o cualquier otra entrada del MCU que no se esté utilizando, ya que constituyen verdaderas fuentes de ingreso de ruido eléctrico al microcontrolador y además se genera actividad en dichas líneas que provocan consumos y drenajes de corrientes que se ven reflejadas en la corriente IDD del MCU durante el estado de STOP. Este mismo efecto también se manifiesta en los MCUs que no tienen implementados los puertos I/O en forma física hacia el exterior, pero si están implementados en el silicio (no hay conexión con pin externo alguno). Para evitar o disminuir estos efectos, se sugieren las siguientes recomendaciones: • • • • Todo Puerto I/O de propósitos generales que no sea utilizado o conectado a alguna parte del sistema (pin sin conexión) debe configurarse como “Input” con el resistor de Pull – Up activado, o como salida (Output) a “0” o a “1” lógico según necesidad. De igual forma se debe proceder con los puertos I/O no implementados en forma física en el MCU. Tratar que las entradas no conectadas estén lejos de las líneas del MCU con mucha actividad (SPI, SCI, I2C, ICAP, PWM, etc.). Las líneas de alta corriente del MCU deben estar tan cerca como sea posible de VDD o VSS según corresponda. Continuará....... Nota de Redacción: El lector puede descargar este capítulo y capítulos anteriores del curso desde la sección “Artículos” (Curso_HC9S08) en el sitio web de EduDevices (www.edudevices.com.ar )