Archivo de la categoría: Hardware Libre

Placas Arduino

Arduino dispone de una amplia variedad de placas y shields para usar dependiendo de nuestras necesidades.

Un shield es una placa compatible que se puede colocar en la parte superior de los arduinos y permite extender las capacidades del arduino. De estas hablaremos en profundidad más adelante.

Primer Arduino:

Arduino Uno

Web: http://arduino.cc/en/Main/ArduinoBoardUno

Es la placa estándar y la más conocida y documentada. Salió a la luz en septiembre de 2010 sustituyendo su predecesor Duemilanove con varias mejoras de hardware que consisten básicamente en el uso de un USB HID propio en lugar de utilizar un conversor FTDI para la conexión USB. Es 100% compatible con los modelos Duemilanove y Diecimila. Viene con un Atmega328p con 32Kbytes de ROM para el programa.

Este es el Arduino que vamos a usar en el curso.

Esquematico: http://arduino.cc/en/uploads/Main/Arduino_Uno_Rev3-schematic.pdf

Microcontrolador: http://www.atmel.com/devices/atmega328p.aspx

Planos del Arduino UNO: https://www.arduino.cc/en/Main/ArduinoBoardUno#documentation

Arduino Mega

Web: http://arduino.cc/en/Main/ArduinoBoardMega2560

Es con mucha diferencia el más potente de las placas con microcontrolador de 8 bits y el que más pines i/o tiene, apto para trabajos ya algo más complejos aunque tengamos que sacrificar un poco el espacio. Cuenta con el microcontrolador Atmega2560 con más memoria para el programa, más RAM y más pines que el resto de los modelos.

Esquematico: http://www.arduino.cc/en/uploads/Main/arduino-mega2560_R3-sch.pdf

Microcontrolador: http://www.atmel.com/devices/atmega2560.aspx

Planos del Arduino MEGA: http://www.arduino.cc/en/Main/ArduinoBoardMega2560

Mega ADK es una placa basada en el Mega2560 pero con un USB host adicional para conectar móviles basados en Android:

Web: https://www.arduino.cc/en/Main/ArduinoBoardMegaADK

Getting Started con ADK: https://www.arduino.cc/en/Guide/ArduinoADK

Arduino Ethernet

Web: http://arduino.cc/en/Main/ArduinoBoardEthernet

Incorpora un puerto ethernet, está basado en el Arduino Uno y nos permite conectarnos a una red o a Internet mediante su puerto de red.

Arduino Due

Web: http://arduino.cc/en/Main/ArduinoBoardDue

Arduino con la mayor capacidad de procesamiento, basado en un microcontrolador de 32 bit y arquitectura ARM: Atmel SAM3X8E ARM Cortex-M3 CPU. Este arduino está alimentado a 3.3V y dado que gran parte de los shields, sensores, actuadores para Arduino y compatible son a 5V lo limita, pero cada vez se ven más elementos donde se puede elegir el voltaje entre 3.3 y 5V.

Importante: 12-bit ADC

Microcontrolador: http://www.atmel.com/devices/sam3x8e.aspx

Arduino Leonardo

Web: http://arduino.cc/en/Main/ArduinoBoardLeonardo

La diferencia de este arduino con el resto es que trae un único MCU ATmega32u4 que tiene integrado la comunicación USB, lo que elimina la necesidad de un segundo procesador. Esto tiene otras implicaciones en el compartimento del arduino al conectarlo al ordenador, lo que no lo hace apto para iniciarse con él.

Microcontrolador: http://www.atmel.com/devices/atmega32u4.aspx

Los Arduinos basados en el microcontrolador 32u4 permiten aparecer al Arduino conectado al ordenador como un ratón o teclado nativo, simulando un dispositivo de este tipo.

Getting Started: https://www.arduino.cc/en/Guide/ArduinoLeonardoMicro

Librería MouseKeyboard: https://www.arduino.cc/en/Reference/MouseKeyboard

Arduino Micro

Web: http://arduino.cc/en/Main/ArduinoBoardMicro

También basado en el ATmega32u4 pero mucho más compacto.

Ejemplo de placa para uso de Arduino pequeños con bornas: https://spiercetech.com/shop/home/17-arduino-nano-30-controller-terminal-breakout-board.html

Arduino Mini

Web: http://arduino.cc/en/Main/ArduinoBoardMini

