You are on page 1of 18

Los Circuitos Integrados Programables

Introduccin

rio, con dos fuentes de entrada series asincrnicas capaces de ejecutar hasta Alguna vez dese tener un Kernel de 19.200 baud junto con siete sensores que Tiempo-Real para la familia PIC16CXXX de deben estar "indicados" como entradas microcontroladores? O quiso averiguar (vea el captulo 5). Se debe manejar otra de qu se tratan las Multitareas o los Enca- lnea de entrada que cause un "r econ jes? Si la respuesta es positiva, este captu- teo" del software interno. Para la salida, lo est dirigido a usted. Le ensearemos a este ejemplo tiene un LED que muestra implementar todas las caractersticas de ocho estados internos diferentes de la un gran Kernel Multitareas de Tiempo-Real "Alar ma Remota", la cual titila a diferenRemota" en poco espacio y sin ocuparnos de los tes promedios y secuencias. Esta salida sekernels existentes. Con una planificacin rie y asincrnica es capaz de ejecutarse a adecuada, y usando las tcnicas que des- 38.400 baud y las entradas pasan a la sicribiremos en este libro, podr construir su guiente estacin de la alarma remota. Se propio kernel de tiempo-real rpido con incluyen distintos temporizadores cortos y las caractersticas necesarias para hacer largos para cumplir con las nueve tareas cualquier tarea. cooperativas de este ejemplo. Por si no recuerda, se denomina baud a la transmisin de un byte por segundo. Qu es el Kernel? El segundo ejemplo se implement con un PIC16C64 para formar un Kernel SemiKernel es la palabra que se utiliza para Prioritario conducido por interrupcin. Este describir parte de "un sistema operativo" o ejemplo transforma las rutinas series de enel sistema operativo completo con el que trada y salida del primer ejemplo en Rutiopera un microcontrolador o una compu- nas de Servicio de Interrupcin (ISR) para tadora. En muchos artculos, en lugar de obtener mayor velocidad y precisin. emplear el trmino "Ker nel" empleo la palabra "entor no", sin embargo, aqu emno" plearemos el trmino en ingls que no poQu es un PIC? see traduccin directa. En la Nota AN585 de Microchip (gran Los circuitos integrados programables parte de la bibliografa consultada para (Programmable Integrated Circuits = PIC) redactar este texto es de la empresa Mison componentes sumamente tiles en la crohip) se incluyen dos ejemplos primordia- Electrnica de Consumo. An cuando son les: uno basado en el PIC16C54 y otro en conocidos desde hace ms de veinte el ms poderoso PIC16C64. Se implement aos, existen en la actualidad nuevos tipos una "Alar ma Remota" con el PIC16C54 que cumplen con una serie de requisitos y como un ejemplo de un Kernel No-Priorita- caractersticas sumamente tiles.

Todo sobre PICs

LOS CIRCUITOS INTEGRADOS PROGRAMABLES


Los microcontroladores PIC son en el fondo procesadores similares a otros tipos, como por ejemplo la familia de los microprocesadores X86, 80486, Pentium y muchos otros que usan una arquitectura interna del tipo Von Neumann. En este tipo de arquitectura los datos y la memoria del programa se encuentran en el mismo espacio de direcciones. En r ealidad un micr opr ocesador y un micr ocontr olador no son la misma cosa. Los PICs son micr ocontr olador es, es decir, una unidad que posee en su interior al micr opr ocesador y a los ele mentos indispensables para que pue da funcionar como una minicompu tadora en un solo chip. Esta circunstancia da lugar a una gran prdida de tiempo porque los datos tienen que ser retirados de la memoria y llevados a la CPU (Central Processor Unit) y viceversa. Esto significa que la computadora dedica la mayor parte del tiempo al transporte de datos de ida o de vuelta, en lugar de usar este tiempo para trabajar sobre los datos. Otra caracterstica de los procesadores PIC es el uso de un conjunto de instrucciones del tipo RISC (Reduced Instruction Set Computer). Con el RISC se suele ejecutar la mayora de las instrucciones con un solo pulso del clock. Con las instrucciones que se usan en otros equipos del tipo CISC (Complex Instruction Set Computer), se logra instrucciones ms poderosas, pero a costa de varios ciclos del clock. En el bien conocido procesador 68HC11 de Motorola se requieren a veces hasta 5 ciclos del clock para ejecutar una instruccin.

Figura 1

Todo sobre PICs

LOS CIRCUITOS INTEGRADOS PROGRAMABLES


Caractersticas de Algunos Procesadores PIC Para ilustrar mejor el concepto usado en los PIC, vemos en la figura 1 un esquema en bloques de los procesadores de la familia PIC 16C8X. En este esquema se observa claramente los dos tipos de bus: un data bus (arriba a la derecha) y un program bus (arriba a la izquierda hacia abajo). En este data bus vemos otra caracterstica inusitada: su capacidad es de 14 bits. Esta cifra no es divisible por 8 y por lo tanto la CPU debe considerarse como de 8 bits, pero las instrucciones usan palabras de 14 bits. Este nmero por cierto no es nico ni obligatorio: en la serie de procesadores16C5X se usan palabras de 12 bit y en la serie PIC 17CXX se usan palabras de 16 bits. Sin embargo ambos siguen siendo microcontroladores de 8 bit. En los procesadores PIC se usa slo un registro de trabajo, el registro W. Esto parece ser poco comn, pero se explica por el hecho que muchas de las operaciones que el RISC ejecuta, almacenan su resultado en la RAM o en el registro W, lo que aumenta su capacidad. Otros registros son el registro STATUS, el registro FSR (Feedback Shift Register) y el contador de programas. No existe en el PIC un registro stack (registro de pila), lo que limita el nmero de subrutinas que se pueden ejecutar. Existe sin embargo un stack de 13 bits y de 8 niveles que funciona en conjunto con el contador de programas. Una consecuencia de la arquitectura RISC es la reducida cantidad de instrucciones simples que llega slo a 35. Estas instrucciones pueden, sin embargo, combinarse para formar instrucciones ms complejas que solucionen los problemas satisfactoriamente. El set de instrucciones de un PIC se compone de slo 35 parmetr os de los cuales suelen emplearse con asidui dad solamente 15. En el Assembler suministrado por el fabricante de los procesadores PIC se usa una serie de macros que ayudan a crear un conjunto de instrucciones muy abundante. Como en todas las memorias programables, el gran secreto del xito reside en el software de la programacin que debido a la arquitectura RISC es sumamente amplio. El esquema de la figura 1 corresponde tambin a diferentes integrantes de la familia PIC, a saber: PIC 16C83, PIC 16R83 con una capacidad de 512 x 14 bits y PIC 16C84, PIC 16C84A y PIC 16R84 con 1k x 14 bits. Para superar exitosamente todos los problemas eventuales que puedan surgir en la programacin de los PICs, el fabricante provee tambin una herramienta adecuada llamada MPLAB que es un IDE (Integrated Development Envir onment = ambiente de desarr ollo integrado). integrado) En el mismo se incluye el software para un ensamblador, editor, simulador y programador, todo en un paquete dedicado. En el captulo 3 veremos cmo se usa este programa. Tenga en cuenta que si Ud. lo desea, puede obtener gratuitamente el MPLAB de la pgina WEB de Microchip o, si no puede bajarlo, puede comunicarse con el departamento de Atencin al Cliente de editorial Quark (Herrera 761/763 -1295- Capital Federal) al telfono (011) 4301-8804 o por Internet a: ateclien@vianetworks.net.ar O en nuestra pgina WEB: www.editorialquark.com.ar

Todo sobre PICs

LOS CIRCUITOS INTEGRADOS PROGRAMABLES


Algunos ejemplos del software estn disponibles en la Internet en: http//www.micr ochip.com Los socios del Club Saber Electrnica pueden adquirir sin cargo programas y aplicaciones en nuestras oficinas. Ud., como comprador de este texto, goza del mismo beneficio. Si reside lejos de Bs. As. puede solicitarlos por Internet y se los enviaremos por correo electrnico.

Figura 2

memoria de programa EEPROM de 1K x 14, un stack de hardware de 8 niveles, 13 lneas bidireccionales I/O, 3 fuentes de interrupt, temporizador de 8 bits de tiempo Algunos tipos de PIC real con un prescalador programable de 8 Un representante tpico de los PICs es el bits y una frecuencia operativa de DC a 20MHz. El integrado viene tambin en una tipo PIC 16C84, cuya base se observa en la figura 2. Se trata de un procesador con versin de montaje en superficie (surface mount). una memoria de programas EEPROM de El esquema bsico de este procesador 1k x 14. Tiene 64 bytes de memoria de datos EEPROM y 36 bytes de RAM de uso ge- surge de la figura 3 y es similar al del PIC 16C84. neral. La memoria de programa del EEUn procesador de mayor envergadura y PROM puede ser programada en serie en el circuito de aplicacin. Se dispone de 13 mayor tamao es el tipo PIC 16C74, cuyo pines de I/O con control de direccin indiFigura 3 vidual. Se dispone de 4 fuentes de interrupt interno/externo. El temporizador/contador es de 8 bits con un prescalador programable. La frecuencia de operaciones es de DC a 10MHz. El integrado viene con una base PDIP de 18 pines o SOIC. Una variante del anterior es el integrado PIC 16C61 con base similar y con una

Todo sobre PICs

LOS CIRCUITOS INTEGRADOS PROGRAMABLES


esquema interno bsico vemos en la figura 4. Este procesador posee una memoria de programa del EPROM de 4 K x 14, una RAM de uso general de192 bytes y 33 pines de I/O con direccin individual. Esta memoria es del tipo EPROM con una ventanita que deja pasar los rayos ultravioletas y por lo tanto puede borrarse con el borrador tpico de la serie 68HC 11. En este aspecto es similar a los procesadores anteriores. Se recomienda especialmente para aplicaciones en robtica. El PIC 16C74 tiene una base de 40 pines tipo PDIP o CERDIP (con ventanita) o de 44 pines tipo PLCC o QFP. Otros tipos de PIC salen al mercado con mucha frecuencia y ya se dispone de la serie PIC 12CXX con base de 8 pines y la serie PIC 17CXX de instrucciones de 16 bit que es ms potente aun. Qu utilidad tiene un Kernel de Tiempo-Real? Las tcnicas de diseo de tiempo-real permiten al "tcnico" superar problemas complicados para afrontar tareas ms simples. Estas unidades de cdigo ms simples permiten una respuesta ms rpida a eventos importantes y, a la vez, priorizan los trabajos a realizar en un formato probado y estructurado. El kernel hace el trabajo de conservar el tiempo, la armona y una comunicacin fluida entre todas las tareas. Se pueden hacer ms actividades en el mismo tiempo, ya que es posible realizar determinadas tareas mientras que otras aguardan que ocurra un evento especfico. Las tcnicas de "estado-conducido" tambin permiten cdigos ms pequeos, ya que se Figura 4 condensa ms informacin en las variables de estado y la estructura del cdigo. Un ejemplo es el cdigo de la "Alar ma Remota" del PIC16C54.

Qu significa que el Kernel es Multitarea? Significa que es posible "atender" varias tareas al mismo tiempo (en apariencia). Cada tarea cree que es la propietaria de la CPU, pero esta

Todo sobre PICs

LOS CIRCUITOS INTEGRADOS PROGRAMABLES


apariencia es controlada por el kernel. Slo se puede ejecutar una tarea a la vez, pero otras tareas no bloqueadas pueden estar operando mientras se est ejecutando una determinada. Para que sea "Multi tar eas" se ensamblan interrupciones, eventos, comunicaciones, datos compartidos y debe existir sincronismo para realizar un trabajo. La Pr ogramacin de T iempoReal es un conjunto de ideas, conceptos y tcnicas que permiten dividir problemas en unidades de cdigo basadas en unidades de tiempo, o eventos que conducen una tarea de un estado a otro. plo del PIC16C54 (vea el captulo 5). Esta variable cambia cada vez que el ESTADO cambia para la Tarea que est fuera de la Serie. Para coordinar diferentes tareas que intentan controlar una seccin crtica se usan dos tcnicas: "Semfor os (banderi tas) e Interrupciones Inhabilitadas". En el ejemplo del PIC16C54 (que veremos en el captulo 5) la Tarea #4 est dedicada a una alimentacin apropiada del Recurso fuera de Serie compartido. Advierta el uso del semforo binario "OEstado_B" para controlar la Tarea #4, la Tarea #1 y la variable xmt_byte. En el ejemplo del PIC16C64 hay muchas ms secciones crticas debido al uso de interrupciones. Hemos inhabilitado estas interrupciones por perodos de tiempo muy breves para proteger estas reas. Tambin en este ejemplo todas las secciones crticas estn finalizadas antes de la revisin que se hace para constatar si el kernel o entorno desea que se comience a ejecutar otra tarea en lugar de la tarea actual. Ms adelante ofreceremos ms detalles sobre cmo proteger las secciones crticas. En la figura 5 se da un diagrama de transicin de "tar ea / pr oceso de esta do". do"

Seccin Crtica

Una seccin crtica es una estructura de datos compartidos, un recurso compartido, una seccin de tiempo crtico de cdigo, o una seccin no-reentrante de cdigo que slo puede tener un "dueo" que pueda ver, cambiar o usar esta seccin en cualquier tiempo especfico. Estas secciones no deben ser interrumpidas durante el proceso de actualizacin. Deben ser protegidas para que no puedan acceder a ellas otras tareas que cambien los indicadores o los datos o modifiquen el hardware al mismo tiempo. Si dos tareas acceden a una seccin crtica al mismo tiempo, los datos cambiarn a tal Recursos Compartidos punto que se originar un "soberano de sastr e". Las estructuras de datos, las pantallas, el Cuando realice una aplicacin debe hardware I/O, y las rutinas no-reentrantes asegurarse que las secciones crticas sean pequeas, y que tengan tiempo para que sean "atendidas" las interrupciones pendientes. Los programadores RT tendrn muchos problemas si no comprenden las secciones crticas. Aun sin interrupciones, debe proteger las variables que cambian fuera de tiempo, como la variable de byte Figura 5 conformado xmt_byte, usada en el ejem-

10

Todo sobre PICs

LOS CIRCUITOS INTEGRADOS PROGRAMABLES


son ejemplos de recursos. Si dos o ms tareas usan estos recursos, entonces se llamarn Recursos Compartidos y deber protegerlos de posibles corrupciones. Slo pueden tener un dueo, una manera de indicarle a las otras tareas que deben esperar, y posiblemente una lista de espera para futuros usuarios del recurso. Un ejemplo raro de recurso compartido sucede en una secuencia de sincronizacin crtica de operaciones de entrada y salida para controlar un hardware determinado. Debe inhabilitar las interrupciones antes de comenzar esta secuencia, y rehabilitarlas luego de su finalizacin. Advierta en el ejemplo del PIC16C64 cmo la Tarea #1 funciona como una rutina "no-r eentrante" que debe ser finalizada por su poseedor actual antes de que otra tarea pueda usarla. cepto similar, y conserva la cantidad de registros guardados por cada tarea que se va cumpliendo. Usamos un viejo concepto llamado "de donde pr ovengo". La variaovengo" ble "FROM" se usa para indicarle al director que debe iniciar la tarea donde se interrumpi. Esto se debe a que no se puede manejar la acumulacin en la familia PIC16CXXX. Por esta razn tambin tenemos un kernel "Semi-Prioritario" en el PIC16C64. Cuanto ms rpida sea la interrupcin de contexto, mejor ser su operacin.

CMO PENSAR UN PROGRAMA: Planificador

El planificador (usamos este trmino para familizarizar al principiante con las diferentes tareas que se realizan) es la parte de un kernel que decide cul es la siguienInterrupcin de te tarea a ejecutarse. En esta seccin nos Contexto/Interrupcin de Tarea referiremos a distintos tipos comunes de planificadores. Es aqu donde se realiza la Cuando una tarea se hace cargo de otra tarea, los valores actuales de los regis- planificacin antes de iniciar la constructros de la CPU para la tarea en ejecucin cin de un nuevo dispositivo. Al comprender los diferentes tipos de sern guardados y los viejos registros guarplanificadores, y sus caractersticas y prodados para la nueva tarea sern realmacenados. La nueva tarea contina donde blemas especficos, podr saber cul es el fue recogida. Todo esto lo realiza la parte que ms se ajusta a sus necesidades. En el ejemplo del PIC16C54 se muestra la anula"Interrupcin de Contexto del Kernel de Tiempo-Real". Usualmente cada tarea tie- cin de las Tareas #1-3 justo antes de la ejecucin de una larga secuencia del cne una "rea de almacenaje para intedigo. rrupcin de contexto". Se pueden implementar otras tcnicas Cada SP de una tarea (Indicador de Acumulacin que indica su propia acumu- ms creativas, pero asegrese de permitir que todas las tareas se ejecuten a su debilacin) se guarda all junto con todos los do tiempo. otros registros importantes guardados. El Vea en la Figura 5 cmo cada tarea ejemplo de la "Alar ma Remota" no necesita usar una interrupcin de contexto por- debe estar en "Estado Pr eparado" o "Es tado en Ejecucin" para que pueda ser que todos sus registros importantes son Ejecucin considerada por el planificador a fin de adecuadamente liberados antes de la fique tenga el control temporario de la sinalizacin de cada tarea. guiente CPU. El ejemplo del PIC16C64 usa un con-

Todo sobre PICs

11

LOS CIRCUITOS INTEGRADOS PROGRAMABLES


del TIMER0 es la pulsacin central en el ejemplo del PIC16C64. Debe tener una inEl Kernel No-Prioritario tambin es llama- terrupcin de reloj para activar un verdado "Ker nel Cooperativo", ya que con su dero Kernel Prioritario. Cooperativo" uso las tareas slo abandonan el control cuando necesitan estar en coordinacin con otras tareas y eventos. Planificador en Rueda La "Alarma Remota" usa un Kernel NoPrioritario, as demuestra que a pesar de Cuando el planificador encuentra taser un tipo de kernel simple, se pueden ha- reas que tienen las mismas prioridades en cer muchas cosas con l. El tipo de Kernel la fila de "preparadas", usa una tcnica llaNo-Prioritario es adecuado para los mada Planificacin en Rueda para aseguPIC16C5Xs de tipo "no-interrupcin". rarse que se cumplan todas las tareas. Esta La pulsacin central del ejemplo del tcnica requiere mucho cuidado, y es una PIC16C54 es el contador TMR0 interno que de las ms creativas que puede usar su atraviesa de un valor alto a uno bajo del planificador para ajustarse a sus necesidacontador. des. Use el preescalmetro para ajustar las En el ejemplo del PIC16C54, todas las unidades de tiempo. Las tareas muy rpitareas estn programadas para ejecutarse das leen de continuo y directamente el apenas despus de su tiempo asignado. TMR0 en comparacin con el delta de Esto implica que ninguna tarea dominatiempo necesario para ver si se enciende. r a las otras bajo este abordaje simple. En los viejos tiempos de los sistemas Operativos de Tiempo-Real, este trmino se usaba Entorno Prioritario para designar "particin de tiempo". Los tiempo" actuales Kernels Prioritarios, con sus esqueEn un Kernel Prioritario, una tarea en mas de prioridad y sus capacidades de ejecucin puede ser permutada para que comunicacin entre tareas, implican un otra tarea prioritaria ms importante se desarrollo en este sentido. ejecute en su lugar. El Kernel Prioritario se basa ms en las interrupciones que en su fuerza de conduccin. La interrupcin de Prioritario vs. No-Prioritario contexto se enecuentra en el centro de este tipo de Kernel. El Kernel Prioritario es ms difcil de dePara implementar un verdadero Kernel sarrollar, pero ms fcil de usar, a pesar de Prioritario, debe ser capaz de manejar su que suele utilizarse de manera incorrecta. acumulacin. Esta es la causa por la cual Le llevar ms tiempo configurar el Kernel implementamos un kernel "Semi-Prioritario" No-Prioritario pero es mejor para los microen el PIC16C64, con las mejores caracters- controladores ms contrados. Con el Noticas de ambos tipos de kernels. Prioritario obtendr un mejor tiempo de En el ejemplo del PIC16C54 se trasladan respuesta entre una causa y la respuesta algunas tareas a las ISRs para manejar las para este evento. I/Os. Esta tcnica opera muy bien, ya que El Kernel Prioritario es ms predecible en las ISRs suelen ser muy breves, y realizan la sus tiempos de respuesta, y puede ser calmayor parte del trabajo. La interrupcin culado al tiempo mximo para completar Entorno No-Prioritario

12

Todo sobre PICs

LOS CIRCUITOS INTEGRADOS PROGRAMABLES


un trabajo determinado. El Kernel Prioritario es ms caro. nes y otras situaciones complejas que pueden surgir de una mala comprensin de los problemas y las tcnicas de TiempoReal. Si llega a necesitar prioridades dinmicas, deber revisar cmo dividi el problema, y hacer subdivisiones hasta incluir los recursos en cuestin bajo un "semfo r o o banderita". Tambin podra dividirlo banderita" ms para tener ms tareas que no necesiten dos o ms recursos para completar su trabajo, y mejorar la comunicacin entre las tareas nuevas. Con respecto a las tareas dinmicas, debera definir el problema de tal forma que sepa, al comienzo de la codificacin, el uso continuo de todas las tareas. Necesitar ms tiempo en la etapa de planificacin para establecer una buena comunicacin entre las tareas, pero es un buen mtodo para mantener las tareas y prioridades dinmicas fuera del diseo del kernel. La Inversin de Prioridad es un truco usado para manejar un sistema mal diseado, que invierte las prioridades de modo que permite la ejecucin de las tareas ms bajas que pudieran estar bloqueadas. Este es un truco muy barato, y no debiera considerarse en el diseo de un Kernel de Tiempo-Real. Use las otras tcnicas descriptas en esta seccin para solucionar este tipo de problema.

Reentradas En un Kernel Prioritario, dos o ms tareas pueden pretender la utilizacin de una misma subrutina. El problema es que no se puede controlar cundo se remueve una tarea para que otra tome su lugar. Cuando una subrutina usa slo variables locales o almacenadas en las acumulaciones de cada tarea, este proceso se denomina reentrada o "rutina pura". En una rutina pura no se pueden usar variables o hardware globales. Este requerimiento de la reentrada conduce a considerar toda la subrutina como una seccin crtica.

Prioridad de Tarea Todas las tareas no se crean de la misma manera. Ciertos trabajos deben realizarse a tiempo para que no se pierdan determinados datos. Por lo tanto, debe seleccionar segn este criterio cules son las tareas de mayor prioridad para hacer una escala de mayor a menor. Algunos kernels hacen que la prioridad de cada tarea sea diferente. La determinacin de la prioridad requiere una cuidadosa planificacin antes de la codificacin del trabajo de diseo.

Semforos (banderitas) Hay bsicamente dos tipos de semforos: binario y contador. El semforo binacontador rio permite nicamente un usuario, y todas las tareas que desean acceder a l debern esperar. El semforo contador tiene una lista de usuarios que necesitan acceso. Los semforos se pueden usar de muchas maneras. Puede implementar semforos contadores con semforos binarios.

Inversiones de Prioridad y Prioridades Estticas vs. Dinmicas Para los kernels de Tiempo-Real ms complicados, se usan tareas y prioridades estticas. Algunas veces se usan prioridades dinmicas para solucionar detencio-

Todo sobre PICs

13

LOS CIRCUITOS INTEGRADOS PROGRAMABLES


fundamentales de la programacin de Tiempo-Real. La Exclusin mutua es un mtodo para Una vez que construya un semforo biexcluir tareas a partir de la ganancia del nario para su kernel, podr construir semacceso a secciones crticas. La Exclusin foros ms complejos para sincronizar lo mutua es el proceso de excluir otras tareas que desee. del acceso a recursos compartidos. La En el ejemplo del PIC16C54 se excluyecreacin de un semforo es un proceso ron datos de distintas fuentes del Recurso muy complicado. de Puerto Serie. La Tarea #4 sincroniza las Su construccin debe ser atmica. Esto otras tareas para enviar afuera los datos y implica que luego de iniciarse el proceso, se sincroniza con la Tarea #1 para cumplirno puede ser interrumpido hasta que haya la. Cuando la Tarea #1 est en ejecucin, guardado el nombre del nuevo usuario. la Tarea #4 no podr ejecutarse hasta que Desde este punto en adelante, sabe que la Tarea #1 est preparada para enviar nadie podr desalojar y cambiar a los po- ms datos afuera. seedores (usuarios). En el ejemplo del PIC16C54 se implementa un semforo binario usando bits y funciones del kernel Comunicacin entre Tareas para excluir mutuamente el acceso. En los kernels ms grandes se pueden incluir mtodos de comunicacin ms Detencin complejos para intercambiar datos entre tareas. La mayor parte de la comunicaLa detencin es una condicin en la cin se realiza dentro del kernel. Se requiecual dos o ms tareas tienen recursos que re mucho ms espacio y velocidad de ejeotras tareas necesitan para completar su cucin para implementar estos mtodos asignacin, y stas no liberan sus propios en un sistema operativo. recursos a menos que las primeras tareas no los liberen primero. Esto se llama falta de cooperacin. Vea el tratamiento de Seales de Evento cooperacin estos problemas y las distintas maneras de solucionarlos en la seccin "Inversiones Normalmente se implementan bits simde Prioridad y Prioridades Estticas vs. ples en dos estados (on y off) como SeaDinmicas". les de Evento. Se puede almacenar ms Dinmicas" Estos problemas surgen por la falta de informacin por cada Seal de Evento de comprensin del problema original. acuerdo al tiempo en que fue grabada, quin la grab, a quin pertenece el evento y cuales fueron los datos perdidos. Sincronizacin Los semforos pueden usarse para sincronizar tareas con el propsito de que se intercambien mensajes. Los semforos tambin pueden iniciar tareas, detenerlas o comenzarlas juntas. Son los elementos Casillas de Correo para Mensajes Esta es una caracterstica til si tiene espacio RAM. Las casillas de correo le permiten al diseador intercambiar mensajes Exclusin Mutua

14

Todo sobre PICs

LOS CIRCUITOS INTEGRADOS PROGRAMABLES


entre tareas, revisar los mensajes cuando la tarea est preparada y responderle al remitente que el mensaje ha sido recibido. Se puede enviar un mensaje a varias tareas al mismo tiempo. Recuperacin, Respuesta y Estado latente de Interrupcin

Colas de Mensaje Esta caracterstica tambin es muy buena si tiene tiempo de ejecucin y RAM para implementarla. Las colas estn relacionadas con las Casillas de Correo. Pueden guardar distintos mensajes, aun despus de su lectura, para procesarlos ms tarde. Tambin puede operar en los mensajes de mayor prioridad antes de manejar el resto. Puede crear varias opciones con las Casillas de Correo y las Colas.

Interrupciones

Las interrupciones son uno de los mejores "inventos" para solucionar problemas de Tiempo-Real. Con ellas puede obtener una respuesta muy rpida a sus necesidades y retornar a lo que estaba haciendo. El nico problema es que pueden ocurrir en los peores momentos. Esto implica que deber aprender a activarlas y desactivarlas para proteger sus secciones crticas. Advierta que antes de manejar una interrupcin, deber guardar todos los registros importantes para que pueda restaurarlos a fin de que el kernel pueda reiniciar la tarea donde fue interrumpida. Este proceso se asemeja a la interrupcin de contexto, pero en estas interrupciones (interrupts), siempre deber guardar y restauTiempo de Procesamiento ISR rar. En el ejemplo del PIC16C64, los registros Status, W y FSR se guardaron en RAM El Tiempo de Procesamiento ISR (Rutina debido a la interrupcin. El registro PC fue de Servicio de Interrupcin) se define coguardado en la acumulacin por el hard- mo el tiempo en el cual una ISR controla la ware. CPU. El tiempo debiera ser breve, y si ne-

El Estado latente de Interrupcin se define como el perodo de tiempo ms largo en el que las interrupciones son desactivadas, ms el tiempo que le lleva a la ISR iniciar su ejecucin. Para un sistema No-Prioritario, el Tiempo de Respuesta de Interrupcin se define como Estado latente de Interrupcin ms el "tiempo de guar dado del contexto". contexto" Para un sistema Prioritario, debe agregar el tiempo de ejecucin en el cual el kernel graba la interrupcin. Para un sistema NoPrioritario, el Tiempo de Recuperacin de Interrupcin se define como el tiempo que lleva restaurar el contexto guardado ms el reinicio de la tarea interrumpida. Para un sistema Prioritario, la Recuperacin es similar a la del sistema No-Prioritario ms el tiempo que le lleva al kernel en el planificador la decisin de cual ser la siguiente tarea a ejecutarse. Estas mediciones sirven para comparar la mayora de los kernels. El ejemplo del PIC16C64 cumple bien con estas medidas. Esto se debe a que los procesadores PIC16CXXX en general tienen sistemas No-Prioritarios. La desactivacin de las interrupciones debe hacerse en el menor tiempo posible en cualquier kernel o tarea que escriba. Deber quebrar largas secuencias de instrucciones para permitir que se ejecuten las interrupciones en espera.

Todo sobre PICs

15

LOS CIRCUITOS INTEGRADOS PROGRAMABLES


cesitara realizar un procesamiento extenso en una ISR, debera quebrar la ISR. La nueva ISR almacenar los datos nuevos y el retorno. Luego debera crear una nueva tarea y trasladar el cdigo extra de la vieja ISR a la nueva tarea. Recuerde que cuanto ms tiempo le demande una interrupcin, ms tiempo tardar en responder a otra interrupcin apremiante. El "alojamiento de interrupciones" es el espacio donde una interrupcin de alta prioridad puede interrumpir a otra de prioridad ms baja. Debe ser cuidadoso al hacer esta operacin, ya que distintas interrupciones tambin pueden tener secciones crticas, y debiera desactivar interrupciones para proteger estas secciones. Muchos microcontroladores no tienen este alojamiento de interrupciones, entre ellos la familia PIC16CXXX. central del sistema. Es la forma en la que el Kernel controla el tiempo (relativo y absoluto). Tambin determina cmo el Kernel se reinicia para ver si ha finalizado una demora, a fin de que la tarea pueda ser trasladada al estado preparado. En nuestros ejemplos se us el reloj Timer 0. Debe tener una interrupcin de reloj para crear un verdadero Kernel Prioritario. Esta es otra razn por la cual implementamos un Kernel No-Prioritario en el PIC16C54, ya que no tiene interrupcin de reloj.

