Arduino DUE

Excelente y potente placa Arduino, similar a la MEGA2560 pero potenciada en muchos sentidos. 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 más reducido.

Tendremos a grandes rasgos una placa que:
- Funciona a 3,3V ¡¡OJO CON ESTO!!
- Procesador de 32 bits y tecnología ARM Cortex de Atmel
- Velocidad de reloj de 84Mhz

CARACTERÍSTICAS

Este modelo de Ardunio lleva el microcontrolador de Atmel SAM3X8E ARM Cortex-M3 (manual). Dispone de 54 pines de entrada/salida digitales de los cuales 12 pueden usarse como salidas PWM (Pulse Width Modulation, modulación por anchura de pulso), 12 pines de entrada analógicas de 12bits, 2 salidas analógicas de 12bits, funciona a una velocidad de reloj de 84Mhz, 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, 4 UARTs (puertos serie por hardware), puerto USB OTG y botón de reset en placa.

La comunicación con el ordenador se realiza a través del puerto USB de programación y la conversión de USB a datos serie para que los entienda el MCU (microcontrolador AT91SAM3X8E) lo realiza otro MCU de la casa Atmel, el ATMega16U2. Este es un MCU completo, que en este caso viene programado con la única función de realizar la comunicación serie entre el MCU principal y el puerto USB del ordenador.
El puerto USB OTG (o nativo) esta conectado directamente al MCU AT91SAM3X8E.

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 (en esta placa con la cantidad de pines I/O que posee la recomendación debería aumentar a 1000mA). 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 AT91SAM3X8E
Voltaje de la placa 3,3V
Voltaje de entrada (recomendado) 7-12V
Voltaje de entrada (máximo) 6-20V
Pines entrada/salida Digitales 54 (12 de ellos PWM en salida)
Pines digitales PWM salida 12 (8bits)
Pines analógicos de entrada 12 (12bits)
Pines analógicos de salida 2 (12bits)
Corriente max. todos los pines I/O 130 mA
Corriente max. por cada pin I/O 6-15 mA(OUT) - 6-9 mA(IN)
Corriente max. pin 3.3V 800 mA
Memoria Flash 512 KBytes (dentro del MCU)
SRAM 96 KBytes (dentro del MCU)
Velocidad de Reloj 84 Mhz
Led en placa Pin 13
Longitud 101.52 mm
Ancho 53.3 mm
Peso 36 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
- Usar el puerto USB nativo para descargar los programas
- 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 ROM del MCU AT91SAM3X8E tenemos el bootloader pregrabado desde fábrica, que es el encargado, cada vez que encendemos la placa o se resetea, de monitorizar si tenemos algún programa para descargar del ordenador a la placa. 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. Tenemos una diferencia importante con los demás modelos de Arduino ya que tiene que borrar completamente la memoria flash del MCU para poder cargar un programa nuevo.
Este espacio de memoria no se puede liberar, ya que esta cargado en la ROM de fábrica.
Aunque como hemos comentado se puede programar el DUE 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 DUE que funcionan a 3,3V si el shield cree que estamos ante una placa de 5V el nivel alto digital podría destruir la placa.

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. Esta sacada del regulador incluido en la placa DUE que también alimenta el MCU. 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 obtener de la placa Arduino un voltaje de 5V para alimentar los shields o los componentes externos que deseemos (independientemente de como alimentemos la placa arduino, jack 2,1mm o USB).

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 4 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 a A11 - Estos pines 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).
También podemos usar este pin como entrada y salida digital. Si lo declaramos así en nuestro programa la entrada A0 tomara el número 54 y será un puerto digital igual que los demás. La A1 tomara el número 55, así sucesivamente hasta la A11 que tomara el número 65.

DAC0 - DAC1 - Estos pines se usan para sacar una tensión entre 0,55 y 2,75V. El valor programado y enviado será convertido mediante un conversor D/A de 12 bits incorporado en el MCU a un valor analógico. Tener en cuenta que solo hay un conversor D/A en el MCU, por lo que si vamos a enviar más de un valor enviará uno y luego el otro (funcionalmente para nosotros funciona como si tuviera un conversor en cada salida).
También podemos usar estos pines como entradas y salidas digitales. Si lo declaramos así en nuestro programa la salida DAC0 tomara el número 66 y la DAC01 el número 67.

CANRX - CANTX - Estos pines están diseñados para usar el protocolo de comunicación CAN, pero aún no son compatibles con las API de Arduino.
También podemos usar estos pines como entradas y salidas digitales. Si lo declaramos así en nuestro programa el pin CANRX tomara el número 68 y el pin CANTX el número 69 y serán puertos digitales iguales que los demás.

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). Especialmente en este pin lo tenemos conectado al AtMega 16U2 para la recepción de datos del puerto USB. Lo podemos usar también para enviar a la placa Arduino señales serie TTL-UART (serial 0) 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 20Kohm (por defecto esta desconectada). Especialmente en este pin lo tenemos conectado al AtMega 16U2 para la transmisión de datos al puerto USB. Lo podemos usar también para transmitir de placa Arduino señales serie TTL-UART (serial 0) hacia el exterior.