Versión miniaturizada de la placa Arduino UNO basado en el ATMega328. Mide tan sólo 30x18mm y permite ahorrar espacio en los proyectos que lo requieran. Las funcionalidades son las misma que Arduino UNO. Necesita un programador para conectarlo al ordenador: http://arduino.cc/en/Main/USBSerial

Arduino Lilypad

Web: http://arduino.cc/en/Main/ArduinoBoardLilyPad

Diseñado para dispositivos “wearables” y e-textiles. Para coser con hilo conductor e instalarlo sobre prendas.

Más información para fabricar wearable con arduino en: http://lilypadarduino.org/

Arduino Yun

El Arduino Yun es un Arduino que es diferente a lo que son el resto de Arduino porque además de llevar un microcontrolador, incorpora un Microprocesador MIPS con un Sistema Operativo Linux embebido. La ventaja que aporta Arduino Yun y sus derivados es que el microcontrolador y el microprocesador están conectado mediante un puerto serie y además Arduino nos ofrece una serie de herramientas/librerías que facilita la interconexión entre ellos.

Arduino Yun (MCU + MP con Linux): http://arduino.cc/en/Main/ArduinoBoardYun

Guía con Open WRT: https://www.arduino.cc/en/Guide/ArduinoYun

Guía con LininoOS: https://www.arduino.cc/en/Guide/ArduinoYunLin

Arduinos para Wearables

Nuevos Arduinos incorporados recientemente

Arduino 101

Web: https://www.arduino.cc/en/Main/ArduinoBoard101

Es el sucesor del Arduino UNO con procesador Intel Curie Quark de 32 bit diseñado para ofrecer el mínimo consumo de energía, 384 KB de memoria flash, 80 KB de SRAM, un sensor DSP integrado, bluetooth de baja energía, acelerómetro y giroscopio de 6 ejes.

Video de 101: https://blog.arduino.cc/2016/01/13/unboxing-and-setup-of-arduino-101/

Código Firmware: https://github.com/01org/corelibs-arduino101 que no hace falta instalarlo porque ya viene integrado en el IDE de arduino.cc y desde el gestor de librerías se instala en: C:\Users\<user>\AppData\Local\Arduino15\packages\Intel\hardware\arc32\1.0.5

Review completa del 101: http://www.kitguru.net/components/cpu/james-morris/intel-genuino-101-review/

Genuino MKR1000

Web: https://www.arduino.cc/en/Main/ArduinoMKR1000

Versión para IoT con procesador Atmel ARM Cortex M0+ de 32bits ATSAMW25 que es el mismo procesador que Genuino Zero pero con wifi integrado, chip de cifrado y antena integrada.

Arduino Leonardo ETH

Web: https://www.arduino.cc/en/Main/ArduinoBoardLeonardoEth

Es un Arduino Leonardo con ethernet proporcionado por el controlador W5500. Se trata de la versión actualizada del Arduino Ethernet.

Documentación: http://labs.arduino.org/Arduino%20leonardo%20eth

Getting Started: http://labs.arduino.org/Getting+Started+with+Arduino+Leonardo+Eth

Arduino MKRFOX1200

Es la última incorporación de Arduino anunciado en abril de 2017. En una placa de desarrollo pensada para el IoT con conectividad Sigfox. Comparte muchas características con otras placas de la familia MKR como em microcontrolador SAM D21 32-bit Cortex-M0+.

Incluye un módulo ATA8520 con conectividad sigfox de amplia cobertura y bajo consumo capaz de funcionar durante 6 meses con dos pilas AA. También incluye una suscripción por dos años a la red Sigfox: http://www.sigfox.com/en

Comprar: https://store.arduino.cc/homepage/arduino-mkrfox1200

Web: https://blog.arduino.cc/2017/04/18/introducing-the-arduino-mkrfox1200/

Otros Arduinos oficiales

Existen aun mas Arduino oficiales:

Otros Arduinos de arduino.org

Se trata de placas diseñadas por arduino.org pero que no han sido ofertados oficialmente por arduino.cc. Estas placas tienen soporte del IDE oficial de Arduino.

Retirados

Hay modelos retirados, pero la documentación sigue disponible y es posible aun comprarlas por terceros que las fabrican o fabricarlas uno mismo.

Placas Compatibles Arduino

