Académique Documents
Professionnel Documents
Culture Documents
- 2 Timers/Contadores de 8 bits.
- 1 Timer/Contador de 16 bits.
- 6 Canales PWM.
- 1 Timer watchdog.
- Interrupciones.
En la Figura 3 podemos observar los puertos, y pinos de voltaje. En total hay 23 entradas/salidas
programables, para propósito general (GPIO). Estos pinos también pueden ser programados para funciones
alternas, como comunicación serial, ADC, I2C, etc. Los siguientes son los puertos y pinos principales del
microcontrolador:
VCC : Voltaje Digital.
GND : Tierra.
PORTB : Es un puerto bidireccional de 8 bits, con resistencias pull-up internas, seleccionables para cada pin.
- XTAL
- SPI
PORTC : Es un puerto bidireccional de 7 bits, con resistores pull-up internas, seleccionables para cada pin.
- I2C.
PORTD : Es un puerto bidireccional de 8 bits, con resistencias pull-up internas, seleccionables para cada pin.
Este microcontrolador usa una arquitectura Harvard, usando memorias y buses separados para programa y
datos. La CPU usa un pipeline (pipelining) de un nivel, es decir que mientras está ejecutando una instrucción,
la próxima instrucción está siendo buscada (pre-fetched) desde la memoria de programa. Gracias a esta
técnica de pipeline y buses separados, el microcontrolador puede ejecutar las instrucciones en un solo ciclo
de reloj.
Figura 4
El microcontrolador también posee un banco (file) de registros de propósito general de 32 x 8 bits, con
tiempos de acceso de un solo ciclo de reloj. Esto permite que las instrucciones aritméticas y lógicas (ALU), se
puedan realizar en un solo ciclo de reloj. En la Figura 5 se puede observar el banco de registros. Hay 6
registros que se pueden usar como 3 registros de direccionamiento indirecto a la memoria de programa,
habilitando eficiente cálculos de direcciones en la memoria de programa, muy utilizados en los programas C.
Figura 5
El microcontrolador ATmega328P tiene una memoria Flash 32 Kbytes reprogramable en el propio sistema o
circuito, para el almacenamiento del programa. Como todas las instrucciones AVR son de 16 o 32 bits, la
memoria Flash es organiza en 16K x 16. Para la seguridad del software, la memoria Flash de programa es
divida en 2 espacios:
El contador de programa ( PC ) es de 14 bits, así puede direccionar los 16K de localizaciones de la memoria
La memoria SRAM ( Static RAM ) es formada por 2303 localizaciones de memoria. En la parte más baja
están: el banco ( file ) de registros de propósito general, luego la memoria de entradas/salidas, luego, la
de datos es de 2048 bytes. La Figura 7 muestra el mapa de memoria para la SRAM. Esta memoria puede ser
- Direccionamiento indirecto.
Los 32 registros de propósito general, los 64 registros de entrada/salida, los 160 registros de entrada/salida
extendidos y SRAM interna de 2K, son todos accesibles a través de estos modos de direccionamiento.
El microcontrolador tiene una memoria EEPROM de 1 KBytes. Ella está organizada como un espacio de
memoria separado, la cual puede ser leída o escrita. La EEPROM permite 100.000 ciclos de escritura/borrado.
La Figura 8 ilustra los relojes ( clocks ) del microcontrolador y su distribución. No es necesario que todos los
relojes estén activos al tiempo. Para reducir consumo, los módulos de reloj que no están siendo usados,
El reloj de la CPU es llevado a partes del microcontrolador, concernientes al núcleo ( core ). Ejemplo de
estas partes son: Los 32 registros de propósito general, memoria de datos, etc. El reloj de entradas/salidas es
usado por módulos como los timers/contadores, SPI, USART, Interrupciones externas, etc.
Las fuentes de reloj para el microcontrolador pueden ser seleccionadas desde un cristal de baja o alta
Interrupciones es el mecanismo de hardware por el cual el microcontrolador se entera que hay un evento
urgente que atender. Para esto el microcontrolador deja el programa principal y atiende la interrupción, que es
una rutina de código para atender a un evento en especial. Por ejemplo, si hubo un cambio de estado en un
pin, o si llego un byte de dato en el puerto serie, o si se desbordo algún timer, o si se terminó la conversión en
el ADC, etc., todos estos son casos típicos o comunes de interrupción que se pueden habilitar en
microcontrolador. Las interrupciones externas se disparan por los pinos INT0 o INT1 y los pinos PCINT.
Podemos notar, que mismo que estos pinos sean configurados como salida, la interrupción será disparada.
Las interrupciones externas pueden ser disparadas por flanco de subida, o flanco de bajada o nivel bajo. Esta
necesario habilitar la interrupción con algún bit, en algún registro de control. Para notificar que se ha producido
un evento de interrupción, un bit (flag) se pone a '1'. Cuando la interrupción es atendida, este bit
Figura 9
PUERTOS DE ENTRADA/SALIDA.
Todos los puertos tienen la funcionalidad de lectura-modificación-escritura cuando usados como pinos de
entrada/salida. Esto significa que puede cambiar el valor de un bit sin modificar los otros, con las instrucciones
Set Bit (SBI) y Clear Bit (CBI). La Figura 10 muestra la descripción funcional de un pin de entrada/salida del
microcontrolador.
Figura 10
Cada pin de un puerto consiste de 3 bits. El DDxn en el registro DDRx selecciona la dirección de este pin. Si
DDxn es escrito a '1', el correspondiente pin será configurado como salida. Si DDxn es escrito a '0', el
configurado como salida, el pin del puerto es colocado a nivel alto. Si PORTnx es escrito a '0', cuando el pin
Si PORTnx es escrito a '1', cuando el pin es configurado como entrada, la resistencia pull-up es activada. Para
deshabilitar la resistencia pull-up, el PORTnx debe ser escrito a '0' o configurar el pin como salida.
unidades comparadoras de salida y soporte a PWM. Así, este módulo permite temporizar con precisión
- Generador de frecuencia.
continuamente esta verificando si el registro TCNT0 es igual a los registros OCR0A y OCR0B. Si TCNT0 es
igual a OCR0A o OCR0B, el comparador señala una igualdad, colocando el flag OCF0A o OCF0B. Si la
correspondiente interrupción esta habilitada, el flag generara una interrupción de comparación de salida. El
dirección del contador es siempre hacia arriba (incremento). Cuando el contador alcance el valor programado,
coloca a '1' el flag TOV1 de sobre flujo (overflow) y si habilitado, puede generar una interrupción. Este flag es
Figura 11
El timer 0 y el timer 2 son de 8 bits y sus características son muy similares. Ya el timer 1 es de 16 bits y tiene
la característica de captura en una de sus entradas. Esto es muy útil para medir el ancho de pulsos
La Interface Serial de Periféricos (SPI) permite transferencia de datos síncronas de alta velocidad, entre el
interconexión entre el Maestro y el esclavo es mostrada en la Figura 13. El sistema consiste de 2 registros de
desplazamiento y un generador de reloj (clock) maestro. El maestro inicializa la comunicación cuando lleva a
nivel bajo '0' el pin SS (Slave Selection) del esclavo, con el cual desea comunicarse. Maestro y esclavo
preparan sus datos a ser enviados en sus respectivos registros de desplazamiento y el maestro genera los
Maestro en la línea MISO (Master In - Slave Out). Después de cada paquete de datos transferido, el Maestro
El periférico SPI es de un solo buffer en el sentido de transmisión y con doble buffer en el sentido de
recepción. Esto significa que bytes a ser transmitidos, no pueden ser escritos al registro de datos del SPI,
antes que el ciclo de desplazamiento entero este completo. Cuando recibiendo datos, un carácter recibido
debe ser leído del registro de datos SPI, antes que el próximo dato haya sido completamente desplazado
adentro.
generador de reloj (clock), en el medio está el transmisor y en la parte baja está el receptor. Estos bloques son
separados por líneas punteadas o descontinúas en el diagrama en bloques. Los registros de control son
La generación de pulsos consiste de: lógica de sincronización para entradas de reloj externa, usadas para
operaciones con esclavos síncronos y para generar la velocidad de transmisión (baudios). El pin XCKn es
El transmisor consiste de: un único búfer de transmisión, registro de desplazamiento serial, un generador de
paridad y una lógica de control para manejar diferentes formatos de datos seriales (frames). El búfer de
escritura permite transferencia continua de datos, sin cualquier retardo entre frames.
El receptor es la parte más compleja del periférico USART, debido a su clock y unidad de recuperación de
datos. La unidad de recuperación es usada para la recepción asíncrona de datos. Además de la unidad de
desplazamiento y un búfer de recepción de 2 niveles (UDRn). El receptor soporta el mismo formato de frames
como el transmisor y puede detectar errores de datos (frames), sobre flujo y errores de paridad.
La Figura 15 muestra el protocolo TWI. El protocolo de la TWI (Two-Wire Serial Interface) permite
interconectar hasta 128 diferentes dispositivos, usando solamente un bus bidireccional de 2 líneas: SDA para
datos y SCL para el clock. El único hardware externo necesario para implementar el bus, es una única
resistencia para cada línea del bus TWI. Todos los dispositivos conectados al bus tienen individual dirección.
Figura 15
Cada bit de dato transferido sobre el bus, es acompañado de un pulso sobre la línea de clock. La única
excepción a esta regla, es para generar las condiciones de inicio (START) y de parada (STOP). El Maestro
inicia y termina una transmisión de datos. La transmisión es iniciada cuando el maestro saca una condición de
START sobre el bus y es terminada cuando el maestro saca una condición de STOP. Entre una condición de
START y STOP, el bus se considera ocupado y ningún otro maestro debe intentar controlar el bus.
Todos los paquetes de direcciones transmitidos sobre el bus TWI, tienen un ancho de 9 bit, consistiendo de 7
bits para la dirección del esclavo, 1 bit de control para lectura/escritura y 1 bit de reconocimiento
(acknowledge). Si el bit de lectura/escrita es colocado a '1' lógico, una operación de lectura seria ejecutada, si
el bit es colocado a '0' lógico, una operación de escritura seria entonces ejecutada. Cuando un dispositivo
esclavo reconoce que el esta siendo direccionado, el debe reconocer (ACK), llevando la línea SDA abajo (low)
en el noveno ciclo de SCK. Entonces el maestro puede transmitir una condición de STOP.
Todos los paquetes de datos tienen un ancho de 9 bits, consintiendo de 8 bits para el dato y un bit de
reconocimiento (ACK). Durante la transferencia de datos el maestro genera el clock y las condiciones de
Una transmisión básicamente consiste de una condición de START, la dirección del esclavo y si es lectura o
La Figura 16 muestra el diagrama en bloques del periférico TWI. Entre las principales características del
El microcontrolador posee un conversor análogo para digital de aproximación sucesiva de 10 bits. El ADC está
conectado a un multiplexor analógico de 6 canales, permitiendo hacer entradas de voltaje, construidas en los
pinos del puerto C (PORTC). El ADC contiene un circuito de muestreo y fijación (Sample and Hold)
asegurando que la entrada al ADC es mantenida en un nivel constante durante la conversión. La Figura 17
muestra el diagrama en bloques del ADC. El ADC tiene un pin de alimentación de voltaje separado llamado
Figura 17
El ADC convierte una entrada de voltaje analógico para un valor digital de 10 bits a través de aproximaciones
sucesivas. El valor mínimo es representado por GND y el valor máximo representa el voltaje sobre el pin
AREF. Opcionalmente, AVcc o un voltaje de referencia interno de 1.1 Voltios, pueden ser conectados al pin
AREF. El voltaje de referencia interno debe ser decuplado por un capacitor externo en el pin AREF para
El canal de entrada analógico es seleccionado, escribiendo a los bits MUX en el Registro de Selección del
Multiplexor ( ADMUX.MUX[0:3] ). Cualquiera de las entradas analógicas, como también GND y un voltaje de
referencia fijo, pueden ser seleccionados como entrada al ADC. El ADC genera un resultado de 10 bits, el cual
es representado en los registros de dato del ADC ( ADCH y ADCL ). Por defecto el resultado es ajustado a la
derecha, mas puede ser opcionalmente representado a la izquierda, colocando a '1' el bit de ajuste a la
izquierda de ADC ( ADMUX.ADLAR ). El ADC tiene su propia interrupción, el cual puede generarse cuando
Para inicializar una conversión se debe escribir a '0' el bit de reducción de consumo en el Registro de
Reducción de Consumo ( PRR.PRADC ) y escribir a '1' el bit de inicio de conversión ADC ubicado en el
Registro A de control y estado del ADC ( ADCSRA.ADSC ). El bit ADSC permanecerá alto, tanto tiempo como
la conversión este en progreso y será limpiado por el hardware, cuando la conversión este completa. Por
defecto, el circuito de aproximación sucesiva requiere una entrada de frecuencia de reloj entre 50 KHz y 200
- Resolución de 10 bits.
AC - COMPARADOR ANALOGICO.
El comparador analógico compara los valores de entrada sobre el pin positivo AIN0 y pin negativo AIN1.
Cuando el voltaje sobre el pin positivo AIN0 es más alto que el voltaje sobre el pin negativo AIN0, la salida el
comparador analógico ( ACO ) es colocado a '1' . Esta salida puede ser usada para disparar la función de
captura del timer/contador 1. Además, el comparador analógico puede disparar una interrupción separada. El
usuario puede escoger el disparo de la interrupción de salida del comparador cuando el bit ACO suba, baje o