2. AVR hardware mínimo.

schms

Un microcontrolador necesita de unos pocos componentes externos para funcionar dentro de un circuito electrónico. En este tutorial se muestran los componentes mínimos que hemos de añadir a un ATtiny841, microcontrolador de 8 bits de Atmel, y que función realizan para el microcontrolador cada uno de estos componentes externos.

1. El condensador de desacoplo.

Lo primero que necesita un microcontrolador para funcionar es una tensión en sus pines de alimentación, 5V y 3.3V suelen ser los valores habituales que vemos en muchas de las placas con microcontroladores. Un componente que siempre debemos añadir entre los pines de alimentación del microcontrolador son los condensadores de desacoplo.

Condensador de desacoplo

Condensador de desacoplo

Cuando hablamos de la corriente que consume un microcontrolador, hablamos de un valor medio de corriente. El microcontrolador no consume una corriente constante, sino que toma pulsos de corriente muy cortos en la transición del reloj o en la conmutación de sus pines de salida.

La fuente de alimentación no es capaz de proporcionar esos pulsos rápidos de corriente de manera instantánea al microcontrolador, debido a su impedancia de salida y de las pistas del pcb que unen a la fuente con los pines de alimentación del microcontrolador. De ahí la necesidad de añadir el condensador de desacoplo.

El condensador de desacoplo es un condensador de pequeño valor, por lo general 100 nF, que se situa lo más cerca posible de los pines de alimentación del microcontrolador, como se muestra en la imagen superior. Este condensador se encarga de proporcionar los pulsos de corriente que necesita el microcontrolador para funcionar, si no añadimos este condensador aumentaremos el ruido en las pistas de alimentación del circuito, pudiendose producir un mal funcionamiento o lecturas erróneas por ejemplo en los circuitos analógicos.

Por lo que siempre que pongamos un circuito integrado en un pcb, debemos añadir un condensador de desacoplo entre cada pareja de pines de alimentación y tierra que ese integrado tenga. Y siempre poniendo el condensador lo más cerca posible de los pines de alimentación del integrado.

Además del condensador de desacoplo es habitual poner un condensador de “bulk” en la placa.

Condensador de bulk

Condensador de bulk

Este condensador de bulk es un condensador de mayor valor que el de desacoplo, del orden de decenas o cientos de microfaradios, y suele ser necesario añadirlo si la fuente de alimentación está fuera del pcb (ésta ya suele llevar sus condensador de desacoplo). Minimiza el ruido que podamos tener en las pistas de alimentación del circuito electrónico. Su colocación no es tan importante como en el caso del condensador de desacoplo, y por lo general lo podremos colocar en cualquier parte de la placa.

El tema de los condensadores es complejo cuando hay que hallar una “impedancia objetivo” que minimice el ruido en las pistas de alimentación. Pero como regla general siempre poner el condensador de desacoplo con todo circuito digital, y un condensador de bulk a la entrada de alimentación de la placa si la fuente de alimentación está fuera del pcb.

2. El conector de programación.

A no ser que el microcontrolador venga con el programa grabado o un bootloader de fábrica, siempre debemos añadir un conector que nos permita descargar el programa en el microcontrolador.

Pads del conector de programación.

Pads del conector de programación.

En la imagen superior se pueden ver los pads donde soldamos el conector de programación y que usamos para descargar programas al microcontrolador.

Estos pads van a los pines de entrada y salida del microcontrolador (A4, A5, A6 y B3 en este caso), además de  servir para programar el microcontrolador estos pines de entrada y salida se pueden usar para realizar otras funciones.

Cuando además de para programar el microcontrolador queremos usar los pines de programación para otra función distinta a la de descargar un programa en el microcontrolador, debemos tomar la precaución de proteger al programador de otra electrónica conectada a estos pines o que pueda interferir con la función de programación.

Resistencias en serie con los pines de programación.

Resistencias en serie con los pines de programación.

En la imagen superior podemos ver un ejemplo donde los pines de programación del microcontrolador se usan para dos funciones: descargar el programa en el microcontrolador y para establecer una comunicación serie con otros dispositivos.