La marca Arduino está protegida y solo puede usarse por Arduino, pero debido a que se trata de hardware libre, existen multitud de placas disponibles que bien son clones, placas derivadas (forks) u otras placas totalmente independientes pero que la comunidad ha desarrollado el código para poder programarlas con el lenguaje de programación de Arduino.

Cuando hablamos de placas compatibles con Arduino, son aquellas que se pueden programar con el IDE de Arduino.

Listado no oficial de placas de terceros soportadas por el IDE de Arduino: https://github.com/arduino/Arduino/wiki/Unofficial-list-of-3rd-party-boards-support-urls

Funduino

Web: https://www.funduinoshop.com/epages/78096195.sf/en_GB/?ViewObjectPath=%2FShops%2F78096195

Chipkit

Web: http://chipkit.net/

ESP8266

Web: https://espressif.com/en/products/hardware/esp8266ex/overview

Moteino

Web: https://lowpowerlab.com/guide/moteino/

Resumen

Arduino.cc products: https://www.arduino.cc/en/Main/Products

Arduino.org products: http://www.arduino.org/products/boards

Como distinguir un arduino oficial de una copia: http://arduino.cc/en/Products/Counterfeit

Guía para comparar Arduino:  https://learn.sparkfun.com/tutorials/arduino-comparison-guide

Arduino Day Logroño 2017

Si quieres estar al día de los eventos que se realizan en Logroño sobre temas relacionados con Arduino, comunidad Maker, HW libre, Impresoras 3D, etc… manda un correo a aprendiendoarduino@gmail.com o apuntate a la lista de correo noticias@aprendiendoarduino.com


El pasado 1 de abril de 2017 celebramos en tres localizaciones diferentes y con diversos eventos el ArduinoDay en Logroño.

El Arduino Day de Logroño comenzó a las 9.00 en el Think TIC con dos charlas relacionadas con el Internet de las Cosas (IoT).

La presentación de la jornada de Arduino Day en Logroño fue a cargo de Ernesto Rodríguez, responsable de vigilancia tecnológica del ThinkTIC del Gobierno de La Rioja.

La primera charla fue “IoT. Conectando cosas con Arduino” donde Enrique Crespo habló de los elementos necesarios para abordar un proyecto de IoT basado en Arduino. El vídeo de la charla puede verse en: http://www.innovarioja.tv/index.php/video/ver/1661

La presentación y documentación de la charla “IoT. Conectando cosas con Arduino” está publicada en http://www.aprendiendoarduino.com/iot-conectando-dispositivos-con-arduino/ y los apartados tratados fueron:

Acto seguido Diego Soto presentó la charla “Seguridad en IoT” donde trató uno de los aspectos más importantes del IoT, la seguridad y trato de concienciar de ello a los asistentes. El vídeo de la charla puede verse en: http://www.innovarioja.tv/index.php/video/ver/1662

Una vez acabadas las charlas paramos a tomar un café para coger fuerzas y empezar con los talleres. En el ThinkTIC se realizaron 3 talleres simultáneos.

Taller “Iniciación a la impresión 3D, mi impresora y yo!!!” por Vicente Roca donde explicó cómo montar una impresora 3D y habló de su experiencia.

Taller “Experiencia desde Cero con Arduino” por Julio Clavijo donde hizo una explicación para iniciar a los asistentes en el uso de Arduino.

Taller: “IoT. Conectando Cosas con Arduino” por Enrique Crespo que fue una continuación de la charla impartida a primera hora y se pusieron en práctica varios proyectos IoT basados en Arduino. La documentación de este taller está en http://www.aprendiendoarduino.com/taller-iot-conectando-dispositivos-con-arduino/ y el código usado en el taller está en https://github.com/jecrespo/aprendiendoarduino-iot

El siguiente evento fue en la Universidad de La Rioja, en el makerspace de la Universidad Área UR-maker. Donde Alpha Pernía presentó el makerspace y habló de la experiencia montando un makerspace.

El último evento se realizó en la Sociedad Gastronómica La Trastienda donde se hizo una merienda maker. Vicente Roca trajo su impresora 3D, Abel Yécora presento unas impresoras y un software para hacer figuras en 3D y José Domínguez presentó su proyecto maker de una máquina de boxeo con Arduino. Juan Nieto ha publicado más información de este evento y del Arduino Day en https://makerslarioja.wordpress.com/2017/04/03/arduino-day-2017-una-gran-fiesta/

Me gustaría destacar el proyecto que presentó José Domínguez y que podéis ver en este vídeo:

Agradecimientos

Por mi parte quiero agradecer al ThinkTIC y a Ernesto el apoyo que nos han dado para poder celebrar este evento. También agradecer a todo aquellos que han hecho posible el Arduino Day en el ThinkTIC: Diego Soto, Julio Clavijo, Vicente Roca,  Mario Ezquerro, Miguel Susunaga, Arturo Martínez y a todos los asistentes.

Por último gracias a los organizadores y colaboradores de los otros dos eventos en el Área UR-maker y La Trastienda: Alpha Pernía, Juan Nieto, Abel Yécora, José Domínguez, Carmen Méndez, etc…

Fotos

A las 9 de la mañana a punto de empezar el Arduino Day en Logroño.

Charla “IoT. Conectando cosas con Arduino” de Enrique Crespo

Charla “Seguridad en IoT” de Diego Soto:

Tomando un café antes de seguir con los talleres.

Taller “IoT. Conectando cosas con Arduino” de Enrique Crespo

Qué es Arduino

Esta conferencia sobre IoT con Arduino fue expuesta el 1 de abril de 2017 con motivo del Arduino Day. Puedes ver el video de la conferencia completa en http://www.innovarioja.tv/index.php/video/ver/1661


Arduino es una plataforma de hardware libre, basada en una placa con un microcontrolador y un entorno de desarrollo, diseñada para facilitar el uso de la electrónica en proyectos multidisciplinares.

Hardware Libre: http://es.wikipedia.org/wiki/Hardware_libre

Definición de Arduino en la web oficial: https://www.arduino.cc/en/Guide/Introduction

Otras definiciones de Arduino:

Arduino es una plataforma abierta que facilita la programación de un microcontrolador. Los microcontroladores nos rodean en nuestra vida diaria, usan los sensores para escuchar el mundo físico y los actuadores para interactuar con el mundo físico. Los microcontroladores leen sobre los sensores y escriben sobre los actuadores.

En palabras de David Cuartielles: “Actualmente todo lo que nos rodea en la vida es digital (entendido como hacer operaciones matemáticas complejas y comunicar con otros dispositivos), cualquier cosa lleva un microchip, desde el microondas a un coche. Arduino lleva uno de esos microchips y te permite aprender a manejar como funciona el mundo en el que vivimos hoy en día y cómo interactúa el hombre con el mundo digital. Arduino es la puerta hacia tomar control de cómo funcionan las cosas actualmente y en el futuro. Así que encender el ordenador y empezar a programar.

El HW Arduino:

Por otro lado Arduino nos proporciona un  software consistente en un entorno de desarrollo (IDE) que implementa el lenguaje de programación de arduino y el bootloader ejecutado en la placa. La principal característica del software de programación y del lenguaje de programación es su sencillez y facilidad de uso.

El software hecho para Arduino es portable, es decir, el mismo firmware que hemos hecho para un Arduino/Microcontrolador, sirve para otras placas Arduino u otras placas compatibles Arduino como el ESP8266.

Hay otro factor importante en el éxito de Arduino, es la comunidad que apoya todo este desarrollo, comparte conocimiento, elabora librerías para facilitar el uso de Arduino y publica sus proyectos para que puedan ser replicados, mejorados o ser base para otro proyecto relacionado.

La expresión local de la comunidad Arduino son los makerspaces como el UR-maker de la Universidad de La Rioja: http://www.unirioja.es/urmaker/

Para recibir información de los eventos de la comunidad maker de Logroño inscribirse en la lista de correo noticias@aprendiendoarduino.com o mandar un correo a aprendiendoarduino@gmail.com para inscribirse.

En resumen:

Arduino = HW + SW + Comunidad

¿Para qué sirve Arduino? Arduino se puede utilizar para desarrollar elementos autónomos, conectándose a dispositivos e interactuar tanto con el hardware como con el software. Nos sirve tanto para controlar un elemento, pongamos por ejemplo un motor que nos suba o baje una persiana basada en la luz existente es una habitación, gracias a un sensor de luz conectado al Arduino, o bien para leer la información de una fuente, como puede ser un teclado, y convertir la información en una acción como puede ser encender una luz y pasar por un display lo tecleado.

Librerías Arduino

Las librerías son trozos de código hechos por terceros que usamos en nuestro sketch. Esto nos facilita mucho la programación y hace que nuestro programa sea más sencillo de hacer y de entender. En este curso no veremos como hacer o modificar una librería pero en este curso debemos ser capaces de buscar una librería, instalarla, aprender a usar cualquier librería y usarla en un sketch.

