SlideShare una empresa de Scribd logo
1 de 84
Descargar para leer sin conexión
UNIVERSIDAD AUTÓNOMA METROPOLITANA
UNIDAD IZTAPALAPA
DIVISIÓN DE CIENCIAS BÁSICAS E INGENIERÍA
PROYECTO TERMINAL DE INGENIERÍA ELECTRÓNICA
Evaluación de Microcontroladores
Propuesta de Diseño de la tarjeta experimental UAMI-AVR
ALUMNOS
CHÁVEZ CALDERÓN ARMANDO
PAREDES GARCÍA HORACIO
LICENCIATURA EN INGENIERÍA ELECTRÓNICA
ESPECIALIDAD COMUNICACIONES
ASESOR DEL PROYECTO
M. EN C. SUARÉZ FERNANDEZ AGUSTÍN
PROFESOR INVESTIGADOR DEL ÁREA DE INGENIERÍA BIOMÉDICA
MÉXICO D.F., JUNIO DE 2006.
Proyecto terminal de ingeniería electrónica
DEDICATORIA
A Dios
Por que sin Él nada sería posible.
A mis padres
Por su comprensión y apoyo financiero.
A Fanny
Por su ejemplo y apoyo.
A mis compañeros, amigos y maestros
Por 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 amigos
Por 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 MICROCONTROLADORES
1.1 Introducción 5
1.2 Arquitectura básica 6
1.3 Bloques internos del microcontrolador 8
1.4 Recursos especiales 11
1.5 El mercado de los microcontroladores 12
1.6 Herramientas para el desarrollo de aplicaciones 13
1.7 Desarrollo del software 14
Capitulo 2
ELECCIÓN DEL MICROCONTROLADOR
2.1 ¿Qué microcontrolador emplear? 16
2.2 Costos 16
2.3 Aplicación 16
2.3.1 Procesamiento de datos 16
2.3.2 Entrada / Salida 17
2.3.3 Consumo 17
2.3.4 Memoria 17
2.3.5 Ancho de palabra 17
2.3.6 Diseño 18
2.4 La familia de los PIC vs. La familia de los AVR cómo elección 18
Capitulo 3
COMPARATIVOS DE AMBOS MICROCONTROLADORES
3.1 Comparativos (Características Relevantes) 19
3.2 Conclusiones de la evaluación 21
3.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-AVR
4.1 Sección Fuente de Alimentación 26
4.2 Sección Comunicación Serial 27
4.3 Sección de Control 30
4.3.1 Algoritmo de programación serial 32
4.3.2 Características de la programación serial 35
4.4 Sección Selección de microcontrolador A y B 35
4.5 Sección Programador 40
4.6 Sección Banco de leds 40
Capitulo 5
ENTORNO DE PROGRAMACIÓN
5.1 ¿Cómo programar? 43
5.1.1 Hardware 43
5.1.2 Software (AVR Studio 4® y AVR Prog®) 43
Apéndice A
Tarjeta UAMI-AVR v1.0 57
Microcontroladores soportados 57
Características 57
Apéndice B
Guía rápida del ensamblador AVR® 58
Apéndice C
Características eléctricas de la tarjeta UAMI-AVR 65
Apéndice D
Programa 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.
Objetivo
Diseño de la tarjeta UAMI-AVR para los cursos de Sistemas Digitales de la UAM-Iztapalapa.
Justificación
Actualmente, 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
1
Introducció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.
1
Traducció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 I2
C
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.
2
Complementary 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
2
Elecció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 Consumo
Algunos 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 palabra
El 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
3
Comparativos 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 EEPROM
16C54 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 64bytes
16F84 RISC CMOS 68bytes 1Kb 64bytes
16F876 RISC CMOS 368bytes 8Kb 256bytes
16F877 RISC CMOS 368bytes 8Kb 256bytes
Tabla 1 algunos microcontroladores PIC® caracterizados en memoria interna.
AVR® ARQUITECTURA TECNOLOGIA SRAM FLASH EEPROM
AT90S1200-12 RISC CMOS NO 1Kb 64bytes
AT90S2313-10 RISC CMOS 128bytes 2Kb 128bytes
AT90S4433 RISC CMOS 128bytes 4Kb 256bytes
ATMEGA 48 RISC CMOS 512bytes 4Kb 256bytes
ATMEGA 88 RISC CMOS 1Kb 8Kb 512bytes
ATMEGA 168 RISC CMOS 1Kb 16Kb 512bytes
ATMEGA 8515L RISC CMOS 512bytes 8Kb 512bytes
ATMEGA 32 RISC CMOS 2Kb 32Kb 1024bytes
Tabla 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 EEPROM
16C56A RISC CMOS 25bytes NO 1Kb(ROM)
16F84 RISC CMOS 68bytes 1Kb 64bytes
AVR ARQUITECTURA TECNOLOGIA SRAM FLASH EEPROM
AT90S2313-10 RISC CMOS 128bytes 2Kb 128bytes
AT90S4433 RISC CMOS 128bytes 4Kb 256bytes
Tabla 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 POT
16C54 12 2mA 0.6microA 15microA
16C55 20 2mA 0.6microA 15microA
16C56A 12 2mA 0.6microA 15microA
16C76 22 2mA 1microA 15microA
16C77 33 2mA 1microA 15microA
16F83 13 2mA 0.6microA 15microA
16F84 13 2mA 0.6microA 15microA
16F876 22 2mA 1microA 20microA
16F877 26 2mA 1microA 20microA
Tabla 3 características de potencia y modo de baja potencia PIC®.
AVR I/O POT. ACTIVO POT. INACTIVO BAJA POT
AT90S1200-12 15 2mA 0.4mA <1microA
AT90S2313-10 15 2.8mA 0.8mA <1microA
AT90S4433 20 3.4mA 1.4mA <1microA
ATMEGA 48 23 240microA NO 0.1microA
ATMEGA 88 23 240microA ***** 0.1microA
ATMEGA 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 PINES
FREC.
OSC REGISTROS
16C54 NO 33 NO NO 18 20MHz 8x8bits
16C55 NO 33 NO NO 28 20MHz 8x8bits
16C56A NO 33 NO NO 18 20MHz 8x8bits
16C76 11 35 SI SI 28 20MHz **
16C77 12 35 SI SI 40 20MHz **
16F83 4 35 NO NO 18 10MHz 15X8
16F84 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 REGISTROS
AT90S1200-12 4 89 NO NO 20 12MHz 32x8 BITS
AT90S2313-10 10 118 SI NO 20 10MHz 32x8 BITS
AT90S4433 13 118 SI SI 28 8MHz 32x8 BITS
ATMEGA 48 1 131 SI SI 28 20MHz 32x8 BITS
ATMEGA 88 1 131 SI SI 28 20MHz 32x8 BITS
ATMEGA 168 2 131 SI SI 28 20MHz 32x8 BITS
ATMEGA 8515L 16 130 SI NO 40 16MHz 32x8 BITS
ATMEGA 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
4
Diseñ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:
486
15
7
.
1
9
y
886
15
7
.
1
15
30
i
A
3
:
es
led
de
corriente
la
;
7
.
1
LED
=
−
=
Ω
=
−
=
∴
≤
≤
−
=
mA
V
V
R
mA
V
V
R
mA
m
i
V
V
R
LED
LED
LED
IN
LED
Se toma un valor medio de 686Ω, para un rango apropiado de corriente (
mA
m 19
i
A
10 LED ≤
≤ ), el valor comercial es de Ω
= 680
LED
R .
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 soportados
AT90S1200
AT90S2313
ATtiny2313
ATMEGA16
ATMEGA32
ATMEGA8535
AT90S8535
SW2 pines 1 y 3 pines 4 y 6
LED D3 1 0
LED D4 0 1
Tabla 12. Sección selección de microcontrolador 1.
1 = ACTIVO
0 = INACTIVO
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
HABILITACIÓN
U4
SALIDAS
U4
B1 B2 RESET1 RESET2
1 0 E 3er EDO
0 1 3er EDO E
Tabla 13. Sección selección de microcontrolador 1.
E = ENABLE (SEÑAL HABILITADA)
HABILITACIÓN
U5
ENTRADAS
SALIDA
CTRL
SALIDAS DE SELECCION
RESET1 B2 RESET2 B1 SCK MOSI MISO 1MISO 2MISO 1MOSI 2MOSI 1SCK 2SCK
E 0
3er
EDO
1 E E E E E E
3er
EDO
3er
EDO
3er
EDO
3er
EDO
1 E 0 E E E
3er
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.
Pines
ATMEGA16
ATMEGA32
ATMEGA8535
AT90S8535
1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39
Pines
AT90S2313
AT90S1200
ATtiny2313
1 3 5 7 9 11 13 15 17 19
Pines del
cable plano
1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39
2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40
Pines
AT90S2313
AT90S1200
ATtiny2313
2 4 6 8 10 12 14 16 18 20
Pines
ATMEGA16
ATMEGA32
ATMEGA8535
AT90S8535
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.
J6
XTAL2 XTAL1
J7
XTAL2 XTAL1
CRISTAL
EXTERNO
PROGRAMAR
1 1
2 2
CRISTAL
EXTERNO
PROGRAMAR
1 1
2 2
3 3 3 3
MICROS 1 MICROS 2
Tabla 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:
0
5
.
3 =
+
+
− BE
B
Bsat V
R
I
V
Sabemos que
mín
Bsat
Bsat
Csat
mín
Bsat
I
I
I
I
β
β =
→
=
Y que la LED
Csat I
I ≅ , y una beta mínima típica es: 40
≅
mín
β
Además mA
ILED 30
3 ≤
≤
Realizando el cálculo numérico obtenemos el valor requerido para la
resistencia de base:
Ω
=
=
−
=
→
=
=
∴ 7467
375
.
0
8
.
2
375
.
0
7
.
0
5
.
3
375
.
0
40
15
mA
V
mA
V
V
R
mA
mA
I B
Bsat
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:
Ω
= 2
8K
RB
• Ahora es necesario encontrar el valor de la resistencia de LED, para esto trazamos la
malla desde VCC, RLED, VLED hasta tierra:
• 0
5 =
+
+
− LED
LED
Csat V
R
I
V
Entonces el cálculo numérico nos arroja el siguiente resultado:
Ω
=
=
−
= 220
15
3
.
3
15
7
.
1
5
mA
V
mA
V
V
RLED
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:
Ω
= 330
LED
Rred
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
5
ENTORNO 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 FF
OUT 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 01
DEC TEMP ;entonces el contador crece en 1
SBIS PIND,0x02 ;si se presiona el SW7 se rota R1 a la derecha
ROR TEMP ;entonces los leds muestran 1bit con desplazamiento a la DERECHA
SBIS PIND,0x03 ;si se presiona el SW8 se rota R1 a la izquierda
ROL TEMP ;entonces los leds muestran 1bit con desplazamiento a la
IZQUIERDA
SBIS PIND,0x04 ;si se presiona el SW9 se hace un NOT a R1
COM 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 LSB
NEG 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 R1
SWAP TEMP ;entonces los leds se alternan en nibles
RETRASO:
DEC DELAY ;retraso1
BRNE RETRASO ;bifurca si R17 no es cero
DEC DELAY2 ;retraso2
BRNE 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 Corporation
Creating 'E:Archivos de programaAtmelAVR ToolsWORKSD1d1.eep'
Creating 'E:Archivos de programaAtmelAVR ToolsWORKSD1d1.hex'
Creating 'E:Archivos de programaAtmelAVR ToolsWORKSD1d1.obj'
Creating 'E:Archivos de programaAtmelAVR ToolsWORKSD1d1.map'
Assembling 'E:Archivos de programaAtmelAVR ToolsWORKSD1D1.asm'
Including 'e:Archivos de programaAtmelAVR ToolsAvrAssemblerAppnotesM16DEF.INC'
Program memory usage:
Code : 24 words
Constants (dw/db): 0 words
Unused : 0 words
Total : 24 words
Assembly complete with no errors.
Deleting 'E:Archivos de programaAtmelAVR ToolsWORKSD1d1.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®
Registros
Los registros son posiciones especiales de almacenamiento, con 8 bits de capacidad. Un
registro 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úmero
cbr r14,45 ;Limpia los bits en el registro determinados por una máscara de bits
cpi r13,6 ;Compara el contenido del registro con una constante
sbci r9,7 ;Resta al registro el valor del contenido de la constante y del resultado
;actual del bit de carry
sbr r12,89 ;Coloca a '1' los bits en el registro determinados por una máscara de
;bits
ser r3 ;Coloca todos los bits del registro a 1
subi r15,9 ;Resta al registro el valor del contenido de la constante.
Registros punteros
Un 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ón
ldi 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 fichero
st X+,r1 ;Escribe en la dirección X, e incrementa el puntero a la siguiente dirección
ld 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 comandos
Tabla:
.DW 134,12312
Puertos
Los 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 binaria
out 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 = 5
sbi PortB, bitCambiado
cbi PortB, bitCambiado
Las dos instrucciones tienen una limitación, solamente afectan a puertos con una dirección
inferior a 0x20.
REGISTROS REELEVANTES DE LOS AVR
Componente Nombre del puerto Registro/Puerto
Acumulador SREG Registro de estado
Pila SPL/SPH Puntero de pila
SRAM externa,
interrupción externa
MCUCR Registro de Control General MCU
Interrupción externa
GIMSK
GIFR
Registro de mascara de interrupción
Registro de banderas de interrupción
Interrupción del Timer
TIMSK
TIFR
Registro de mascara de interrupción del timer
Registro de banderas de interrupción del timer
Timer0
TCCR0
TCNT0
Registro de control
Registro de cuenta
Timer1
TCCR1A
TCCR1B
TCNT1
OCR1A
OCR1B
ICR1L/H
Registro A de control
Registro B de control
Registro de cuenta
Registro de comparación A
Registro de comparación B
Registro de captura de entrada
EEPROM
EEAR
EEDR
EECR
Registro de direcciones
Registro de datos
Registro de control
UART
UDR
USR
UCR
UBRR
Registro de datos
Registro de estado
Registro de control
Registro de programación de baudios
Comparador analógico ACSR Registro de control y estado
Puertos de I/O
PORTx
DDRx
PINx
Registro de salida del puerto
Registro de dirección del puerto
Registro de entrada del puerto
RAM estática, SRAM
La 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 = 0x0060
STS direccionMemoria, R1
SRAM como pila
El 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, r16
ldi 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 subrutina
ret ; 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)
.ESEG
La sección EEPROM
.ORG
Para indicar que el segmento de código o datos comienza en una dirección distinta de la
dada por defecto.
Saltos
La 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 r1
brne sigue
inc r2
brne sigue
inc r3
brne sigue
inc r1
sigue:
Como ejemplo de instrucciones de salto condicional:
brge ; mayor o igual (con bit de signo)
brlt ; menor que (con bit de signo)
Macros
Una macro permite la utilización repetida de secuencias de instrucciones.
Por ejemplo:
.MACRO Delay
nop
nop
nop
nop
.ENDMACRO
; instrucciones
Delay
; 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 incondicionales
Aparte 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 baja
rcall siBitDistinto7 ;ejecutada solamente si el bit 7 está a 0
rcall 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
INTERRUPCIONES
Con 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_reset
sbi portb,resetpin
.endm
.macro clr_reset
cbi portb,resetpin
.endm
.macro ddrd_init
nop
.endm
.macro ddrb_init
ldi temp1,(0xFF ^ (1<<MISO))
out ddrb,temp1 ; PB5 es entrada, el resto es salida
.endm
.macro ddrb_release
ldi temp1,(1<<resetpin)
out ddrb,temp1 ; PB4 (RESET) es salida, el resto es entrada
.endm
.macro pulse_sck
sbi portb,SCK
ldi temp2,6 ;valor para un cristal de 4MHz
m0:
dec temp2
brne m0
cbi portb,SCK
ldi temp2,3 ;valor para cristal= 4MHz
m1:
dec temp2
brne 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 *
;****************************
.CSEG
rjmp RESET ; Usamos RESET
;Inicializa la UART
u_init:
ldi temp1,N ; establecer la velocidad en baudios
out UBRR,temp1
ldi temp1,1<<TXEN|1<<RXEN ; inicializa UART para TX y RX
out UCR,temp1
Diseño de la tarjeta experimental UAMI-AVR
Proyecto terminal de ingeniería electrónica
ret
putc:
sbis USR,UDRE ; prueba(test) para registro de Tx vacio
rjmp putc ; Loop hasta que Tx sea vacio
out UDR,u_data ; se envia el byte
ret
getc:
sbis USR,RXC ; Espera hasta que el caracter ha sido recibido
rjmp getc
in u_data,UDR ; Se lee el byte de la UART
ret
delay:
ldi temp2,0xff
dl: dec temp2
brne dl
dec temp1
brne delay
ret
;***************************************************************************
;* FUNCION
;* wrser
;*
;* DESCRIPCION
;*
;* Escribe y lee los datos a/o desde la tarjeta SPI
;***************************************************************************
rdser:
clr s_data
wrser:
ldi temp1,8
ldi rd_s_data,0
wrs0:
rol s_data
brcc wrs1
sbi portb,MOSI
rjmp wrs2
wrs1:
cbi portb,MOSI
wrs2:
lsl rd_s_data
sbic pinb,MISO
ori rd_s_data,1
pulse_sck
dec temp1
brne wrs0
mov s_data,rd_s_data
ret
;***************************************************************************
;* 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 D
ddrb_init ; inicializa port B
cbi portb,SCK ; limpiamos SCK
set_reset ; ponemos RESET = 1
ldi temp1,0xff ; retardo (0xff);
rcall delay
clr_reset ; ponemos RESET = 0
ldi temp1,0xff ; retardo(0xff);
rcall delay
ldi s_data,0xac ; wrser(0xac)
;// SPI escribe (byte 1)
rcall wrser
ldi s_data,0x53 ; wrser(0x53)
;// SPI escribe (byte 2)
rcall wrser
; // SPI establece Sincronizacion
cpi device,0x20 ; if ( (device >= 0x20) && (device <= 0x7F) )
brlo s2
tst device
brmi s2
s0b:
ldi count,32 ; count = 32; cuenta igual a 32?
s1:
rcall rdser ; if (rdser == 0x53) // SPI lectura (byte 3)
cpi s_data,0x53
breq s3 ; break;
ldi s_data,0x00 ; wrser(0x00); // SPI escribe (byte 4)
rcall wrser
pulse_sck ; pulse SCK
ldi s_data,0xac ;wrser(0xac)
;// SPI escribe (byte 1)
rcall wrser
ldi s_data,0x53 ;wrser(0x53)
;// SPI escribe (byte 2)
rcall wrser
dec count ;} while(--count); decrementamos la cuenta
brne s1
rjmp s3 ; }
; else
s2: ; {
ldi s_data,0x00 ;wrser(0x00);// SPI escribe (byte 3)
rcall wrser
s3: ; }
ldi s_data,0x00 ;wrser(0x00);// SPI escribe (byte 4)
rcall wrser
ldi temp1,0x10 ; pausa(0x10);
rcall delay
ret
;Muestra el ID ("AVR ISP") en la linea serial.
show_id:
ldi zl,low(ID*2) ;Z apunta a la cadena de identificacion ID
ldi zh,high(ID*2)
rcall msg_out
ret
RESET:
ldi temp1,low(RAMEND)
Diseño de la tarjeta experimental UAMI-AVR
Microcontroladores: Microcontroladores AVR
Microcontroladores: Microcontroladores AVR
Microcontroladores: Microcontroladores AVR
Microcontroladores: Microcontroladores AVR
Microcontroladores: Microcontroladores AVR
Microcontroladores: Microcontroladores AVR
Microcontroladores: Microcontroladores AVR
Microcontroladores: Microcontroladores AVR
Microcontroladores: Microcontroladores AVR
Microcontroladores: Microcontroladores AVR
Microcontroladores: Microcontroladores AVR
Microcontroladores: Microcontroladores AVR

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