2 a 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). Este pin ademas 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).

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 es una posible salida PWM o salida analógica simulada. Este pin tiene un LED conectado y visible en la placa Arduino, muy util 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,0008V, aprox. 0,8mV. Pero si estuviéramos 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,00024V o lo que es lo mismo 0,24mV. Efectivamente hemos aumentado muchísimo la precisión de la conversión y será mas exacta.

SDA1 - Este pin se usa para enviar o recibir una señal digital número 70. 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 usar este pin para realizar comunicaciones TWI2, sería el SDA1 o linea de datos en las comunicaciones I2C.

SCL1 - Este pin se usa para enviar o recibir una señal digital número 71. 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 usar este pin para realizar comunicaciones TWI2, sería el SCL1 o linea de reloj en las comunicaciones I2C.

14-TX3 - 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 (serial 3) hacia el exterior.

15-RX3 - 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 (serial 3)desde el exterior.

16-TX2 - 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 (serial 2) hacia el exterior.

17-RX2 - 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 (serial 2)desde el exterior.

18-TX1 - 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 (serial 1) hacia el exterior.

19-RX1 - 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 (serial 1)desde el exterior.

20-SDA - 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 usar este pin para realizar comunicaciones TWI1, sería el SDA o linea de datos en las comunicaciones I2C.

21-SCL - 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 usar este pin para realizar comunicaciones TWI1, sería el SCL o linea de reloj en las comunicaciones I2C.

22 a 53 - Estos pines se usan para enviar o recibir una señal digital. Dentro de nuestros programas configuraremos si son de salida o de entrada y en este último caso disponemos de una resistencia "pull-up" de 20Kohm (por defecto esta desconectada).

Tenemos también en este último conector los 2 pares de pines situados en los extremos. Los situados junto a los pines 22 y 23 tiene la función de entregar 5V y los situados junto a los pines 52 y 53 son una toma de tierra GND.

Luego tenemos los dos conectores ICSP (In Circuit Serial Programming).
El situado al lado del MCU (imagen de la izquierda) para programarlo desde un programador externo, como vimos anteriormente, o como esta conectado directamente al MCU podemos usarlo como puerto ISP para dispositivos externos. Y luego el situado el otro al lado del conector USB (imagen de la derecha) para programar el ATMega16U2. Programar este último normalmente no será necesario nunca y programar el MCU desde su conector se usará muy pocas veces.
Los seis pines que configuran el conector del MCU son:
RESET - Conectado al pin 47 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 110 del MCU, lleva la señal de reloj al programador o periférico conectado.
También podemos usar este pin como entrada y salida digital. Si lo declaramos así en nuestro programa tomara el número 76

MISO - Conectado al pin 108 del MCU, lleva la señal de datos del programador o periférico a la entrada del MCU.
También podemos usar este pin como entrada y salida digital. Si lo declaramos así en nuestro programa tomara el número 74. 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 109 del MCU, lleva la señal de datos desde el MCU al programador o periférico conectado. También podemos usar este pin como entrada y salida digital. Si lo declaramos así en nuestro programa tomara el número 75

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

Los seis pines del conector que atacan al ATMega16U2 están situados en la misma disposición y tienen las mismas funciones con la diferencia que van a los pines del microcontrolador ATMega16U2 para poder programarlo.

Nos quedan aún dos conectores en la placa como se ve en la imagen de la izquierda. El JTAG (10 pines)y DEBUG (4 pines). Ambos conectores podemos usarlos para comunicar al MCU con el ordenador, sobre todo para realizar diagnósticos y usando la herramienta Atmel Studio.
Tenemos dos botones en la placa DUE: El botón de Reset y el botón de Erase. El botón de Reset actúa igual que en cualquier placa Arduino y reinicia el sistema, reiniciando el sketch que esté cargado en la memoria del DUE. Sin embargo tenemos un botón nuevo, Erase. Este, si lo dejamos pulsado manda la orden de borrar la memoria flash en la que está cargado el Sketch actual y lo elimina. Podemos ver ambos botones en las dos imágenes de la derecha.

Tenemos seis LED en total en la placa, 2 junto al conector de alimentación y 4 entre los dos conectores USB como se ve en la imagen de la izquierda.
De izquierda a derecha, empezando por los que están junto al conector de alimentación, serian:
- TX: Conectado al ATMega16U2, se enciende cuando el puerto USB de programación transmite datos hacia el ordenador.
- RX: Conectado al ATMega16U2, se enciende cuando el puerto USB de programación recibe datos desde el ordenador.
- ON: Conectado a la alimentación de 3,3V, se enciende cuando la placa DUE recibe alimentación por cualquiera de los métodos disponibles.
- L: Conectado a la salida 13.
- TX: Conectado al ATSAM3X8E, se enciende cuando el puerto USB nativo transmite datos hacia el dispositivo conectado a él.
- RX: Conectado al ATSAM3X8E, se enciende cuando el puerto USB nativo recibe datos desde el dispositivo conectado a él

ESQUEMA


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

PROBEMOS EL ARDUINO DUE