0. Microcontroladores y Arduino.

micro

En los últimos años proyectos como Arduino han facilitado el acceso a la electrónica a aficionados, estudiantes, y a todas las personas que sin unos conocimientos avanzados en la materia quieren construir un “dispositivo inteligente” que interactue con su entorno, dispositivo que va a requerir del uso de un microcontrolador.

Arduino es una placa con un microcontrolador de 8 bits de Atmel, más los componentes electrónicos necesarios que necesita este microcontrolador para funcionar y comunicarse con el mundo exterior. Cuenta con un entorno de programación y librerías que dotan de un grado de abstracción al programador del microcontrolador, librerías que evitan que el programador tenga que conocer cómo funciona un microcontrolador para programarlo y que éste realice una tarea.

arduino

Arduino Leonardo

Arduino es una buena herramienta para todo aquel sin conocimientos de electrónica que quiere realizar un “dispositivo inteligente”, o para empezar a jugar con la electrónica de una forma rápida y fácil. Una vez que se conoce Arduino o si se quiere aprender electrónica lo mejor es usar un microcontrolador sin el entorno de abstracción que proporcionan las librerías de Arduino.

Usar un microcontrolador de Atmel de 8 bits desde el entorno de desarrollo del fabricante, y con un compilador de C, no es más difícil que usar un Arduino desde su entorno para alguien que quiera aprender electrónica, y presenta bastantes ventajas respecto a usar las placas de Arduino y sus librerías.

Si aprendemos a programar el microcontrolador de Atmel sin usar las librerías de Arduino conseguiremos un código más eficiente y adaptado a nuestra tarea, aprovechando mejor los limitados recursos del microcontrolador. Tampoco tendrémos la necesidad de incluir un bootloader en la memoria.

Estaremos utilizando un entorno de desarrollo totalmente profesional y gratuito que nos da Atmel para sus microcontroladores, y lo más importante, aprenderemos a usar una familia de microcontroladores. Microcontroladores que utilizaremos para nuestros desarrollos sin la necesidad de tener que comprar una placa de Arduino, y por tanto reduciendo enormemente el coste de añadir un microcontrolador a nuestro proyecto y también pudiendo realizar un diseño a medida.

Como ejemplo de lo anterior vamos a comparar un “Hola Mundo” en un Arduino y un “Hola Mundo” en un microcontrolador de Atmel de 8 bits. Ver el código necesario que tenemos que escribir para encender y apagar un pin de salida del microcontrolador tanto desde el entorno de Arduino como desde el entorno de Atmel, y observar el resultado obtenido en cada uno de los casos.

Como microcontrolador de Atmel de 8 bits vamos a usar una ecTiny841, placa diseñada para protoboard con un ATtiny841. Un microcontrolador de 8 bits de Atmel con 14 pines y un buen número de periféricos, que a un bajo coste hacen de él un microcontrolador muy atractivo para muchos proyectos.

ecTiny841

ecTiny841

Empecemos con Arduino Leonardo, vamos a ver cuál es el código necesario que tenemos que escribir para encender y apagar uno de sus pines digitales de manera periódica, para ello abrimos el entorno de Arduino y escribimos el siguiente código:

int pinSalida = 7;
 
void setup() {
  // Configurar los pines del microcontrolador
  pinMode(pinSalida, OUTPUT);
}
 
void loop() {
  //Pone a 1 y a 0 el pin de salida.
  digitalWrite(pinSalida, HIGH);
  digitalWrite(pinSalida, LOW);
}

Para escribir y apagar un pin de manera periódica solo tenemos que decir cuál va a ser el pin que vamos a usar, configurarlo como salida y encenderlo y apagarlo dentro de loop con las funciones correspondientes de la librerías de Arduino.

Si conectamos un osciloscopio al pin elegido de la placa Arduino Leonardo vemos la señal que ha creado el código anterior, un pin que se enciende (5V) y se apaga (0V) unas 98.000 veces por segundo.

Arduino Leonardo. Hello world!

Arduino Leonardo. Hello world! output pin. Frequency 98 KHz.

Ahora vamos a hacer la misma prueba programando el microcontrolador de Atmel que encontramos en ecTiny841. Vamos a escribir un código en el entorno de desarrollo de Atmel que haga lo mismo que el código anterior de Arduino: configura un pin como salida y lo enciende y apaga dentro de un bucle.

#include <avr/io.h>
#define F_CPU 16000000UL
 
#define pinSalida PORTA0
 
int main(void)
{
    DDRA = 0x01; //pinSalida output
 
    while(1)
    {	
       	PORTA |= (1<<pinSalida);  //pin a 1
    	PORTA &= ~(1<<pinSalida); //pin a 0		
    }
}

Como se puede ver al igual que en el caso de Arduino necesitamos un código muy sencillo con muy pocas instrucciones para conmutar un pin del microcontrolador. En lugar de usar funciones de las librerías de Arduino para configurar, encender y apagar el pin, esta vez lo hacemos manipulando directamente en C los registros del microcontrolador asociados con el pin de salida.

Si conectamos un osciloscopio al pin de salida podemos observar el resultado que genera el código anterior en el pin:

ecTiny841. Hello world! output pin. Frequency 2.66 MHz.

ecTiny841. Hello world! output pin. Frequency 2.66 MHz.

Como en el caso de Arduino vemos un pin que se enciende (5V) y se apaga (0V), pero esta vez en lugar de encenderse 98 mil veces por segundo lo hace 2.66 millones de veces por segundo (a una frecuencia de 2.66 MHz).

Tanto Arduino como ecTiny841 llevan un cristal de 16 MHz. Por lo que el resultado que obtenemos en este caso al programar el microcontrolador de Atmel sin usar las librerías de Arduino para conmutar un pin, es un código que se ejecuta 27 veces más rápido respecto al caso de haber usado las librerías de Arduino para dicha tarea, y que por tanto va a ocupar también menos memoria de programa en el microcontrolador.

Para poder realizar lo anterior en lugar de aprender cómo funcionan las librerías de Arduino, tendrémos que aprender como funciona el microcontrolador internamente a nivel de registro.

Aprender a usar los microcontroladores de 8 bits de Atmel es sencillo, y no mucho más difícil que aprender a usar un Arduino para alguien que quiera aprender electrónica, y que quiera poder aprovechar al máximo los limitados recursos de un microcontrolador en sus proyectos.

Si estas interesado en aprender a usar un microcontrolador de Atmel puedes consultar los tutoriales de esta página, y echar un vistazo al hardware a medida y de bajo coste que hemos diseñado en eleCrab para poder realizar dichos tutoriales.

Enlaces relacionados con esta entrada: