Arduino LEONARDO

Esta placa podemos considerarla la sustituta natural del Arduino UNO. Tanto la placa que tenemos a la izquierda (modelo www.arduino.cc), como la que tenemos en la parte inferior (modelo de la recientemente absorbida www.arduino.org) son los dos modelos originales. Igualmente existen diferentes modelos fabricados por terceros que funcionan igual de bien a un precio algo mas reducido.

Tendríamos a grandes rasgos una placa que:
- Procesador ATmega32u4
- Funciona a 5V
- Procesador de 8 bits y tecnología AVR de Atmel
- Velocidad de reloj de 16Mhz

CARACTERÍSTICAS

Como se ha comentado, este modelo de Ardunio lleva el microcontrolador ATMega32u8 (datasheet). Dispone de 20 pines de entrada/salida digitales de los cuales 7 pueden usarse como salidas PWM (Pulse Width Modulation, modulación por anchura de pulso), 12 pines de entrada analógicas, funciona a una velocidad de reloj de 16Mhz, dispone de entrada de alimentación externa a través de un Jack de 5,5/2,1mm (positivo interior) o a través del conector USB, conexión para periféricos por puerto ICSP (OJO con este puerto y el conector ICSP, hay una diferencia importante respecto al UNO) y botón de reset en placa.

La comunicación con el ordenador se realiza a través del puerto USB y va directamente al ATmega32u4 y no un ATMega16U2 que usan otros modelos similares. Esto proporciona la posibilidad muy útil de usar esta placa como un teclado o un ratón conectada a un ordenador.

La alimentación de la placa es autoconmutable entre el jack y el conector USB. Ademas tenemos un polifusible que se encarga de supervisar los excesos de carga y si superan los limites corta la alimentación hasta que los niveles vuelvan a estar dentro del rango correcto. La tensión de alimentación deberá estar entre 6 y 20 voltios y un mínimo de 500mA. Recomiendan que el rango este entre 7 a 12 voltios para no sobrecalentar el regulador de tensión incorporado en la placa y así prolongar su vida útil.

ESPECIFICACIONES TÉCNICAS

Microcontrolador ATmega32u4
Voltaje de la placa 5V
Voltaje de entrada (recomendado) 7-12V
Voltaje de entrada (máximo) 6-20V
Pines entrada/salida Digitales 20 (7 de ellos PWM en salida)
Pines digitales PWM salida 7
Pines analógicos de entrada 12
Corriente max. pines I/O 40 mA
Corriente max. pin 3.3V 50 mA
Memoria Flash 32 KBytes (dentro del ATmega32u4), 4K ocupados por el bootloader
SRAM 2,5 KBytes (dentro del ATmega32u4)
EEPROM 1 KByte (dentro del ATmega32u4)
Velocidad de Reloj 16 Mhz
Led en placa Pin 13
Longitud 68.6 mm
Ancho 53.3 mm
Peso 20 gr

PROGRAMACIÓN

Para programar este modelo de Arduino tenemos dos opciones:
- Usar el puerto USB y descargar los programas hechos en el IDE de Arduino
- Usar el programador externo que descarga los programas al MCU a través del puerto ISP.

Hasta hace bien poco teníamos dos versiones del IDE, pero ya quedo solo una que podemos descargar de la pagina de www.arduino.cc. Los pasos para instalarlo los podemos encontrar aquí.

En la memoria del MCU ATmega32u4 tenemos el bootloader (4 Kbytes) que es el encargado, cada vez que encendemos la placa, se resetea o abrimos y cerramos en puerto serie a 1200 baudios, de monitorizar si tenemos algún programa para descargar del ordenador a la placa durante aproximadamente 8 segundos. Si es así lo carga en la memoria del Arduino y lo ejecuta. Si no hay programa para descargar pasa a la ejecución del programa que tuviera en la memoria previamente cargado.
Si necesitáramos este espacio de memoria o simplemente no quisiéramos usar el bootloader, podríamos borrarlo y programar directamente el MCU desde el puerto ISP conectando la placa Arduino al programador ISP y este al ordenador mediante un puerto USB. En este caso al encender o resetear la placa Arduino se ejecuta siempre el programa cargado en la memoria sin retardos ni esperas.
Igualmente si compramos un MCU nuevo sin el bootloader cargado, podríamos cargarlo mediante este programador. Podemos descargar todos los bootloader de todas las placas y de los adaptadores USB en la página www.arduino.cc.

DESCRIPCIÓN DEL PINEADO

La funcionalidad de cada pin es la siguiente:

IOREF - Este pin se usa como referencia para los shield del voltaje al cual funcionan los pines de entrada y salida de la placa Arduino, en este caso 5V. Es importante este dato, ya que en placas como la Leonardo que funcionan a 5V si el shield cree que estamos ante una placa de 3,3V el nivel alto digital podría ser insuficiente. Igualmente si estuviéramos en una placa que funcionara a 3,3V de este pin obtendríamos este voltaje y el shield funcionaria a 3,3V, de otro modo podría funcionar a 5V y destruiríamos las entradas de la placa Arduino.

RESET - Este pin se usa para resetear la placa Arduino desde fuera. Es activo a nivel bajo.

3V3 - Este pin se usa para obtener de la placa Arduino un voltaje de 3,3V (solo un 1% de error) y poder alimentar componentes o shields con hasta 50mA. El chip encargado de regular esta tensión en la placa Arduino Leonardo es el LP2985. Tenemos esta tensión tanto si la placa esta alimentada por la clavija de 2,1mm o por el puerto USB.

5V - Este pin se usa para una doble función: por un lado obtenemos una tensión regulada a 5V para alimentar los shields o los componentes externos que deseemos (independientemente de como alimentemos la placa arduino, jack 2,1mm o USB). Pero también podremos alimentar nuestra placa Arduino Leonardo a través de este pin con una fuente de alimentación externa de 5V (regulada).

GND - Estos pines se usan para obtener una conexión de tierra de la placa. Es importante que todas las placas y componentes externos tenga una referencia de tierra común. Disponemos de 3 pines de GND (sin contar los disponibles en ICSP).

VIN - Este pin se usa para una doble función: por un lado obtenemos la tensión sin regular con la que estemos alimentando la placa Arduino mediante el jack 2,1mm o si estamos alimentando a través del puerto USB obtendríamos una tensión de 5V regulados. Por otro lado también podemos alimentar la placa Arduino desde una fuente de alimentación externa (respetando los márgenes de alimentación de 7 a 12V recomendados) sin usar el jack 2,1mm ni el puerto USB.

A0 - Este pin se usa para recibir una tensión entre 0 y 5V. Esta tensión será convertida mediante un conversor A/D de 10 bits incorporado en el MCU a un valor digital utilizable en nuestros programas. Tener en cuenta que solo hay un conversor A/D en el MCU, por lo que si vamos a leer mas de un pin de entrada analógico los leerá uno y luego el otro (funcionalmente para nosotros funciona como si tuviera un conversor en cada entrada).
También podemos usar este pin como entrada y salida digital.

A1 - Este pin se usa para recibir una tensión entre 0 y 5V. Esta tensión será convertida mediante un conversor A/D de 10 bits incorporado en el MCU a un valor digital utilizable en nuestros programas.
También podemos usar este pin como entrada y salida digital.

A2 - Este pin se usa para recibir una tensión entre 0 y 5V. Esta tensión será convertida mediante un conversor A/D de 10 bits incorporado en el MCU a un valor digital utilizable en nuestros programas.
También podemos usar este pin como entrada y salida digital.

A3 - Este pin se usa para recibir una tensión entre 0 y 5V. Esta tensión será convertida mediante un conversor A/D de 10 bits incorporado en el MCU a un valor digital utilizable en nuestros programas.
También podemos usar este pin como entrada y salida digital.

A4 - Este pin se usa para recibir una tensión entre 0 y 5V. Esta tensión será convertida mediante un conversor A/D de 10 bits incorporado en el MCU a un valor digital utilizable en nuestros programas.
También podemos usar este pin como entrada y salida digital.

A5 - Este pin se usa para recibir una tensión entre 0 y 5V. Esta tensión será convertida mediante un conversor A/D de 10 bits incorporado en el MCU a un valor digital utilizable en nuestros programas.
También podemos usar este pin como entrada y salida digital.

