Documentos de Académico
Documentos de Profesional
Documentos de Cultura
07)
Índice
1. Microprocesador 1
2. Microcontrolador 2
2.1. Partes de un microcontrolador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2.2. Clasificación de microcontroladores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.3. Instrucciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.4. Unidad de control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.5. Unidad de memoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
4. Ensamblador 15
4.1. Directivas al ensamblador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
4.2. Modos de direccionamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
4.3. Saltos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
4.4. Estructura de un programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
5. Arduino Uno 18
6. Interrupciones 20
6.1. Clasificación de interrupciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
6.2. Vectores de interrupción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
6.3. Ejecución de interrupciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
6.4. Interrupciones externas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
8. Temporizadores/Timers 26
8.1. Diagrama en bloques de timer de 8 bits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
8.2. Registros del timer0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
8.3. Modos de operación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
8.4. Watchdog timer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
9. Comunicación 33
9.1. Clasificación de comunicaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
9.2. Interfases para la comunicación serial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
9.2.1. Comunicación serial por USART . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
9.2.2. Comunicación serial por SPI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
9.2.3. Comunicación serial por IIC-TWI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
10.Modos Sleep 39
10.1. Ahorro de energı́a apagando recursos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
11.Fuse Bytes 40
11.1. Fusibles de alto byte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
11.2. Fusibles de bajo byte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
1
12.Motores 42
12.1. PWM en motores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
1. Microprocesador
El microprocesador es un circuito integrado que contiene la unidad central de proceso (CPU), también
llamada procesador de un computador. Se le conecta la memoria y módulos de E/S para configurar un
computador implementado por varios circuitos integrados.
Es un sistema abierto (configuración variable) con el que puede construirse un computador con las carac-
terı́sticas que se desee, acoplándole los módulos necesarios.
Costo elevado
1
Facultad de Ingenierı́a, UBA Laboratorio de Microprocesadores (86.07)
2. Microcontrolador
El microcontrolador es un sistema cerrado. Todas las partes están contenidas en su interior y solo salen al
exterior las lineas que gobiernan los periféricos.
Se puede definir a un microcontrolador como un computador completo en un chip.
ALU (Unidad Aritmética y Lógica): Conjunto de circuitos digitales que realizan las opera-
ciones tanto lógicas como aritméticas. Sólo realiza operaciones, no toma decisiones. Tiene
un mecanismo de control que le indica que operación debe realizar.
Unidad de Control: Es la encargada de generar las señales correctas para realizar las
operaciones deseadas por el usuario.
• Tiene la lógica necesaria para la decodificación.
• Ejecuta las instrucciones, el control de los registros.
• Controla la ALU, los buses.
• Determina prestaciones del procesador.
• Agrupa componentes tales como la unidad de decodificación, unidad de ejecución,
controladores de buses, controladores de interrupción, pipelines.
Registros Guardan transitoriamente información (pueden ser valores o direcciones de memoria) y accede
a valores usados frecuentemente. Los registros pueden ser de 8/16/32/64-bits. Es una memoria
de alta velocidad y poca capacidad. Los tipos de registros existentes son:
MAR: Buffer que contiene la dirección de entrada a la memoria.
MBR: Buffer que contiene los datos hallados en la dirección de memoria.
De datos (R0 , ..., R31 )
De instrucciones (IR): Se encarga de decodificar las instrucciones.
SREG (Estado de los registros).
Contador del Programa (PC): Señala la dirección de la próxima instrucción a ser ejecu-
tada.
2
Facultad de Ingenierı́a, UBA Laboratorio de Microprocesadores (86.07)
Buses Grupo de conductores que permite llevar la información entre los distintos bloques de la compu-
tadora digital. Los buses de dirección y datos determinan la capacidad del CPU.
Bus de direcciones: Cada dispositivo (memoria o I/O) tiene que tener asignada una di-
rección de memoria única. El bus de direcciones accede a dichos valores (binario). Cuanto
mayor sea el número, mas dispositivos externos se podrán conectar a la CPU. Es decir,
el número de buses determina el número de locaciones, que se calcula como 2n , con n
el número de lı́neas. Se llaman byte addressable a que cada locación tiene un máximo
de 1 byte. Es un bus unidireccional, es decir, la CPU los usa únicamente para enviar
direcciones.
Bus de control: Transporta todas las señales de control requeridas para controlar el fun-
cionamiento de la transferencia de datos. Se usan para dar la señal de lectura o escritura,
que indica si la CPU esta pidiendo o enviando información.
Bus de datos: Se usa para obtener/mandar datos a una dirección dada fuera de la CPU,
es por esto que, cuanto mayor número de buses de este tipo, mejor el CPU. Suele variar
entre 8 y 64 bits. Son buses bidireccionales, ya que se usan tanto para enviar como para
recibir información. Transfiere datos reales.
Bus interno: Mueve datos entre los componentes internos del microprocesador.
Bus externo: Se utiliza para comunicar el micro y otras partes, como periféricos y memoria.
Periféricos Los posibles periféricos son: Puertos de E/S, Temporizadores, Conversor A/D, Módulo PWM,
Memoria EEPROM, Puertos Serie (USART), Puerto Serie CAN, Reloj interno y externo.
Clock Las operaciones del microprocesador son sincronizadas por un oscilador. Un ciclo de instrucción
consiste de uno o mas ciclos de maquina, y cada ciclo de maquina puede variar desde 1 a 12
pulsos de clock.
El tamaño de palabra
La clasificación se da según el tamaño del bus de datos. Puede ser de 4bits, 8bits, 16bits o 32bits. El
tamaño se elige según la aplicación que se le quiera dar.
3
Facultad de Ingenierı́a, UBA Laboratorio de Microprocesadores (86.07)
Harvard Tiene memorias separadas para las instrucciones y los datos. Cada una de ellas cuenta
con un bus independiente. La ventaja es que tiene acceso en paralelo, es decir que, cuando
la instrucción actual esta utilizando el bus de datos, la siguiente instrucción esta siendo
leı́da. Por lo que, una vez que se termina con una instrucción, en el CPU ya se encuentra
disponible la siguiente.
4
Facultad de Ingenierı́a, UBA Laboratorio de Microprocesadores (86.07)
*La segmentación o pipelining es un método por el cual se consigue aumentar el rendimiento de algunos
sistemas electrónicos digitales. Se usa principalmente en los microprocesadores. La segmentación consiste en
descomponer la ejecución de cada instrucción en varias etapas para poder empezar a procesar una instrucción
diferente en cada una de ellas y trabajar con varias a la vez.
5
Facultad de Ingenierı́a, UBA Laboratorio de Microprocesadores (86.07)
2.3. Instrucciones
Elementos del lenguaje que se traducen a código máquina Cada instrucción tiene su opcode y sus operan-
dos. El procesador ejecuta las instrucciones para determinar el comportamiento de un sistema.
La secuencia de acciones del ciclo de instrucción se puede resumir en:
2. La CPU genera una señal de control, para habilitar la lectura de memoria de código.
3. Una instrucción se lee de la memoria de código y se coloca en el bus de datos.
4. La instrucción se toma del bus de datos y se coloca en el IR.
5. El PC es preparado para la siguiente instrucción.
Del paso 1 al 5 del ciclo de instrucción se conocen como subciclo de búsqueda o captura (fetch). El ciclo
de búsqueda procesa la instrucción a partir de la palabra de instrucción, que contiene el código de operación
y el operando. Los pasos 6 y 7 forman el subciclo de decodificación y ejecución (decode-execute).
6
Facultad de Ingenierı́a, UBA Laboratorio de Microprocesadores (86.07)
Lógica microprogramada: Utiliza una memoria de control que almacena las micro-operaciones ne-
cesarias para ejecutar cada una de las instrucciones. cada una de las micro-rutinas que se ejecuta
al ejecutarse una instrucción requiere de un ciclo de CPU para ejecutarse, están almacenadas en la
memoria ROM.
• Permite crear infinitas instrucciones complejas que puedan ser descompuestas en las microinstruc-
ciones básicas.
• Cuando se necesitan nuevas instrucciones no hay que modificar la parte fı́sica de un CPU sólo
hay que programar la instrucción con sus equivalentes microinstrucciones.
• En el control cableado cada nueva instrucción requiere ser agregada fı́sicamente en el hardware.
RAM La memoria RAM es una memoria volátil, ya que al cortar la alimentación, los datos
se pierden. Es una memoria de lectura y escritura. Existen tres tipos de RAM distintos:
SRAM (estática), NV-RAM (no volatil), DRAM (dinámica).
Mientras que las SRAM usan alguna realimentación para mantener el dato y son mas
rápidas y fáciles de usar, las DRAM usan carga almacenada para mantener el dato y
requieren menos área por bit.
EEPROM Memoria no volátil para mantener datos después de un reset. Se puede grabar desde
el programa del microcontrolador, usualmente, constantes de programa. Las EEPROMs
tienen un número limitado de lecturas/escrituras, tener en cuenta a la hora de usarla. Esta
memoria solo puede leerse byte a byte y su uso puede se un poco incómodo. También es
algo más lenta que la SRAM. La vida útil de la EEPROM es de unos 100.000 ciclos de
escritura
FLASH Memoria de programa. Usualmente tiene una capacidad que va desde 1 Kb a 4 Mb (contro-
ladores de familias grandes). En esta se guarda el programa ya compilado. En la memoria
flash también se almacena del bootloader. Se puede ejecutar un programa desde la memo-
ria flash, pero no es posible modificar los datos, sino que es necesario copiar los datos en
la SRAM para modificarlos.
7
Facultad de Ingenierı́a, UBA Laboratorio de Microprocesadores (86.07)
8
Facultad de Ingenierı́a, UBA Laboratorio de Microprocesadores (86.07)
Cuando el AVR se enciendo el SP contiene el valor 0 (dirección de R0), entonces se debe inicializar
al principio del programa, y por la forma de almacenar información, es conveniente inicializarlo en la
parte más alta de la memoria. En los AVR la última dirección de memoria tiene un nombre asignado
RAMEND.
A los 160 registros de E/S adicionales se accede utilizando las instrucciones LD-LDS y ST-STS.
9
Facultad de Ingenierı́a, UBA Laboratorio de Microprocesadores (86.07)
EECR (registro de control): Controla las operaciones de lectura o escritura y contiene los estados de
la operación actual.
• EERE (Habilitador de lectura de la EEPROM): Al poner en alto este bit se inicia con un ciclo
de lectura, para lo cual solo es necesario que no haya una escritura en proceso. La lectura es
inmediata.
• EEWE (Habilitador de escritura en la EEPROM): Al poner en alto este bit se inicia con un ciclo
de escritura, siempre que el bit EEMWE haya sido puesto en alto en los 4 ciclos de reloj anterior.
• EEMWE (Habilitador maestro para escritura en la EEPROM): Es parte de un esquema de segu-
ridad y protección del contenido de la EEPROM, al poner en alto a este bit se cuenta con 4 ciclos
de reloj dentro de los cuales se puede iniciar con un ciclo de escritura. Pasados estos 4 ciclos el bit
EEMWE es puesto automáticamente en un nivel bajo y ya no es posible escribir en la EEPROM.
• EERIE (Habilitador de interrupcion por fin de escritura en EEPROM): Si el bit EERIE está en
alto, se genera una interrupción cuando culmina una escritura en la EEPROM, siempre que el
habilita global de interrupciones (bit I de SREG) también esté puesto en alto.
10
Facultad de Ingenierı́a, UBA Laboratorio de Microprocesadores (86.07)
3.4. Puertos
Registros asociados a puertos de E/S
Registro DDRx: El registro DDRx configura la dirección. Escribir un uno a un bit de este registro,
configura la Terminal como una salida; al escribir un cero, se le convierte en entrada.
Registro PINx: Lee el estado de PORTx, independientemente del estado de DDRx. Básicamente
sirve para leer el estado de la Terminal del puerto cuando este se ha configurado como entrada.
Registro PORTx: Si la Terminal está configurada como salida, escribir un uno o un cero en el bit
correspondiente de este registro, ocasiona que la salida en esta Terminal sea uno o cero.
Si la Terminal está configurada como entrada, escribir un uno en el bit correspondiente de este re-
gistro (PORTxn), habilita el resistor de pull-up. Escribir un cero, estando configurado como entrada,
deshabilita el resistor de pull-up.
El diodo inferior sirve de protección. Si el valor de tensión aplicado en el pin es inferior a el valor
mı́nimo tolerable (muy por debajo de GND) el diodo entra en conducción. Esto sucede mientras que
la corriente no sobrepase del orden de los micro Amperios.
El diodo superior también sirve de protección. Si el valor de tensión aplicado en el pin es superior a el
valor máximo tolerable (muy por encima de VCC ) el diodo entra en conducción. Esto sucede mientras
que la corriente no sobrepase del orden de los micro Amperios.
Cpin equivale a la capacitancia asociada a los dispositivos electrónicos conectados internamente al pin.
2. Si se esta en uso normal (señal de SLEEP desactivada), el Smith trigger mantiene estable el valor en
su salida si hay pequeñas variaciones en su entrada.
3. Los dos flip-flops en cadena (bloque de sincronizador) sirven para que la señal a la salida de estos este
sincronizada con toda la lógica del microcontrolador independientemente de que halla cambiado en
forma asincrónica en el pin fı́sico.
4. RRx sirve para leer el valor que escrito en el registro PORTxn, mientras que RPx sirve para leer el
valor del pin fı́sico (PINxn).
11
Facultad de Ingenierı́a, UBA Laboratorio de Microprocesadores (86.07)
Tensiones y corrientes
Cuando actúan como salida, los pines pueden entregar tensiones de hasta VCC .
Cuando actúan como entrada pueden manejar de hasta 0,5V por encima de VCC .
Cada pin E/S pueden soportar picos de corrientes de hasta 40mA, pero en estado estable cada pin
del puerto puede suministrar o recibir hasta 20mA cuando VCC = 5V . Cuando VCC = 3V la corriente
llega hasta 10mA.
La resistencia pull-up y pull-down permiten establecer voltajes de reposo para cuando el pulsador no
está presionado y asegurar una correcta lectura. La terminal puede presentar tres estados:
Estado Alto: Representa la presencia de voltaje llamado uno lógico.
Estado Bajo: Representa la ausencia de voltaje llamado cero lógicos.
Flotante: Representa una alta impedancia como si estuviera desconectado al resto del circuito.
Una entrada digital no conectada, o en alta impedancia, recogerá todo el ruido eléctrico ambiental, lo
que dará a errores debido a que ese ruido será interpretado como bruscas modificaciones de estados lógicos.
Además, producirá sobreconsumos y oscilaciones eléctricas indeseadas. Todo ello, producirá comportamientos
no esperados que se manifestarán en forma de averı́as aleatorias que, en ocasiones, pueden llegar a causar
daños irreversibles en la electrónica de la entrada digital.
12
Facultad de Ingenierı́a, UBA Laboratorio de Microprocesadores (86.07)
Power on El MCU es inicializado cuando el voltaje de alimentación está por debajo de una tensión
umbral de encendido VP OT (tı́pico 1, 3V ).
Una vez que el MCU se recupera de una condición de Reset espera un tiempo de estable-
cimiento (Tout – inicialmente es de 65ms) antes de recuperar al sistema, para garantizar
que los registros tienen su valor inicial. La duración de Tout depende de la frecuencia de
trabajo y del valor de los fusibles CKSEL y SUT
Externo El MCU es inicializado cuando un nivel bajo está presente en la terminal RESET por un
tiempo mayor que la longitud mı́nima del pulso (trst tı́pico 2, 5µs).
13
Facultad de Ingenierı́a, UBA Laboratorio de Microprocesadores (86.07)
Watchdog Se trata de un contador que cuando alcanza su valor final de cuenta genera un reset
interno. Es decir, el micro es inicializado cuando el watchdog timer esta habilitado y su
periodo termina. Este dispositivo se puede configurar mediante el registro WDTCSR.
Cuando el Watchdog Timer desborda genera un pulso con una duración de 1 ciclo de reloj.
Con este pulso se acciona el reset interno e inicia el tiempo de establecimiento.
Brow-out El micro es inicializado cuando el detector de reducción de voltaje esta habilitado y el
voltaje VCC de la fuente va por debajo del umbral establecido VBOT .
El Reset Interno se genera cuando VCC cae por debajo del lı́mite inferior de un voltaje
de umbral (VBOT − ), el tiempo de establecimiento inicia cuando VCC alcanza al lı́mite
superior del voltaje de umbral (VBOT + ). La señal de Reset Interno concluye al terminar
el tiempo deestablecimiento. La inicialización por reducción de voltaje se habilita con los
fusibles.
JTAG El MCU es inicializado tan pronto como exista un 1 lógico en el registro de Reset del
Sistema JTAG (no disponible en Atmega328p).
Para cualquiera de los casos, en el registro MCUSR se registra la condición de reset, poniendo al bit
correspondiente en alto.
14
Facultad de Ingenierı́a, UBA Laboratorio de Microprocesadores (86.07)
4. Ensamblador
La tarea fundamental de un ensamblador es traducir un programa en lenguaje assembly (.asm) al código
correspondiente en lenguaje máquina (.obj).
1. Escanea el programa y encuentra todas las etiquetas, calcula sus correspondientes direcciones. En base
a esto genera una tabla de sı́mbolos.
2. Convierte las instrucciones a lenguaje de máquina usando la información de la tabla de sı́mbolos.
Una tabla de sı́mbolos es una estructura en la cual se realizan varias operaciones tales como insertar,
borrar, buscar informacion sobre los simbolos que van apareciendo a lo largo del programa.
También existe el ensamblado de una pasada, en el que se lee una linea de programa fuente y se la traducen
directamente para producir una instrucción en lenguaje maquina. Estos ensambladores son sencillos, baratos
y ocupan poco espacio.
15
Facultad de Ingenierı́a, UBA Laboratorio de Microprocesadores (86.07)
Directiva MACRO
Una macro es un nombre que define un conjunto de instrucciones que sustituirán a la macro cuando el
nombre de ésta aparezca en un programa (proceso denominado expansión de macros) en el momento de
ensamblar el programa.
La Macro se expande en el lugar donde se usa. Una macro puede tomar hasta 10 parámetros que se
denominan @0 - @9. Los parámetros van separados por una coma. Cada Macro finaliza por una directiva
ENDMACRO. Por defecto, solo la llamada a la Macro se muestra en el archivo de lista y es generado por
el Ensamblador. Para incluir la expansión de macro en el archivo de lista, una directiva LISTMAC debe ser
usada.
Las Macros incrementan el tamaño del código cada vez que son invocadas, en cambio las subrutinas ocupan
un espacio fijo del código, no importa cuantas veces sean llamadas. Por otra parte, llamar a una subrutina
lleva 3/4 ciclos de clock, mientras que la instrucción RET lleva otros 3 ciclos de clock. Además las subrutinas
usan espacio del stack, mientras que las Macros no.
4.3. Saltos
Hay 2 clases de saltos:
Salto incondicional: Cuando la CPU ejecuta un salto incondicional, salta incondicionalmente (sin
comprobar ninguna condición) para la ubicación de destino.
16
Facultad de Ingenierı́a, UBA Laboratorio de Microprocesadores (86.07)
• La instrucción JMP cambia el contenido del PC y causa que la CPU ejecuta una instrucción
distinta a la siguiente en el código. Existen de tres tipos: JMP (4 bytes), RJMP (2 bytes) y IJMP
(2bytes, dirección en puntero Z).
• La instrucción CALL llama a la subrutina, pero a diferencia de JMP, el PC carga en el stack
la dirección de la siguiente instrucción a ser ejecutada en el programa. Al finalizar se retorna al
programa con la instrucción RET. Existen tres tipos: CALL (4 bytes), RCALL (2 bytes) y ICALL
(2bytes, dirección en puntero Z)
Salto condicional: Cuando la CPU ejecuta un salto condicional, se comprueba una condición, si la
condición es verdadera, entonces salta a la ubicación de destino; de lo contrario, se ejecuta la siguiente
instrucción. Ej: BRNE, BREQ.
17
Facultad de Ingenierı́a, UBA Laboratorio de Microprocesadores (86.07)
5. Arduino Uno
Arduino es una plataforma de desarrollo, cuyo núcleo es un Microcontrolador de la lı́nea Atmel. Esta
basado en Microcontroladores Atmega.
El chip ATmega16U2 en su placa Arduino actúa como un puente entre el puerto USB de la computadora y
el puerto serie del procesador principal. Las versiones anteriores de Uno y Mega2560 tenı́an un Atmega8U2.
JACK Una fuente de alimentación, por lo general, se debe conectar a esta toma, con el polo posi-
tivo en la parte central de la toma, y el valor debe oscilar entre 6V y 20V , el recomendado
es 7 − 12V , por lo que no es aconsejable utilizar tensiones inferiores a 7V o superiores a
12V .
Puerto USB Llega al bus de 5V, procedente del puerto USB de un ordenador o de cualquier fuente de
alimentación que se proporciona con un puerto USB como una baterı́a. Si la alimentación
proviene de un ordenador, hay una limitación de corriente de 500mA, si por el contrario
está utilizando una fuente de alimentación externa, la corriente máxima de salida está li-
mitada a 500mA por el fusible de protección auto-restaurable.
18
Facultad de Ingenierı́a, UBA Laboratorio de Microprocesadores (86.07)
Circuito Comparador
El Gate del transistor está conectado a la salida de un amplificador operacional LMV358
utilizado como comparador. La comparación es entre 3, 3V y Vin /2 (Vin es la tensión
conectada al JACK). Cuando V in/2 es más grande, esto producirá una salida alta del
comparador y el MOSFET de canal P estará apagado. Si no se aplica V in, el V + del
comparador es llevado a GN D y Vout es bajo, de modo que el transistor está encendido y
el USBVCC conectado a 5V .
Pin 5V Está conectado directamente a la salida del regulador y al bus de 5V que se usa para
alimentar cargas externas a Arduino como los sensores. En el caso de no aplicar tensiones al
puerto USB o al jack, la toma de 5V se puede utilizar para alimentar Arduino directamente,
si es que tiene una fuente externa estabilizada de 5V .
Se tiene que tener en cuenta que, en general, a los reguladores no les gustan los voltajes
que se aplica a su salida, pero en este caso particular, esta situación resulta ocurrir incluso
cuando la alimentación de Arduino se hace desde el puerto USB, por lo tanto, se puede
suponer que no es un gran problema. En este caso no hay ninguna forma de protección,
ya que tanto el diodo y el fusible se encuentran por encima de este bus y por lo tanto no
tienen ninguna función activa
Pin Vin Este conector tiene una doble función:
Entrada: Para alimentación externa, no está protegida por el diodo ante inversiones
de polaridad. La conexión va directamente a la entrada del regulador. Por supuesto
no se debe aplicar tensión al jack, de lo contrario podrı́an surgir conflictos peligrosos.
Salida: De esta se extrae el voltaje aplicado a la toma de JACK, restandole la caı́da
del diodo de protección. Podrı́a resultar útil para alimentar cargas pequeñas que
requieran una tensión superior a 5 V e igual a la aplicada a la toma JACK (siempre
teniendo en cuenta la caı́da de tensión del diodo).
19
Facultad de Ingenierı́a, UBA Laboratorio de Microprocesadores (86.07)
6. Interrupciones
El Polling es una técnica que consiste en que el mismo microcontrolador se encarga de monitorear el
estado o información de un evento (mecanismo de sondeo continuo). El principal inconveniente con esto es
que los eventos no pueden ser monitoreados de forma periódica, ya que el microcontrolador consume tiempo
en ejecutar diversas instrucciones que lo distrae de dicha actividad de sondeo, resultando en una técnica
ineficiente. La solución a esta problemática se ha logrado mediante la incorporación al microcontrolador de
un dispositivo controlador de interrupciones.
Las Interrupciones son un mecanismo mediante el cual el CPU puede ante la ocurrencia de un cierto evento,
suspender lo que está haciendo y pasar a atender una rutina de alta prioridad (ISR). Una vez finalizada, el
CPU vuelve a su actividad anterior.
Mientras que el polling, que es una técnica sincrónica y determinista, cuenta con problemas tales como:
Consumo de CPU.
Perdida de eventos.
Necesidad en el aumento de frecuencia de consulta para no perder eventos, incurriendo a que el CPU
no pueda realizar tareas entretanto.
No hay prioridades, de modo que todos los dispositivos son tratados por igual.
Es incompatible con las funciones de ahorro de energı́a del µC.
Fijas: Una vez que se ejecuta, se pasa a una locación de memoria fija.
Vectorizadas Cada fuente de interrupción posee una rutina de atención especializada propia (ISR)
que se ubica en algún lugar de la memoria del programa (sino todas serı́an atendidas por la misma
rutina).
20
Facultad de Ingenierı́a, UBA Laboratorio de Microprocesadores (86.07)
Esta tabla también establece la prioridad de cada interrupción, que en el caso del AVR, es fija. Cuanto
mas bajo es el número en la tabla, mas alta es la prioridad del evento.
1. Ocurre el evento y se activa el flag de interrupción (independientemente de si las interrupción está ha-
bilitada).
2. Se verifican la habilitación de interrupciones.
3. Se termina la instrucción que se está ejecutando y se guarda la dirección de retorno en el Stack.
4. Se carga en el PC, mediante el vector de interrupciones, la dirección de la ISR.
Como se ve, tanto RET como RETI son directivas para retornar de una subrutina. Es decir, una vez
terminada la subrutina se ejecutan estas instrucciones y el PC (program counter) obtiene del stack la dirección
de memoria de la siguiente instrucción a ser ejecutada. La diferencia consta en que RETI se utiliza para
21
Facultad de Ingenierı́a, UBA Laboratorio de Microprocesadores (86.07)
volver de las ISR (subrutinas de interrupción) ya que, además de salir de la rutina, activa el habilitador
global de interrupciones (activa el flag de interrupciones del SREG).
Deben tenerse en cuenta algunas consideraciones:
Existen instrucciones para encender (SEI) y apagar (CEI) el bit de habilitación global de interrupciones.
El usuario puede escribir por software un uno lógico en el bit I, en medio de una rutina de interrupción,
para habilitar las interrupciones anidadas.
Todas las interrupciones habilitadas pueden interrumpir la rutina de interrupción actual (Si I=1),
respetando su prioridad. La prioridad de las interrupciones solo se usa para establecer el orden en que
se atienden cuando hay mas de un flag activado
Cuando el AVR sale de una interrupción, siempre regresará al programa principal y ejecutará una o
más instrucciones antes de ejecutar cualquier interrupción pendiente.
Las interrupciones por flanco requieren una señal de reloj en los recursos I/O. Este recurso se encuentra
anulado en la mayoria de los modos de bajo consumo.
Las interrupciones por nivel bajo no requieren señal de reloj (son ası́ncronas). Esto es adecuado para
despertar al microcontrolador desde cualquier modo de bajo consumo.
En C, el registro de estado (SREG) no se almacena automáticamente al ingresar una rutina de inte-
rrupción, ni es restaurado al regresar de una rutina de interrupción. Esto debe ser manejado por el
software.
EICRA (External Interruprt Control Register A): Configura que ocurrencia de la señal externa va
a accionar la interrupción. Pueden ser por nivel lógico 0, por cualquier cambio en la entrada, por
transicion del flanco descendente o por transicion del flanco ascendente.
EIMSK (External Interrupt Mak Register): Contiene los bits que habilitan a las interrupciones INT0
e INT1.
EIFR (External Interrupt Flag Register): Contiene los bits de flag asociados a las interrupciones.
Cuando un evento activa la interrupción el bit correspondiente se activa, independientemente de si las
interrupciones globales o las mascaras están habilitadas. Este bit regresa a cero cuando se ejecuta la
rutina de interrupción o cuando se escribe un 1 lógico en el mismo.
Además de éstas, también existen interrupciones por cambios en los puertos. Estas se controlan mediante
los registros PCICR (Pin Change Interrupt Control Register), PCIFR (Pin Change Interrupt Flag Register)
y PCMSKx (Pin Change Mask).
22
Facultad de Ingenierı́a, UBA Laboratorio de Microprocesadores (86.07)
Inicialmente, todos los bits de SAR se establecen en 0. Luego, comenzando con el bit más significativo,
cada bit se establece en 1 secuencialmente. Si la salida DAC no excede el voltaje de la señal de entrada, el
bit se deja como 1. De lo contrario, se vuelve a establecer en 0. Es una especie de búsqueda binaria. Para
un ADC de n bits, se requieren n pasos.
23
Facultad de Ingenierı́a, UBA Laboratorio de Microprocesadores (86.07)
Resolución: El ADC cuenta con 10 bits de resolución (Resolución de 1024 bits) por lo que tiene un
step de 5mV para Vref = 5V y un step de 2, 5mV para Vref = 2, 56V .
Vref
Step =
2n − 1
Tiempo de conversión: Es el tiempo que toma el ADC en convertir la entrada analógica a un número
binario. Es determinado por la fuente de clock conectada al ADC y el método de conversión:
fCP U
fADC =
P reescaler
A partir de la frecuencia del ADC se puede obtener la frecuencia de muestreo donde la primera con-
versión tendrá 25 ciclos (por inicialización de circuiterı́a electrónica) y luego todos 13 ciclos:
fADC
fm =
13
Por Teorema de muestreo Nyquist, para que el muestreo sobre la señal sea correcto esta debe ser mayor
a que dos veces la frecuencia de la señal o ancho de banda de ésta (fm > 2fseñal ).
Valor Final: Para determinar el valor discreto obtenido por la conversión del ADC, hay que realizar
el cociente entre la tensión de entrada y el step size. Luego a este resultado pasar de base decimal a
binario para hallar el valor final:
Vin
Dout =
Step
• Bit 6 – ACME: Selección de Multiplexor como entrada negativa del comparador analógico.
• Bit 2:0 – ADTS2:0: Selección de fuente de auto-disparo.
24
Facultad de Ingenierı́a, UBA Laboratorio de Microprocesadores (86.07)
DIDR0: En estos bits se pone uno, para deshabilitar el buffer de la entrada digital del respectivo puerto,
lo que permite una reducción en el consumo de potencia.
25
Facultad de Ingenierı́a, UBA Laboratorio de Microprocesadores (86.07)
8. Temporizadores/Timers
Un Timer/Counter es un registro contador de n bits que se incrementa automáticamente en cada ciclo de
reloj o por eventos externos. El Atmega328p cuenta con tres timers: timer0 (de 8 bits), timer1 (de 16 bits)
y timer2 (de 8 bits).
Estos se caracterizan por contar con:
Prescaler reloj de entrada.
Estado del contador de lectura / escritura.
Generador de forma de onda utilizando un comparador (registro).
Generador de PWM (modulación de ancho de pulso).
Generación de interrupciones a intervalos de tiempo regulares.
Activado por eventos externos (captura).
Se pueden utilizar para:
Generador de forma de onda.
Programa de sincronización con intervalos de tiempo regulares.
Medición de intervalos de tiempo.
26
Facultad de Ingenierı́a, UBA Laboratorio de Microprocesadores (86.07)
TIMSK0 (Timer/Counter Interrupt Mask Register 0): Se deben activar las interrupciones. Los habili-
tadores individuales son:
27
Facultad de Ingenierı́a, UBA Laboratorio de Microprocesadores (86.07)
• Bits WGM0[2:0] (Waveform Generation Mode): Se usa para definir el modo de operación.
• Bits COM0A[1:0] y COM0B[1:0] (Compare Output Mode): Con estos bits se configura una res-
puesta automática en OC0x, ante eventos de comparación.
• Bits FOC0A y FOC0B: forzan u obligan un evento de comparación, si se configuró una respuesta
automática, ésta tambien va a realizarse. FOC0A se relaciona con el registro OCR0A y FOC0B
con el registro OCR0B.
28
Facultad de Ingenierı́a, UBA Laboratorio de Microprocesadores (86.07)
Modo normal
En este modo, la dirección de conteo es siempre ascendente (incremental) y no se realiza ningún borrado del
contador. El contador simplemente se sobrepasa cuando pasa su valor máximo (0xFF para el timer0) y luego
se reinicia desde abajo (0x00). En funcionamiento normal, el indicador de desbordamiento del temporizador
/ contador (TOV0) se configurará en el mismo ciclo de reloj del temporizador cuando el TCNT0 se ponga
a cero:
En el modo normal, se puede cargar una valor en el registro OCR0A/B y cada vez que se produzca una
coincidencia, el pin OC0A/B alterna y el temporizador continúa contando hasta que alcanza el valor máximo.
De esta manera se pueden generar señales de periódicas.
fCLK
fOCnx =
2.P reescaler · 256
29
Facultad de Ingenierı́a, UBA Laboratorio de Microprocesadores (86.07)
fCLK
fOCnx =
2 · P reescaler · (1 + OCR0A)
30
Facultad de Ingenierı́a, UBA Laboratorio de Microprocesadores (86.07)
El contador cuenta desde bottom (0x00) hasta top y luego se reinicia desde bottom. Top se define como
0xFF cuando WGM2:0 = 3, y OCR0A cuando WGM2:0 = 7. En el modo de salida de comparación no
inversora, la comparación de salida (OC0A/B) se borra en la comparación entre TCNT0 y OCR0A y se
establece en la parte inferior. Al invertir el modo de salida de comparación, la salida se establece en compa-
ración y se borra en la parte inferior. El indicador de desbordamiento del temporizador / contador (TOV0)
se establece cada vez que el contador llega a TOP. En el modo PWM rápido, la unidad de comparación
permite la generación de formas de onda PWM en los pines OC0A/B.
fCLK
fP W M =
P reescaler · 256
En este caso Top se define como 0xFF cuando WGM 2:0 = 1 y OCR0A cuando WGM 2:0 = 5. El contador
(TOV0) se establece cada vez que el contador llega a la parte inferior.
fCLK
fP W M =
P reescaler · 512
Lo que diferencia al modo PWM rápido con el modo fase correcta, es que si se toma el centro de los anchos
de pulso de la señal PWM timer0 AVR modo rápido y se hace un cambio en el ancho del pulso, el centro
del ancho de pulso se moverá, cambiará de lugar, se dice que se modifica la fase del ancho de pulso, o que la
fase no es correcta. Esto se corrige con el modo PWM de fase correcta.
31
Facultad de Ingenierı́a, UBA Laboratorio de Microprocesadores (86.07)
Cuando se activa una captura, el valor de 16 bits del contador (TCNT1) se escribe en el registro de
captura de entrada (ICR1). La bandera de captura de entrada (ICF1) se establece en el mismo reloj del
sistema cuando el valor TCNT1 se copia en el registro ICR1. Si está habilitado (ICIE1 = 1), el indicador de
captura de entrada genera una interrupción de captura de entrada.
Este modo se configura mediante los bits en el registro TCCR1B:
ICNC1 (Input Capture Noise Canceler): Activa un eliminador de ruido. La entrada se filtra por cuatro
muestras sucesivas.
ICES1 (Input Capture Edge Select): Selecciona el flanco de activación de la captura (0 para flanco de
bajada, 1 para flanco de subida).
32
Facultad de Ingenierı́a, UBA Laboratorio de Microprocesadores (86.07)
9. Comunicación
9.1. Clasificación de comunicaciones
La comunicación entre dispositivos puede ser:
Paralelo Transferencia de un byte de datos a la vez − > más rápido, más fácil.
Serie Transfiere un bit después de otro − > más barato, ideales para largas distancias a través de
la lı́nea telefónica.
El direccionamiento se clasifica en:
Simple: los datos se mueve en una sola dirección.
Half Duplex: los datos se mueve en dos direcciones, pero no al mismo tiempo.
Full Duplex: los datos se mueve en dos direcciones al mismo tiempo.
33
Facultad de Ingenierı́a, UBA Laboratorio de Microprocesadores (86.07)
Bit de paridad: Es un bit de seguridad que acompaña a cada dato, se ajusta automáticamente en
alto o bajo para complementar un número par de 1’s (paridad par) o un número impar de 1’s (paridad
impar). El emisor envı́a al bit de paridad después de enviar los bits de datos, el receptor lo calcula a
partir de los datos recibidos y compara el bit de paridad generado con el bit de paridad recibido, una
diferencia entre ellos indica que ocurrió un error en la transmisión. Por ello, es importante definir el
uso del bit de paridad y configurar si va a ser par o impar.
Número de bits de paro: Los bits de paro sirven para separar 2 datos consecutivos. En este caso,
se debe definir si se utiliza 1 ó 2 bits de paro.
Modo ası́ncrono de doble velocidad: En este modo de comunicación, los datos transferidos al doble
de la velocidad de transmisión se establecen mediante el registro UBBR y los bits U2X establecidos en
el registro UCSR0A.
Modo sı́ncrono maestro/esclavo: En este sistema, la transmisión y recepción de los datos con
respecto al pulso de reloj se establece en UMSEL = 1 en el registro UCSRC.
34
Facultad de Ingenierı́a, UBA Laboratorio de Microprocesadores (86.07)
La comunicación utiliza un formato de 9 bits, donde el 9º bit (transmitido en TXB8 o recibido en RXB8)
sirve para distinguir entre dos tipos de información, con 0 se refiere a una trama de datos y con 1 a una
trama de dirección.
La comunicación entre múltiples MCUs requiere el empleo del bit MPCM (bit 0 del registro UCSRA.
MPCM, Multiprocessor Comunication Mode). Este bit es utilizado por los esclavos, si está en alto, únicamente
pueden recibir tramas de dirección. Su puesta en bajo les permite recibir tramas de datos.
35
Facultad de Ingenierı́a, UBA Laboratorio de Microprocesadores (86.07)
MOSI (Master Output, Slave Input): Señal de salida del Maestro y entrada en el Esclavo. Tı́picamente
el envı́o de información inicia con el bit menos significativo.
MISO (Master Input, Slave Output): Señal de entrada al Maestro y salida en el Esclavo. Proporciona
el mecanismo para que el Esclavo pueda dar respuesta al Maestro.
SCK (Shift Clock): Es la señal de reloj para sincronizar la comunicación. Es generada por el Maestro.
SS (Slave Select): Esta señal es útil para el manejo de múltiples Esclavos, para ello, deben realizarse
los arreglos necesarios en el hardware, de manera que sólo se habilite un Esclavo en cada transmisión.
Esta señal generalmente es activa en un nivel bajo.
El envı́o y recepción se realizan en forma simultánea, mientras el Maestro envı́a datos por MOSI recibe
una respuesta del Esclavo por MISO. Sincronizando el envı́o y recepción con la señal de reloj, es decir, en
el mismo ciclo de reloj se trasmite y recibe un bit. Debido a esto, los registros de desplazamiento de 8 bits
pueden ser considerados como un registro de desplazamiento circular de 16 bits. Esto significa que después
de 8 pulsos de reloj, el Maestro y el Esclavo han intercambiado un dato de 8 bits.
36
Facultad de Ingenierı́a, UBA Laboratorio de Microprocesadores (86.07)
Modos de operación
Maestro: El dispositivo genera la señal de clock del sistema, se inicia y termina la transmisión.
Esclavo: Recibe la señal de clock y es solicitado por el maestro.
Ambos transmiten y reciben datos por lo que existen cuatro modos (Maestro trasmisor/ receptor o Esclavo
trasmisor/ receptor). Cada nodo (conexión del dispositivo al bus) puede tener distintos modos en distintos
intervalos de tiempo, pero sólo operar un modo a la vez.
Es un modelo de comunicación sincrónica. Cada bit transferido en la lı́nea SDA está sincronizado con
un pulso de la lı́nea SCL. La lı́nea SDA no puede cambiar su estado cuando SCL está en estado alto
(solo en SCL-low) salvo para las condiciones de START/ STOP.
El Maestro inicia y termina la trasmisión de datos, por lo tanto, es el Maestro quien genera las
condiciones de INICIO y PARO, éstas son señalizadas cambiando el nivel en la lı́nea SDA cuando SCL
está en alto. La lı́nea SDA se considera ocupada cuando se encuentra entre estas condiciones y ningún
otro maestro puede utilizarla.
Toda la data para transmitir debe ser empaquetada en 9 bits, en donde los primeros 8 serán puestos en
SDA para ser transmitidos y el último será el bit de ACK. Para indicar esto, el transmisor libera SDA para
que el receptor indique ACK (SDA=0) o bien NACK (SDA=1) en el valor del 9no bit.
37
Facultad de Ingenierı́a, UBA Laboratorio de Microprocesadores (86.07)
Paquete dirección: Consiste en 7 números de dirección, un bit de control y un bit de ACK. Son usados
para direccionar a un esclavo. El bit de control puede ser READ (R=1) o WRITE (W=0) para indicar
que el maestro le leerá la próxima trama del esclavo (bit set) o bien escribirá al esclavo en la próxima
trama (bit low).
Clock Streching: Si el esclavo no está en condiciones de procesar más datos puede ejercer un control de flujo
sobre la comunicación cambiando el estado de SCL a abajo luego de recibir/enviar datos para interrumpir
el control del maestro (interrumpe la comunicación).
Arbitration: El protocolo soporta múltiples maestros conectados, pero no una comunicación múltiple. Cada
maestro debe esperar que el bus se desocupe para establecer una comunicación. es posible que dos maestros
comiencen una transmisión simultánea, en este caso cada transmisor debe de comparar el nivel esperado por
SDA. Si este nivel no coincide para uno de los maestros, este pierde el privilegio y se convierte en esclavo.
38
Facultad de Ingenierı́a, UBA Laboratorio de Microprocesadores (86.07)
39
Facultad de Ingenierı́a, UBA Laboratorio de Microprocesadores (86.07)
• RC Externo: Generalmente usado para aplicaciones de bajo costo. Usando un resistor y un capa-
citor, la razón de carga/descarga puede ser usada como un reloj de entrada.
• RC Interno: Un muy buen oscilador. El chip tiene incorporado oscilador. Desafortunadamente
no es muy preciso. Es un oscilador de baja potencia que proporciona un reloj de 128 kHz. La
frecuencia es nominal a 3V y 25 ° C. La frecuencia de oscilación es muy sensible a la temperatura
externa.
40
Facultad de Ingenierı́a, UBA Laboratorio de Microprocesadores (86.07)
• Cristal Oscilador Externo: Conecta un cristal de cuarzo (abreviado como cristal o XTAL) a los
dos pines OSC y el código se ejecutará a la frecuencia entregada. Los pines XTAL1 y XTAL2 son
de entrada y salida, respectivamente, de un amplificador inversor que puede ser configurado para
usar como un oscilador en chip. Se puede utilizar cristal o un resonador cerámico. Este oscilador
de cristal es un oscilador de baja potencia, ofrece el menor consumo de energı́a puede ser más
susceptible al ruido en ambientes ruidosos.
• Resonador Externo: Un resonador es un poco más barato que un oscilador, pero tiene peores
tolerancias.
• Reloj Externo: En vez de un oscilador, puedes ocupar un generador de pulsos de reloj, el cual es
ocupado cuando se necesita que múltiples componentes corran con la misma frecuencia. La salida
del generador debe conectarse en la terminal XTAL1, dejando a la terminal XTAL2 sin conexión.
41
Facultad de Ingenierı́a, UBA Laboratorio de Microprocesadores (86.07)
12. Motores
Existen de dos tipos de controles: unidireccional (con interfase) y bidireccional (con puente H).
Motor paso a paso bipolar: Tienen Generalmente cuatro cables de salida. Se requiere un cambio
de dirección del flujo de corriente a través de las bobinas en la secuencia apropiada para realizar un
movimiento.
Motor paso a paso unipolar: Estos motores suelen tener 5 o 6 cables de salida dependiendo de su
conexión interna. Este tipo se caracteriza por ser más simple de controlar. Utilizan un cable común
a la fuente de alimentación y posteriormente se van colocando las otras lı́neas a tierra en un orden
especı́fico para generar cada paso, si tienen 6 cables es porque cada par de bobinas tienen un común
separado, si tiene 5 cables es porque las cuatro bobinas tienen un polo común. Un motor unipolar de
6 cables puede ser usado como un motor bipolar si se deja las lı́neas del común al aire.
42
Facultad de Ingenierı́a, UBA Laboratorio de Microprocesadores (86.07)
Gama baja Los MCU de 8 y 16 bits están dedicados fundamentalmente a tareas de control (cabinas
telefónicas, tarjetas inteligentes, algunos periféricos de computadoras, etc
Gama media Los dispositivos de 32 bits se orientan a tareas de control con cierto grado de procesa-
miento (sistemas embebidos automotrices, algunos dispositivos móviles, etc. También puede utilizarse
un microprocesador más memoria externa y periféricos
Gama alta En sistemas con procesamiento intensivo (videoconsolas, Smartphones etc.) lo más conve-
niente es emplear microprocesadores de 32 o 64 bits más memoria externa y circuiterı́a periférica
Referente a la tecnologı́a de fabricación, debe considerarse:
La frecuencia de operación es un factor importante a considerar, dado que los dispositivos pueden
operar desde kHz a GHz.
Consumo de energı́a algunos dispositivos cuentan con modos de ahorro de energı́a que les permiten un
consumo de algunos micro Watts.
Voltaje de alimentación además de operar con 5V , algunos MCU pueden trabajar con 3, 3V , 2, 5V o
1, 5V , este aspecto es fundamental si el sistema se alimentará con baterı́as
Otros criterios bajo consideración:
Costo: Hay microcontroladores desde 2 dólares hasta tarjetas de evaluación y desarrollo que cuestan
cientos de dólares.
43