Las librerías son colecciones de código que facilitan la interconexión de sensores, pantallas, módulos electrónicos, etc. El entorno de arduino ya incluye algunas librerías de manera que facilita, por ejemplo, mostrar texto en pantallas LCD.

Existen infinidad de librerías desarrolladas por terceros en internet con sus correspondientes forks, que nos ayudarán a conectar prácticamente cualquier dispositivo a los Arduinos de forma muy sencilla.

En este momento hay 883 librerías oficiales de Arduino, listado: http://www.arduinolibraries.info/ y cada semana aumenta.

Programación Arduino

El lenguaje de programación de Arduino es C++. No es un C++ puro sino que es una adaptación que proveniente de avr-libc que provee de una librería de C de alta calidad para usar con GCC (compilador de C y C++) en los microcontroladores AVR de Atmel y muchas utilidades específicas para las MCU AVR de Atmel como avrdude: https://learn.sparkfun.com/tutorials/pocket-avr-programmer-hookup-guide/using-avrdude

Aunque se hable de que hay un lenguaje propio de programación de Arduino, no es cierto, la programación se hace en C++ pero Arduino ofrece unas librerías o core que facilitan la programación de los pines de entrada y salida y de los puertos de comunicación, así como otras librerías para operaciones específicas. El propio IDE ya incluye estas librerías de forma automática y no es necesario declararlas expresamente. Otra diferencia frente a C++ standard es la estructuctura del programa.

Toda la información para programar Arduino se encuentra en el reference de la web de Arduino: https://www.arduino.cc/en/Reference/HomePage

Aplicaciones Arduino

Desde los inicios de Arduino y el HW Open Source, la industria encontró una forma sencilla y barata de implementar el Internet de las cosas y la Industria 4.0. Con estas herramientas es posible realizar tareas como:

  • Machinery automation.
  • Installation Control. (Thermal, Climate conditioning, Water treatment, Chemical products, Food, etc.).
  • Industrial monitoring.
  • Data acquisition.
  • etc.

Reunión Makers Logroño en makerspace UR-Maker

El jueves 2 de febrero de 2017 nos juntamos de una forma casi espontánea un grupo de aficionados a la impresión 3D, Arduino y Hardware Libre en general, lo que puede considerarse como el primer encuentro de makers de Logroño.

Fue un encuentro donde se dio a conocer el primer makerspace de La Rioja: el Área UR-maker de la Universidad de La Rioja y compartimos un rato de conversación sobre makers, makerspaces, impresión 3D, máquinas CNC, cortadoras laser, Arduino, ESP8266, Raspberry Pi y en general del HW libre.

En esta reunión hablamos sobre la comunidad maker de Logroño y surgieron varias iniciativas que paso a enumerar:

  • Alpha nos presentó el área UR-maker y ofreció el espacio para futuras acciones con las limitaciones que explicó en la reunión.
  • Ernesto Rodríguez habló del Think TIC donde ya se han impartido cursos y jornadas sobre impresoras 3D, Arduino y otros temas relacionados. Es otro punto de encuentro que tenemos los makers.
  • José María Labarquilla del COITIR también nos hablo del colegio de ingenieros como espacio para futuros eventos maker.
  • Juan Nieto ha creado el blog https://makerslarioja.wordpress.com/ donde ha publicado un post sobre el primer encuentro de makers.
  • José Ignacio Casis nos enseñó su trabajo con la papelera loca http://www.larioja.com/logrono/201612/18/papelera-loca-logrono-20161218180525.html y el BB-8 impreso en 3D controlado con Arduino.
  • José Ignacio Casis también nos propone sacar a la calle a los makers con una carrera de coches en la calle.
  • Para comunicar próximos eventos, novedades y acciones maker, usaremos la lista de correo de noticias de www.aprendiendoarduino.com que ya usamos como medio para reunirnos. Para darte de alta en la lista de correo ir a: http://list.aprendiendoarduino.com/mailman/listinfo/aprendiendoarduino.com.noticias
  • También podéis usar el correo de Enrique Crespo aprendiendoarduino@gmail.com para comunicar cualquier iniciativa, dudas o simplemente suscribiros a la lista de correo.