0-RX - Este pin se usa para enviar o recibir una señal digital. Dentro de nuestros programas configuraremos si es de salida o de entrada y en este último caso disponemos de una resistencia "pull-up" de 20Kohm (por defecto esta desconectada). Lo podemos usar también para enviar a la placa Arduino señales serie TTL-UART desde el exterior.
También podemos configurar por software este pin para lanzar la interrupción 2.

1-TX - Este pin se usa para enviar o recibir una señal digital. Dentro de nuestros programas configuraremos si es de salida o de entrada y en este último caso disponemos de una resistencia "pull-up" de 20Kohm (por defecto esta desconectada). Lo podemos usar también para transmitir de placa Arduino señales serie TTL-UART hacia el exterior.
También podemos configurar por software este pin para lanzar la interrupción 3.

2 - Este pin se usa para enviar o recibir una señal digital. Dentro de nuestros programas configuraremos si es de salida o de entrada y en este último caso disponemos de una resistencia "pull-up" de 20Kohm (por defecto esta desconectada).
También podemos configurar por software este pin para lanzar la interrupción 1.

~3 - Este pin se usa para enviar o recibir una señal digital. Dentro de nuestros programas configuraremos si es de salida o de entrada y en este último caso disponemos de una resistencia "pull-up" de 20Kohm (por defecto esta desconectada). Este pin ademas esta marcado con ~ lo que nos indica que es una posible salida PWM o salida analógica simulada. Realmente es una salida digital que genera una señal cuadrada de 490Hz y variando el ancho del pulso podemos simular una señal analógica (tensión promediada) de 8 bits de resolución (256 valores).
También podemos configurar por software este pin para lanzar la interrupción 0.

4 - Este pin se usa para enviar o recibir una señal digital. Dentro de nuestros programas configuraremos si es de salida o de entrada y en este último caso disponemos de una resistencia "pull-up" de 20Kohm (por defecto esta desconectada).
También es configurable como entrada analógica entre 0 y 5V. Esta tensión será convertida mediante un conversor A/D de 10 bits incorporado en el MCU a un valor digital utilizable en nuestros programas.

~5 - Este pin se usa para enviar o recibir una señal digital. Dentro de nuestros programas configuraremos si es de salida o de entrada y en este último caso disponemos de una resistencia "pull-up" de 20Kohm (por defecto esta desconectada). Este pin ademas esta marcado con ~ lo que nos indica que es una posible salida PWM o salida analógica simulada.

~6 - Este pin se usa para enviar o recibir una señal digital. Dentro de nuestros programas configuraremos si es de salida o de entrada y en este último caso disponemos de una resistencia "pull-up" de 20Kohm (por defecto esta desconectada).
También es configurable como entrada analógica entre 0 y 5V.
Este pin ademas esta marcado con ~ lo que nos indica que es una posible salida PWM o salida analógica simulada.

7 - Este pin se usa para enviar o recibir una señal digital. Dentro de nuestros programas configuraremos si es de salida o de entrada y en este último caso disponemos de una resistencia "pull-up" de 20Kohm (por defecto esta desconectada).

8 - Este pin se usa para enviar o recibir una señal digital. Dentro de nuestros programas configuraremos si es de salida o de entrada y en este último caso disponemos de una resistencia "pull-up" de 20Kohm (por defecto esta desconectada).
También es configurable como entrada analógica entre 0 y 5V.

~9 - Este pin se usa para enviar o recibir una señal digital. Dentro de nuestros programas configuraremos si es de salida o de entrada y en este último caso disponemos de una resistencia "pull-up" de 20Kohm (por defecto esta desconectada).
También es configurable como entrada analógica entre 0 y 5V.
Este pin ademas esta marcado con ~ lo que nos indica que es una posible salida PWM o salida analógica simulada.

~10 - Este pin se usa para enviar o recibir una señal digital. Dentro de nuestros programas configuraremos si es de salida o de entrada y en este último caso disponemos de una resistencia "pull-up" de 20Kohm (por defecto esta desconectada).
También es configurable como entrada analógica entre 0 y 5V.
Este pin ademas esta marcado con ~ lo que nos indica que es una posible salida PWM o salida analógica simulada.

~11 - Este pin se usa para enviar o recibir una señal digital. Dentro de nuestros programas configuraremos si es de salida o de entrada y en este último caso disponemos de una resistencia "pull-up" de 20Kohm (por defecto esta desconectada).
Este pin ademas esta marcado con ~ lo que nos indica que es una posible salida PWM o salida analógica simulada.