Turorial avr Bascom
Turorial avr BascomTurorial avr Bascom
Turorial avr Bascom
 
ITACIN Curso PLC 1
ITACIN Curso PLC 1ITACIN Curso PLC 1
ITACIN Curso PLC 1
 
Clase 1
Clase 1Clase 1
Clase 1
 
Actividad 1
Actividad 1Actividad 1
Actividad 1
 
Domotica con logo
Domotica con logoDomotica con logo
Domotica con logo
 
Telesquemario
TelesquemarioTelesquemario
Telesquemario
 
Simatic s7 200 simens
Simatic s7 200 simens Simatic s7 200 simens
Simatic s7 200 simens
 
PLC: autómatas programables y sistemas de automatización por Enrique Mandado ...
PLC: autómatas programables y sistemas de automatización por Enrique Mandado ...PLC: autómatas programables y sistemas de automatización por Enrique Mandado ...
PLC: autómatas programables y sistemas de automatización por Enrique Mandado ...
 
Exposicion proyectos en electronica 2013
Exposicion proyectos en electronica 2013Exposicion proyectos en electronica 2013
Exposicion proyectos en electronica 2013
 
Logo! manual
Logo! manualLogo! manual
Logo! manual
 
Logo! 0 ba6 español
Logo! 0 ba6 españolLogo! 0 ba6 español
Logo! 0 ba6 español
 
Tutor logo!
Tutor logo!Tutor logo!
Tutor logo!
 
Manual de sistema_ Simatic S7 1200
Manual de sistema_  Simatic S7 1200 Manual de sistema_  Simatic S7 1200
Manual de sistema_ Simatic S7 1200
 
Introduccion a automatas programables
Introduccion a automatas programablesIntroduccion a automatas programables
Introduccion a automatas programables
 
T1 introduccion
T1 introduccionT1 introduccion
T1 introduccion
 
PLC: Automatización industrial
PLC: Automatización industrial PLC: Automatización industrial
PLC: Automatización industrial
 
Unidad1 pl cscada
Unidad1 pl cscadaUnidad1 pl cscada
Unidad1 pl cscada
 
Temarios automatizacion
Temarios automatizacionTemarios automatizacion
Temarios automatizacion
 
Logo manual
Logo manualLogo manual
Logo manual
 
T 11112 capitulo 3
T 11112 capitulo 3T 11112 capitulo 3
T 11112 capitulo 3
 

Similar a Microcontroladores: Microcontroladores AVR

S14 GUIA LAB 09 PROYECTO DE MICROCONTROLADORES PIC.docx
S14 GUIA LAB 09 PROYECTO DE MICROCONTROLADORES PIC.docxS14 GUIA LAB 09 PROYECTO DE MICROCONTROLADORES PIC.docx
S14 GUIA LAB 09 PROYECTO DE MICROCONTROLADORES PIC.docxALEJANDRALUCEROCHAMB
 
Curso Micro Tema 1
Curso Micro Tema 1Curso Micro Tema 1
Curso Micro Tema 1Luis Zurita
 
Introduccion a los microcontroladores pic y programacion de una matriz de led's
Introduccion a los microcontroladores pic y programacion de una matriz de led'sIntroduccion a los microcontroladores pic y programacion de una matriz de led's
Introduccion a los microcontroladores pic y programacion de una matriz de led'sRuderocker Billy
 
Sesion 1
Sesion 1Sesion 1
Sesion 11130490
 
Mis proyectos con Arduino
Mis proyectos con ArduinoMis proyectos con Arduino
Mis proyectos con ArduinoJomicast
 
Portafolio arquitectura felix
Portafolio arquitectura felixPortafolio arquitectura felix
Portafolio arquitectura felixRDMrvllAcevedo
 
Portafolio arquitectura felix
Portafolio arquitectura felixPortafolio arquitectura felix
Portafolio arquitectura felixRDMrvllAcevedo
 
Microcontroladores-Microprocesadores
Microcontroladores-MicroprocesadoresMicrocontroladores-Microprocesadores
Microcontroladores-MicroprocesadoresAlex Via Paz
 
2_INTROD.PDF
2_INTROD.PDF2_INTROD.PDF
2_INTROD.PDFCaRmen Cu
 
04 procesadores y microcontroladores
04 procesadores y microcontroladores04 procesadores y microcontroladores
04 procesadores y microcontroladoresMario Ramirez
 
135127015 microcontroladores-1-1-ppt
135127015 microcontroladores-1-1-ppt135127015 microcontroladores-1-1-ppt
135127015 microcontroladores-1-1-pptCarlos Martir
 
Resumen microcontroladores
Resumen microcontroladoresResumen microcontroladores
Resumen microcontroladoresXavier Solis
 
Microcontroladores: Entendiendo los AVR de ATMEL
Microcontroladores: Entendiendo los AVR de ATMELMicrocontroladores: Entendiendo los AVR de ATMEL
Microcontroladores: Entendiendo los AVR de ATMELSANTIAGO PABLO ALBERTO
 
