Upload
ngonhan
View
283
Download
22
Embed Size (px)
Citation preview
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
A todos ellos gracias
Ing. Horacio Paredes García
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
TABLA DE CONTENIDO Pag.
Dedicatoria......................................................................................................................... 1
ABSTRACT......................................................................................................................... 4
Objetivo............................................................................................................................... 4
Justificación....................................................................................................................... 4
Capitulo 1
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
Capitulo 2
ELECCIÓN DEL MICROCONTROLADOR2.1 ¿Qué microcontrolador emplear? 162.2 Costos 162.3 Aplicación 16
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 ATarjeta UAMI-AVR v1.0 57Microcontroladores soportados 57Características 57
Apéndice BGuía rápida del ensamblador AVR® 58
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
16F876 RISC CMOS 368bytes 8Kb 256bytes16F877 RISC CMOS 368bytes 8Kb 256bytes
Tabla 1 algunos microcontroladores PIC® caracterizados en memoria interna.
AVR® ARQUITECTURA TECNOLOGIA SRAM FLASH EEPROMAT90S1200-12 RISC CMOS NO 1Kb 64bytesAT90S2313-10 RISC CMOS 128bytes 2Kb 128bytes
AT90S4433 RISC CMOS 128bytes 4Kb 256bytesATMEGA 48 RISC CMOS 512bytes 4Kb 256bytesATMEGA 88 RISC CMOS 1Kb 8Kb 512bytes
ATMEGA 168 RISC CMOS 1Kb 16Kb 512bytesATMEGA 8515L RISC CMOS 512bytes 8Kb 512bytes
ATMEGA 32 RISC CMOS 2Kb 32Kb 1024bytesTabla 1 algunos microcontroladores AVR® caracterizados en memoria interna.
Tomamos para hacer un comparativo con condiciones ecuánimes dos modelos de gama baja
tanto de MICROCHIP® como de ATMEL®, el primero es un PIC (16C56A) de gama baja
coloreado en amarillo vs. un AVR® (AT90S2313) de los más básicos, vemos la diferencia
notable en memoria RAM 25 bytes en el PIC© vs. 128 bytes en el AVR®, en cuanto a
FLASH ni se mencione pues el PIC© en este modelo no se incluye, mientras que en el AVR®
ya se consideraba esta con un tamaño muy pequeño pero óptimo para la época en que salió
al mercado y las aplicaciones a las que se destina, cabe resaltar que en cuanto a memoria
ROM el PIC© sobrepasa en mucho al AVR® 1kb vs. 128 bytes, sin embargo mientras en el
PIC© es una ROM en el AVR® ya se incluye una moderna EEPROM , con lo que las
diferencias quedan bastante saldadas, además la experiencia nos ha mostrado que para
aplicaciones como las que son objeto de este estudio, no es necesario una gran cantidad de
memoria no volátil.
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
Después comparamos el popular PIC16F84 de gama media vs. un AVR® aun de los básicos
el AVR® AT90S4433, naturalmente como se esperaba se nota la modernidad en los AVR®,
pues el AVR® posee 128 bytes en memoria RAM vs. 68 bytes en RAM para el PIC©, en
cuanto a FLASH y EEPROM el AVR® supera al PIC© en 4 veces su tamaño. Tabla 2.
PIC ARQUITECTURA TECNOLOGIA RAM FLASH EEPROM16C56A RISC CMOS 25bytes NO 1Kb(ROM)16F84 RISC CMOS 68bytes 1Kb 64bytes
AVR ARQUITECTURA TECNOLOGIA SRAM FLASH EEPROMAT90S2313-10 RISC CMOS 128bytes 2Kb 128bytes
AT90S4433 RISC CMOS 128bytes 4Kb 256bytesTabla 2 comparaciones de memoria interna PIC® vs. AVR®
En las posteriores tablas comparamos el resto de características notables en cada familia de
microcontroladores resaltando los de gama alta para cada fabricante. Las tablas 3 y 4 nos
indican los consumos de potencia (activo / inactivo) y baja potencia. En las tablas 5 y 6
mostramos diferencias entre periféricos integrados velocidad de procesamiento (frecuencia
del oscilador) y cantidad de registros en el núcleo.
PIC I/O POT. ACTIVO POT. INACTIVO BAJA POT16C54 12 2mA 0.6microA 15microA16C55 20 2mA 0.6microA 15microA
16C56A 12 2mA 0.6microA 15microA16C76 22 2mA 1microA 15microA16C77 33 2mA 1microA 15microA16F83 13 2mA 0.6microA 15microA16F84 13 2mA 0.6microA 15microA
16F876 22 2mA 1microA 20microA16F877 26 2mA 1microA 20microA
Tabla 3 características de potencia y modo de baja potencia PIC®.
AVR I/O POT. ACTIVO POT. INACTIVO BAJA POTAT90S1200-12 15 2mA 0.4mA <1microAAT90S2313-10 15 2.8mA 0.8mA <1microA
AT90S4433 20 3.4mA 1.4mA <1microAATMEGA 48 23 240microA NO 0.1microAATMEGA 88 23 240microA ***** 0.1microAATMEGA 168 23 240microA ***** 0.1microA
ATMEGA 8515L 35 **** ***** *****ATMEGA 32 32 1.1mA 0.35mA <1microA
Tabla 4 características de potencia y modo de baja potencia AVR®.
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
PIC INT's INSTR UART CA/D PINESFREC. OSC REGISTROS
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.
3.3 Comentarios finales
AVR© ATMEL® EL RISC EN 8 BIT
ATMEL© ha llevado la filosofía de diseño RISC a los microprocesadores de 8 BIT.
Esta nueva arquitectura proporciona todos los beneficios habituales del RISC: tasa de Reloj
más rápida, mejor desempeño, y una optimización más eficiente en el compilador.
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
AVR® compite con varias familias de microprocesadores bien establecidas en el mercado,
tales como 8051, 6805 y 68HC11. A la competencia se suma la familia PIC de MICROCHIP©,
que con un diseño mas moderno se ha extendido rápidamente en los últimos años.
AVR® es el primer diseño de microcontrolador de ATMEL©, una compañía mas conocida por
sus productos de memoria FLASH y EEPROM. El microcontrolador AVR® se asemeja a la
mayoría de los microcontroladores RISC, pero con una cantidad mayor de registros.
El núcleo exhibe 32 registros iguales de 8 BIT, y cualquiera de ellos pueden contener
direcciones o datos. Como los punteros de dirección de 8 BIT resultan medianamente
inútiles aun para los dispositivos de 8 BIT, los últimos tres registros se pueden usar en
pares, como punteros de dirección. Apodados X, Y, y Z, estos tres meta-registros se pueden
usar para cualquier operación de carga o almacenamiento. A elección del programador, los
punteros pueden ser post o preincrementados. Además, es posible agregar un
desplazamiento de 6 bit a los contenidos del puntero, esta opción resulta útil para
direccionar los elementos de un arreglo. Este modo no es posible para el puntero X; ese
código de operación (opcode) esta reservado para la instrucción LDI (Load immediate) carga
inmediata de una constante.
A veces resulta difícil entusiasmarse acerca de los microcontroladores de 8 BIT; sin embargo
el diseño AVR de ATMEL© difiere de los demás de su clase tal como lo hizo la primera
maquina RISC comparada con los grandes sistemas, hace mas de una década. Con su
archivo de registros más grande y con su conjunto ortogonal de instrucciones, AVR® es
mucho más moderna que su competencia.
Por ejemplo, los 8051, 6805 y PIC® se las arreglan con un único acumulador; los 68HC11 y
HC12 tienen simplemente dos. Esto hace que la arquitectura AVR® sea más fácil de
programar a nivel de lenguaje ensamblador, y que sea fácil de optimizar con un compilador.
El gran conjunto de registros disminuye la dependencia respecto a la memoria, lo cual
mejora la velocidad y hace más pequeñas las necesidades de almacenamiento de datos.
El conjunto de instrucciones del AVR® que se asemeja al RISC, también contribuye a
mejorar su densidad de código respecto a otros microprocesadores/microcontroladores de 8
bit. Su instrucción CPI (compare immediate) evita la engorrosa construcción de cargar,
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
substraer y verificar las banderas (flags), que usan el 6808 y el PIC®. Usualmente, la suma
de dos números en el 8051, 6805, o el PIC® involucra alternar ambos operandos a través
del acumulador y almacenar el resultado. El AVR® simplemente suma dos registros con una
instrucción, en un ciclo de maquina.
Hablar de alto rendimiento parecería fuera de lugar, la familia AVR® debería funcionar
mejor que los otros microprocesadores/microcontroladores de 8 BIT y muchos de 16 BIT. A
20 MHz, su velocidad máxima de reloj, duplica con facilidad la de los demás chips de su
clase. Y lo que es más importante, casi todas sus instrucciones se ejecutan en 1 o 2 ciclos de
reloj, versus 4-10 ciclos para los chips 8051, 6805, 68HC11, y PIC®.
Para ser mas preciso, el HC12, 8051XA, y el 251 son diseños de 16 BIT, con trayectorias
internas de datos de 16 BIT y operaciones aritméticas de 16 BIT, pero aun requieren de tres
o mas ciclos de reloj para efectuar los cálculos mas simples y la mayoría de las operaciones
básicas con los registros. Además las velocidades de reloj de estos dispositivos no son más
rápidas que las de ATMEL®, y no pueden compensar la ejecución inherentemente ineficiente
Resumiendo, el AVR® ofrece un desempeño de 16 BIT con un precio de 8 bit. Para los
desarrolladores que deseen memoria en el chip pero que no necesiten tipos de datos de 16
bits o compatibilidad binaria con la generación anterior, ATMEL© ofrece una mejor relación
precio / desempeño a aquellos diseñadores que deseen independizarse de las familias más
antiguas.
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
4Diseño de la tarjeta UAMI-AVR
4.1 Sección Fuente de Alimentación
El diseño se decidió hacer de manera modular, en la figura 4 se muestra a detalle el diseño
de la fuente de alimentación, ya que el consumo no es mayor a 100mA el regulador
seleccionado es un L7805CV con entrada típica de 6 a 15VDC y salida de 5VDC / 1A. La
alimentación es por medio de un plug 1mm con conexión a fuente externa de 9 a 15VDC, sin
importar polaridad, ya que para evitar daño a la tarjeta se coloco un puente de diodos. El
SW1 es usado para encender o apagar la tarjeta en su totalidad. Además cuenta con un led
de color verde que indica el encendido principal y un capacitor para evitar un poco algunos
pulsos de ruido.
Nota: ES NECESARIO HACER USO DE UN DISIPADOR DE CALOR PARA EL C.I. L7805CV y un
SUPRESOR DE TRANSITIVOS colocado antes del puente de diodos para evitar el retorno de
corriente desde el puerto serial.
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
Figura 4. Fuente de alimentación para la tarjeta AVR-UAMI
El cálculo para la resistencia de led se realizó de la siguiente forma:
48615
7.19y 88615
7.115
30iA3 :es led de corriente la ; 7.1
LED
=−=Ω=−=∴
≤≤−
=
mAVVR
mAVVR
mAmi
VVR
LEDLED
LED
INLED
Se toma un valor medio de 686Ω, para un rango apropiado de corriente (
mAm 19iA10 LED ≤≤ ), el valor comercial es de Ω= 680LEDR .
4.2 Sección Comunicación Serial
Una manera de conectar dos dispositivos es mediante comunicaciones serie asíncronas.
En ellas los bits de datos se transmiten "en serie" (uno detrás de otro) y cada dispositivo
tiene su propio reloj. Previamente se ha acordado que ambos dispositivos transmitirán datos
a la misma velocidad. La velocidad de transmisión es simplemente el número de bits
transmitidos por segundo cuando se envía un flujo continuo de datos. Existen unas
velocidades estándar de transmisión que son 75, 150, 300, 600, 1200, 1800, 2400, 4800,
9600 y 19200 baudios. El baudio es la velocidad de transmisión y es equivalente a un bit por
segundo. Para producir una transmisión de datos con éxito, es esencial que los equipos
transmisores trabajen a la misma velocidad. También es necesario que los datos se
transmitan con el mismo formato, el número de bits de datos y de parada deben ser el
mismo, igual que el tipo de paridad utilizada. Esto se logró configurando en software dichos
parámetros, en la tarjeta UAMI-AVR se consiguió haciéndolo en la UART del
microcontrolador AT90S2313 que es la base de control usada en nuestra tarjeta. Para la PC
no es necesario ya que el AVR estudio 4 © se encarga de realizar esta función.
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
Figura 5. Sección Comunicación Serial.
La salida de datos de los puertos seriales es en los niveles de voltaje TTL que, por sus
niveles de voltaje, prácticamente no se pueden transmitir sin error, más allá de unos 30 Cm.
Por lo tanto, es necesaria una conversión para tener la potencia adecuada que proporcione
inmunidad al ruido. La forma más común de conversión de los datos es a la norma RS-232C
que es una convención de niveles de voltaje mayores a los de TTL. Los niveles de voltaje
para todas las señales RS-232C, son:
• Para un nivel lógico alto, o marca, entre –3 V. y –15 V., con carga, sin carga –25 V.
• Para un nivel lógico bajo, o espacio, el voltaje es entre +3V. y +15 V. con carga, sin
carga +25 V.
Por ello es necesario utilizar un CI MAX-232 driver/transceiver que conseguirá adaptar
dichos niveles. Y un conector DB9 con la siguiente configuración según la norma RS-232, ver
figura 6 y tabla 7.
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
Fig. 6. Conectores DB9.
Número de pin
Señal
1 DCD (Data Carrier Detect)
2 RX Recepción de Datos
3 TX Transmisión de Datos
4 DTR (Data Terminal Ready)
5 GND Tierra
6 DSR (Data Sheet Ready)
7 RTS (Request To Send)
8 CTS (Clear To Send)
9 RI (Ring 30Indicador)
Tabla 7. Convención RS-232
Para conectar la PC a un microcontrolador por el puerto serie se utilizan las señales Tx,
Rx y GND. La PC utiliza la norma RS-232, por lo que los niveles de tensión de los pines
están comprendidos entre +15 y -15 voltios. Los microcontroladores normalmente trabajan
con niveles TTL (0-5v). Es necesario por tanto intercalar un circuito que adapte los niveles
Fig. 7.
Fig. 7. Circuitos de conversión de TTL a RS 232 y viceversa.
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
Como ya se mencionó y como se observa en la figura 5 el CI MAX232 se usa para este fin.
Este chip permite adaptar los niveles RS232 y TTL, permitiendo conectar una PC con un
microcontrolador. Sólo es necesario este chip y sus capacitores electrolíticos externos como
lo marca la aplicación típica del chip.
Entonces esto implicará realizar en laboratorio un cable con conectores DB9 hembra-hembra
de no más de 1m. La figura 8 muestra la conexión que se realizara en el laboratorio, la cual
tiene la ventaja de ser simple de realizar.
Fig. 8. Conexionado del cable serial.
4.3 Sección de control
Así entonces las etiquetas TxDA y RxDA por referirse a los puertos PD del micro AT90S2313
son conectadas a los pines 2 y 3 respectivamente como es mostrado en la figura 9, sección
de control de la tarjeta UAMI-AVR. El pin PD1(TxD) es configurado en software para que
habilite la salida de datos de la UART (DDRD1) y PD0(RxD) es configurado para que reciba
datos hacia la UART (PORTD0) y forzado a “1” para que se habiliten las resistencias internas
de pull-up.
La figura 10 muestra el esquemático del puerto PD0(RxD). Mientras que en la figura 11 se
muestra el esquemático del puerto PD1(TxD).
Los cristales recomendados por la aplicación típica de ATMEL® pueden ser de 8MHz o 4MHz,
como se observa en la figura 9.
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
Figura 9. Sección Control.
El reset de este microcontrolador siempre debe estar en “1” nivel alto.
Los pines XTAL1 y XTAL2 se pueden aprovechar para ser usados en el microcontrolador a
grabar ya que el oscilador debe ser el mismo para que exista sincronía.
Mediante software se realizan las rutinas necesarias para realizar la grabación, verificación y
borrado de los “fuses” en la Flash o en la EEPROM según sea necesario.
Los arreglos en la memoria de datos o de programa son programados usando el bus serial
SPI, mientras el RESET este en nivel bajo. Esta interfase serial consta de los pines 19, 18 y
17; SCK (reloj serial) para sincronía, MISO (salida de datos serial a memoria) y MOSI
(entrada de datos serial a memoria), respectivamente. Entonces después de poner el RESET
en bajo se pueden habilitar las instrucciones necesarias para borrar o programar el
microcontrolador.
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
La figura 10 muestra el esquemático de las conexiones necesarias para el modo de
programación y verificación serial.
Figura 10. Esquemático del modo de programación / verificación serial.
Para la EEPROM, existe un ciclo de auto-borrado que se proporciona dentro de los tiempos
cronometrados para escribir la instrucción, por lo que no es necesario ejecutar primero la
instrucción “chip erase”. Al usar dicha instrucción pone todos los arreglos de memoria con
series de FF’s.
El reloj externo proporciona la sincronía para el SCK (serial clock), de la siguiente manera:
Bajo: > 2 XTAL1 ciclo de reloj
Alto: > 2 XTAL1 ciclos de reloj
4.3.1 El algoritmo de programación serial sería el siguiente:
Cuando se escriben los datos seriales en el microcontrolador, estos se sincronizan con el
flanco de subida del reloj serial SCK.
Cuando se leen datos seriales del microcontrolador, estos se sincronizan con el flanco de
bajada del reloj serial SCK.
Ver figura 11 y tabla 8 para más detalle.
Figura 11. Diagrama de tiempos de la programación serial.
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
Tabla 8. Características de la programación serial, Tp = -40ºC a 85ºC Vcc = 2.7 a 6.0V
Para programar y verificar la secuencia recomendada es:
Ver Tabla 9.
1- Aplicar alimentación al microcontrolador Vcc pin 20, GND pin 10; mientras el RESET
y SCK están en “0”.
2- Esperar al menos 20ms para permitir el envío de la instrucción de habilitación del
modo de programación serial al pin 17 (MOSI) que consta de 4bytes.
3- Cuando en la sincronización llegue el segundo byte éste hará un eco ($53) de retorno
que dará la pauta para que el tercer byte se comience a enviar y así sucesivamente
hasta el cuarto byte; si el eco es correcto o no los cuatro bytes de la instrucción de
habilitación del modo serial deben transmitirse. (Es de notar que si las instrucciones
de habilitación están fuera de sincronización, estás no trabajarán).
4- Si los bytes no hicieron eco entonces le dan un pulso positivo a SCK y se reinicia el
envío para una nueva señal de habilitación. Si los ecos se repiten en 32 ocasiones
entonces se descarta y se envía mensaje de que no hay ningún dispositivo funcional
conectado.
5- Si se envía una señal de borrado “chip erase” (lo que debe hacerse para borrar la
FLASH) esperar el tWD_ERASE después de la instrucción de borrado, mientras se le
da al RESET un pulso positivo y se vulva al paso numero 2. Ver la tabla 10 para los
valores de tWD_ERASE.
6- Los arreglos de la FLASH o la EEPROM son programados byte por byte mientras se
proporciona la dirección y los datos junto con la instrucción de escritura WRITE.
Como ya se había mencionado con anterioridad las localidades de memoria de la
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
EEPROM se borran automáticamente antes de escribir nuevos datos en ellas.
Normalmente se usa la detección del nuevo byte de datos por ciclo o polling. Si el
polling no es usado se tendrá que esperar el tWD_PROG antes de enviar nuevos
datos. Ver tabla 11.
7- Cualquier localidad de memoria puede ser leída usando la instrucción de lectura
READ, que regresa el contenido de la dirección leída al pin 18 (MISO).
8- Al finalizar la sesión de programación el RESET debe ponerse en alto para iniciar con
el funcionamiento normal.
9- Secuencia de apagado (opcional): RESET a “1” y desconexión de Vcc.
Tabla 9. Características de programación y verificación.
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
4.3.2 Características de la programación serial
La figura 12 muestra el diagrama de tiempos de la programación serial.
Figura 12. Diagrama de tiempos de la programación serial.
Se observa claramente en el flanco de subida de SCK el envió y recepción de bytes MOSI y
MISO simultáneamente (FULL DUPLEX).
4.4 Sección Selección de microcontrolador A y B
Ya conformada esta sección y controlada adecuadamente por software, se procedió a
diseñar la etapa de selección de microcontroladores que para mayor detalle se muestra en
las figuras 13 y 14.
Los modelos soportados y las señales de habilitación correspondientes se muestran en la
tabla 12. En donde se observa que cuando el SW2 se encuentra con el led D3 encendido
obtenemos la señal de habilitación B1 para los buffers encapsulados en el CI DM74LS244
(U4), pines 2, 4, 6 y 8. con lo que tenemos la señal de RESET1 para los micros mostrados
en la tabla 12, mientras que la señal B2 se encuentra en alto con lo que el resto de buffers
están deshabilitados, es decir en tercer estado. Con esta señal RESET1 y la ayuda de otro CI
DM74LS244 podemos grabar los modelos para B1 mostrados en la tabla 12.
Señal de habilitación B1 (low) B2 (low)
Modelos soportadosAT90S1200AT90S2313ATtiny2313
ATMEGA16ATMEGA32
ATMEGA8535AT90S8535
SW2 pines 1 y 3 pines 4 y 6LED D3 1 0LED D4 0 1
Tabla 12. Sección selección de microcontrolador 1.
1 = ACTIVO0 = INACTIVO
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
HABILITACIÓNU4
SALIDASU4
B1 B2 RESET1 RESET21 0 E 3er EDO0 1 3er EDO E
Tabla 13. Sección selección de microcontrolador 1.
E = ENABLE (SEÑAL HABILITADA)
HABILITACIÓNU5
ENTRADAS SALIDACTRL
SALIDAS DE SELECCION
RESET1 B2 RESET2 B1 SCK MOSI MISO 1MISO 2MISO 1MOSI 2MOSI 1SCK 2SCK
E 03er EDO
1 E E E E E E3er EDO
3er EDO
3er EDO
3er EDO
1 E 0 E E E3er EDO
3er EDO
3er EDO
E E E
Tabla 14. Sección selección de microcontrolador 2.
En el otro caso sucede a la inversa como se puede observar claramente en la tabla 14,
cuando RESET1 se va al 3er EDO RESET2 se habilita junto con las señales necesarias para
poder programar o borrar según sea el caso el otro conjunto de microcontroladores.
Por ultimo se opto por colocar dos bases para los microcontroladores soportados U6 de 20
pines y U7 de 40 pines, ambas de punto torneado.
Se decidió dejar dispuestas todas las terminales en headers de 2x20 para ambos tipos de
microcontroladores, ver tabla 15, con esto después de haber programado cualquiera de los
modelos soportados no será necesario extraer el microcontrolador, que podrá ser usado
conectando un cable plano de 20 terminales para facilitar el manejo de los pines de ambos
grupos y poder realizar la circuitería externa en un protoboard. Figura 15.
PinesATMEGA16ATMEGA32
ATMEGA8535AT90S8535
1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39
Pines AT90S2313AT90S1200ATtiny2313
1 3 5 7 9 11 13 15 17 19
Pines delcable plano
1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 392 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40
Pines AT90S2313AT90S1200ATtiny2313
2 4 6 8 10 12 14 16 18 20
PinesATMEGA16ATMEGA32
ATMEGA8535AT90S8535
2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40
Tabla 15. Distribución selección microcontrolador 1.
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
Como lo podemos observar en los diagramas correspondientes se necesita usar el mismo
cristal para poder sincronizar adecuadamente las señales que acceden a memoria, pero ya
que ha sido grabado el microcontrolador las aplicaciones podrían necesitar de un cristal de
distinta frecuencia por lo que se usaron dos headers de 2x3 para poder así (solo después de
haber programado el microcontrolador) hacer uso de un cristal externo de otro valor. Ver
tabla 16. Mientras los jumpers se encuentren en las posiciones 1 y 2 se usará el cristal de 4
u 8 MHz (programar), si se requiere usar otro cristal se deberán colocar los jumpers en las
posiciones 2 y 3 y acceder a las terminales XTAL1 y XTAL2 en los headers correspondientes
según el microcontrolador a emplear.
Figura 13. Selección de microcontrolador A.
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
Figura 14. Selección de microcontrolador B.
J6XTAL2 XTAL1
J7XTAL2 XTAL1
CRISTAL
EXTERNO
PROGRAMAR
1 1
2 2CRISTAL
EXTERNO
PROGRAMAR
1 1
2 2
3 3 3 3MICROS 1 MICROS 2Tabla 16. Cristal externo.
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
Figura 15. Sección Programador.
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
4.5 Sección Programador
En esta sección de la tarjeta solo se montaron las dos bases que soportarán a los cinco
microcontroladores en este diseño, figura 15. En la base de 20 pines se podrán programar
los modelos AT90S1200, AT90S2313 y ATtiny2313, mientras que en el socket de 40 pines
podremos programar los modelos ATMEGA16, ATMEGA32, ATMEGA8535 y AT90S8535.
Ambas bases tendrán la mayor parte de sus pines accesibles desde una tira header con lo
que se facilitará la programación y el posterior uso sin la necesidad de desmontar el
microcontrolador cada vez que se requiera realizar cambios. Adicionalmente se coloco un
puerto DB9 para hacer uso de el mediante un header de 2 terminales (Rx y Tx), con el uso
de jumpers que realicen la conexión entre este header a las correspondientes terminales de
Rx y Tx en los headers de 2x20 según se uso uno u otro microcontrolador.
4.6 Sección Banco de leds
Adicionalmente se implementó un banco de leds de 8 bits para uso general, que consiste en
8 indicadores leds de salida y 8 push button para pulsos de habilitación “0” a “1”. Es
importante recordar que aunque estos pulsos de entrada contengan en su diseño
resistencias pull-up externas es necesario habilitar por software las resistencias pull-up
internas del microcontrolador si los puertos son usados como entradas. Figura 16a.
Figura 16a. Sección banco de leds (entrada).
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
El diseño en los indicadores de salida se dicta por las siguientes ecuaciones:
• Para encontrar el valor de la resistencia de base se realizó con la malla que inicia en
el puerto del “micro”, RB, voltaje base-emisor hasta tierra:
05.3 =++− BEBBsat VRIV
Sabemos que mín
BsatBsatCsatmínBsat
IIII
ββ =→=
Y que la LEDCsat II ≅ , y una beta mínima típica es: 40≅mínβ
Además mAI LED 303 ≤≤
Realizando el cálculo numérico obtenemos el valor requerido para la
resistencia de base:
Ω==−=→==∴ 7467375.0
8.2375.0
7.05.3 375.040
15 mA
VmA
VVRmAmAI BBsat
El valor comercial más cercano es de 8K2Ω que nos arroja una corriente de base en
saturación dentro del rango, por lo que el valor elegido es:
Ω= 28KRB
• Ahora es necesario encontrar el valor de la resistencia de LED, para esto trazamos la
malla desde VCC, RLED, VLED hasta tierra:
• 05 =++− LEDLEDCsat VRIV
Entonces el cálculo numérico nos arroja el siguiente resultado:
Ω==−= 22015
3.315
7.15mAV
mAVVRLED
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
Aprovechando el bajo consumo de esta etapa y el hecho de que están todas las resistencias
a un punto común, i.e., a VCC, se elige una red resistiva.
El valor comercial más cercano es de 330Ω lo cual nos deja dentro del rango aceptable para
que el LED encienda adecuadamente, entonces el valor es:
Ω= 330LEDRred
Observar la figura 16b.
Figura 16b. Sección banco de leds (salida).
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
5ENTORNO DE PROGRAMACIÓN
5.1 ¿Cómo programar?Una vez puesta en funcionamiento la tarjeta UAMI-AVR, y habiendo seleccionado alguno de
los microcontroladores, (recomendamos usar el ATMEGA16 o el AT90S2313); nuestros pasos
para comenzar a programar el microcontrolador serán los siguientes:
5.1.1 HARDWARE
1- Conectar el cable serial a la PC y a la tarjeta.
2- Encender la PC (teniendo en cuenta que ya está instalado el software AVR Studio4©)
de lo contrario instalarlo antes. Debemos tomar en cuenta que este software solo es
soportado bajo MS Windows®.
3- Colocar en la base correspondiente el microcontrolador seleccionado.
4- Encender la tarjeta UAMI-AVR v1.0, previamente consulte el manual técnico de la
tarjeta UAMI-AVR v1.0.
5.1.2 SOFTWARE
1- Abrir el software AVR studio4©. Figura 17.
Figura 17.
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
La ventana inicial del IDE AVR Studio4 © se abrirá, figura 18.
Figura 18. IDE AVR Studio4 ©.
2- Dar clic en Create New Project. Figura 18.
3- En la siguiente ventana, figura 19, es recomendable crear primero un fólder de
trabajo, para esto accedemos al subdirectorio con el botón marcado con 1 en la
figura 19, en la figura ya hemos creado el fólder y lo llamamos WORKS. Por default
se crea un fólder y un archivo inicial con el nombre que le vayamos a dar a nuestro
primer programa, ver punto 2 en la figura 19, en el punto 3 encerrado en azul
nombramos el nuevo proyecto, por default se asigna el mismo nombre al archivo
.asm, presionamos Next >> para dirigirnos a la próxima pantalla.
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
Figura 19. Crear nuevo proyecto.
4- En la siguiente ventana, figura 20, debemos seleccionar el depurador a emplear y el
microcontrolador a programar, ver figura 20 círculos rojos 1; por último dar clic en
finalizar punto 2.
5- Ahora la nueva ventana nos mostrará el editor del AVR Studio4 ©, donde
comenzaremos a escribir nuestro programa, figura 21. El editor permite pegar desde
un archivo de texto copiado previamente. El programa a editar está escrito en el
siguiente punto. Los comentarios se ponen después del punto y coma como en el
MASM.
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
Figura 20. Selección de depurador y microcontrolador.
6- El demo a editar es para el microcontrolador ATMEGA16, consiste en realizar algunas
operaciones con bits, y hacer uso de los puertos de entrada salida, la asignación es
puertos PB0-PB7 de salida y puertos PD0-PD7 de entrada.
El código a editar es el siguiente (code D1.ASM):
;************ Code D1.ASM *************;-----------------------------------------------------; UNIVERSIDAD AUTÓNOMA METROPOLITANA;-----------------------------------------------------
; **** PROYECTO TERMINAL DE INGENIERIA ELECTRÓNICA ****
; **** CHÁVEZ CALDERÓN ARMANDO ****; **** PAREDES GARCÍA HORACIO ****
;****** EJEMPLO DE APLICACIÓN ATMEL AVR © ******
; ** 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
herramientas que nos ofrece el AVR Studio4 ©, que mostraremos a continuación. Ver
figura 23. Como primer paso necesitamos tener a la vista el espacio de trabajo para
esto seleccionamos de la barra de menús View y damos clic a Workspace. Al hacer
esto se abre una nueva ventana Workspace que nos muestra las pestañas de
opciones que tenemos para depurar nuestra aplicación, la primera es por código en la
carpeta Assembler que se refiere a la vista que ya tenemos en el editor del archivo
.asm, o en la carpeta Output que nos muestra el mapa (archivo.map) con todos los
nmónicos usados, ver figura 24.
Figura 23. Seleccionando el espacio de trabajo.
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
Figura 24. Espacio de trabajo del depurador.
9- La siguiente pestaña del Workspace, I/O, nos permite simular todo el espacio de
entrada salida e inclusive todos los periféricos integrados. Podemos visualizar al
ejecutar el programa paso por paso todos los valores en hexadecimal que contienen
los registros de propósito general, así como también los registros del procesador,
figura 25 y 26.
Figura 25. Espacio de trabajo del depurador I/O.
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
Figura 26. Espacio de trabajo del depurador I/O.
10- Para iniciar el depurador podemos ir a la barra de menús en el menú Debug y
seleccionar Start Debugging o hacer clic en el icono encerrado en el circulo rojo,
figura 26.
11- Para iniciar el depurador podemos ir a la barra de menús en Debug y seleccionar
Start Debugging o hacer clic en el icono encerrado en el círculo rojo en la figura 27.
Figura 27. Iniciar el depurador.
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
12- Ahora solo basta con correr paso por paso el programa (F11 paso por paso, ALT+F5
automático, o el resto de las opciones disponibles en el menú Debug) e ir mirando
en el espacio de trabajo algún periférico o los puertos I/O (ver figura 30) o según se
trate de la aplicación en específico, hasta conseguir lo deseado, no sin antes conocer el
conjunto de instrucciones del propio microcontrolador y además el lenguaje
ensamblador para estos microcontroladores, podemos hacerlo en la pagina del
fabricante www.atmel.com donde adicionalmente encontraremos las hojas de
especificaciones de los dispositivos que necesitemos y notas de aplicación. Es
importante mencionar que podemos cambiar el contenido de cualquiera de los
registros en el momento que lo deseemos.
Figura 28. Puertos I/O, bit por bit.
13- Una vez teniendo el código depurado y obteniendo los resultados que deseamos
procedemos a grabar nuestro microcontrolador. Nuestra tarjeta solo soporta la
herramienta AVR Prog, así entonces es conveniente colocar un botón en la barra de
herramientas para posteriores usos, para esto nos dirigimos al menú View, Toolbars
y Customize, figura 29, una vez en la ventana Customize en la pestaña Commands
seleccionamos en Categories Tools y en la ventana contigua AVR Prog… dejamos
presionado el botón del ratón y arrastramos hasta la ubicación que deseemos en la
barra de herramientas, figura 30.
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
Figura 29. AVR Prog ©.
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
Figura 30. AVRProg © en la barra de herramientas.
14- Hacemos clic en el botón AVR Prog… e inicializamos la vista para el grabador, figura
31. (Si la tarjeta no está encendida la ventana del programador no se abrirá y lanzará
un mensaje de Tarjeta no soportada, figura 31). En este caso solo basta con cerrar la
ventana, poner en encendido la tarjeta y volver a llamar al AVR Prog… , en cuanto
esto se haga aparecerá la ventana mostrada en la figura 32.
Figura 31. AVRProg © mensaje de error.
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
15-En la figura 32 se muestra la ventana del programador, en donde ahora
seleccionaremos nuestro microcontrolador y procederemos a grabarlo. El archivo para
grabar ya sea en la FLASH o en la EEPROM debe ser el archivo .hex generado
anteriormente.
Figura 32. Ventana del programador AVRProg © y selección del dispositivo.
16- Ahora solo nos resta presionar el botón Program y listo! Tenemos nuestro
microcontrolador programado y preparado para ser usado en la aplicación destinada,
figura 33. En nuestro caso se grabó un demo que muestra algunas operaciones con
bits, para probarlo solo basta con conectar los puertos de salida PB0-PB7 a los leds
de salida y los puertos de entrada PD0-PD7 a los push button en la sección Banco de
leds, ver figura 16.
Nota: No es necesario usar un cristal externo para programar el ATMEGA16 ya que
este posee un reloj oscilador interno con el cual se sincroniza la programación. Si
deseas usar reloj extrerno o cristal será necesario que lo ajustes en las opciones del boton
Advanced...
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
Figura 33. Después de haber programado el microcontrolador.
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
Apéndice A
TARJETA UAMI-AVR v1.0 PARA MICROCONTROLADORES ATMEL AVR ©Es una tarjeta de desarrollo para los microcontroladores de 8 bits de la familia AVR de ATMEL©, de arquitectura RISC y memoria FLASH reprogramable eléctricamente (In System Reprogrammable Downloadable Flash). El entorno software (AVR Studio ©) permite editar, ensamblar y simular el código fuente y el AVRProg © permite transferirlo a la memoria FLASH o EEPROM del microcontrolador. La tarjeta de programación (UAMI-AVR) permite programar por puerto serie algunos AVR ©. El AVR Studio4 ® puede bajarse libremente de la página del fabricante www.atmel.com.
MICROCONTROLADORES SOPORTADOS
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.
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
Apéndice B
Guía rápida del Ensamblador AVR®
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).
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
Como ejemplos:
.EQU bitCambiado = 5sbi PortB, bitCambiadocbi PortB, bitCambiado
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).
ldi r16, HIGH(RAMEND)out SPH, r16ldi r16, LOW(RAMEND)out SPL, r16
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.
inc r1brne sigueinc r2brne sigueinc r3brne sigueinc r1sigue:
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
de la fuente.
Interfase vía serial con la computadora personal.
Consumo de corriente 115-120mA.
Compatible con ©AVR Studio4.
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
Apéndice D
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
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
;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;***************************************************************************
rdser:clr s_data
wrser:ldi temp1,8ldi rd_s_data,0
wrs0:rol s_databrcc wrs1sbi portb,MOSIrjmp wrs2
wrs1:cbi portb,MOSI
wrs2:lsl rd_s_datasbic pinb,MISOori rd_s_data,1pulse_sckdec temp1brne wrs0mov s_data,rd_s_dataret
;***************************************************************************;* FUNCION;* spiinit (Entra en el modo de programacion);*;* DESCRIPCION;* Inicializa la interface SPI en el AVR;***************************************************************************
spiinit:
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
ddrd_init ; inicializa port Dddrb_init ; inicializa port Bcbi portb,SCK ; limpiamos SCKset_reset ; ponemos RESET = 1ldi temp1,0xff ; retardo (0xff);rcall delayclr_reset ; ponemos RESET = 0ldi temp1,0xff ; retardo(0xff);rcall delayldi s_data,0xac ; wrser(0xac)
;// SPI escribe (byte 1)rcall wrserldi s_data,0x53 ; wrser(0x53)
;// SPI escribe (byte 2)rcall wrser
; // SPI establece Sincronizacioncpi device,0x20 ; if ( (device >= 0x20) && (device <= 0x7F) )brlo s2tst devicebrmi s2
s0b:ldi count,32 ; count = 32; cuenta igual a 32?
s1:rcall rdser ; if (rdser == 0x53) // SPI lectura (byte 3)cpi s_data,0x53breq s3 ; break;ldi s_data,0x00 ; wrser(0x00); // SPI escribe (byte 4)rcall wrserpulse_sck ; pulse SCKldi s_data,0xac ;wrser(0xac)
;// SPI escribe (byte 1)rcall wrserldi s_data,0x53 ;wrser(0x53)
;// SPI escribe (byte 2)rcall wrserdec count ; while(--count); decrementamos la cuentabrne s1rjmp s3 ;
; elses2: ;
ldi s_data,0x00 ;wrser(0x00);// SPI escribe (byte 3)rcall wrser
s3: ; ldi s_data,0x00 ;wrser(0x00);// SPI escribe (byte 4)rcall wrserldi temp1,0x10 ; pausa(0x10);rcall delayret
;Muestra el ID ("AVR ISP") en la linea serial.
show_id:ldi zl,low(ID*2) ;Z apunta a la cadena de identificacion IDldi zh,high(ID*2)rcall msg_outret
RESET:ldi temp1,low(RAMEND)
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
out SPL,temp1 ; inicializamos pilaclr temp1out GIMSK,temp1 ; deshabilitamos interrupciones externasser temp1 ; Inicializaout PORTD,temp1set_reset ; ponemos RESET=1out PORTB,temp1ddrb_releasercall u_init ; Inicializa UART
;***************************************************************************;* PROGRAMACION;* waitcmd -> principal;*;* DESCRIPCION;* Espera y ejecuta los comandos;**********************************************************************************
waitcmd:rcall getc ; Mientras (getc() == ESC) ;cpi u_data,0x1bbreq waitcmd
;******************* Tipo de dispositivo *****************************************
cpi u_data,0x54 ; 'T' tipo de dispositivobrne w0rcall getc ; getc();mov device,u_data ; putc(device);rjmp put_ret
;****************** Regresa Identificador de Software ***************************
w0:cpi u_data,0x53 ; 'S' devuelde el identificador de softwarebrne w1rcall show_id ; se llama a la rutina show_id();rjmp waitcmd
;****************** Regresa la version del Software ******************************
w1:cpi u_data,0x56 ;'V' devuelve la version del softwarebrne w2ldi u_data,SW_MAJORrcall putcldi u_data,SW_MINORrcall putcrjmp waitcmd
;**************** Regresa la version de Hardware *********************************
w2:cpi u_data,0x76 ;'v' devuelve la version del hardwarebrne w3ldi u_data,HW_MAJOR ; putc(HW_MAJOR);
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
rcall putcldi u_data,HW_MINOR ; putc(HW_MINOR);rcall putcrjmp waitcmd
;****************** 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 **************************
w51:cpi u_data,'a' ; 'a' devuelve la direccion de
autoincrementobrne w5ldi u_data,'Y' ; putc('Y'); // soporta autoincrementorcall putcrjmp waitcmd
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
altobrne w9rcall getc
w81:ldi s_data,0x48 ; wrser(0x48); // SPI Escribe
(byte 1)rcall wrsermov s_data,addrh ; wrser(addrh); // SPI Escritura
(byte 2)rcall wrsermov s_data,addrl ; wrser(addrl); // SPI escribe
(byte 3)rcall wrser
mov s_data,u_data ; wrser(u_data); // SPI Escribe (byte 4)rcall wrser
ldi temp1,0x01 ; Autoincremento de direccionesclr temp2
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
add addrl,temp1adc addrh,temp2rjmp writeFLASHdelay
;**************** Escribe el programa en memoria, Byte bajo ********************************
w9:cpi u_data,0x63 ; 'c' escribe programa en memoria, byte
bajobrne w12rcall getcldi s_data,0x40 ; wrser(0x40); // SPI Escritura
(byte 1)rcall wrsermov s_data,addrh ; s_data = addrh;
w91: ; rcall wrser ; wrser(s_data); // SPI Escribe (byte 2)mov s_data,addrl ; wrser(addrl); // SPI Escribe
(byte 3)rcall wrsermov s_data,u_data ; wrser(u_data); // SPI Escribe (byte 4)rcall wrser
writeFLASHdelay:
tst pgm_modebrne w92 ;No hay espera el valor no es cero
ldi temp1,0x20 ; retardo(0x20); // 24585 ciclos de espera
rcall delay ; // en modo Pagina no requiere de pausas!w92:
rjmp put_ret ; vamos a reply();
;******************** Lectura de programa en memoria ***********************************
w12:cpi u_data,0x52 ; 'R' Lee el programa en memoriabrne w10 ;ldi s_data,0x28 ; wrser(0x28); // SPI Escribe (byte 1)rcall wrsermov s_data,addrh ; s_data = addrh;rcall wrser ; wrser(s_data); // SPI Escribe (byte 2)mov s_data,addrl ; wrser(addrl); // SPI escribe
(byte 3)rcall wrserrcall rdser ; putc(rdser()); // envia datos (byte 4)mov u_data,s_datarcall putcldi s_data,0x20 ; wrser(0x20); // SPI Escribe
(byte 1)rcall wrsermov s_data,addrh ; wrser(addrh); // SPI Escribe
(byte 2)rcall wrsermov s_data,addrl ; wrser(addrl); // SPI escribe
(byte 3)rcall wrser
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
rcall rdser ; putc(rdser()); // Send data (byte 4)
mov u_data,s_datarcall putcrjmp readaddrinc
;********************** Carga las direcciones ******************************************
w10:cpi u_data,0x41 ; 'A' Cargamos direccionesbrne w11rcall getc ; addrh = getc();mov addrh,u_datarcall getc ; addrl = getc();mov addrl,u_datarjmp put_ret ; goto reply();
;********************** Escribe los datos en memoria ************************************
w11:cpi u_data,0x44 ; 'D' Escribe datos en memoriabrne w13rcall getcldi s_data,0xc0rcall wrsermov s_data,addrhrcall wrsermov s_data,addrlrcall wrsermov s_data,u_datarcall wrserldi temp1,0x20rcall delayldi temp1,0x01 ; incremento de direccionesclr temp2add addrl,temp1adc addrh,temp2rjmp put_ret
;************************ Lectura de los datos en memoria **********************************
w13:cpi u_data,0x64 ; 'd' leemos datos en memoriabrne w14ldi s_data,0xa0 ;wrser(0xA0)
;// SPI Escribe (byte 1)rcall wrsermov s_data,addrh ;s_data = addrh;rcall wrser ; wrser(s_data)
;// SPI Escribe (byte 2)mov s_data,addrl ; wrser(addrl)
;// SPI Escribe (byte 3)rcall wrserrcall rdser ; putc(rdser())
;// envia dato (byte 4)mov u_data,s_datarcall putc
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
readaddrinc:ldi temp1,0x01 ; Auto incremento de direccionesclr temp2add addrl,temp1adc addrh,temp2rjmp waitcmd ; goto waitcmd();
;********************** Abandonamos el modo de programacion *******************************
w14:cpi u_data,0x4c ; 'L' permite modo de programacionbrne w15ddrb_releaseset_reset ; ponemos RESET = 1rjmp put_ret
;*********************** Borrado del Chip **************************************************
w15:cpi u_data,0x65 ; 'e' borrar Chipbrne w16ldi s_data,0xacrcall wrserldi s_data,0x80rcall wrserldi s_data,0x04rcall wrserldi s_data,0x00rcall wrserldi temp1,0x30rcall delayrjmp put_ret
;************************ Escritura de Lock Bits ******************************************
w16:cpi u_data,0x6c ; 'l' Escribe lock bitsbrne w17rcall getcldi s_data,0xacrcall wrsermov s_data,u_dataandi s_data,0x06ori s_data,0xe0rcall wrserldi s_data,0x00rcall wrser
w162:ldi s_data,0x00rcall wrserldi temp1,0x30rcall delayrjmp put_ret
;*************************** Lectura Signature Bytes **************************************
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
w17:cpi u_data,0x73 ; 's' Lectura de signature bytesbrne w18ldi param1,0x02rcall w17callldi param1,0x01rcall w17callldi param1,0x00rcall w17callrjmp waitcmd
w17call:ldi s_data,0x30rcall wrserldi s_data,0x00rcall wrsermov s_data,param1rcall wrserrcall rdsermov u_data,s_datarcall putcret
;************************* Escribe Programa en Pagina de Memoria *************************************
w18:cpi u_data,0x6D ; 'm' Escribe Programa en pagina de Memoriabrne w19ldi s_data,0x4c ;wrser(0x4c); // SPI Escribe (byte 1)rcall wrsermov s_data,addrh ;wrser(addrh); // SPI Escribe (byte 2)rcall wrsermov s_data,addrl ;wrser(addrl); // SPI Escribe (byte 3)rcall wrserldi s_data,0x00 ;wrser(0x00); // SPI Escribe (byte 4)rcall wrserldi temp1,0xff ; delay(0xFF); // 0x20 = 24585 ciclos de
esperarcall delayrjmp put_ret
;**************************** Comandos universales ***************************************
w19:cpi u_data,0x3A ; ':' comando Universalbrne w191rcall getcmov cmd1,u_datarcall getcmov cmd2,u_datarcall getcmov cmd3,u_dataclr u_datarcall NewUniversalldi temp1,0xff ;Espera(0xFF); // 0x20 = 24585 ciclos de
esperarcall delayrjmp put_ret
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
;*************************** Nuevos comandos universales w191:
cpi u_data,'.' ; '.' Nuevo comando Universalbrne w99rcall getcmov cmd1,u_datarcall getcmov cmd2,u_datarcall getcmov cmd3,u_datarcall getcrcall NewUniversalldi temp1,0xff ;delay(0xFF); // 0x20 = 24585 ciclos de retrasorcall delayrjmp put_ret
NewUniversal:mov s_data,cmd1rcall wrsermov s_data,cmd2rcall wrsermov s_data,cmd3rcall wrsermov s_data,u_datarcall wrsermov u_data,rd_s_datarcall putcret
w99:
;*************************** Error en comandos put_err:
ldi u_data,0x3f ; putc('?'); \\ envia '?'rcall putcrjmp waitcmd
;**** Reply Command ****put_ret:
ldi u_data,0x0d ; putc(0x0D); \\ envia CRrcall putcrjmp waitcmd
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
CDROM:
© Atmel Corporation 2005Software and Technical LibraryEnero 2005
Diseño de la tarjeta experimental UAMI-AVR