12 - Este pin se usa para enviar o recibir una señal digital. Dentro de nuestros programas configuraremos si es de salida o de entrada y en este último caso disponemos de una resistencia "pull-up" de 20Kohm (por defecto esta desconectada).
También es configurable como entrada analógica entre 0 y 5V.

~13 - Este pin se usa para enviar o recibir una señal digital. Dentro de nuestros programas configuraremos si es de salida o de entrada y en este último caso disponemos de una resistencia "pull-up" de 20Kohm (por defecto esta desconectada).
Este pin ademas esta marcado con ~ lo que nos indica que es una posible salida PWM o salida analógica simulada.
Este pin también tiene un LED conectado y visible en la placa Arduino, muy útil para visualizar señales sin nada externo.

AREF - Este pin se usa para entregar al MCU una referencia superior del rango del conversor A/D del MCU. Normalmente tenemos esta referencia a 5V, lo que hace que al tener 1024 pasos (10 bits) de resolución la precisión del conversor es de: 5V/1024pasos=0,00488V, aprox. 5mV. Pero si estuvíeramos seguros de no tener en la entrada analógica nunca mas de, por ejemplo 1V, estaríamos desperdiciando resolución y precisión. Aquí entra en juego el pin AREF: si proporcionamos a este pin un voltaje de 1V conseguiremos que el conversor solo acepte la ventana desde 0V a 1V y la precisión de la conversión seria ahora de: 1V/1024pasos=0,000976V o lo que es lo mismo 0,97mV. Efectivamente hemos aumentado muchísimo la precisión de la conversión y será mas exacta.

Luego tenemos el conector ICSP (In Circuit Serial Programming).
El situado al lado del MCU (imagen de la izquierda) para programarlo desde un programador externo, como vimos anteriormente.
Los seis pines que configuran el conector del MCU son:
RESET - Conectado al pin 13 del MCU, evidentemente lo resetea. Cuando recibe un nivel bajo reseta el MCU y lo deja en estado de espera para recibir un programa a través de la conexión serie. Es la misma conexión que el pin de RESET de la placa junto al IOREF y 3V3.

SCK- Conectado al pin 9 del MCU, lleva la señal de reloj al programador o periférico conectado. En otros modelos de Arduino, este pin comparte conexión con otros pines de la placa, en el modelo Leonardo NO.

MISO - Conectado al pin 11 del MCU, lleva la señal de datos del programador o periférico a la entrada del MCU. Este siempre es el pin que esta situado junto a la marca negra en la esquina del conector y sirve de referencia para localizar los demás pines.

GND - Conectado a la linea de tierra de la placa. Importante siempre que el programador, shield o periférico conectado aquí compartan tierra.

MOSI - Conectado al pin 10 del MCU, lleva la señal de datos desde el MCU al programador o periférico conectado.

5V - Conectado a la linea de alimentación regulada de la placa Arduino.

Tenemos cuatro led entre el conector de alimentación y el micro USB, como se ve en la imagen a la derecha. TX y RX están conectados directamente al ATmega32U4 y nos informan de una comunicación activa entre el puerto USB de la placa arduino y el MCU principal. Se verán estos led parpadeando, por ejemplo, cuando estemos volcando un programa desde nuestro ordenador al Arduino Leonardo. También podremos ver parpadear el led TX cuando en nuestro programa hayamos programado una conexión con el monitor serie del IDE. El parpadeo indicara que el Arduino esta transmitiendo datos hacia el puerto USB para que puedan ser visionados en el monitor serie.
El LED L esta conectado al pin I/O 13 para indicarnos su actividad.
El LED ON nos indica la presencia de alimentación en la placa Arduino Leonardo.
Nos queda el botón de reset para reiniciar la ejecución del programa y si tenemos el bootloader cargado, antes de la ejecución la carga de un programa nuevo, si esta disponible en el IDE del ordenador.





ESQUEMA

En este esquema que nos ofrecen los diseñadores del sistema, podemos ver toda la arquitectura electrónica del Arduino Leonardo. Muy útil para localizar posibles averías o si nos atrevemos a poder montar nuestra propia placa Arduino Leonardo por nuestros medios.

PROBEMOS EL ARDUINO LEONARDO