Sesion 1 atmega8
Sesion 1 atmega8Sesion 1 atmega8
Sesion 1 atmega8davidepn2
 
Sesión 3 introduccion a microcontroladores
Sesión 3 introduccion a microcontroladoresSesión 3 introduccion a microcontroladores
Sesión 3 introduccion a microcontroladoresDidier Tec
 

Similar a Microcontroladores: Microcontroladores AVR (20)

S14 GUIA LAB 09 PROYECTO DE MICROCONTROLADORES PIC.docx
S14 GUIA LAB 09 PROYECTO DE MICROCONTROLADORES PIC.docxS14 GUIA LAB 09 PROYECTO DE MICROCONTROLADORES PIC.docx
S14 GUIA LAB 09 PROYECTO DE MICROCONTROLADORES PIC.docx
 
Curso Micro Tema 1
Curso Micro Tema 1Curso Micro Tema 1
Curso Micro Tema 1
 
Introduccion a los microcontroladores pic y programacion de una matriz de led's
Introduccion a los microcontroladores pic y programacion de una matriz de led'sIntroduccion a los microcontroladores pic y programacion de una matriz de led's
Introduccion a los microcontroladores pic y programacion de una matriz de led's
 
Sesion 1
Sesion 1Sesion 1
Sesion 1
 
Introducción
IntroducciónIntroducción
Introducción
 
Introducción
IntroducciónIntroducción
Introducción
 
Mis proyectos con Arduino
Mis proyectos con ArduinoMis proyectos con Arduino
Mis proyectos con Arduino
 
Micro1.ppt
Micro1.pptMicro1.ppt
Micro1.ppt
 
Portafolio arquitectura felix
Portafolio arquitectura felixPortafolio arquitectura felix
Portafolio arquitectura felix
 
Portafolio arquitectura felix
Portafolio arquitectura felixPortafolio arquitectura felix
Portafolio arquitectura felix
 
Microcontroladores-Microprocesadores
Microcontroladores-MicroprocesadoresMicrocontroladores-Microprocesadores
Microcontroladores-Microprocesadores
 
Microprocesadores - A.ppt
Microprocesadores - A.pptMicroprocesadores - A.ppt
Microprocesadores - A.ppt
 
MICROCONTROLADORES.ppt
MICROCONTROLADORES.pptMICROCONTROLADORES.ppt
MICROCONTROLADORES.ppt
 
2_INTROD.PDF
2_INTROD.PDF2_INTROD.PDF
2_INTROD.PDF
 
04 procesadores y microcontroladores
04 procesadores y microcontroladores04 procesadores y microcontroladores
04 procesadores y microcontroladores
 
135127015 microcontroladores-1-1-ppt
135127015 microcontroladores-1-1-ppt135127015 microcontroladores-1-1-ppt
135127015 microcontroladores-1-1-ppt
 
Resumen microcontroladores
Resumen microcontroladoresResumen microcontroladores
Resumen microcontroladores
 
Microcontroladores: Entendiendo los AVR de ATMEL
Microcontroladores: Entendiendo los AVR de ATMELMicrocontroladores: Entendiendo los AVR de ATMEL
Microcontroladores: Entendiendo los AVR de ATMEL
 
Sesion 1 atmega8
Sesion 1 atmega8Sesion 1 atmega8
Sesion 1 atmega8
 
Sesión 3 introduccion a microcontroladores
Sesión 3 introduccion a microcontroladoresSesión 3 introduccion a microcontroladores
Sesión 3 introduccion a microcontroladores
 

Más de SANTIAGO PABLO ALBERTO

Manual de teoría y practica electroneumática avanzada
Manual de teoría y practica electroneumática avanzadaManual de teoría y practica electroneumática avanzada
Manual de teoría y practica electroneumática avanzadaSANTIAGO PABLO ALBERTO
 
Programacion de PLC basado en Rslogix 500 por Roni Domínguez
Programacion de PLC basado en Rslogix 500 por Roni Domínguez Programacion de PLC basado en Rslogix 500 por Roni Domínguez
Programacion de PLC basado en Rslogix 500 por Roni Domínguez SANTIAGO PABLO ALBERTO
 
Programación de microcontroladores PIC en C con Fabio Pereira
Programación de microcontroladores PIC en  C con Fabio PereiraProgramación de microcontroladores PIC en  C con Fabio Pereira
Programación de microcontroladores PIC en C con Fabio PereiraSANTIAGO PABLO ALBERTO
 
Análisis y Diseño de Sistemas de Control Digital por Ricardo Fernandez del Bu...
Análisis y Diseño de Sistemas de Control Digital por Ricardo Fernandez del Bu...Análisis y Diseño de Sistemas de Control Digital por Ricardo Fernandez del Bu...
Análisis y Diseño de Sistemas de Control Digital por Ricardo Fernandez del Bu...SANTIAGO PABLO ALBERTO
 
Programación de autómatas PLC OMRON CJ/CP1
Programación de  autómatas PLC OMRON CJ/CP1Programación de  autómatas PLC OMRON CJ/CP1
Programación de autómatas PLC OMRON CJ/CP1SANTIAGO PABLO ALBERTO
 
Manual del sistema del controlador programable S7-200 SMART
Manual del sistema del controlador programable S7-200 SMARTManual del sistema del controlador programable S7-200 SMART
Manual del sistema del controlador programable S7-200 SMARTSANTIAGO PABLO ALBERTO
 
PLC: Buses industriales y de campo practicas de laboratorio por Jose Miguel R...
PLC: Buses industriales y de campo practicas de laboratorio por Jose Miguel R...PLC: Buses industriales y de campo practicas de laboratorio por Jose Miguel R...
PLC: Buses industriales y de campo practicas de laboratorio por Jose Miguel R...SANTIAGO PABLO ALBERTO
 
PLC y Electroneumática: Electricidad y Automatismo eléctrico por Luis Miguel...
PLC y Electroneumática: Electricidad y Automatismo eléctrico por  Luis Miguel...PLC y Electroneumática: Electricidad y Automatismo eléctrico por  Luis Miguel...
PLC y Electroneumática: Electricidad y Automatismo eléctrico por Luis Miguel...SANTIAGO PABLO ALBERTO
 
Electrónica: Diseño y desarrollo de circuitos impresos con Kicad por Miguel P...
Electrónica: Diseño y desarrollo de circuitos impresos con Kicad por Miguel P...Electrónica: Diseño y desarrollo de circuitos impresos con Kicad por Miguel P...
Electrónica: Diseño y desarrollo de circuitos impresos con Kicad por Miguel P...SANTIAGO PABLO ALBERTO
 
PLC: Diseño, construcción y control de un motor doble Dahlander(cuatro veloci...
PLC: Diseño, construcción y control de un motor doble Dahlander(cuatro veloci...PLC: Diseño, construcción y control de un motor doble Dahlander(cuatro veloci...
PLC: Diseño, construcción y control de un motor doble Dahlander(cuatro veloci...SANTIAGO PABLO ALBERTO
 
Electrónica digital: Introducción a la Lógica Digital - Teoría, Problemas y ...
Electrónica digital:  Introducción a la Lógica Digital - Teoría, Problemas y ...Electrónica digital:  Introducción a la Lógica Digital - Teoría, Problemas y ...
Electrónica digital: Introducción a la Lógica Digital - Teoría, Problemas y ...SANTIAGO PABLO ALBERTO
 

Más de SANTIAGO PABLO ALBERTO (20)

secuencia electroneumática parte 1
secuencia electroneumática parte 1secuencia electroneumática parte 1
secuencia electroneumática parte 1
 
secuencia electroneumática parte 2
secuencia electroneumática parte 2secuencia electroneumática parte 2
secuencia electroneumática parte 2
 
Manual de teoría y practica electroneumática avanzada
Manual de teoría y practica electroneumática avanzadaManual de teoría y practica electroneumática avanzada
Manual de teoría y practica electroneumática avanzada
 
Programacion de PLC basado en Rslogix 500 por Roni Domínguez
Programacion de PLC basado en Rslogix 500 por Roni Domínguez Programacion de PLC basado en Rslogix 500 por Roni Domínguez
Programacion de PLC basado en Rslogix 500 por Roni Domínguez
 
Programación de microcontroladores PIC en C con Fabio Pereira
Programación de microcontroladores PIC en  C con Fabio PereiraProgramación de microcontroladores PIC en  C con Fabio Pereira
Programación de microcontroladores PIC en C con Fabio Pereira
 
Análisis y Diseño de Sistemas de Control Digital por Ricardo Fernandez del Bu...
Análisis y Diseño de Sistemas de Control Digital por Ricardo Fernandez del Bu...Análisis y Diseño de Sistemas de Control Digital por Ricardo Fernandez del Bu...
Análisis y Diseño de Sistemas de Control Digital por Ricardo Fernandez del Bu...
 
Arduino: Arduino de cero a experto
Arduino: Arduino de cero a expertoArduino: Arduino de cero a experto
Arduino: Arduino de cero a experto
 
Fisica I
Fisica IFisica I
Fisica I
 
Quimica.pdf
Quimica.pdfQuimica.pdf
Quimica.pdf
 
Manual básico PLC OMRON
Manual básico PLC OMRON Manual básico PLC OMRON
Manual básico PLC OMRON
 
Programación de autómatas PLC OMRON CJ/CP1
Programación de  autómatas PLC OMRON CJ/CP1Programación de  autómatas PLC OMRON CJ/CP1
Programación de autómatas PLC OMRON CJ/CP1
 
Manual del sistema del controlador programable S7-200 SMART
Manual del sistema del controlador programable S7-200 SMARTManual del sistema del controlador programable S7-200 SMART
Manual del sistema del controlador programable S7-200 SMART
 
Catálogo de PLC S7-200 SMART
Catálogo de PLC S7-200 SMART Catálogo de PLC S7-200 SMART
Catálogo de PLC S7-200 SMART
 
PLC: Automatismos industriales
PLC: Automatismos industrialesPLC: Automatismos industriales
PLC: Automatismos industriales
 
PLC: Buses industriales y de campo practicas de laboratorio por Jose Miguel R...
PLC: Buses industriales y de campo practicas de laboratorio por Jose Miguel R...PLC: Buses industriales y de campo practicas de laboratorio por Jose Miguel R...
PLC: Buses industriales y de campo practicas de laboratorio por Jose Miguel R...
 
PLC y Electroneumática: Electricidad y Automatismo eléctrico por Luis Miguel...
PLC y Electroneumática: Electricidad y Automatismo eléctrico por  Luis Miguel...PLC y Electroneumática: Electricidad y Automatismo eléctrico por  Luis Miguel...
PLC y Electroneumática: Electricidad y Automatismo eléctrico por Luis Miguel...
 
Electrónica: Diseño y desarrollo de circuitos impresos con Kicad por Miguel P...
Electrónica: Diseño y desarrollo de circuitos impresos con Kicad por Miguel P...Electrónica: Diseño y desarrollo de circuitos impresos con Kicad por Miguel P...
Electrónica: Diseño y desarrollo de circuitos impresos con Kicad por Miguel P...
 
PLC: Diseño, construcción y control de un motor doble Dahlander(cuatro veloci...
PLC: Diseño, construcción y control de un motor doble Dahlander(cuatro veloci...PLC: Diseño, construcción y control de un motor doble Dahlander(cuatro veloci...
PLC: Diseño, construcción y control de un motor doble Dahlander(cuatro veloci...
 
PLC: Motor Dahlander
PLC: Motor DahlanderPLC: Motor Dahlander
PLC: Motor Dahlander
 
Electrónica digital: Introducción a la Lógica Digital - Teoría, Problemas y ...
Electrónica digital:  Introducción a la Lógica Digital - Teoría, Problemas y ...Electrónica digital:  Introducción a la Lógica Digital - Teoría, Problemas y ...
Electrónica digital: Introducción a la Lógica Digital - Teoría, Problemas y ...
 

Último

TEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIAS
TEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIASTEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIAS
TEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIASfranzEmersonMAMANIOC
 
Manual_Identificación_Geoformas_140627.pdf
Manual_Identificación_Geoformas_140627.pdfManual_Identificación_Geoformas_140627.pdf
Manual_Identificación_Geoformas_140627.pdfedsonzav8
 
Tinciones simples en el laboratorio de microbiología
Tinciones simples en el laboratorio de microbiologíaTinciones simples en el laboratorio de microbiología
Tinciones simples en el laboratorio de microbiologíaAlexanderimanolLencr
 
ECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdfECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdffredyflores58
 
tema05 estabilidad en barras mecanicas.pdf
tema05 estabilidad en barras mecanicas.pdftema05 estabilidad en barras mecanicas.pdf
tema05 estabilidad en barras mecanicas.pdfvictoralejandroayala2
 
presentacion medidas de seguridad riesgo eléctrico
presentacion medidas de seguridad riesgo eléctricopresentacion medidas de seguridad riesgo eléctrico
presentacion medidas de seguridad riesgo eléctricoalexcala5
 
TAREA 8 CORREDOR INTEROCEÁNICO DEL PAÍS.pdf
TAREA 8 CORREDOR INTEROCEÁNICO DEL PAÍS.pdfTAREA 8 CORREDOR INTEROCEÁNICO DEL PAÍS.pdf
TAREA 8 CORREDOR INTEROCEÁNICO DEL PAÍS.pdfAntonioGonzalezIzqui
 
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.ppt
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.pptARBOL DE CAUSAS ANA INVESTIGACION DE ACC.ppt
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.pptMarianoSanchez70
 
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONALCHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONALKATHIAMILAGRITOSSANC
 
Sesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
Sesión 02 TIPOS DE VALORIZACIONES CURSO CersaSesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
Sesión 02 TIPOS DE VALORIZACIONES CURSO CersaXimenaFallaLecca1
 
COMPEDIOS ESTADISTICOS DE PERU EN EL 2023
COMPEDIOS ESTADISTICOS DE PERU EN EL 2023COMPEDIOS ESTADISTICOS DE PERU EN EL 2023
COMPEDIOS ESTADISTICOS DE PERU EN EL 2023RonaldoPaucarMontes
 
INTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICA
INTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICAINTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICA
INTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICAJOSLUISCALLATAENRIQU
 
01 MATERIALES AERONAUTICOS VARIOS clase 1.ppt
01 MATERIALES AERONAUTICOS VARIOS clase 1.ppt01 MATERIALES AERONAUTICOS VARIOS clase 1.ppt
01 MATERIALES AERONAUTICOS VARIOS clase 1.pptoscarvielma45
 
CLASe número 4 fotogrametria Y PARALAJE.pptx
CLASe número 4 fotogrametria Y PARALAJE.pptxCLASe número 4 fotogrametria Y PARALAJE.pptx
CLASe número 4 fotogrametria Y PARALAJE.pptxbingoscarlet
 
NTP- Determinación de Cloruros en suelos y agregados (1) (1).pptx
NTP- Determinación de Cloruros  en suelos y agregados (1) (1).pptxNTP- Determinación de Cloruros  en suelos y agregados (1) (1).pptx
NTP- Determinación de Cloruros en suelos y agregados (1) (1).pptxBRAYANJOSEPTSANJINEZ
 
04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf
04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf
04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdfCristhianZetaNima
 
Obras paralizadas en el sector construcción
Obras paralizadas en el sector construcciónObras paralizadas en el sector construcción
Obras paralizadas en el sector construcciónXimenaFallaLecca1
 
Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVIL
Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVILClase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVIL
Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVILProblemSolved
 
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdfReporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdfMikkaelNicolae
 
Presentación electricidad y magnetismo.pptx
Presentación electricidad y magnetismo.pptxPresentación electricidad y magnetismo.pptx
Presentación electricidad y magnetismo.pptxYajairaMartinez30
 

Último (20)

TEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIAS
TEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIASTEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIAS
TEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIAS
 
Manual_Identificación_Geoformas_140627.pdf
Manual_Identificación_Geoformas_140627.pdfManual_Identificación_Geoformas_140627.pdf
Manual_Identificación_Geoformas_140627.pdf
 
Tinciones simples en el laboratorio de microbiología
Tinciones simples en el laboratorio de microbiologíaTinciones simples en el laboratorio de microbiología
Tinciones simples en el laboratorio de microbiología
 
ECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdfECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdf
 
tema05 estabilidad en barras mecanicas.pdf
tema05 estabilidad en barras mecanicas.pdftema05 estabilidad en barras mecanicas.pdf
tema05 estabilidad en barras mecanicas.pdf
 
presentacion medidas de seguridad riesgo eléctrico
presentacion medidas de seguridad riesgo eléctricopresentacion medidas de seguridad riesgo eléctrico
presentacion medidas de seguridad riesgo eléctrico
 
TAREA 8 CORREDOR INTEROCEÁNICO DEL PAÍS.pdf
TAREA 8 CORREDOR INTEROCEÁNICO DEL PAÍS.pdfTAREA 8 CORREDOR INTEROCEÁNICO DEL PAÍS.pdf
TAREA 8 CORREDOR INTEROCEÁNICO DEL PAÍS.pdf
 
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.ppt
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.pptARBOL DE CAUSAS ANA INVESTIGACION DE ACC.ppt
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.ppt
 
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONALCHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
 
Sesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
Sesión 02 TIPOS DE VALORIZACIONES CURSO CersaSesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
Sesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
 
COMPEDIOS ESTADISTICOS DE PERU EN EL 2023
COMPEDIOS ESTADISTICOS DE PERU EN EL 2023COMPEDIOS ESTADISTICOS DE PERU EN EL 2023
COMPEDIOS ESTADISTICOS DE PERU EN EL 2023
 
INTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICA
INTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICAINTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICA
INTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICA
 
01 MATERIALES AERONAUTICOS VARIOS clase 1.ppt
01 MATERIALES AERONAUTICOS VARIOS clase 1.ppt01 MATERIALES AERONAUTICOS VARIOS clase 1.ppt
01 MATERIALES AERONAUTICOS VARIOS clase 1.ppt
 
CLASe número 4 fotogrametria Y PARALAJE.pptx
CLASe número 4 fotogrametria Y PARALAJE.pptxCLASe número 4 fotogrametria Y PARALAJE.pptx
CLASe número 4 fotogrametria Y PARALAJE.pptx
 
NTP- Determinación de Cloruros en suelos y agregados (1) (1).pptx
NTP- Determinación de Cloruros  en suelos y agregados (1) (1).pptxNTP- Determinación de Cloruros  en suelos y agregados (1) (1).pptx
NTP- Determinación de Cloruros en suelos y agregados (1) (1).pptx
 
04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf
04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf
04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf
 
Obras paralizadas en el sector construcción
Obras paralizadas en el sector construcciónObras paralizadas en el sector construcción
Obras paralizadas en el sector construcción
 
Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVIL
Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVILClase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVIL
Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVIL
 
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdfReporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdf
 
Presentación electricidad y magnetismo.pptx
Presentación electricidad y magnetismo.pptxPresentación electricidad y magnetismo.pptx
Presentación electricidad y magnetismo.pptx
 

Microcontroladores: Microcontroladores AVR

  • 1. UNIVERSIDAD AUTÓNOMA METROPOLITANA UNIDAD IZTAPALAPA DIVISIÓN DE CIENCIAS BÁSICAS E INGENIERÍA PROYECTO TERMINAL DE INGENIERÍA ELECTRÓNICA Evaluación de Microcontroladores Propuesta de Diseño de la tarjeta experimental UAMI-AVR ALUMNOS CHÁVEZ CALDERÓN ARMANDO PAREDES GARCÍA HORACIO LICENCIATURA EN INGENIERÍA ELECTRÓNICA ESPECIALIDAD COMUNICACIONES ASESOR DEL PROYECTO M. EN C. SUARÉZ FERNANDEZ AGUSTÍN PROFESOR INVESTIGADOR DEL ÁREA DE INGENIERÍA BIOMÉDICA MÉXICO D.F., JUNIO DE 2006.
  • 2. Proyecto terminal de ingeniería electrónica DEDICATORIA A Dios Por que sin Él nada sería posible. A mis padres Por su comprensión y apoyo financiero. A Fanny Por su ejemplo y apoyo. A mis compañeros, amigos y maestros Por 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 amigos Por las fiestas no convividas con ellos A todos ellos gracias Ing. Horacio Paredes García Diseño de la tarjeta experimental UAMI-AVR
  • 3. 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 MICROCONTROLADORES 1.1 Introducción 5 1.2 Arquitectura básica 6 1.3 Bloques internos del microcontrolador 8 1.4 Recursos especiales 11 1.5 El mercado de los microcontroladores 12 1.6 Herramientas para el desarrollo de aplicaciones 13 1.7 Desarrollo del software 14 Capitulo 2 ELECCIÓN DEL MICROCONTROLADOR 2.1 ¿Qué microcontrolador emplear? 16 2.2 Costos 16 2.3 Aplicación 16 2.3.1 Procesamiento de datos 16 2.3.2 Entrada / Salida 17 2.3.3 Consumo 17 2.3.4 Memoria 17 2.3.5 Ancho de palabra 17 2.3.6 Diseño 18 2.4 La familia de los PIC vs. La familia de los AVR cómo elección 18 Capitulo 3 COMPARATIVOS DE AMBOS MICROCONTROLADORES 3.1 Comparativos (Características Relevantes) 19 3.2 Conclusiones de la evaluación 21 3.3 Comentarios finales 24 Diseño de la tarjeta experimental UAMI-AVR
  • 4. Proyecto terminal de ingeniería electrónica Capitulo 4 DISEÑO DE LA TARJETA UAMI-AVR 4.1 Sección Fuente de Alimentación 26 4.2 Sección Comunicación Serial 27 4.3 Sección de Control 30 4.3.1 Algoritmo de programación serial 32 4.3.2 Características de la programación serial 35 4.4 Sección Selección de microcontrolador A y B 35 4.5 Sección Programador 40 4.6 Sección Banco de leds 40 Capitulo 5 ENTORNO DE PROGRAMACIÓN 5.1 ¿Cómo programar? 43 5.1.1 Hardware 43 5.1.2 Software (AVR Studio 4® y AVR Prog®) 43 Apéndice A Tarjeta UAMI-AVR v1.0 57 Microcontroladores soportados 57 Características 57 Apéndice B Guía rápida del ensamblador AVR® 58 Apéndice C Características eléctricas de la tarjeta UAMI-AVR 65 Apéndice D Programa de aplicación de la tarjeta UAMI-AVR 66 Referencias 81 Diseño de la tarjeta experimental UAMI-AVR
  • 5. 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. Objetivo Diseño de la tarjeta UAMI-AVR para los cursos de Sistemas Digitales de la UAM-Iztapalapa. Justificación Actualmente, 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
  • 6. Proyecto terminal de ingeniería electrónica 1 Introducció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
  • 7. 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
  • 8. 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
  • 9. 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
  • 10. 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
  • 11. 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. 1 Traducción coloquial para watchdog, por separado (watch: reloj, dog: perrro) Diseño de la tarjeta experimental UAMI-AVR
  • 12. 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
  • 13. Proyecto terminal de ingeniería electrónica Bus I2 C 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
  • 14. 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. 2 Complementary Metal Oxide Semiconductor Diseño de la tarjeta experimental UAMI-AVR
  • 15. 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
  • 16. 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
  • 17. Proyecto terminal de ingeniería electrónica 2 Elecció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
  • 18. 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 Consumo Algunos 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 palabra El 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
  • 19. 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
  • 20. Proyecto terminal de ingeniería electrónica 3 Comparativos 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
  • 21. 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
  • 22. 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 EEPROM 16C54 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 64bytes 16F84 RISC CMOS 68bytes 1Kb 64bytes 16F876 RISC CMOS 368bytes 8Kb 256bytes 16F877 RISC CMOS 368bytes 8Kb 256bytes Tabla 1 algunos microcontroladores PIC® caracterizados en memoria interna. AVR® ARQUITECTURA TECNOLOGIA SRAM FLASH EEPROM AT90S1200-12 RISC CMOS NO 1Kb 64bytes AT90S2313-10 RISC CMOS 128bytes 2Kb 128bytes AT90S4433 RISC CMOS 128bytes 4Kb 256bytes ATMEGA 48 RISC CMOS 512bytes 4Kb 256bytes ATMEGA 88 RISC CMOS 1Kb 8Kb 512bytes ATMEGA 168 RISC CMOS 1Kb 16Kb 512bytes ATMEGA 8515L RISC CMOS 512bytes 8Kb 512bytes ATMEGA 32 RISC CMOS 2Kb 32Kb 1024bytes Tabla 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
  • 23. 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 EEPROM 16C56A RISC CMOS 25bytes NO 1Kb(ROM) 16F84 RISC CMOS 68bytes 1Kb 64bytes AVR ARQUITECTURA TECNOLOGIA SRAM FLASH EEPROM AT90S2313-10 RISC CMOS 128bytes 2Kb 128bytes AT90S4433 RISC CMOS 128bytes 4Kb 256bytes Tabla 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 POT 16C54 12 2mA 0.6microA 15microA 16C55 20 2mA 0.6microA 15microA 16C56A 12 2mA 0.6microA 15microA 16C76 22 2mA 1microA 15microA 16C77 33 2mA 1microA 15microA 16F83 13 2mA 0.6microA 15microA 16F84 13 2mA 0.6microA 15microA 16F876 22 2mA 1microA 20microA 16F877 26 2mA 1microA 20microA Tabla 3 características de potencia y modo de baja potencia PIC®. AVR I/O POT. ACTIVO POT. INACTIVO BAJA POT AT90S1200-12 15 2mA 0.4mA <1microA AT90S2313-10 15 2.8mA 0.8mA <1microA AT90S4433 20 3.4mA 1.4mA <1microA ATMEGA 48 23 240microA NO 0.1microA ATMEGA 88 23 240microA ***** 0.1microA ATMEGA 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
  • 24. Proyecto terminal de ingeniería electrónica PIC INT's INSTR UART CA/D PINES FREC. OSC REGISTROS 16C54 NO 33 NO NO 18 20MHz 8x8bits 16C55 NO 33 NO NO 28 20MHz 8x8bits 16C56A NO 33 NO NO 18 20MHz 8x8bits 16C76 11 35 SI SI 28 20MHz ** 16C77 12 35 SI SI 40 20MHz ** 16F83 4 35 NO NO 18 10MHz 15X8 16F84 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 REGISTROS AT90S1200-12 4 89 NO NO 20 12MHz 32x8 BITS AT90S2313-10 10 118 SI NO 20 10MHz 32x8 BITS AT90S4433 13 118 SI SI 28 8MHz 32x8 BITS ATMEGA 48 1 131 SI SI 28 20MHz 32x8 BITS ATMEGA 88 1 131 SI SI 28 20MHz 32x8 BITS ATMEGA 168 2 131 SI SI 28 20MHz 32x8 BITS ATMEGA 8515L 16 130 SI NO 40 16MHz 32x8 BITS ATMEGA 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
  • 25. 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
  • 26. 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
  • 27. Proyecto terminal de ingeniería electrónica 4 Diseñ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
  • 28. 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: 486 15 7 . 1 9 y 886 15 7 . 1 15 30 i A 3 : es led de corriente la ; 7 . 1 LED = − = Ω = − = ∴ ≤ ≤ − = mA V V R mA V V R mA m i V V R LED LED LED IN LED Se toma un valor medio de 686Ω, para un rango apropiado de corriente ( mA m 19 i A 10 LED ≤ ≤ ), el valor comercial es de Ω = 680 LED R . 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
  • 29. 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
  • 30. 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
  • 31. 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
  • 32. 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
  • 33. 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
  • 34. 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
  • 35. 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
  • 36. 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 soportados AT90S1200 AT90S2313 ATtiny2313 ATMEGA16 ATMEGA32 ATMEGA8535 AT90S8535 SW2 pines 1 y 3 pines 4 y 6 LED D3 1 0 LED D4 0 1 Tabla 12. Sección selección de microcontrolador 1. 1 = ACTIVO 0 = INACTIVO Diseño de la tarjeta experimental UAMI-AVR
  • 37. Proyecto terminal de ingeniería electrónica HABILITACIÓN U4 SALIDAS U4 B1 B2 RESET1 RESET2 1 0 E 3er EDO 0 1 3er EDO E Tabla 13. Sección selección de microcontrolador 1. E = ENABLE (SEÑAL HABILITADA) HABILITACIÓN U5 ENTRADAS SALIDA CTRL SALIDAS DE SELECCION RESET1 B2 RESET2 B1 SCK MOSI MISO 1MISO 2MISO 1MOSI 2MOSI 1SCK 2SCK E 0 3er EDO 1 E E E E E E 3er EDO 3er EDO 3er EDO 3er EDO 1 E 0 E E E 3er 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. Pines ATMEGA16 ATMEGA32 ATMEGA8535 AT90S8535 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 Pines AT90S2313 AT90S1200 ATtiny2313 1 3 5 7 9 11 13 15 17 19 Pines del cable plano 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 Pines AT90S2313 AT90S1200 ATtiny2313 2 4 6 8 10 12 14 16 18 20 Pines ATMEGA16 ATMEGA32 ATMEGA8535 AT90S8535 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
  • 38. 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
  • 39. Proyecto terminal de ingeniería electrónica Figura 14. Selección de microcontrolador B. J6 XTAL2 XTAL1 J7 XTAL2 XTAL1 CRISTAL EXTERNO PROGRAMAR 1 1 2 2 CRISTAL EXTERNO PROGRAMAR 1 1 2 2 3 3 3 3 MICROS 1 MICROS 2 Tabla 16. Cristal externo. Diseño de la tarjeta experimental UAMI-AVR
  • 40. Proyecto terminal de ingeniería electrónica Figura 15. Sección Programador. Diseño de la tarjeta experimental UAMI-AVR
  • 41. 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
  • 42. 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: 0 5 . 3 = + + − BE B Bsat V R I V Sabemos que mín Bsat Bsat Csat mín Bsat I I I I β β = → = Y que la LED Csat I I ≅ , y una beta mínima típica es: 40 ≅ mín β Además mA ILED 30 3 ≤ ≤ Realizando el cálculo numérico obtenemos el valor requerido para la resistencia de base: Ω = = − = → = = ∴ 7467 375 . 0 8 . 2 375 . 0 7 . 0 5 . 3 375 . 0 40 15 mA V mA V V R mA mA I B Bsat 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: Ω = 2 8K RB • Ahora es necesario encontrar el valor de la resistencia de LED, para esto trazamos la malla desde VCC, RLED, VLED hasta tierra: • 0 5 = + + − LED LED Csat V R I V Entonces el cálculo numérico nos arroja el siguiente resultado: Ω = = − = 220 15 3 . 3 15 7 . 1 5 mA V mA V V RLED Diseño de la tarjeta experimental UAMI-AVR
  • 43. 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: Ω = 330 LED Rred Observar la figura 16b. Figura 16b. Sección banco de leds (salida). Diseño de la tarjeta experimental UAMI-AVR
  • 44. Proyecto terminal de ingeniería electrónica 5 ENTORNO 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
  • 45. 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
  • 46. 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
  • 47. 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
  • 48. 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 FF OUT 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 01 DEC TEMP ;entonces el contador crece en 1 SBIS PIND,0x02 ;si se presiona el SW7 se rota R1 a la derecha ROR TEMP ;entonces los leds muestran 1bit con desplazamiento a la DERECHA SBIS PIND,0x03 ;si se presiona el SW8 se rota R1 a la izquierda ROL TEMP ;entonces los leds muestran 1bit con desplazamiento a la IZQUIERDA SBIS PIND,0x04 ;si se presiona el SW9 se hace un NOT a R1 COM 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 LSB NEG 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 R1 SWAP TEMP ;entonces los leds se alternan en nibles RETRASO: DEC DELAY ;retraso1 BRNE RETRASO ;bifurca si R17 no es cero DEC DELAY2 ;retraso2 BRNE RETRASO ;bifurcación RJMP LOOP ;siempre repite LOOP Diseño de la tarjeta experimental UAMI-AVR
  • 49. 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
  • 50. 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 Corporation Creating 'E:Archivos de programaAtmelAVR ToolsWORKSD1d1.eep' Creating 'E:Archivos de programaAtmelAVR ToolsWORKSD1d1.hex' Creating 'E:Archivos de programaAtmelAVR ToolsWORKSD1d1.obj' Creating 'E:Archivos de programaAtmelAVR ToolsWORKSD1d1.map' Assembling 'E:Archivos de programaAtmelAVR ToolsWORKSD1D1.asm' Including 'e:Archivos de programaAtmelAVR ToolsAvrAssemblerAppnotesM16DEF.INC' Program memory usage: Code : 24 words Constants (dw/db): 0 words Unused : 0 words Total : 24 words Assembly complete with no errors. Deleting 'E:Archivos de programaAtmelAVR ToolsWORKSD1d1.eep' Figura 22. Compilando el archivo .asm. Diseño de la tarjeta experimental UAMI-AVR
  • 51. 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
  • 52. 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
  • 53. 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
  • 54. 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
  • 55. Proyecto terminal de ingeniería electrónica Figura 29. AVR Prog ©. Diseño de la tarjeta experimental UAMI-AVR
  • 56. 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
  • 57. 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
  • 58. Proyecto terminal de ingeniería electrónica Figura 33. Después de haber programado el microcontrolador. Diseño de la tarjeta experimental UAMI-AVR
  • 59. 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
  • 60. Proyecto terminal de ingeniería electrónica Apéndice B Guía rápida del Ensamblador AVR® Registros Los registros son posiciones especiales de almacenamiento, con 8 bits de capacidad. Un registro 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
  • 61. 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úmero cbr r14,45 ;Limpia los bits en el registro determinados por una máscara de bits cpi r13,6 ;Compara el contenido del registro con una constante sbci r9,7 ;Resta al registro el valor del contenido de la constante y del resultado ;actual del bit de carry sbr r12,89 ;Coloca a '1' los bits en el registro determinados por una máscara de ;bits ser r3 ;Coloca todos los bits del registro a 1 subi r15,9 ;Resta al registro el valor del contenido de la constante. Registros punteros Un 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ón ldi 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 fichero st X+,r1 ;Escribe en la dirección X, e incrementa el puntero a la siguiente dirección ld 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
  • 62. 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 comandos Tabla: .DW 134,12312 Puertos Los 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 binaria out 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
  • 63. Proyecto terminal de ingeniería electrónica Como ejemplos: .EQU bitCambiado = 5 sbi PortB, bitCambiado cbi PortB, bitCambiado Las dos instrucciones tienen una limitación, solamente afectan a puertos con una dirección inferior a 0x20. REGISTROS REELEVANTES DE LOS AVR Componente Nombre del puerto Registro/Puerto Acumulador SREG Registro de estado Pila SPL/SPH Puntero de pila SRAM externa, interrupción externa MCUCR Registro de Control General MCU Interrupción externa GIMSK GIFR Registro de mascara de interrupción Registro de banderas de interrupción Interrupción del Timer TIMSK TIFR Registro de mascara de interrupción del timer Registro de banderas de interrupción del timer Timer0 TCCR0 TCNT0 Registro de control Registro de cuenta Timer1 TCCR1A TCCR1B TCNT1 OCR1A OCR1B ICR1L/H Registro A de control Registro B de control Registro de cuenta Registro de comparación A Registro de comparación B Registro de captura de entrada EEPROM EEAR EEDR EECR Registro de direcciones Registro de datos Registro de control UART UDR USR UCR UBRR Registro de datos Registro de estado Registro de control Registro de programación de baudios Comparador analógico ACSR Registro de control y estado Puertos de I/O PORTx DDRx PINx Registro de salida del puerto Registro de dirección del puerto Registro de entrada del puerto RAM estática, SRAM La 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
  • 64. 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 = 0x0060 STS direccionMemoria, R1 SRAM como pila El 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, r16 ldi 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 subrutina ret ; 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
  • 65. Proyecto terminal de ingeniería electrónica La sección de la SRAM en el integrado (datos) .ESEG La sección EEPROM .ORG Para indicar que el segmento de código o datos comienza en una dirección distinta de la dada por defecto. Saltos La 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 r1 brne sigue inc r2 brne sigue inc r3 brne sigue inc r1 sigue: Como ejemplo de instrucciones de salto condicional: brge ; mayor o igual (con bit de signo) brlt ; menor que (con bit de signo) Macros Una macro permite la utilización repetida de secuencias de instrucciones. Por ejemplo: .MACRO Delay nop nop nop nop .ENDMACRO ; instrucciones Delay ; 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
  • 66. Proyecto terminal de ingeniería electrónica Saltos incondicionales Aparte 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 baja rcall siBitDistinto7 ;ejecutada solamente si el bit 7 está a 0 rcall 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 INTERRUPCIONES Con 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
  • 67. 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
  • 68. 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
  • 69. 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_reset sbi portb,resetpin .endm .macro clr_reset cbi portb,resetpin .endm .macro ddrd_init nop .endm .macro ddrb_init ldi temp1,(0xFF ^ (1<<MISO)) out ddrb,temp1 ; PB5 es entrada, el resto es salida .endm .macro ddrb_release ldi temp1,(1<<resetpin) out ddrb,temp1 ; PB4 (RESET) es salida, el resto es entrada .endm .macro pulse_sck sbi portb,SCK ldi temp2,6 ;valor para un cristal de 4MHz m0: dec temp2 brne m0 cbi portb,SCK ldi temp2,3 ;valor para cristal= 4MHz m1: dec temp2 brne m1 .endm ;fin de macros ;****************** ;* Constantes SPI * Diseño de la tarjeta experimental UAMI-AVR
  • 70. 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 * ;**************************** .CSEG rjmp RESET ; Usamos RESET ;Inicializa la UART u_init: ldi temp1,N ; establecer la velocidad en baudios out UBRR,temp1 ldi temp1,1<<TXEN|1<<RXEN ; inicializa UART para TX y RX out UCR,temp1 Diseño de la tarjeta experimental UAMI-AVR
  • 71. Proyecto terminal de ingeniería electrónica ret putc: sbis USR,UDRE ; prueba(test) para registro de Tx vacio rjmp putc ; Loop hasta que Tx sea vacio out UDR,u_data ; se envia el byte ret getc: sbis USR,RXC ; Espera hasta que el caracter ha sido recibido rjmp getc in u_data,UDR ; Se lee el byte de la UART ret delay: ldi temp2,0xff dl: dec temp2 brne dl dec temp1 brne delay ret ;*************************************************************************** ;* FUNCION ;* wrser ;* ;* DESCRIPCION ;* ;* Escribe y lee los datos a/o desde la tarjeta SPI ;*************************************************************************** rdser: clr s_data wrser: ldi temp1,8 ldi rd_s_data,0 wrs0: rol s_data brcc wrs1 sbi portb,MOSI rjmp wrs2 wrs1: cbi portb,MOSI wrs2: lsl rd_s_data sbic pinb,MISO ori rd_s_data,1 pulse_sck dec temp1 brne wrs0 mov s_data,rd_s_data ret ;*************************************************************************** ;* 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
  • 72. Proyecto terminal de ingeniería electrónica ddrd_init ; inicializa port D ddrb_init ; inicializa port B cbi portb,SCK ; limpiamos SCK set_reset ; ponemos RESET = 1 ldi temp1,0xff ; retardo (0xff); rcall delay clr_reset ; ponemos RESET = 0 ldi temp1,0xff ; retardo(0xff); rcall delay ldi s_data,0xac ; wrser(0xac) ;// SPI escribe (byte 1) rcall wrser ldi s_data,0x53 ; wrser(0x53) ;// SPI escribe (byte 2) rcall wrser ; // SPI establece Sincronizacion cpi device,0x20 ; if ( (device >= 0x20) && (device <= 0x7F) ) brlo s2 tst device brmi s2 s0b: ldi count,32 ; count = 32; cuenta igual a 32? s1: rcall rdser ; if (rdser == 0x53) // SPI lectura (byte 3) cpi s_data,0x53 breq s3 ; break; ldi s_data,0x00 ; wrser(0x00); // SPI escribe (byte 4) rcall wrser pulse_sck ; pulse SCK ldi s_data,0xac ;wrser(0xac) ;// SPI escribe (byte 1) rcall wrser ldi s_data,0x53 ;wrser(0x53) ;// SPI escribe (byte 2) rcall wrser dec count ;} while(--count); decrementamos la cuenta brne s1 rjmp s3 ; } ; else s2: ; { ldi s_data,0x00 ;wrser(0x00);// SPI escribe (byte 3) rcall wrser s3: ; } ldi s_data,0x00 ;wrser(0x00);// SPI escribe (byte 4) rcall wrser ldi temp1,0x10 ; pausa(0x10); rcall delay ret ;Muestra el ID ("AVR ISP") en la linea serial. show_id: ldi zl,low(ID*2) ;Z apunta a la cadena de identificacion ID ldi zh,high(ID*2) rcall msg_out ret RESET: ldi temp1,low(RAMEND) Diseño de la tarjeta experimental UAMI-AVR