El próximo evento que haremos es el Arduino Day que aún no hay fecha para este año pero se espera que sea para principios de abril. Lo tomamos como fecha para hacer talleres, concursos y eventos en Logroño.

Espero no haberme dejado nada y sino un correo a aprendiendoarduino@gmail.com para añadir al post.

Enlaces:

Fotos:

Bootloader

Cuando cargamos un programa en Arduino desde el USB con el IDE, estamos haciendo uso del bootloader, se trata de un pequeño programa que ha sido guardado previamente en el microcontrolador de la placa y que nos permite cargar código sin necesidad de hardware adicional. El bootloader solo está activo unos segundos cuando se resetea el Arduino y después comienza el sketch que está cargado en la flash de Arduino y que hemos programado y subido a la placa.

El bootloader se ejecuta cuando el microcontrolador se enciende o se pulsa el botón reset, durante un corto espacio de tiempo espera que le llegue por el puerto serie un nuevo sketch desde el IDE de Arduino (este distingue un sketch de otra cosa porque tiene un formato definido). Si llega un sketch, este es guardado en la memoria flash y ejecutado, en caso contrario ejecuta el sketch anteriormente cargado.

La mayoría de los Arduinos tienen la función autoreset que permite al IDE de Arduino subir el código sin tener que pulsar el botón de reset.

El bootloader hace que parpadee el pin 13 (led integrado en la placa) cuando se ejecuta.

La mayoría de los microcontroladores de AVR pueden reservar una zona de la memoria flash (entre 256B a 4 KB) para el bootloader. El programa bootloader reprograma el microcontrolador para guardar en la memoria flash el código binario a través de cualquier interface disponible.

El bootloader de Arduino está programado en la memoria flash del ATMega328p y ocupa 0,5 KB de los 32KB disponibles. Este bootloader viene precargado en la memoria flash del microcontrolador y es lo que diferencia el ATMega328p de Arduino de otro que viene de fábrica.

El Arduino UNO viene con el microcontrolador ATMega328p precargado con un bootloader que permite cargar nuevo código sin un programador. El bootloader se comunica usando el protocolo STK500.

El protocolo STK500 http://www.atmel.com/Images/doc2525.pdf es propio de Atmel. Es un protocolo serie y los programadores emulan este protocolo sobre un puerto serie virtual en un USB. Originalmente STK500 fue un programador fabricado por Atmel y a raíz de ello liberaron el protocolo STK500.

En este enlace es posible obtener el código en C del protocolo STK500: http://www.atmel.com/dyn/resources/prod_documents/avr061.zip

Arduino decidió usar avrdude y STK500 serial bootloader para programar o cargar nuevos programas en Arduino sin necesidad de HW adicional. El bootloader de Arduino es esencialmente el bootloader STK500 de Atmel.

Las MCUs AVR de 8bits ATMega con interfaz USB integrado como son el ATmega16U2 y ATmega8U2, vienen de fábrica un USB bootloader en la sección de arranque de la flash. Este bootloader USB permite hacer In-System programming desde USB host controller sin la necesidad de un HW externo. En este documento se describe las funcionalidades del USB bootloader: http://www.atmel.com/Images/doc7618.pdf

El puerto serie durante el proceso de bootloader funciona a 19200 baudios.

El bootloader estándar de Arduino usa el protocolo STK500 versión 2 y por ese motivo es el valor que usamos en el IDE de Arduino.

Los comandos para “quemar” el bootloader en Arduino usan una herramienta open nsource llamada avrdude, de la que se hablará más tarde. Hay cuatro pasos a la hora de cargar el bootloader:

  • Desbloquear la sección de bootloader en el chip
  • Configurar los fuses en la MCU
  • Cargar el código del bootloader en el microcontrolador
  • Bloquear la sección del bootloader en la MCU

Todo esto es controlado por una serie de preferencia en el fichero de preferencias de Arduino: https://www.arduino.cc/en/Hacking/Preferences

Cuando el Boot Reset Fuse (BOOTRST) está configurado, el contador de programa en la memoria flash es inicializado a una dirección de memoria de un bloque en el extremo superior de la memoria (esto depende de como se hayan configurado los fuses, ver https://www.arduino.cc/en/uploads/Main/Arduino_Uno_Rev3-schematic.pdf para más información). El código que comienza no puede hacer nada, si realmente se quiere se podría poner su propio programa de allí si se utiliza un ICSP (los bootloaders por lo general no puede sobrescribirse a sí mismos).

Funciones de la AVR-lib para bootloader: http://www.nongnu.org/avr-libc/user-manual/group__avr__boot.html

El bootloader se trata de un programa especial y puede leer datos de una fuente externa como UART, I2C, CAN, etc… para reescribir el programa guardado en la memoria flash del microcontrolador. El bootloader busca un evento especial que puede ser cualquier cosa, pero para el desarrollo es más conveniente algo en el bus de datos que será puesto en la flash de la MCU. Si el bootloader ve ese evento especial, entonces entra en modo bootloading en el que hace un reflash de la memoria de programa del microcontrolador, pero si no aparece el evento, pasa el control al código del usuario.

El bootloader no consume RAM y los únicos efectos que tiene son modificaciones en los registros del hardware periferivo, pero un buen bootloader no debe dejar ningún estado perjudicial en el que encienda periféricos que malgasten energía cuando pones la MCU en modo sleep. Es una buena práctica inicializar los periféricos que se usan, así aunque el bootloader haga algo extraño, habremos inicializado como queremos que se comporte.

Avrdude es un programa para descargar y cargar a la memoria de las MCUs AVR de Atmel. Puede programar la Flash y la EEPROM y es soportado por el puerto serie.

Avrdude funciona mediante la línea de comandos y soporta los siguientes tipos de programadores:

  • Atmel’s STK500
  • Atmel’s AVRISP and AVRISP mkII devices
  • Atmel’s STK600
  • Atmel’s JTAG ICE (both mkI and mkII, the latter also in ISP mode)
  • appnote avr910
  • appnote avr109 (including the AVR Butterfly)
  • serial bit-bang adapters
  • PPI (parallel port interface)

Avrdude junto con otras herramientas se encuentran en: C:\Program Files (x86)\Arduino\hardware\tools\avr

Para cargar un sketch con avrdude en Arduino en lugar de usar el IDE, simplemente conectar el cable USB y presionar el botón de reset antes de ejecutar avrdude. Luego ejecutar con estas opciones:

  • Use -b 19200 to set the baud rate to 19200
  • The device signature reads dont seem to work so you’ll want to use -F
  • The programmer type is avrisp
  • The device type is -p m168
  • The port is whatever the FTDI chip shows up as

Un tutorial de avrdude se encuentra en http://ladyada.net/learn/avr/index.html

Más información:

Reparar el bootloader de un ATTiny: https://learn.adafruit.com/introducing-trinket/repairing-bootloader

Auto Reset

Para cargar un nuevo sketch en un microcontrolador, es necesario hacer un reset para pausar la ejecución de su programa y poder cargar el nuevo.

En el caso de los Arduinos, tienen la funcionalidad de auto-reset que está diseñado de forma que permite ser reseteado vía software conectado a un ordenador como el IDE de arduino. Una de las líneas de hardware flow control (DTR) del ATmega8U2/16U2 está conectada a la línea de reset de ATmega328 a través de un condensador de 100 nF.

El SW de Arduino usa esta capacidad para cargar el código simplemente pulsando el botón de carga en el IDE. De esta forma se sincroniza perfectamente el envío del nuevo sketch junto con el reset del microcontrolador.

Al resetear lo primero que arranca es el bootloader y puede comenzar la carga del sketch. El bootloader espera unos segundos para ver si un nuevo sketch se está cargando y en ese caso borra lo que hay en la flash y luego empieza a cargar el programa que está en la flash.

Arduino Uno dispone de un jumper soldado que se puede cortar para deshabilitar el auto-reset y luego estos se pueden soldar de nuevo para habilitarlo.

Más información en:

Bootloaders

Además del bootloader que disponemos desde el IDE de Arduino y el que viene precargado en los microcontroladores de Arduino, existen otros bootloaders con mejoras en algunos aspectos o para ofrecer nuevas características.

Codigo fuente del bootloader de Arduino: https://github.com/arduino/Arduino/tree/master/hardware/arduino/avr/bootloaders

Optiboot es un bootloader muy conocido que está más optimizado que el bootloader oficial de Arduino, permitiendo sketches mayores, carga más rápida.

Toda la información del optiboot:

HoodLoader2 te la opción de reprogramar el ATmega16u2 de un Arduino normal con sketcehs: https://github.com/NicoHood/HoodLoader2, se  trata de un proyecto muy intersante.

Como funciona el optiboot: https://code.google.com/archive/p/optiboot/wikis/HowOptibootWorks.wiki

Adaboot es otro bootloader optimizado cuyas mejoras ya las incluye optiboot. Más información: https://learn.adafruit.com/arduino-tips-tricks-and-techniques/bootloader

Optiloader es un sketch diseñado para automatizar las actualización de los bootloaders de Arduino usando otro Arduino como programador. Almacena múltiples copias de optiboot en la flash y cuando se inicia consulta al Arduino a cargar el bootloader y averigua la CPU que tiene e inicia la carga del bootloader ya programación adecuada de los fuses.

Interesante un TFTP bootloader: http://playground.arduino.cc/Code/TFTP_Bootloader_1

Más información: https://github.com/WestfW/OptiLoader

Cargar el Bootloader en Arduino

Antes de cargar el bootloader, debemos asegurarnos la placa seleccionada en el IDE para que al realizar el “quemado” del bootloader se configure el bootloader adecuado para cada placa y los comandos de carga del bootloader.

  • Arduino Uno y mini posee auto reset usando el optiboot bootloader
  • Arduino mega  posee auto reset y usa el stk500v2 bootloader

Para cargar o “quemar” el bootloader, necesitaremos un programador externo (in-system programmer). como USBtinyISP (https://learn.adafruit.com/usbtinyisp), un programador parallelo (http://arduino.cc/en/Hacking/ParallelProgrammer) u otro arduino con un programa adecuado cargado.

El programador se conecta a ICSP y debemos asegurarnos que lo conectamos correctamente y asegurarnos que hemos seleccionado la placa correcta, luego lanzar el comando herramientas > grabar secuencia de inicio desde el IDE de arduino. Este proceso tarda 15 o más segundos.

Más información:

En el fichero de preferencias están todos los datos para la carga del bootloader un función del modelo de bootloader: http://arduino.cc/en/Hacking/Preferences

Ver los ficheros boards.txt y programmers.txt en C:\Program Files (x86)\Arduino\hardware\arduino y ver es esa misma ruta los bootloader.

Más información en: https://code.google.com/p/arduino/wiki/Platforms

Para el Arduino mini hay diferencias a la hora de cargar el bootloader: http://arduino.cc/en/Hacking/MiniBootloader

Cargar sketches con un programador externo

Con un programador externo, además de cargar el bootloader a un microcontrolador, también podemos cargar los sketchs en la MCU sin necesidad del bootloader.

Esto nos permite usar el espacio completo de la memoria flash del microcontrolador, además de ahorrarnos el retraso que hay en el arranque cuando tenemos el bootloader.

Esto nos permite usar un arduino sin un bootloader y también es posible cargar el hex ya compilado en arduino con herramientas gráficas como XLoader: http://xloader.russemotto.com/ o con avrdude directamente como hemos visto anteriormente. La compilación puede ser con el IDE de Arduino o con cualquier otro compilador basado en avr-GCC

Para usar el programador externo debemos modificar ligeramente el fichero de preferencias del IDE de Arduino y debemos hacerlo con el IDE cerrado. Para encontrar el fichero de preferencias: http://arduino.cc/en/Hacking/Preferences

Debemos cambiar la línea  upload.using=bootloader por el identificador de uno de los programadores que tenemos en el fichero programmers.txt. Por ejemplo avrispmkii.

Después de hechos estos cambios, puedes cargar los sketches a la placa con el botón normal de upload, pero no es necesario pulsar el botón de reset, puesto que Arduino ya tiene la configuración de auto-reset.

Para volver a programar usando el bootloader, debemos volver a la configuración upload.using=bootloader en el fichero de preferencias y por supuesto el bootloader de nuevo en la placa.

Más información: http://arduino.cc/en/Hacking/Programmer

Ejemplos de programadores:

También es posible programar un ATtiny con una Raspberry Pi por SPI: http://www.instructables.com/id/Programming-the-ATtiny85-from-Raspberry-Pi/?ALLSTEPS

Ejercicios Bootloader

Ejercicio36-ArduinoISP: Usar un Arduino para hacer In-Sytem Programming a otro Arduino.

Usar un Arduino como pasarela para programar otro directamente sin bootloader.

ATENCIÓN –  esto eliminará el bootloader de Arduino

Tutoriales:

Solución: https://github.com/jecrespo/Aprendiendo-Arduino/tree/master/Ejercicio36-ArduinoISP