El conector de programación se conecta directamente con los pines de programación del microcontrolador. Si durante la programación del mircocontrolador el programador pone por ejemplo a 0 el pin SCK, y un dispositivo conectado a este pin lo pone a 1 se estaría produciendo un cortocircuito. La forma de evitar esto es añadir una resistencia en serie que limite la corriente si se produce el caso anterior, manteniendo el pin SCK a 0 y la parte de la resistencia del bus SPI a 1. Por lo general habrá que usar un valor de resistencia superior a 1K, y tendrémos que ver cómo puede afectar esta resistencia en serie con el pin a la función alternativa a la de programación.

3. La señal de reloj.

El conector de programación y los condensadores de desacoplo suelen ser los componentes externos mínimos que vemos en todos los circuitos con microcontroladores. Otro componente fundamental para el funcionamiento del microcontrolador es la señal de reloj, ésta se puede generar con componentes internos del microcontrolador o con componentes externos a éste.

La señal de reloj sincroniza todas las operaciones que ocurren dentro del microcontrolador, si no hubiera una señal de reloj el microcontrolador simplemente no haría nada. Cada X ciclos de reloj el microcontrolador ejecuta una instrucción de programa de su memoria.

Para indicarle al microcontrolador de donde tiene que tomar la señal de reloj hay que configurar los fuses, accedemos a ellos como se muestra en este tutorial. Los fuses son unos bytes del microcontrolador que configuramos a través del programador, establecen como funciona parte del hadrware del microcontrolador.

El microcontrolador lleva un oscilador interno que puede generar una señal de reloj de 8 MHz, para seleccionarlo en la ventana donde establecemos los fuses debemos seleccionar INTRCOSC_8MHz como se muestra en la imagen y darle a program.

Seleccionar el oscilador interno de 8 MHz.

Seleccionar el oscilador interno de 8 MHz.

Importante: no debemos seleccionar la primera opción, EXTCLK, si lo hacemos le estamos diciendo al microcontrolador que su señal es un reloj externo que conectamos a uno de sus pines. En el momento que hagamos esto no podemos volver a programar el micrcocontrolador ni volver a configurar los fuses si no conectamos una señal cuadrada al pin correspondiente de entrada de reloj externo del microcontrolador. Por lo que antes de darle a programar hay que mirar que todo esté configurado correctamente.

Seleccionamos el oscilador interno y marcamos el fuse CKOUT, CKOUT configura el microcontrolador para sacar la señal de reloj que genera por uno de sus pines de entrada/salida. En este ejemplo marcamos CKOUT ya que queremos medir la señal de rejoj generada por el microcontrolador.

Oscilador interno. Señal de reloj se saca por el pin B2.

Oscilador interno. Señal de reloj se saca por el pin B2.

Si conectamos un osciloscopio al pin B2 podemos ver la señal de reloj que está generando el microcontrolador con su oscilador interno.

Señal de reloj generada con oscilador interno. 8.33 MHz.

Pin B2. Señal de reloj generada con oscilador interno. 8.33 MHz.

Observamos una señal de reloj de 8.33 MHz cuando esperabamos una señal de reloj de 8 MHz. Aquí encontramos la primera desventaja de usar el oscilador interno, no vamos a tener una señal de reloj precisa, por lo que si necesitamos que el microcontrolador realice una cuenta de tiempo exacta el error del oscilador interno no va a ser tolerable. Además esta frecuencia de oscilación es muy sensible a la temperatura externa, en función de la temperatura externa cambiará un poco la frecuencia.

Para tener una señal de reloj precisa lo que se suele usar es un cristal externo y dos condensadores con los que el microcontrolador genera su señal de reloj.

Cristal externo y condensadores.

Cristal externo y condensadores.

En la imagen superior se puede ver un cristal externo y sus dos condensadores que va a usar el microcontrolador para generar su señal de reloj. El cristal se conecta a dos pines de entrada/salida del microcontrolador, pines que no se podrán usar para otro propósito. El cristal se ha de colocar en el pcb lo más cerca posible de estos pines del microcontrolador.

Para decirle al microcontrolador que vamos a usar un cristal externo nos vamos a la ventana donde configuramos los fuses, y seleccionamos EXTOSC_8MHz como se ve en la imagen.

Establecer un cristal externo para generar la señal de reloj.

Seleccionar un cristal externo para generar la señal de reloj.

Hemos soldado un cristal de 16 MHz a la placa que el microcontrolador usará para generar su señal de reloj, si colocamos un osciloscopio en el pin B2 por donde hemos sacado el reloj del microcontrolador observamos la siguiente señal.

Pin B2. Señal de reloj generada con el microcontrolador con cristal externo de 16 MHz.

Pin B2. Señal de reloj generada con el microcontrolador con cristal externo de 16 MHz.

Como se puede ver en la señal medida ahora tenemos la frecuencia de reloj de 16 MHz esperada, además la variación de la frecuencia del reloj con la temperatura externa va a ser mucho menor con el cristal externo que con el oscilador interno. Por lo que si buscamos realizar una cuenta precisa de tiempo con el microcontrolador un cristal externo y dos condensadores con los valores adecuados (más en .pdf en enlaces relacionados) es lo indicado.

La principal desventaja del cristal externo, además del coste de los componentes, es que perdemos dos pines de entrada/salida que usamos para conectar este cristal.

La ventaja además de una frecuencia de oscilación más precisa, es que podemos poner un cristal de mayor frecuencia, 16 MHz es el valor máximo para el ATtiny841 a 5V, por lo que el microcontrolador ejecutará instrucciones más rápido. Podremos seleccionar también un cristal de una frecuencia determinada, algo que puede ser necesario cuando tenemos una comunicación asíncrona y el microcontrolador necesita determinada frecuencia de reloj para minimizar el error en la comunicación.

La frecuencia máxima del cristal externo que podemos conectar depende de la tensión de alimentación del microcontrolador.

Frecuencia máxima del cristal externo vs tensión de alimentación.

Frecuencia máxima del cristal externo vs tensión de alimentación. ATtiny841.

Tener una mayor frecuencia de reloj también significa que el microcontrolador va a incrementar su consumo de corriente.

Si la tarea a realizar no requiere una cuenta precisa de tiempo el oscilador interno puede ser el indicado, ahorraremos el coste del cristal externo y ganamos un par de pines más de entrada/salida.

4. Resistencias de pull-up/pull-down y otros componentes.

Por último algunos pines del microcontrolador pueden necesitar alguna resistencia externa de pull-up o pull-down para funcionar, o para configurar alguna opción del microcontrolador cuando éste se inicia (activar un bootloader, etc.).

Es habitual tener que añadir una resistencia externa para el pin de reset como se ve en la imagen.

Resistencia de pull-up en el pin de reset.

Resistencia de pull-up en el pin de reset.

El pin de reset sirve para reiniciar el programa en el microcontrolador y el estado de algunos de sus registros. Si vamos a usar el pin de reset debemos añadir en éste una resistencia de pull-up para dejarlo a un estado definido de tensión (mejor que usar la resistencia de pull-up interna), si no lo hacemos la entrada de Reset estará a un estado indefinido de tensión, pudiendo ser éste alto o bajo, y por tanto reiniciandose el microcontrolador continuamente.

Si tenemos mucho ruido en las líneas de alimentación también es habitual colocar un condensador entre el pin de reset y tierra. Al igual que en un microcontrolador con pines de alimentación para la parte analógica es conveniente añadir una inductancia y condensador para filtrar el ruido en estas líneas.

Por último añadiremos los conectores o electrónica necesaria para que el microcontrolador se pueda comunicar con el mundo exterior, y realizar una tarea dentro del circuito electrónico.

Conectores a los pines de salida y entrada del microcontrolador.

Conectores a los pines de salida y entrada del microcontrolador.

Un breve repaso a los componentes que se suelen incluir cuando diseñamos un circuito con un microcontrolador. Toda la información relativa al diseño con un microcontrolador y a lo que necesita para funcionar se encuentra en la documentación del fabricante.

Por lo general siempre que empecemos con una familia de microcontroladores por primera vez lo ideal es comprar una placa de prueba con un microcontrolador de esa familia, antes que diseñar el hardware sin tener experiencia en la programación del microcontrolador. De esta forma nos aseguraremos de que el hardware ha sido diseñado correctamente y nos tendrémos que centrar solo en aprender a programarlo, minimizando las posibles fuentes de errores.

Enlaces relacionados: