UNIVERSIDAD AUTÓNOMA METROPOLITANA UNIDAD IZTAPALAPA DIVISIÓN DE CIENCIAS BÁSICAS E INGENIERÍA PROYECTO TERMINAL DE INGENIERÍA ELECTRÓNICA Evaluación de Microcontroladores Propuesta de Diseño de la tarjeta experimental UAMI-AVR ALUMNOS CHÁVEZ CALDERÓN ARMANDO PAREDES GARCÍA HORACIO LICENCIATURA EN INGENIERÍA ELECTRÓNICA ESPECIALIDAD COMUNICACIONES ASESOR DEL PROYECTO M. EN C. SUARÉZ FERNANDEZ AGUSTÍN PROFESOR INVESTIGADOR DEL ÁREA DE INGENIERÍA BIOMÉDICA MÉXICO D.F., JUNIO DE 2006.
84
Embed
UNIVERSIDAD AUTÓNOMA METROPOLITANA148.206.53.84/tesiuami/UAMI13575.pdf · Tarjeta UAMI-AVR v1.0 57 Microcontroladores soportados 57 Características 57 Apéndice B Guía rápida
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
UNIVERSIDAD AUTÓNOMA METROPOLITANAUNIDAD IZTAPALAPA
DIVISIÓN DE CIENCIAS BÁSICAS E INGENIERÍA
PROYECTO TERMINAL DE INGENIERÍA ELECTRÓNICAEvaluación de Microcontroladores
Propuesta de Diseño de la tarjeta experimental UAMI-AVR
ALUMNOS
CHÁVEZ CALDERÓN ARMANDOPAREDES GARCÍA HORACIO
LICENCIATURA EN INGENIERÍA ELECTRÓNICAESPECIALIDAD COMUNICACIONES
ASESOR DEL PROYECTOM. EN C. SUARÉZ FERNANDEZ AGUSTÍN
PROFESOR INVESTIGADOR DEL ÁREA DE INGENIERÍA BIOMÉDICA
MÉXICO D.F., JUNIO DE 2006.
Proyecto terminal de ingeniería electrónica
DEDICATORIA
A DiosPor que sin Él nada sería posible.
A mis padresPor su comprensión y apoyo financiero.
A FannyPor su ejemplo y apoyo.
A mis compañeros, amigos y maestrosPor sus enseñanzas, esfuerzos y comprensión.
Ing. Armando Chávez Calderón
A mi familia Por su paciencia, cariño y consejos
A mis amigosPor las fiestas no convividas con ellos
INTRODUCCIÓN A LOS MICROCONTROLADORES1.1 Introducción 51.2 Arquitectura básica 61.3 Bloques internos del microcontrolador 81.4 Recursos especiales 111.5 El mercado de los microcontroladores 121.6 Herramientas para el desarrollo de aplicaciones 131.7 Desarrollo del software 14
2.3.1 Procesamiento de datos 162.3.2 Entrada / Salida 172.3.3 Consumo 172.3.4 Memoria 172.3.5 Ancho de palabra 172.3.6 Diseño 182.4 La familia de los PIC vs. La familia de los AVR cómo elección 18
Capitulo 3
COMPARATIVOS DE AMBOS MICROCONTROLADORES3.1 Comparativos (Características Relevantes) 193.2 Conclusiones de la evaluación 213.3 Comentarios finales 24
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
Capitulo 4
DISEÑO DE LA TARJETA UAMI-AVR4.1 Sección Fuente de Alimentación 264.2 Sección Comunicación Serial 274.3 Sección de Control 30
4.3.1 Algoritmo de programación serial 324.3.2 Características de la programación serial 35
4.4 Sección Selección de microcontrolador A y B 354.5 Sección Programador 404.6 Sección Banco de leds 40
Capitulo 5
ENTORNO DE PROGRAMACIÓN5.1 ¿Cómo programar? 43
5.1.1 Hardware 435.1.2 Software (AVR Studio 4® y AVR Prog®) 43
Apéndice CCaracterísticas eléctricas de la tarjeta UAMI-AVR 65
Apéndice DPrograma de aplicación de la tarjeta UAMI-AVR 66
Referencias 81
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
Abstrac
En el contenido de este reporte damos una descripción general de lo que es un microcontrolador, su arquitectura, sus aplicaciones y la justificación de su uso actualmente en aplicaciones, que van desde académicas, así como en aplicaciones especificas y profesionales en el ámbito de los sistemas digitales.Posteriormente se evaluaron algunos microcontroladores comerciales de las marcas ATMEL® y MICROCHIP®, partiendo de su disponibilidad comercial en México, costo; y de sus recursos técnicos como lo son sus periféricos integrados: EEPROM, RAM, FLASH, su herramienta de desarrollo, conjunto de instrucciones, control de periféricos, interrupciones disponibles y modos de baja potencia.Al finalizar dicha evaluación se opto por elegir los microcontroladores AVR de la marca ATMEL®, debido a su modernidad, recursos técnicos y disponibilidad comercial. Con ello partimos con base en algunas aplicaciones típicas, al diseño de la tarjeta experimental UAMI-AVR, que en su inicio se basó en dos microcontroladores AVR®, el AT90S2313 y el ATMEGA16; ya dentro del proceso de diseño se decidió que, para que ésta tuviese mayor versatilidad soportará la grabación de cinco microcontroladores más, dando soporte así a los siguientes modelos: ATMEGA32, ATMEGA8535, AT90S1200, AT90S8535 y ATtiny2313.
ObjetivoDiseño de la tarjeta UAMI-AVR para los cursos de Sistemas Digitales de la UAM-Iztapalapa.
JustificaciónActualmente, se utilizan como base experimental de los cursos de Sistemas Digitales
diferentes microprocesadores o microcontroladores. En el caso particular, del
microprocesador 80C188EB, tarjeta UAMI-188EB, las memorias adicionales que se
requieren, debido a su baja capacidad, están al final de su ciclo comercial. Los
microcontroladores, en la gran mayoría de los casos, tienen integradas las memorias
necesarias y tienen la posibilidad de estar disponibles como muestras comerciales sin costo.
Además de tener una mayor cantidad de periféricos que permiten darle a los cursos
diferentes enfoques, ya que en estos convergen dos áreas del departamento de eléctrica que
son Ingeniería Electrónica con sus dos especialidades Comunicaciones y Computación, e
Ingeniería Biomédica con la especialidad de instrumentación.
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
1Introducción a los microcontroladores
1.1 Introducción
Primero hay que entender ciertas diferencias que existen entre un microprocesador y un
microcontrolador, básicamente la diferencia es la siguiente: un microprocesador es una CPU
(Unidad Central de Proceso) en un solo integrado, mientras que un microcontrolador es un
sistema basado en una CPU en un solo integrado orientado en general a aplicaciones de
control y adquisición de señales.
Los microcontroladores tienen su uso en sistemas de control, aplicaciones industriales,
electrodomésticos, biomédicas, comunicaciones, meteorológicas, etc.
La gran mayoría de los microcontroladores son fáciles de usar y por ello su uso a proliferado
en muchas áreas, además aportan una gran flexibilidad que conlleva a una potente gama de
posibilidades para los diseñadores. Fig. 1
Fig. 1 aplicaciones típicas de un microcontrolador
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
Su gran versatilidad y flexibilidad se dejan ver en las múltiples aplicaciones que posibilitan
las potencialidades de un microcontrolador, como lo pueden ser sus interfaces con motores,
pantallas LCD, matriz, etc., comunicación con PC’s, leer y digitalizar valores de sensores
externos, conectarse en una red de microcontroladores, etc., con la ventaja de que esto
puede hacerse con muy pocos componentes externos. Por ello al usar un microcontrolador
en algún diseño, el resultado final será compacto, de costo bajo y fácil de depurar.
La estructura típica de un microcontrolador dispone de los siguientes elementos, fig. 2.
Fig. 2 arquitectura general de un microcontrolador
1.2 Arquitectura básica
Aunque inicialmente todos los microcontroladores adoptaron la arquitectura clásica de Von
Neumann, en el momento presente se impone la arquitectura Harvard. La arquitectura de
Von Neumann se caracteriza por disponer de una sola memoria principal donde se
almacenan datos e instrucciones de forma indistinta. A dicha memoria se accede a través de
un sistema de bus único (direcciones, datos y control).
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
La arquitectura Harvard dispone de dos memorias independientes una, que contiene sólo
instrucciones y otra, sólo datos. Ambas disponen de sus respectivos sistemas de bus de
acceso y es posible realizar operaciones de acceso (lectura o escritura) simultáneamente en
ambas memorias. Figura 3.
Fig. 3 La arquitectura Harvard dispone de dos memorias independientes para datos y para instrucciones, permitiendo accesos simultáneos.
RISC
La industria de los microcontroladores está decantándose hacia la filosofía RISC
(Computadoras de Juego de Instrucciones Reducido). En estos el repertorio de instrucciones
de máquina es muy reducido y las instrucciones son simples y, generalmente, se ejecutan
en un ciclo. La sencillez y rapidez de las instrucciones permiten optimizar el hardware y el
software del procesador.
SISC
En los microcontroladores destinados a aplicaciones muy concretas, el juego de
instrucciones, además de ser reducido, es “específico”, o sea, las instrucciones se adaptan a
las necesidades de la aplicación prevista. Esta filosofía se ha bautizado con el nombre de
SISC (Computadoras de Juego de Instrucciones Específico).
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
1.3 Bloques internos del microcontrolador
CPU
Es la unidad de de procesamiento central. Esta toma las instrucciones almacenadas en la
memoria de programa, decodifica estas instrucciones y las ejecuta. La CPU está compuesta
por registros, la Unidad Lógico Aritmética (ALU), el decodificador de instrucciones y la
circuitería de control.
Memoria de programa
La memoria de programa almacena las instrucciones que forman el programa. La memoria
de programa en los microcontroladores es usualmente no volátil, puede ser EEPROM y/o
FLASH.
RAM
La RAM es la memoria de datos del microcontrolador. Esta es usada por el CPU para
almacenar variables así como la pila y el “heap”. La pila es un área de memoria que se
utiliza para almacenar direcciones de retorno y variables que se le pasan a las funciones del
programa, el “heap” es un área de memoria que se utiliza para asignación dinámica de
memoria.
Reloj oscilador
El microprocesador ejecuta el programa fuera de la memoria de programa a determinada
velocidad, esta velocidad es determinada por la frecuencia del reloj oscilador, este podría ser
un oscilador interno o un oscilador con un elemento de tiempo externo, como un oscilador
de cuarzo (cristal) usado comúnmente. Tan pronto como se enciende el microcontrolador la
operación del oscilador debe iniciarse.
Reset y circuito detector
El circuito de reinicio (reset) en el microcontrolador asegura que al inicio todos los
componentes y circuitos de control tengan un estado inicial predefinido y todos los registros
sean iniciados adecuadamente.
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
Puertos de comunicación
Estos son componentes muy usados en los microcontroladores, pues se necesitan para
comunicarse con dispositivos externos, estos operan a diferentes velocidades (según se
requiera). Los puertos de comunicación toman bytes del microcontrolador y los envían
afuera un bit a la vez hacia uno de los pines de salida, de forma similar aceptan datos un bit
a la vez hasta formar un byte y presentárselo al CPU. Este tipo de puertos de comunicación,
los cuales reciben y transmiten datos bit por bit se le denomina puerto serie, existen puertos
síncronos y asíncronos, los primeros necesitan de una señal de reloj que acompañe a los
datos y que lleve la información sobre la temporización, mientras que en los segundos la
información de temporización es tomada de los datos. Generalmente este puerto es
integrado en un chip dentro del microcontrolador llamado UART (Recepción Transmisión
Asíncrona Universal) o USART (Recepción Transmisión Asíncrona Síncrona Universal).
Puertos de entrada / salida digitales
Estos puertos de E / S se usan para intercambiar datos digitales con el exterior. Comparados
con el puerto serial, los datos en un puerto de E / S digital se envían en bytes.
Puertos entrada / salida analógicos
Las entradas analógicas son procesadas usando un Convertidor Analógico Digital (ADC). Los
microcontroladores pueden poseer un ADC y un comparador analógico, estos, bajo la
supervisión del software, son usados para la adquisición de datos analógicos, principalmente
de sensores externos. Las salidas analógicas se logran usando un Convertidor Digital
Analógico (DAC), generalmente externo, pero la mayoría de los microcontroladores están
equipados con un modulador de ancho de pulso (PWM), que puede ser usado para obtener
salidas analógicas de voltaje con un filtro RC, estás salidas pueden usarse para controlar
motores, pantallas, generar sonido, etc.
Temporizador
Este es usado por el microcontrolador para eventos de tiempo, por ejemplo puede haber un
dato que necesite ser visualizado en una pantalla en ciertos instantes. El temporizador
también puede ser usado para contar eventos internos o externos, en este caso se le llama
contador o cronómetro.
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
Temporizador “Watchdog” (WDT)
Un WDT (“perro guardián”)1 es un temporizador especial con una función específica. Este es
usualmente usado para prevenir caídas de software. Trabaja de la siguiente manera: el WDT
es básicamente un contador donde la frecuencia de su entrada de reloj se elige, de acuerdo
a ciertos puntos del programa donde el diseñador debe poner una instrucción para reponer
(resetear) este contador, así si el contador se desborda se reinicia (resetea) el
microcontrolador, i.e., un desbordamiento del WDT implica que el programa se quedo
esperando en algún punto.
Haciendo una analogía con una PC, cuando esta se bloquea por una falla en el software u
otra causa, se pulsa el botón del reset (reinicio) y se reinicializa el sistema. Pero un
microcontrolador funciona sin el control de un supervisor y de forma continua las 24 horas
del día. El WDT a grandes rasgos consiste en un temporizador que, cuando se desborda y
pasa por 0, provoca un reset (reinicio) automáticamente en el sistema.
Para esto se debe diseñar el programa de trabajo que controla la tarea de forma que
refresque o inicialice al WDT antes de que provoque el reinicio (reset). Si falla el programa o
se bloquea, no se refrescará al WDT y, al completar su temporización, se dice comúnmente
que “ladrará y ladrará” hasta provocar el reset.
RTC (Reloj de Tiempo Real)
Este es un reloj de tiempo real, es un temporizador especial con la tarea de mantener el
tiempo del día, mes, hora. Este puede ser usado como alarma para ciertos eventos.
Sistemas embebidos
El microcontrolador es en definitiva un circuito integrado que incluye componentes de un
sistema basado en una CPU. Debido a su reducido tamaño es posible montar el
microcontrolador en el propio dispositivo al que gobierna. En este caso el microcontrolador
recibe el nombre de microcontrolador empotrado (embedded controller).
La frase “divide y vencerás” se hace presente también en la arquitectura de los
microcontroladores, de forma tal que aunque los datos se procesan en el bloque de la CPU,
cada uno de los periféricos es autónomo.
1Traducción coloquial para watchdog, por separado (watch: reloj, dog: perrro)
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
Así por ejemplo para transmitir un dato por el puerto serial, la CPU no tiene que estar
atendiendo la transmisión del dato en cada instante de tiempo (polling), esta simplemente le
da el byte al módulo por el que lo quiere transmitir y este modulo se encarga de transmitir y
producir la señal de reloj; de esta forma la CPU puede estar realizando otras tareas mientras
el dato se transmite.
De la misma manera cada uno de los módulos integrados requiere de un mínimo de la CPU.
Reduciendo las tareas que debe realizar la CPU, obtenemos un poderoso microcontrolador,
manejando los eventos sin la necesidad de que el tiempo de procesamiento sea gastado en
este manejo. Esto es importante principalmente por que el mayor uso de los
microcontroladores es en procesos de control automático, los cuales en su mayoría son
rápidos, de esta forma sería lamentable que la CPU estuviera gastando tiempo en transmitir
un dato a la PC, en contar tiempo o realizar una conversión analógica digital, si el dato
puede ser tratado de manera automática para cada uno de los eventos antes mencionados.
1.4 Recursos especiales
Cada fabricante oferta numerosas versiones de una arquitectura básica de microcontrolador.
En algunas amplía las capacidades de las memorias, en otras incorpora nuevos recursos, en
otras reduce las prestaciones al mínimo para aplicaciones muy simples, etc. La labor del
diseñador es encontrar el modelo mínimo que satisfaga todos los requerimientos de su
aplicación. De esta forma, minimizará el costo, el hardware y el software.
UART
Adaptador de comunicación serie asíncrona.
USART
Adaptador de comunicación serie síncrona y asíncrona.
MUX (Multiplexor) y CAD (Convertidor Analógico Digital)
Permite la adquisición de señales externas conjuntamente con un multiplexor.
Puerto paralelo Esclavo
Para poder conectarse con los buses de otros microprocesadores.
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
Bus I2C
Es una interfaz serie de dos hilos (TWI:Two Wire serial Interface) y protocolo desarrollado
por Philips. Es un bus robusto y con una comunicación muy eficiente, puede direccionar
hasta 128 dispositivos arbitrariamente en el mismo bus con la posibilidad de manejar
múltiples “masters” en el bus.
CAN (Controller Area Network)
Permite la adaptación con redes de conexionado multiplexado desarrollado conjuntamente
por Bosch e Intel para el cableado de dispositivos en automóviles.
LIN (Local Interconnect Network)
Protocolo LIN (Interconexión de Red Local) sin necesidad de componentes externos. Es un
protocolo de comunicación serial que soporta eficientemente nodos de control mecatronicos
en redes distribuidas. Es ideal en el uso de aplicaciones automotivas. Consiste en un nodo
maestro y múltiples nodos esclavo.
1.5 El mercado de los microcontroladores
Aunque en el mercado de la microelectrónica la mayor atención la acaparan los desarrollos
de los microprocesadores, lo cierto es que se venden cientos de microcontroladores por cada
uno de los otros.
Existe una gran diversidad de microcontroladores. Quizá la clasificación más importante sea
entre microcontroladores de 4, 8, 16 ó 32 bits. Aunque las prestaciones de los
microcontroladores de 16 y 32 bits son superiores a los de 4 y 8 bits, la realidad es que los
microcontroladores de 8 bits dominan el mercado y los de 4 bits se resisten a desaparecer.
La razón de esta tendencia es que los microcontroladores de 4 y 8 bits son apropiados para
la gran mayoría de las aplicaciones, lo que hace absurdo emplear microcontroladores más
potentes y consecuentemente más caros. Uno de los sectores más extensos del mercado del
microcontrolador es el mercado automovilístico. De hecho, algunas de las familias de
microcontroladores actuales se desarrollaron pensando exclusivamente en este sector,
siendo modificadas posteriormente para adaptarse a sistemas más genéricos. El mercado del
automóvil es además uno de los más exigentes: los componentes electrónicos deben operar
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
bajo condiciones extremas de vibraciones, choques, ruido, etc. y seguir siendo fiables. El
fallo de cualquier componente en un automóvil puede ser el origen de un accidente.
En cuanto a las técnicas de fabricación, cabe decir que prácticamente la totalidad de los
microcontroladores actuales se fabrican con tecnología CMOS 4 (Semiconductor de Oxido
Metálico Complementario)2. Esta tecnología supera a las técnicas anteriores por su bajo
consumo y alta inmunidad al ruido.
La distribución de las ventas según su aplicación es la siguiente:
• Una tercera parte se absorbe en las aplicaciones relacionadas con las computadoras y
sus periféricos.
• La cuarta parte se utiliza en las aplicaciones de consumo (electrodomésticos, juegos,
TV, vídeo, etc.)
• Aproximadamente el 16% de las ventas mundiales se destinó al área de las
comunicaciones.
• Otro 16% aprox. fue empleado en aplicaciones industriales.
• El resto de los microcontroladores vendidos en el mundo, aproximadamente un 10%
fueron adquiridos por las industrias automovilísticas.
También los modernos microcontroladores de 32 bits van afianzando sus posiciones en el
mercado, siendo las áreas de más interés el procesamiento de imágenes, las
comunicaciones, las aplicaciones militares, los procesos industriales y el control de los
dispositivos de almacenamiento masivo de datos.
1.6 Herramientas para el desarrollo de aplicaciones.
Uno de los factores que más importancia tiene a la hora de seleccionar un microcontrolador
entre todos los demás es el soporte tanto de software como de hardware de que dispone. Un
buen conjunto de herramientas de desarrollo puede ser decisivo en la elección, ya que
pueden suponer una ayuda inestimable en el desarrollo del proyecto.
Las principales herramientas de ayuda al desarrollo de sistemas basados en
microcontroladores se describen a continuación.
2Complementary Metal Oxide Semiconductor
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
1.7 Desarrollo del software
Ensamblador
La programación en lenguaje ensamblador puede resultar un tanto ardua para el
principiante, pero permite desarrollar programas muy eficientes, ya que otorga al
programador el dominio absoluto del sistema. Los fabricantes suelen proporcionar el
programa ensamblador de forma gratuita y en cualquier caso siempre se puede encontrar
una versión gratuita para los microcontroladores más populares.
Compilador
La programación en un lenguaje de alto nivel (como el C) permite disminuir el tiempo de
desarrollo de un producto. No obstante, si no se programa con cuidado, el código resultante
puede ser mucho más ineficiente que el programado en ensamblador. Las versiones más
potentes suelen ser muy caras, aunque para los microcontroladores más populares pueden
encontrarse versiones demo limitadas e incluso compiladores gratuitos.
Depuración
Debido a que los microcontroladores van a controlar dispositivos físicos, los desarrolladores
necesitan herramientas que les permitan emular el comportamiento del microcontrolador,
depurar el software y así garantizar su buen funcionamiento cuando es conectado
físicamente al resto de circuitos.
Simulador
Son capaces de ejecutar en una PC programas realizados para el microcontrolador. Los
simuladores permiten tener un control absoluto sobre la ejecución de un programa, siendo
ideales para la depuración de los mismos. Su gran inconveniente es que es difícil simular la
entrada y salida de datos del microcontrolador. Tampoco cuentan con los posibles ruidos en
las entradas, pero, al menos, permiten el paso físico de la implementación de un modo más
seguro y menos costoso.
Tarjetas de evaluación.
Se trata de pequeños sistemas con un microcontrolador ya montado y que suelen conectarse
a una PC desde el que se cargan los programas que se ejecutan en el microcontrolador. Las
tarjetas suelen incluir visualizadores LCD, teclados, LEDs, fácil acceso a los pines de E/S,
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
etc. El sistema operativo de la tarjeta recibe el nombre de programa monitor. El programa
monitor de algunas tarjetas de evaluación, aparte de permitir cargar programas y datos en
la memoria del microcontrolador, puede permitir en cualquier momento realizar ejecución
paso a paso, monitorear el estado del microcontrolador o modificar los valores almacenados
en los registros o en la memoria.
Emuladores en circuito
Se trata de un instrumento que se coloca entre la PC anfitrión y el zócalo de la tarjeta de
circuito impreso donde se alojará el microcontrolador definitivo. El programa es ejecutado
desde la PC, pero para la tarjeta de aplicación es como si lo hiciese el mismo
microcontrolador que luego irá en el zócalo. Presenta en pantalla toda la información tal y
como luego sucederá cuando se coloque la cápsula.
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
2Elección del microcontrolador
2.1 ¿Qué microcontrolador emplear?
A la hora de escoger el microcontrolador a emplear en un diseño concreto hay que tener en
cuenta multitud de factores, como la documentación y herramientas de desarrollo
disponibles y su precio, la cantidad de fabricantes que lo producen y por supuesto las
características del microcontrolador (tipo de memoria de programa, número de
temporizadores, cantidad de registros de propósito general, interrupciones, etc.)
2.2 Costos
Como es lógico, los fabricantes de microcontroladores compiten duramente para vender sus
productos. Es aquí donde dependiendo de la aplicación el diseñador deberá seleccionar el
demás bajo costo sin sacrificar la eficiencia de la aplicación.
Pongamos un ejemplo, para el fabricante que usa el microcontrolador en su producto una
diferencia de precio en el microcontrolador de algunos pesos es importante (el consumidor
deberá pagar además el costo del empaquetado, el de los otros componentes, el diseño del
hardware y el desarrollo del software). Si el fabricante desea reducir costos debe tener en
cuenta las herramientas de apoyo con que va a contar: emuladores, simuladores,
ensambladores, compiladores, etc. Es habitual que muchos de ellos siempre se decanten por
microcontroladores pertenecientes a una única familia.
2.3 Aplicación
Antes de seleccionar un microcontrolador es imprescindible analizar los requisitos de la
aplicación, a continuación se citan algunos ejemplos.
2.3.1 Procesamiento de datos
Puede ser necesario que el microcontrolador realice cálculos críticos en un tiempo limitado.
En ese caso debemos asegurarnos de seleccionar un dispositivo suficientemente rápido para
ello. Por otro lado, habrá que tener en cuenta la precisión de los datos a manejar: si no es
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
suficiente con un microcontrolador de 8 bits, puede ser necesario acudir a
microcontroladores de 16 ó 32 bits, o incluso a hardware de punto flotante.
2.3.2 Entrada Salida
Para determinar las necesidades de Entrada/Salida del sistema es conveniente dibujar un
diagrama de bloques del mismo, de tal forma que sea sencillo identificar la cantidad y tipo
de señales a controlar. Una vez realizado este análisis puede ser necesario añadir periféricos
(hardware externo) o cambiar a otro microcontrolador más adecuado a ese sistema.
2.3.3 ConsumoAlgunos productos que incorporan microcontroladores están alimentados con baterías y su
funcionamiento puede ser tan vital como activar una alarma antirrobo. Lo más conveniente
en un caso como éste puede ser que el microcontrolador esté en estado de bajo consumo
(sleep) pero que despierte ante la activación de una señal (una interrupción) y ejecute el
programa adecuado para procesarla.
2.3.4 Memoria
Para detectar las necesidades de memoria de nuestra aplicación debemos separarla en
memoria volátil (SRAM), memoria no volátil (EPROM, etc.) y memoria no volátil modificable
(EEPROM y FLASH). Este último tipo de memoria puede ser útil para incluir información
específica de la aplicación como un número de serie o parámetros de calibración.
En cuanto a la cantidad de memoria necesaria puede ser imprescindible realizar una versión
preliminar, aunque sea en pseudo-código, de la aplicación y a partir de ella hacer una
estimación de cuánta memoria volátil y no volátil es necesaria y si es conveniente disponer
de memoria no volátil modificable.
2.3.5 Ancho de palabraEl criterio de diseño debe ser seleccionar el microcontrolador de menor ancho de palabra
que satisfaga los requerimientos de la aplicación. Usar un microcontrolador de 4 bits
supondrá una reducción en los costos importante, mientras que uno de 8 bits puede ser el
más adecuado si el ancho de los datos es de un byte. Los microcontroladores de 16 y 32
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
bits, debido a su elevado costo, deben reservarse para aplicaciones que requieran sus altas
prestaciones (Entrada/Salida potente o espacio de direccionamiento muy elevado).
2.3.6 Diseño
La selección de un microcontrolador concreto condicionará el diseño. Debe tenerse en cuenta
que quizá usar un microcontrolador barato encarezca el resto de componentes del diseño.
Es preciso resaltar en este punto que existen innumerables familias de microcontroladores,
cada una de las cuales posee un gran número de variantes. Pero nuestro diseño se centrará
únicamente en la familia de microcontroladores AVR® de ATMEL®.
2.4 La familia de los PIC vs. la familia de los AVR como elección
¿Qué es lo que ocurría con los PIC hasta hace algunos años?, ¿Por qué están en boca de
todos?
Se ha buscado en multitud de bibliografía y realmente nadie da una respuesta concreta,
pero una aproximación puede ser esta:
Los PIC hasta hace unos cuantos años tenían una gran ventaja, no había prácticamente
competencia en el mercado, por lo que a vista de los diseñadores estos representaban una
solución poderosa, el precio, la facilidad de uso, la información, las herramientas de apoyo,
etc. Quizás un poco de todo eso es lo que produce esa imagen de sencillez y utilidad. Sin
embargo hoy en día existen bastantes familias de microcontroladores de distintos
fabricantes como los AVR® que por el momento representan una muy buena opción en
cuanto a flexibilidad, precio, herramientas de desarrollo, información, modernidad, etc.
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
3Comparativos de ambos microcontroladores
3.1 Comparativos
Características relevantes
PIC®
Arquitectura PIC®
La arquitectura sigue el modelo Harvard.
En esta arquitectura, la CPU se conecta de
forma independiente y con un bus distinto
entre la memoria de instrucciones y la de
datos.
Segmentación
Se aplica la técnica de segmentación
(“pipe line”) en la ejecución de las
instrucciones. La mayoría de las
instrucciones se ejecutan en un ciclo de
instrucción (un ciclo de instrucción
equivale a cuatro ciclos de reloj).
Formato de las instrucciones.
Las instrucciones de los PIC® de la gama
baja tienen una longitud de 12 bits. Las de
la gama media tienen 14 bits y las de alta
16 bits. Esta característica es ventajosa en
la optimización de la memoria de
instrucciones y facilita la construcción de
ensambladores y compiladores.
AVR®
Arquitectura AVR®
El AVR® es un microcontrolador RISC con
una arquitectura Harvard, por lo que
también tiene una memoria de programa
separada de la memoria de datos y en
general mucho mayor que su competidor.
Segmentación
Al igual que su oponente también maneja
la segmentación “pipe line” sin embargo
en el AVR® la mayoría de las instrucciones
se llevan a cabo en un único ciclo de reloj.
AVR® son entonces más veloces en la
ejecución de la gran mayoría de
instrucciones.
Formato de las instrucciones.
La mayoría de las instrucciones son de 2
bytes de longitud y ocupan una localidad
de la memoria de programa. Al igual que
su competidor esta característica ayuda en
la optimización de la memoria de
instrucciones y facilita la construcción de
ensambladores y compiladores.
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
Juego de instrucciones
Procesador RISC (Juego de Instrucciones
Reducido). Los de gama baja 33
instrucciones, los de media 35 y hasta 60
los de gama alta.
Todas las instrucciones son ortogonales
Cualquier instrucción puede manejar
cualquier elemento de la arquitectura
como fuente o como destino.
Banco de registros
Los de gama baja solo poseen 8 registros
de 8 bits, los de media y alta hasta 15
registros de 8 bits.
Herramientas de desarrollo
La empresa Microchip® y otras que
utilizan los PIC® ponen a disposición de
los usuarios numerosas herramientas para
desarrollar hardware y software. Son muy
abundantes los programadores, los
simuladores software, los emuladores en
tiempo real, Ensambladores, Compiladores
C, Intérpretes y Compiladores BASIC, etc.
Juego de instrucciones
Al ser RISC también posee un Juego de
Instrucciones Reducido. Aquí la cantidad
de instrucciones para AT90S (básico) es
de 89, 118 para ATtiny (medio) y hasta
200 para ATMEGA (Alto).
Todas las instrucciones son ortogonales
Su conjunto ortogonal de instrucciones
también puede controlar cualquier modulo
de la arquitectura automatizándolo.
Banco de registros
El núcleo exhibe 32 registros iguales de 8
bits, y cualquiera de ellos puede contener
direcciones o datos.
Una ventaja más pues es bien sabido que
es más eficiente trabajar con memoria
interna dentro del núcleo, que con
externa.
Herramientas de desarrollo
Atmel® también ha puesto a disposición
notables herramientas de desarrollo,
gratuitas, modernas, la única desventaja
es el mercado para sus tarjetas
programadoras, pero para esto existe una
solución: el modo de programación SPI
(Programación Serial In Circuit), que
permite tener acceso a la EEPROM y
FLASH, mediante el puerto serial de
cualquier PC. También se puede compilar
en C, en Linux, con bascomAVR, etc.
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
3.2 Conclusiones de la evaluación
La tabla 1 y 2 nos muestran algunos comparativos en cuanto a memoria interna para PIC®
y AVR®.
PIC ARQUITECTURA TECNOLOGIA RAM FLASH EEPROM16C54 RISC CMOS 25bytes NO 512b (ROM)16C55 RISC CMOS 25bytes NO 512b (ROM)
16C56A RISC CMOS 25bytes NO 1Kb(ROM)16C76 RISC CMOS 368bytes NO 8K(ROM)16C77 RISC CMOS 368bytes NO 8K(ROM)16F83 RISC CMOS 36bytes 512 64bytes16F84 RISC CMOS 68bytes 1Kb 64bytes
16C54 NO 33 NO NO 18 20MHz 8x8bits16C55 NO 33 NO NO 28 20MHz 8x8bits
16C56A NO 33 NO NO 18 20MHz 8x8bits16C76 11 35 SI SI 28 20MHz **16C77 12 35 SI SI 40 20MHz **16F83 4 35 NO NO 18 10MHz 15X816F84 4 35 NO NO 18 10MHz 15X8
16F876 13 35 SI SI 40 20MHz **16F877 14 35 SI SI 40 20MHz **
Tabla 5 periféricos integrados y registros del núcleo (PIC®)
** No se especifico en la hoja de datos
****** Depende de la configuración de trabajo
AVR INT's INSTR UART CA/D PINES FREC. OSC REGISTROSAT90S1200-12 4 89 NO NO 20 12MHz 32x8 BITSAT90S2313-10 10 118 SI NO 20 10MHz 32x8 BITS
AT90S4433 13 118 SI SI 28 8MHz 32x8 BITSATMEGA 48 1 131 SI SI 28 20MHz 32x8 BITSATMEGA 88 1 131 SI SI 28 20MHz 32x8 BITSATMEGA 168 2 131 SI SI 28 20MHz 32x8 BITS
ATMEGA 8515L 16 130 SI NO 40 16MHz 32x8 BITSATMEGA 32 18 131 SI SI 40 16MHz 32x8 BITS
Tabla 6 periféricos integrados y registros del núcleo (AVR®)
Como ya es de notarse se nota la superioridad en cuanto a modernidad, bajo consumo y prestaciones más altas en cuanto a periféricos.
; ** Se debe conectar el PORTB a LEDS y el PORTD a SWITCH **
; ** Si se presiona el SW5 se activa un contador descendente de 8 bits **
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
; ** Si se presiona el SW6 se activa un contador ascendente de 8 bits **; ** Si se presiona el SW7 se activa un desplazamiento descendente de 8 bits **; ** Si se presiona el SW8 se activa un desplazamiento ascendente de 8 bits **; ** Si se presiona el SW9 todos los leds parpadeantes (8 bits) **; ** Si se presiona el SW10 todos los bits en alto excepto el menos significativo **; ** Si se presiona el SW11 todos los bits en alto excepto el menos significativo **; ** Si se presiona el SW12 todos los bits en alto excepto el menos significativo **
.INCLUDE "M16DEF.INC" ;para que reconozca conjunto de instrucciones del ATMEGA16
.DEF TEMP = R16 ;registro temporal
.DEF DELAY = R17 ;delay variable 1
.DEF DELAY2 = R18 ;delay variable 2
; *** INICIALIZACIÓN ***
REINICIO:
SER TEMP ;pone registros a FFOUT DDRB,TEMP ;selección de puerto B para salida
; *** PRUEBA ENTRADA / SALIDA ***
LOOP:
OUT PORTB,TEMP ;salida a LEDS por el puerto C
SBIS PIND,0x00 ;si se presiona el SW5 se incrementa R1 a FF ;brinca si el bit del registro i/o esta en 1
INC TEMP ;entonces el contador disminuye en 1
SBIS PIND,0x01 ;si se presiona el SW6 se decrementa R1 a 01DEC TEMP ;entonces el contador crece en 1
SBIS PIND,0x02 ;si se presiona el SW7 se rota R1 a la derechaROR TEMP ;entonces los leds muestran 1bit con desplazamiento a la DERECHA
SBIS PIND,0x03 ;si se presiona el SW8 se rota R1 a la izquierdaROL TEMP ;entonces los leds muestran 1bit con desplazamiento a la
IZQUIERDA
SBIS PIND,0x04 ;si se presiona el SW9 se hace un NOT a R1COM TEMP ;entonces todos los leds se muestran invertidos
SBIS PIND,0x05 ;si se presiona el SW10 se hace un NOT a R1 y se suma 1 en LSBNEG TEMP ;entonces los leds se invierten y se suma 1 a LSB
SBIS PIND,0x06 ;si se presiona el SW11 se hace un swaap de nibbles en R1SWAP TEMP ;entonces los leds se alternan en nibles
RETRASO:
DEC DELAY ;retraso1BRNE RETRASO ;bifurca si R17 no es ceroDEC DELAY2 ;retraso2BRNE RETRASO ;bifurcación
RJMP LOOP ;siempre repite LOOP
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
Figura 21. Editor de archivo .asm.
7- Ya editado el archivo, ahora procedemos a construir los archivos .hex, .obj, .aps y
.txt entonces usamos la tecla F7 o el icono en la barra de herramientas mostrado en
la figura 22 encerrado en el circulo rojo o en la barra de menús Project y después
Build. Observamos en la ventana de salida en la parte inferior los mensajes después
de compilar el archivo .asm. Si no existen errores entonces el archivo .hex esta listo
para ser cargado en la memoria FLASH o EEPROM del microcontrolador. Al no haber
errores aparecerá un mensaje muy similar a este, resaltamos el resultado final de la
compilación en azul:
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
Building project...AVRASM: AVR macro assembler version 1.76.4 (Aug 6 2004 07:02:13)Copyright (C) 1995-2004 ATMEL CorporationCreating 'E:\Archivos de programa\Atmel\AVR Tools\WORKS\D1\d1.eep'Creating 'E:\Archivos de programa\Atmel\AVR Tools\WORKS\D1\d1.hex'Creating 'E:\Archivos de programa\Atmel\AVR Tools\WORKS\D1\d1.obj'Creating 'E:\Archivos de programa\Atmel\AVR Tools\WORKS\D1\d1.map'Assembling 'E:\Archivos de programa\Atmel\AVR Tools\WORKS\D1\D1.asm'Including 'e:\Archivos de programa\Atmel\AVR Tools\AvrAssembler\Appnotes\M16DEF.INC'Program memory usage:Code : 24 wordsConstants (dw/db): 0 wordsUnused : 0 wordsTotal : 24 wordsAssembly complete with no errors.Deleting 'E:\Archivos de programa\Atmel\AVR Tools\WORKS\D1\d1.eep'
Figura 22. Compilando el archivo .asm.
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
8- Si por alguna razón el código presenta errores o después de cargarlo no hace lo que
necesitamos entonces podemos depurarlo. Para ello tenemos a la mano múltiples
AT90S1200, AT90S2313, AT90S8535, ATmega16, Atmega32, Atmega8535 y ATtiny2313.
Lo que diferencia estos elementos es el número de instrucciones en ensamblador disponibles, la cantidad de memoria de programa, la cantidad de memoria SRAM presente y el número de líneas I/O o el número de periféricos conectables, como UART, temporizadores, convertidores A/D, etc.
Pero lo que caracteriza la familia completa es la arquitectura aplicada en su diseño, el conjunto de instrucciones base y diversos métodos de direccionamiento de la memoria y los registros. La arquitectura se basa en el concepto de acceso rápido a los registros: éstas son las áreas de la memoria utilizadas para comunicar con los periféricos integrados en el propio microcontrolador, como contadores, temporizador, convertidores A/D y puertos de I/O. Algunos registros pueden utilizarse como indicadores de direccionamiento indirecto de 16 bits para comunicar con la memoria: suelen llamarse registros X, Y, Z. Otra característica común es la forma en que el micro procesa la información, que se denomina Instruction Pipeline (cadena de montaje).
CARACTERÍSTICAS:
• Compatible con AVR Studio4 ®.• Interface RS232 para PC y tarjeta UAMI-AVR.• Regulador de Poder de 10-15V DC.• Sockets de 20-pin y 40-pin para los dispositivos AVR® soportados.• Programación SPI por Puerto serial. • Banco de leds de 8 bits y 8 Push-buttons de uso general.• Todos los puertos I/O y periféricos integrados accesibles en conectores Header. • Un Puerto RS232 adicional para uso general.
RegistrosLos registros son posiciones especiales de almacenamiento, con 8 bits de capacidad. Unregistro tiene la siguiente apariencia:
Un registro puede almacenar valores numéricos de 0 a 255 (positivos sin signo) o entre -128 a 127 (con bit de signo en el bit 7), caracteres ASCII o simples conjuntos de bits sin relaciones entre ellos.
Existen 32 registros en los microcontroladores AVR®, etiquetados originalmente como R0, R1,..., R31, pero que pueden ser renombrados usando la directiva .def
.def registroTemporal=r16
Las directivas son útiles para el ensamblador pero en realidad no generan instrucciones ejecutables. En vez de emplear el nombre r16 se puede acceder con el nombre definido en la directiva. Así la instrucción
ldi registroTemporal, 150
carga en el r16 de manera inmediata el número 150.
Otra instrucción interesante es el de copiar datos desde un registro a otro con la instrucción mov. El siguiente código copia el contenido del r16 al registro r20.
mov r20,r16
Obsérvese que el primer registro es siempre el registro destino de la operación.Existen diferentes tipos de registros.
Así una instrucción del tipo
ldi r15, 15
no sería válida, ya que los únicos registros que permiten cargar un valor de forma inmediata son los registros del r16 al r31. Es decir, no se puede realizar este tipo de operación con los registros del r0 al r15. Existe una excepción a esta regla, el comando referido a limpiar los bits (poner todos los bits a 0)
clr r15
es válido para todos los registros.
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
Aparte del comando ldi, las siguientes instrucciones no pueden emplearse con los registros r0 a r15:
andi r15,4 ;Realiza el y lógico entre el registro y un númerocbr r14,45 ;Limpia los bits en el registro determinados por una máscara de bitscpi r13,6 ;Compara el contenido del registro con una constantesbci r9,7 ;Resta al registro el valor del contenido de la constante y del resultado
;actual del bit de carrysbr r12,89 ;Coloca a '1' los bits en el registro determinados por una máscara de
;bitsser r3 ;Coloca todos los bits del registro a 1subi r15,9 ;Resta al registro el valor del contenido de la constante.
Registros punterosUn papel especial es desempeñado por las parejas de registros r16:r27, r28:r29 y r30:r31.Estas parejas de registros de 16 bits son nombrados de una forma especial, X, Y y Z.Pueden acceder a direcciones de 16 bits en la SRAM (X, Y, Z) o dentro de la memoria del programa (Z).La parte alta de la dirección se coloca en el registro de índice más alto, mientras que la parte baja de la dirección se almacena en el registro de índice más bajo. Estas partes alta y baja tienen sus propios nombres. Así la parte alta del registro Z (r31) se puede acceder como ZH mientras que la baja (r30) se puede acceder como ZL.
Ejemplo:
.EQU direccion = RAMEND ;en este comentario indicaremos que RAMEND es;la dirección más alta en la SRAM
ldi YH,high(direccion) ; carga la parte alta de la direcciónldi YL,low(direccion) ; carga la parte baja de la dirección
El acceso a direcciones a través de estos registros punteros es muy sencillo. Los siguientes ejemplos ilustran estos accesos de lectura (ld) y de escritura (st) con el puntero X
ld r1,X ; Lee de la dirección X, sin cambiar el ficherost X+,r1 ;Escribe en la dirección X, e incrementa el puntero a la siguiente direcciónld r1,-X ;Decrementa el puntero a la anterior dirección y lee de la dirección X
Para insertar los valores en la memoria de programa se emplean las directivas .DB y .DW
Por ejemplo:
.DB 123,56,34,1 ; una lista de 4 bytes
.DB “Esto es un texto” ; una lista de bytes, cadena de caracteres.
.DW 13454 ; una palabra
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
En las definiciones es recomendable usar un número par de bytes ya que el ensamblador añadirá un 0 al final, lo cual puede no ser deseado.En vez de constantes se pueden definir etiquetas (destino de saltos) del siguiente modo, siempre en la primera columna:
Etiqueta1:; aquí irían unos comandosTabla:.DW 134,12312
PuertosLos puertos son puertas entre la unidad de procesamiento central hasta hardware o software externo. La CPU se comunica con estos componentes, los lee y/o los escribe.Los puertos tienen direcciones fijas, independientemente del microcontrolador AVR®.Así, por ejemplo el puerto B se encuentra siempre en la dirección 0x18 (notación hexadecimal). Por supuesto el programador no tiene necesidad de recordar todas estas direcciones. Los nombres vienen definidos en un fichero de encabezado para los diferentes tipos de microcontrolador y que son proporcionados por el fabricante. Estos ficheros ‘include’ tienen una línea para definir la dirección del puerto B como sigue:
.EQU PORTB, 0x18
por lo que solamente se debe recordar el nombre del puerto y no su dirección. El archivo correspondiente se incluye mediante la siguiente directiva:
.include “8515def.inc”
Los puertos generalmente se organizan en conjunto de 8 bits relacionados entre sí, pero pueden estar organizados en conjuntos sin relación. En este caso es habitual que cada uno de los bits tenga su propio nombre y función determinados. Como ejemplo, el registro MCUCR consiste en un número de bits de control del integrado, cada uno de ellos con sus nombres (por ejemplo ISC00, ISC01). La forma de enviar un valor determinado a uno de estos puertos es mediante la instrucción out y mediante el empleo de un registro intermedio:
ldi r16, 0b00010000 ; ejemplo de configuración binariaout MCUCR, r16
El caso contrario, el de lectura, se realiza mediante el comando in
in r16, MCUCR
En este caso debemos aclarar que existen algunos puertos que tienen bits que no son usados o están reservados. En este caso se devuelve un bit a 0.Es frecuente que se desee poner a 0 ó 1 un bit concreto de un puerto. Una opción para ello consistiría en leer el registro correspondiente, emplear las operaciones lógicas para alterar el bit seleccionado y reenviar el byte al puerto. Sin embargo, esto se puede llevar a cabo mediante las instrucciones sbi (poner el bit a 1) y cbi (poner el bit a 0).
Las dos instrucciones tienen una limitación, solamente afectan a puertos con una dirección inferior a 0x20.
REGISTROS REELEVANTES DE LOS AVRComponente Nombre del puerto Registro/PuertoAcumulador SREG Registro de estado
Pila SPL/SPH Puntero de pilaSRAM externa,
interrupción externaMCUCR Registro de Control General MCU
Interrupción externaGIMSKGIFR
Registro de mascara de interrupciónRegistro de banderas de interrupción
Interrupción del TimerTIMSKTIFR
Registro de mascara de interrupción del timerRegistro de banderas de interrupción del timer
Timer0TCCR0TCNT0
Registro de controlRegistro de cuenta
Timer1
TCCR1ATCCR1BTCNT1OCR1AOCR1B
ICR1L/H
Registro A de controlRegistro B de controlRegistro de cuentaRegistro de comparación ARegistro de comparación BRegistro de captura de entrada
EEPROMEEAREEDREECR
Registro de direccionesRegistro de datosRegistro de control
UART
UDRUSRUCRUBRR
Registro de datosRegistro de estadoRegistro de controlRegistro de programación de baudios
Comparador analógico ACSR Registro de control y estado
Puertos de I/OPORTxDDRxPINx
Registro de salida del puertoRegistro de dirección del puertoRegistro de entrada del puerto
RAM estática, SRAMLa SRAM es una memoria que no es accesible directamente por la CPU (ALU) como es el caso de los registros. Para acceder a esta parte de la memoria se deben emplear los registros como paso intermedio. Por lo tanto las operaciones que involucran a la SRAM son más lentas que la de los registros. A partir del modelo AT90S8515 se permite conectar una RAM externa adicional.Uno de los casos de empleo más importante de la SRAM es como pila.El acceso a la SRAM se lleva a cabo mediante las instrucciones STS y LDS.
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
Ejemplos:
STS 0x0060, R1 ; el contenido del registro R1 se copia en la dirección 0x0060
LDS R1, 0x0060 ; el contenido de la dirección 0x0060 se copia en el registro R1
Se suelen emplear nombres simbólicos para evitar emplear direcciones fijas..EQU direccionMemoria = 0x0060STS direccionMemoria, R1
SRAM como pilaEl uso más común de la SRAM es como pila. La pila es como una torre de bloques.Cada bloque que se añade se coloca en el tope de la pila, cada vez que se extrae un dato de la pila también se saca del tope de pila. Esta estructura es llamada LIFO (last in, first out, el último en entrar, el primero en salir).Para emplear la SRAM como pila se necesita definir el puntero de pila. El puntero de pila es de 16 bits, accesible como un puerto. SPH es la parte más significativa y SPL la parte menos significativa. Para construir la pila, el puntero se carga con el valor de la dirección más alta de la SRAM (la pila crece hacia las direcciones más bajas).
El empleo de la pila es sencillo. Los contenidos de los registros pueden volcarse en la pila de la siguiente forma:
push r16
De modo análogo para extraer elementos de la pila,
pop r16
Un caso especial de uso de las pilas es el de la llamada a las subrutinas. Al llamar a la subrutina el programa almacena en la pila la dirección de la próxima instrucción a ejecutar
rcall rutina ;saltar a la subrutina...rutina:; aquí las instrucciones de la subrutinaret ; instrucción de retorno de la subrutina
Directivas
.CODE Para indicar el comienzo de un código de un programa.
.DSEG
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
La sección de la SRAM en el integrado (datos)
.ESEGLa sección EEPROM
.ORGPara indicar que el segmento de código o datos comienza en una dirección distinta de la dada por defecto.
SaltosLa ejecución de un programa es lineal. Sin embargo, las instrucciones de bifurcación (branches) y los saltos incondicionales alteran esta ejecución lineal. Supóngase que se desea implementar un contador de 32 bits empleando los registros r1 a r4. El bit más significativo en r1 se incrementa en 1 (operación inc). Si el registro se desborda, el registro tendrá el valor de 0 (255+1=0), y se tendrá que sumar 1 al r2. En caso de desbordamiento de r2, se incrementa r3 y así sucesivamente. Para ello se emplea la instrucción brne.
Como ejemplo de instrucciones de salto condicional:
brge ; mayor o igual (con bit de signo)brlt ; menor que (con bit de signo)
MacrosUna macro permite la utilización repetida de secuencias de instrucciones. Por ejemplo:
.MACRO Delaynopnopnopnop.ENDMACRO; instruccionesDelay; más instrucciones
Una macro no ahorra espacio de memoria puesto que al compilar la etiqueta de la macro es reemplazada por el conjunto de instrucciones correspondientes. Para el caso de querer ahorrar espacio se emplean las subrutinas.
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
Saltos incondicionalesAparte del rcall para llamar a las subrutinas, existe otra clase de salto incondicional, el rjmp saltar directamente a la dirección deseada. Aquí, a diferencia no va a haber un retorno (ret) a la siguiente instrucción.
Existen unas instrucciones que permiten saltarse (skip) la siguiente instrucción a ejecutar, por ejemplo:
sbrc r1,7 ;saltarse la siguiente dirección si el bit 7 del registro está a bajarcall siBitDistinto7 ;ejecutada solamente si el bit 7 está a 0rcall otro ;ejecutada de todas maneras
Análogamente se encuentra la instrucción sbic para los puertos de entrada/salida
sbic PINB,0 ; saltarse la siguiente instrucción si el bit 0 del puerto b está a baja
Otro tipo de instrucción de skip es la de comparación de registros
cpse r1,r2 ;saltarse la siguiente instrucción si los contenidos de r1 y r2 son;iguales
INTERRUPCIONESCon frecuencia se debe reaccionar ante condiciones hardware u otros eventos, por ejemplo en el cambio de valor de un pin de un puerto (por ejemplo detectar que un usuario ha pulsado una tecla). Un modo de procesarlo podría consistir en hacer un bucle que lea continuamente el valor de esa línea. Desgraciadamente, un programa debe hacer en general más cosas que estar leyendo en un bucle un puerto y no puede permitirse el lujo de ese bucle. Además en caso de detección de pulsos muy pequeños, el método del bucle es inútil. Es más adecuado emplear interrupciones.
Las interrupciones se disparan por alguna condición, que debe ser habilitada primero, ya que todas las interrupciones de hardware se encuentran deshabilitadas por defecto. El microprocesador posee un bit en su registro de estado para permitir que se procesen las interrupciones. Para activar / desactivar este bit se emplean las instrucciones sei y cli.
Si la condición de la interrupción se produce, el procesador coloca en la pila, la dirección de la siguiente instrucción a ejecutar. De este modo, la ejecución del programa puede continuar después de procesar la interrupción. Después procesa la instrucción correspondiente en su vector de interrupción, que generalmente es un salto incondicional a la subrutina de procesamiento de interrupción. El vector de interrupción es una posición dependiente del procesador.
Existe un orden de prioridad en las interrupciones, de modo que si dos o más interrupciones habilitadas se producen simultáneamente solamente será procesada la de mayor prioridad. Las demás simplemente esperarán a que se haya procesado la de prioridad más alta. La rutina de procesamiento puede terminar con la instrucción RETI.
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
Apéndice C
Características eléctricas de la tarjeta UAMI-AVR v1.0
La tarjeta AVR-UAMI incluye 8 leds y 8 push botton, los leds y los switchs son
conectados por medio de headers que están separados del resto de la tarjeta.
Voltaje de alimentación: 9-15Vdc
Incluye un puente de diodos para evitar daños a la tarjeta al invertir la polaridad
Programa de aplicación de la tarjeta UAMI-AVR v1.0
El programa de aplicación (código fuente) que se muestra abajo pertenece al archivo a
cargar en el microcontrolador (AT90S2313) de la tarjeta: avr910_2313_v1_0.hex que se
anexa en el documento electrónico.
;*********************************************************************************;*;* ;* ;* Tarjeta : programador experimental UAMI_AVR v1.0;*;*;* Leyendas:;* ---------;* Signature - es un numero identificador(en bytes) para el chip, el software;* verificará si es la firma correcta según el dispositivo escogido;* Code - Código unico del dispositivo usado por AVRProg para identificar avr;* Flash - Número en bytes en memoria Flash;* EEProm - Número en bytes en memoria EEProm;* Lock - Lockbits (modo seguro que es aplicable al dispositivo seleccionado;* cuando se selecciona la opcion fuse.;* Fuse - Fusebits (muestra la configuracion de los fusibles, estos no son;* afectados borrando el dispositivo);* PMode - Indica modo de programacion;*;* R/W - Acceso de lectura/escritura;* R - Acceso a lectura solamente;* W - Acceso a escritura solamente;* NA - No Accesible;*;***************************************************************************.nolist
.include "2313def.inc" ; Microcontrolador a utilizar
.list
.equ silicon_chip=1 ;Si es 1 Mosi y Miso son cambiadas de in / out
.equ xtal_8MHz=0 ;Si es 0 entonces Xtal = 4MHz
;***************************************************************************;* CONSTANTES;* Codigos para identificar los dispositivos;*;* DESCRIPCION;* Los siguientes codigos deben ser usados por la PC. Note que los;* codigos de los dispositivos son arbitrariamente seleccionados,;* y nada tienen que ver con el "signature bytes" almacenados en el avr;***************************************************************************
;Para mayor informacion consulta la nota de aplicacion original AVR910 en www.atmel.com
;los autores: Ole Saether, Terje Frostad, Ingar Fredriksen, Morten W. Lund, Haakon Skar, Paal Kastnes y las correcciones realizadas por: J. Samperi, sjdavies, sc y Horacio Paredes. Traducción al español por: Horacio Paredes
;**** Revision de codigos ****
.equ SW_MAJOR = '3' ; Revision del numero mayor
.equ SW_MINOR = '3' ; Revision del numero menor
.equ HW_MAJOR = '1' ; Revision numero Mayor HW
.equ HW_MINOR = '0' ; Revision numero Menor HW
;***************************************************************************;* MACROS;* Programacion de Macros;*;* DESCRIPCION;* Cambia los siguientes 4 macros si el RESET cambia de estado en la;* tarjeta y/o si las señales SCK/MISO/MOSI cambian;***************************************************************************
.equ resetpin = 4
.macro set_resetsbi portb,resetpin
.endm
.macro clr_resetcbi portb,resetpin
.endm
.macro ddrd_initnop
.endm
.macro ddrb_initldi temp1,(0xFF ^ (1<<MISO))out ddrb,temp1 ; PB5 es entrada, el resto es salida
.endm
.macro ddrb_releaseldi temp1,(1<<resetpin)out ddrb,temp1 ; PB4 (RESET) es salida, el resto es entrada
.endm
.macro pulse_scksbi portb,SCKldi temp2,6 ;valor para un cristal de 4MHz
m0:dec temp2brne m0cbi portb,SCKldi temp2,3 ;valor para cristal= 4MHz
m1:dec temp2brne m1
.endm ;fin de macros
;******************;* Constantes SPI *
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
;******************.if silicon_chip
.equ MOSI = 5 ; numero de bit en PORTB
.equ MISO = 6 ; numero de bit en PORTB
.else
.equ MOSI = 6 ; numero de bit en PORTB
.equ MISO = 5 ; numero de bit en PORTB
.endif
.equ SCK = 7 ; numero de bit en PORTB
;**************************;* Constantes en la UART *;**************************
.if xtal_8mhz
.equ N = 25 ; 19.2k valor de la velocidad de datos UBRR (cristal de 8MHz)
.else
.equ N = 12 ; 19.2k vel. de Tx UBRR (cristal 4MHz)
.endif
;**********************************;* Registro de Variables Globales *;**********************************.def dev_code = r1 ;Codigo de dispositivo regresado por get_codes.def pgm_mode = r2 ;modo de programacion para el avr 0 = byte mode
;<> 0 =page mode.def device = r16 ; Codigo del dispositivo.def temp1 = r17.def temp2 = r18.def s_data = r19 ;datos SPI (programacion en el sistema).def u_data = r20 ;datos de la UART.def addrl = r21 ;orden de la direccion en el byte bajo.def addrh = r22 ;orden de la direccion en el byte alto.def cmd3 = r23 ;empleado para registro r30.def rd_s_data = r24 ;utilizado para registro r31.def cmd = r25 ;Comando de programacion serial.def count = r26 ;Variable de tiempo para "entrar al modo de programacion".def param1 = r27.def cmd1 = r28.def cmd2 = r29
;****************************;* Vectores de interrupcion *;****************************
.CSEGrjmp RESET ; Usamos RESET
;Inicializa la UARTu_init:
ldi temp1,N ; establecer la velocidad en baudiosout UBRR,temp1ldi temp1,1<<TXEN|1<<RXEN ; inicializa UART para TX y RXout UCR,temp1
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
retputc:
sbis USR,UDRE ; prueba(test) para registro de Tx vaciorjmp putc ; Loop hasta que Tx sea vacioout UDR,u_data ; se envia el byteret
getc:sbis USR,RXC ; Espera hasta que el caracter ha sido recibidorjmp getcin u_data,UDR ; Se lee el byte de la UARTret
delay:ldi temp2,0xff
dl: dec temp2brne dldec temp1brne delayret
;***************************************************************************;* FUNCION;* wrser;*;* DESCRIPCION;*;* Escribe y lee los datos a/o desde la tarjeta SPI;***************************************************************************
;***************************************************************************;* FUNCION;* spiinit (Entra en el modo de programacion);*;* DESCRIPCION;* Inicializa la interface SPI en el AVR;***************************************************************************
;****************** Muestra los dispositivos soportados **************************
w3:cpi u_data,0x74 ; 't' muestra los dispositivos que soportabrne w4ldi zl,low(device_codes*2) ;Z apunta a la tabla de codigos
;para los dispositivosldi zh,high(device_codes*2)
show_devices:rcall get_codes ;Regresa codigo en dev_codemov u_data,dev_codecpi u_data,0xff ;Verifica el fin de la tablabreq end_of_devices ;Terminarcall putc ;No finalizado, send outrjmp show_devices
end_of_devices:clr u_datarcall putc ;Fin de la lista de dispositivosrjmp waitcmd
;***************** Regresa el tipo de programacion *********************************
w4:cpi u_data,0x70 ; 'p' devuelve el tipo de programacionbrne w51ldi u_data,0x53 ; putc('S'); //programacion serialrcall putcrjmp waitcmd
;***************** Regresa autoincremento de direcciones **************************
w5:cpi u_data,0x78 ; 'x' Encendemos LED (set led ignorado)brne w6rcall getc ; ignora el byte de datosrjmp put_ret
;****************** Limpia LED ******************************************************
w6:cpi u_data,0x79 ; 'y' Limpiamos LED (ignorado)
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
brne w7rcall getc ; ignora el byterjmp put_ret
;******************** Entra al modo de programacion *********************************
w7:
push temp2 ;Savalmos temp2ldi zl,low(device_codes*2) ;Z apunta a la tabla de codigos de
dispositivosldi zh,high(device_codes*2)
w7_lp:rcall get_codes ;Regresa codigo en dev_codemov temp2,dev_codecpi temp2,0xff ;Checamos fin de la tablabreq device_err ;codigo de dispositivo no encontradocp temp2,device ;Se encontro el codigo de avr?breq x_w7_lp ;sirjmp w7_lp ;siguiente codigo
x_w7_lp:pop temp2 ;Restauramos temp2rjmp w72
device_err:pop temp2 ;Restauramos temp2rjmp put_err ;brincamos a put_err();
w72:cpi u_data,0x50 ; 'P' Entramos al modo de programacionbrne w8rcall spiinit ; spiinit();rjmp put_ret
;***************** Escribe el Programa en Memoria, Byte Alto***********************
w8:cpi u_data,0x43 ; 'C' Escribe el programa en memoria, byte
delay1us: ; cuenta en R16nopcpi temp1,0x03breq finishednopnop
loop:dec temp1cpi temp1,0x03brne loop
finished:ret
;MSG_OUT Comienza la salida de bytes en Z hasta fin de mensaje ($00)MSG_OUT: lpm ;read char into r0 mov u_data,r0 ;Copiamos a r20 cpi u_data,0x00 ;Fin del mensaje? breq END_MSG ;Si
rcall PUTC ;salida de caracter
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
adiw ZL,1rjmp MSG_OUT
END_MSG:ret
;get_codes regresa codigo de avr en dev_code y el modo programacion en pgm_mode
get_codes:lpm ;Read device code from tablemov dev_code,r0 ;Copiar a dev_codeadiw ZL,1 ;Incrementamos apuntadorlpm ;leemos el modo de programacion en la tablamov pgm_mode,r0 ;Copiar a pgm_modeadiw ZL,1 ;Incrementamos apuntadorret
;identificador del programador (ID)ID:.db "AVR ISP",0
;Tabla de codigos y modos de programacion (0(zero)=byte mode, <>0=page mode)
device_codes:
;AT90S1200 rev. A ;De 0x00-0x0f no usado todavia.db 0x10,0
;AT90S1200 rev. B.db 0x11,0
;AT90S1200 rev. C.db 0x12,0
;AT90S1200.db 0x13,0 ;De 0x14-0x1f no usado todavia
;AT90S2313.db 0x20,0 ;De 0x21-0x27 no utilizado todavia
;AT90S4414.db 0x28,0 ;De 0x29-0x2f no usado todavía
;AT90S4433.db 0x30,0 ;De 0x31-0x33 no usado todavia
;AT90S2333.db 0x34,0 ;De 0x35-0x37 no usado todavia
;AT90S8515.db 0x38,0 ;0x39 no usado todavia
;ATmega8515.db 0x3A,'P'
;ATmega8515 BOOT.db 0x3B,'P' ;De 0x3c-0x40 no usado todavia
;ATmega103.db 0x41,'P'
;ATmega603.db 0x42,'P'
;ATmega128.db 0x43,'P'
;ATmega128 BOOT.db 0x44,'P'
;ATmega64.db 0x45,'P'
;ATmega64 BOOT.db 0x46,'P' ; 0x47 no usado
;AT90S2323
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
.db 0x48,0 ;De 0x49-0x4b no usado;AT90S2343
.db 0x4C,0 ;From 0x4d-0x4f no usado;0x50,0x51 usados. De 0x52-0x54 no usados
;;ATtiny12
.db 0x55,0;ATtiny15
.db 0x56,0 ;0x57 no usado;ATtiny19
.db 0x58,0 ; 0x59-0x5b no utilizado;ATtiny28
.db 0x5C,0 ;0x5d no empleado;ATtiny26
.db 0x5E,'P' ;0x5f no utilizado;;ATmega161
.db 0x60,'P';ATmega161 BOOT
.db 0x61,'P' ;0x62-0x63 no empleado todavia;ATmega163
.db 0x64,'P';ATmega83
.db 0x65,'P';ATmega163 BOOT
.db 0x66,'P';ATmega83 BOOT
.db 0x67,'P';AT90S8535
.db 0x68,0;ATmega8535
.db 0x69,'P' ; 0x6a-0x6b no usado;;AT90S4434
.db 0x6C,0 ; 0x6d-0x6f no usado;AT90C8534
.db 0x70,0;AT90C8544
.db 0x71,0;ATmega32
.db 0x72,'P';ATmega32 BOOT
.db 0x73,'P';ATmega16
.db 0x74,'P';ATmega16 BOOT
.db 0x75,'P';ATmega8
.db 0x76,'P';ATmega8 BOOT
.db 0x77,'P';ATmega169
.db 0x78,'P';ATmega169 BOOT
.db 0x79,'P' ; 0x7a-0x7f no usado
end_of_device_codes:.dw 0xffff
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
Referencias
Fuentes Electrónicas
Internet:
Ole Saether, Terje Frostad, Ingar Fredriksen, Morten W. Lund, Haakon Skar, Paal Kastnes, John Samperi.http://www.serasidis.gr/circuits/avr_isp/avr_isp.htm
Schmidt GerhardBeginners Introduction to the Assembly Language of ATMEL-AVRMicrocontrolers®Diciembre de 2003.http://www.avr-asm-tutorial.net
http://www.avrfreaks.net
http://www.atmel.com
Guido SocherProgramando el microcontrolador AVR con GCC usando libc 1.0.4Traducido al español por:Alberto Pardo<[email protected]>2005-01-09, generated by lfparser version 2.51http://www.linuxfocus.org