Ejemplo de Uso del Entorno (Kernel)

Esta es la seccin principal de este captulo. Aqu explicaremos detalladamente cmo la gente de Microchip ha llevado a la prctica los conceptos descriptos hasta ahora para construir una Alarma Remota. Interrupciones No-Ocultables Cabe aclarar que en el captul 5 se desarrolla completamente cada una de las En algunos microprocesadores, como tar eas programadas en el PIC, se da, en los de la familia PICmicro, puede actiadems, el cdigo de programacin covar y desactivar interrupciones selecciona- rrespondiente. das. Esta es una herramienta muy til para Daremos algunas ideas sobre cmo excontrolar la corriente de datos dentro y pandir los ejemplos y cul es su verdadero fuera del sistema. Algunos sistemas tienen alcance y velocidad. Interrupciones No-Ocultables (enmascaraLa aplicacin "Alar ma Remota" tiene bles). En este caso no las puede desactivarias caractersticas interesantes. Su funvar mediante un ocultamiento de softwa- cionamiento se basa en tener tantas filas re. Estas NMIs (abreviatura de Interrupcio- de unidades como un rbol que, alimennes No-Enmascarables) se usan como con- tado desde el nivel ms bajo, une los nivetraseas de reloj, para evitar problemas les de cada una de sus ramas ms grancon las secciones crticas de una interrup- des en un punto central. cin que no pueda desactivar. La familia Cada unidad puede detectar los camPIC16CXXX no tiene NMIs. Estas interrupcio- bios de estado realizados antes de que un nes no son tan tiles como las ocultables. intruso apague o corrompa la unidad. Si se corta cualquiera de los cables de potencia conectados al rbol, la falta de estaContrasea de Reloj dos y contraseas ser advertida en cinco segundos e informada a la lnea. La dos lLa Contrasea de Reloj es la pulsacin neas de Entrada Series por unidad reciben

16

Todo sobre PICs

LOS CIRCUITOS INTEGRADOS PROGRAMABLES


el estado y las contraseas de sus dos ramas ms grandes, revisan los datos y transmiten la informacin a la lnea por su propia lnea de Salida Serie. Las siete lneas de estado de entrada se relanzan en estos ejemplos que muestran esta tcnica. El LED de cada unidad informa el estado en el nodo de acuerdo a la importancia de sus propias siete lneas de estado de entrada y el estado que fluye en la lnea. La indicacin del nivel suministrada por el LED contina hacia el nivel ms alto hasta que se recibe un reset en la lnea "Estado Reset", o luego de que transcuReset" rran cinco minutos sin actividad nueva en las siete lneas de estado de entrada. Cuando ocurre alguno de estos dos eventos, se ajusta el nivel de salida del LED al nivel actual de la entrada. Otro uso de Sistema Incrustado de este tipo de aplicacin ("Alarma Remota") es colocar la unidad en la parte exterior de una caja fuerte. Se espera que el intruso sea detectado antes de arribar a la unidad. La corriente continua de estado y contraseas a la unidad ms grande del interior debera impedir cualquier hurto simple. que manejar entradas Series. Este ejemplo opera con una frecuencia de 4MHz. Aumentando simplemente la velocidad del cristal a 8MHz, los dos promedios Baud Seriales (series) de la entrada Asincrnica se incrementarn de 4.800 a 9.600 baud. El promedio baud de la Salida Serial aumentar de 9.600 a 19.200 baud. El aumento de la velocidad del cristal a 16MHz, llevar los promedios baud de las dos entradas independientes Asincrnicas a 19.200 baud, y el promedio baud de la salida Serial Asincrnica a 38.400 baud. Se pueden alcanzar otros promedios (Baud) a otras velocidades de cristal ajustando las constantes en el cdigo para las rutinas Seriales. Debe usar una configuracin de cristal estable. NO use una combinacin RC para ejecutar estos ejemplos. Ahora haremos una rpida descripcin del cdigo para el PIC16C54. En la figura 6 se brinda un diagrama esquemtico del PIC 16C54 empleado como alarma remota. Los renglones 1-85 del cdigo son los componentes para las ecuaciones de este programa. Los renglones 88-95 son simples tablas

"Alarma Remota" Este ejemplo intenta explicar una aplicacin verdadera y mostrar algunos conceptos y caractersticas nuevas. Se ha quitado una parte del cdigo especfico de aplicacin para mostrar ms claramente las posibilidades de un Sistema Operativo de Tiempo-Real usando la familia PICmicro. Decidimos que el promedio Baud para la salida Serie tenga el doble de velocidad de las dos entradas Series, ya que es ms difcil alcanzar una Salida Serie precisa

Figura 6

Todo sobre PICs

17

LOS CIRCUITOS INTEGRADOS PROGRAMABLES


