Arduino Zero

Esta placa podemos considerarla una evolución del Arduino UNO. Podemos ver la placa a la izquierda (modelo www.arduino.cc), que es un modelo original. Igualmente existen diferentes modelos fabricados por terceros que funcionan igual de bien a un precio algo mas reducido, aunque personalmente siempre recomendare los productos originales.

Tendríamos a grandes rasgos una placa que:
- Funciona a 3,3V
- Procesador de 32 bits y tecnología ARM de Atmel
- Velocidad de reloj de 48Mhz

CARACTERÍSTICAS

Este modelo de Ardunio lleva el microcontrolador ATSAMD21G18 (datasheet). Dispone de 20 pines de entrada/salida digitales de los cuales 10 pueden usarse como salidas PWM (Pulse Width Modulation, modulación por anchura de pulso), 6 pines de entrada analógicas, 1 salida analógica, funciona a una velocidad de reloj de 48Mhz, dispone de entrada de alimentación externa a través de un Jack de 5,5/2,1mm (positivo interior) o a través de los conectores USB, conexión para periféricos por puerto ICSP y botón de reset en placa.

La comunicación con el ordenador se realiza a través de los puertos USB. El nativo va directamente al SAMD21 y no un ATMega16U2 que usan otros modelos similares y el programming va conectado a un chip que se encarga de EDBG (Embedded Debugger), que podemos decir que realiza las veces de Bootloader pero mucho más avanzado.

La alimentación de la placa es autoconmutable entre el jack y los conectores USB. Ademas tenemos polifusibles que se encargan de supervisar los excesos de carga y si superan los limites cortan 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 ATSAMD21G18
Voltaje de la placa 3,3V
Voltaje de entrada (recomendado) 7-12V
Voltaje de entrada (máximo) 6-20V
Pines entrada/salida Digitales 20 (10 de ellos PWM en salida)
Pines digitales PWM salida 10
Pines analógicos de entrada 6
Corriente max. pines I/O 7 mA
Corriente max. pin 3.3V 80 mA
Memoria Flash 256 KBytes (dentro del SAMD21)
SRAM 32 KBytes (dentro del SAMD21)
EEPROM 0 KByte (Asignable parte de Flash)
Velocidad de Reloj 48 Mhz
Led en placa Pin 13
Longitud 68 mm
Ancho 53 mm
Peso 12 gr

PROGRAMACIÓN

Para programar este modelo de Arduino tenemos tres opciones:
- Usar el puerto USB de programación y descargar los programas hechos en el IDE de Arduino. Este sistema usará el chip EDBG para comunicarse con el puerto USB para luego gestionar internamente su grabación en el MCU.
- Usar el puerto USB nativo para descargar los programas directamente al MCU sin pasar por el EDBG.
- 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í.

Esta placa es totalmente diferente en este punto a cualquier otra de la serie Arduino. Se desarrollo de la mano con ATMEL esta configuración, que además se puede programar desde el IDE original de ATMEL, el Atmel Studio.
Aunque como hemos comentado se puede programar la Zero desde cualquiera de los puertos USB, el IDE da la opción de programar desde cualquiera de los dos, se recomienda usar el puerto de programación, ya que el borrado de la memoria flash se hace mejor desde este puerto y así lo recomienda el fabricante.

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 3.3V. Es importante este dato, ya que en placas como la UNO 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 estamos en una placa que funciona 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 800mA. El chip encargado de regular esta tensión en la placa Arduino ZERO es el LM2734Y. 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 ZERO a través de este pin con una fuente de alimentación externa de 5V (regulada), aunque no recomiendo esta opción.

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 3,3V. Esta tensión será convertida mediante un conversor A/D de 12 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).

A1 - Este pin se usa para recibir una tensión entre 0 y 3,3V. Esta tensión será convertida mediante un conversor A/D de 12 bits incorporado en el MCU a un valor digital utilizable en nuestros programas.

A2 - Este pin se usa para recibir una tensión entre 0 y 3,3V. Esta tensión será convertida mediante un conversor A/D de 12 bits incorporado en el MCU a un valor digital utilizable en nuestros programas.

A3 - Este pin se usa para recibir una tensión entre 0 y 3,3V. 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.

A4 - Este pin se usa para recibir una tensión entre 0 y 3,3V. Esta tensión será convertida mediante un conversor A/D de 12 bits incorporado en el MCU a un valor digital utilizable en nuestros programas.

A5 - Este pin se usa para recibir una tensión entre 0 y 3,3V. Esta tensión será convertida mediante un conversor A/D de 12 bits incorporado en el MCU a un valor digital utilizable en nuestros programas.

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 40Kohm (por defecto esta desconectada). Especialmente en este pin lo tenemos conectado a la MCU para la recepción de datos serie TTL-UART desde el exterior.

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 40Kohm (por defecto esta desconectada). Especialmente en este pin lo tenemos conectado al AMCU para la transmisión de datos serie TTL-UART hacia el exterior.

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 40Kohm (por defecto esta desconectada).
También podemos configurar por software este pin para lanzar la interrupción NMI.

~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 40Kohm (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 9.

~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 40Kohm (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.

~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 40Kohm (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.
También podemos configurar por software este pin para lanzar la interrupción 15.

~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 40Kohm (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.
También podemos configurar por software este pin para lanzar la interrupción 4.

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 40Kohm (por defecto esta desconectada).
También podemos configurar por software este pin para lanzar la interrupción 5.

~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). Este pin ademas esta marcado con ~ lo que nos indica que es una posible salida PWM o salida analógica simulada.
También podemos configurar por software este pin para lanzar la interrupción 6.

~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 40Kohm (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.
También podemos configurar por software este pin para lanzar la interrupción 7.

~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 40Kohm (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.
También podemos configurar por software este pin para lanzar la interrupción 2.

~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 40Kohm (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.
También podemos configurar por software este pin para lanzar la interrupción 0.

~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 podemos configurar por software este pin para lanzar la interrupción 3.

~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 40Kohm (por defecto esta desconectada).
También podemos configurar por software este pin para lanzar la interrupción 1.
Este pin 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 3,3V, lo que hace que al tener 4096 pasos (12 bits) de resolución la precisión del conversor es de: 3,3V/4096pasos=0,000805V, aprox. 0,8mV. 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/4096pasos=0,000244V o lo que es lo mismo 0,244mV. Efectivamente hemos aumentado muchísimo la precisión de la conversión y será mas exacta.

SDA - Este pin se usa para enviar o recibir una señal digital serie con el protocolo TWI, pudiendo usar la libreria Wire.
También podemos configurar por software este pin para lanzar la interrupción 6.

SCL - Este pin se usa para enviar una señal digital de reloj para sincronizar el protocolo TWI.
También podemos configurar por software este pin para lanzar la interrupción 7.

Tenemos cinco led en esa zona, como se ve en la imagen a la derecha.
TX y RX están conectados al SAMD21G18 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 ZERO. 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 ZERO.
A su lado tenemos otro LED RX conectado al chip EDBG que nos muestra su actividad cuando exista.
Por último tenemos un 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.

ESQUEMAS

En este esquema que nos ofrecen los diseñadores del sistema, podemos ver toda la arquitectura electrónica del Arduino UNO. Muy útil para localizar posibles averías o dudas de diseño.

PROBEMOS EL ARDUINO ZERO