de salto para guardar algunos de los valiosos "primeros 256 bytes" de cada pgina. En los renglones 97-159 se encuentran las Rutinas de Salida Seriales (Tarea #1). Las subrutinas de la Tarea #7 comienzan en el rengln 160 y continan hasta el 277. En esta seccin, la salida del LED est controlada. La subrutina QCheck_T123, que ocupa los renglones 278-301, se usa para revisar si las Tareas #1-3 estn preparadas para ejecutarse antes de la ejecucin de una extensa seccin del cdigo en una tarea ms lenta. Esta es una manera creativa mediante la cual el Planificador del Kernel se asegura que las tareas de mayor prioridad accedan al servicio antes de la ejecucin de otras tareas menos importantes. La Tarea #2 se inicia en el rengln 302. Esta tarea lee la Entrada Serial #1 para obtener datos Asincrnicos, y puede describirse como una Mquina de Estado para producir un byte serialmente. La Tarea #3 interrumpe el cdigo de la Tarea #2 en el rengln 333 y contina hasta el 362. Esta tarea tambin lee la Entrada Serial pero en la entrada #2. Las subrutinas de esta tarea (Tarea 2) comienzan en el rengln 363 y continan hasta el 423. Las subrutinas de la Tarea #3 comienzan en el rengln 424 y continan hasta el 484. El cdigo principal o de inicio comienza en el rengln 485. Desde este rengln hasta el 515, se inicializan todas las variables y las tareas. La Intercalacin Principal (Loop) se inicia en el rengln 516 y finaliza en el 665. En este punto se lleva a cabo la verdadera accin. Cada tarea revisa el tiempo para ver si las condiciones para la ejecucin son las correctas. Las tareas no Bloqueadas que tengan un trabajo para hacer estarn en un Estado Preparado. En la Intercalacin Principal, revisamos el estado actual de cada tarea para asignarle prioridad (de 1 a 9). Si estamos preparados, hacemos una simple Interrupcin de Tarea y colocamos la tarea en Estado de Ejecucin. Aqu se producen algunos cambios en la unidad de tiempo. Las Tareas #1-4 usan 2ms como una base de tiempo para leer directamente TMR0. En los renglones 562-575 se produce un cambio de unidad de tiempo de 512ms por unidad para las Tareas #5-6. Luego se produce otro cambio para las Tareas #7-9 de 131072ms por unidad. Entre las Tareas #5-9, cada tarea cuenta las unidades de tiempo y las comparan con sus estndares para la activacin o actividad. La Tarea #4 comienza en el rengln 538 y finaliza en el 561. Esta Tarea controla la alimentacin de la Tarea #1 desde otras tareas que intenten producir datos. Usa varios Semforos para asegurarse que la Tarea #1 no sea perturbada hasta que est preparada para otro byte. La Tarea #5 maneja la Lnea de Reset de Nivel, y siempre est en ejecucin. Simplemente resetea el estado del LED para que sea recalculado en la Tarea #6. La Tarea #5 se ejecuta entre los renglones 576-581, y es muy breve. La Tarea #6 ocupa los renglones 582611. Aqu relanzamos las siete lneas de entradas sensoras, dejando el estndard actual en la variable "Old_RB". La Tarea #6 pide Seales a la Tarea #4 para producir el estndar actual fuera del pin Serial. El cdigo principal de la Tarea #7 abarca los renglones 621-628. La Tarea #8 es una falta de cinco segundos del cronmetro de actividad, y ocurre entre los renglones 629-645. Si no se reciben datos de ninguna de las dos lneas seriales de entrada, entonces las Seales de la Tarea #8 le indican a la Tarea #4 que debe enviar un byte especial que luego ser producido por la Tarea #1. Estas Sea-

18

Todo sobre PICs

LOS CIRCUITOS INTEGRADOS PROGRAMABLES


Los renglones 21-24 son un experimento para asociar un nombre simple a un bit simple. Esto permite que las asignaciones se puedan modificar con mayor facilidad. Los renglones 30-54 son las asignaciones de variables. Las variables (renglones 35-39) se usan como contadores de tiempo. Cuentan la cantidad de unidades de tiempo, y las comparan a literales para revisar si se produjo un Evento. Los bits definidos en los renglones 57-64 se usan como Semforos Binarios. Resguardan las Secciones Crticas de datos protegidos. Nota: Ms adelante entrarn en accin en el En el captulo 5 se describen ms deta- cdigo. lladamente qu es lo que hace cada parLos bits definidos en los renglones 67-73 te del cdigo, por qu y cmo ejecutan son seales de error. Definen los estados sus acciones particulares. actuales o de ltimo error de las rutinas SeA modo de ejemplo explicamos a conti- riales, y cules datos se perdieron adentro nuacin qu hacen los datos expresa- o afuera. dos en los renglones 1-87 del segmento de La seccin de ecuaciones de los rencdigo. glones 76-85 se usa para definir la actividad diferente del LED. La Tarea #7 las usa El rengln 4 le indica al ensamblador para mantener el LED titilando. (assembler) MPASM cul es el PICmicro En los renglones 89-94 tratamos de que est usando. guardar todos los primeros 256 bytes imEl archivo incluido PICREG.H contina portantes de todas las pginas. con las ecuaciones y las asignaciones paEn el proyecto se detalla la funcin que ra que el cdigo sea ms legible y modifi- realiza cada tarea y se da el listado comcable. Debera usar ecuaciones que rela- pleto de los cdigos de programacin que cionen smbolos mutuamente. constituyen el kernel que nos ser de utiLas Constantes -renglones 10-12- son los lidad para la confeccin de futuros provalores que cambiarn a diferentes proyectos. medios Baud. Cabe aclarar que en la revista contiRepresentan los Tiempos de Bit para nuaremos publicando mensualmente difepromedios Baud divididos por 2 menos un rentes proyectos con PICs para que se fafactor de estado latente. miliarice con su uso y aprenda a dominar Deber ajustar el "Factor Fudge (embus- esta tcnica que, si bien tiene ms de 20 te)" y otros valores para sintonizar mejor el aos, se est popularizando recin ahora rendimiento. El valor usado para el "Factor dado el bajo costo de los componentes y Fudge" est relacionado con la va ms la facilidad de implementacin de circuilarga del cdigo. tos. les le indican a la "Alarma Remota" la falta de comunicacin entre sus unidades. La Tarea #9 es la ltima. Es una falta de cinco minutos de Errores Severos desde el Cronmetro de Reset Sensor, y comprende los renglones 646-663. La subrutina Do_D_H_E_L comienza en el rengln 667 y contina hasta el 692. Esta rutina determina el Nivel de Error ms Alto y traslada el estado actual de la Tarea #7 a la salida del LED. Entre los renglones 693-703 se despejan los registros #7-1 Fh. El cdigo "salto en Encendido" ocupa los ltimos renglones 705-706.

Todo sobre PICs

19

LOS CIRCUITOS INTEGRADOS PROGRAMABLES


Microprocesadores y Microcontroladores En la literatura tcnica es comn confundir estos trminos, sin embargo tienen diferentes significados. Un microprocesador es solamente la unidad central de procesos o CPU, la memoria, los puertos y todos los dems perifricos son exteriores. La programacin de un microprocesador es, por lo tanto, una tarea compleja porque deben controlarse todos estos dispositivos externos. Un microcontrolador integra la CPU y todos los perifricos en un mismo chip. El programador se desentiende de una gran cantidad de dispositivos y se concentra en el programa de trabajo. En esta obra estudiamos a los microcontroladores PIC cuya arquitectura interna puede observarse en la figura 7.

Figura 7

Una de las patas del puerto A puede ser utilizada como entrada de interrupciones (recuerde que esta pata especial hace que el microprocesador deje de realizar la tarea que estaba ejecutando y pase a realizar otra tarea alternativa; cuando la termina vuelve a su programa original). Analicemos el bloque ms grande, en ste observamos un grupo de bloques dedicados a mejorar el funcionamiento pero sin influir directamente en el flujo de seales. Vemos un temporizador de encendido, un temporizador de arranque del oscilador Estructura Interna del PIC16C84 de CLOCK, un circuito de reset y un circuiNo hace falta conocer al detalle el fun- to llamado de vigilancia o WATCHDOG. TCHDOG cionamiento interno del PIC, pero vamos a Los dos primeros bloques procuran un arranque ordenado para no producir una indicar en grandes rasgos para qu sirve carga al mismo tiempo sobre la fuente. cada bloque. Por ltimo, existe un circuito con un Observe primero los bloques externos. Existe un cristal que se conecta en OSC1 y nombre curioso, si el lector sabe algo de OSC2 para generar el CLOCK del sistema. ingls habr traducido el nombre literalmente como perr o guar din. Su funLuego una seal de entrada llamada din MCLR negada, que es un nombre de fan- cin es estar vigilante el mximo de tiemtasa para nuestro conocido RESET (debido po que tarda el microprocesador en coma que esa pata tiene un doble uso) y, por pletar su programa (o mejor sera decir, la ltimo, dos puertos paralelos de I/O (entra- derivacin ms larga de su programa) y da o salida) llamados puerto A y puerto B. en caso de superarse ese tiempo, provo-

20

Todo sobre PICs

LOS CIRCUITOS INTEGRADOS PROGRAMABLES


car un reset automtico porque el microprocesador se qued trabado en alguna parte de su programa. Tambin se dice que el microprocesador se qued colgado o congelado. Este bloque de circuitos no trabaja independientemente sino que requiere conexiones al exterior y al interior del dispositivo. Por ejemplo, no siempre son utilizados y es el programa quien determina su utilizacin y adems ajusta sus parmetros. Esto se realiza a travs del bloque de control o decodificador de instrucFigura 8 ciones. Analicemos ahora la seccin de arriba a la izquierda en donde observamos nmero de instruccin qued guardado la memoria de programa, el contador de en uno de los registros de la pila. Es comn programa, el registro de instrucciones y la que un loop tenga, a su vez, un loop secundario y cuando se ejecuta ese loop sepila o STACK de 8 niveles. Cuando hablamos de registros nos refe- cundario se debe volver al mismo punto del loop primario, eso se consigue con rimos a pequeas unidades de memoria guardar ese nmero de instruccin del transistoria, construida por lo general con un registro de desplazamiento. Son memo- loop secundario en otro registro de la pila (figura 8). rias voltiles que se utilizan para guardar Analicemos ahora la seccin inferior deinformacin por un tiempo mnimo, con el fin de realizar una operacin compleja de recha. En ese sector se ubican los bloques responsables de efectuar operaciones mavarios pasos. temticas y lgicas binarias; recordemos El contador de programa es el responque el nombre ALU proviene de Aritmetic sable de que el microprocesador vaya Logic Unite (unidad arimtica y lgi analizando las instrucciones en orden asca). cendente. Este guarda el nmero de insca) En este sector es imprescindible utilizar truccin en el STACK y la instruccin misma un registro ya que una operacin aritmtila pasa registro de instrucciones desde donde se enva al resto del microprocesa- ca o lgica siempre se efecta entre dos nmeros. Los nmeros binarios que deben dor. El STACK es, en realidad, una pila de re- procesarse se toman de la memoria de gistros (en nuestro ejemplo hay 8), debido datos, el primero se acumula en el registro a que el programa puede tener derivacio- de trabajo o registro W (de Work = trabajo) nes (en la jerga LOOPS, rulos o subprogra- el segundo es el presente en el instante en que se invoca la memoria de datos. mas). Cuando se termina de ejecutar un Como las operaciones pueden ser enloop se debe volver al mismo punto del cadenadas (cuando el resultado sirve coprograma en donde se haba producido la bifurcacin y eso es posible porque ese mo operando de la siguiente operacin,

Todo sobre PICs

21

LOS CIRCUITOS INTEGRADOS PROGRAMABLES


tal como el caso de un producto) el registro W tiene un retorno a la ALU. La ALU est comandada por el bloque MUX (MUltipleXador). En efecto, la ALU requiere que se le enven nmeros para procesar que le lleguen desde la memoria de datos, pero antes se la debe predisponer para que efecte la operacin requerida (comparacin, rotacin de dgitos, etc.). El registro de estado o estatus colabora durante las operaciones matemticas. Piense cmo opera Ud. para realizar una resta: primero ubica el primer nmero, luego el segundo y despus comienza a analizar los bits menos significativos (las unidades), pero si el nmero de arriba es menor que el nmero de abajo, entonces toma prestado de la columna de las decenas, luego debe recordar esto porque el nmero de arriba en la columna de las decenas se redujo en una unidad. En realidad, aunque se trate de una operacin entre dos nmeros su ejecucin requiere guardar lo que se llama acarreo en otro registro y ste no es otra cosa ms que el registro STATUS. El PIC16C84 contiene adems de todo lo visto una memoria RAM de registros que puede ser llamada desde el registro de instruccin a travs de un multiplexador de direcciones. Esta seccin del microprocesador ser analizada ms adelante porque slo se utiliza en desarrollos avanzados.*****

22

Todo sobre PICs

You might also like