Ir al contenido principal

Atmega328P independiente de Arduino (Arduino standalone)

Recuerdo mi primer contacto en la facultad con un microcontrolador (de Texas Instrumens, no recuerdo el modelo). Había que usar complejos y caros programadores para volcar el código, y para volver a usarlos había que borrar sus EPROM con luz ultravioleta. Hoy están mucho más accesibles, y la plataforma Arduino, basada en el microcontrolador Atmega328P, tiene bastante culpa de ello (aunque no son los únicos, claro). Hoy cualquiera con un PC y ganas puede adquirir un Arduino por muy pocos euros y empezar a jugar con él. Ni siquiera es necesario programar en ensamblador ya que el entorno de desarrollo permite programarlos en un lenguaje de alto nivel.

Atmega328P
El prototipado es, hoy en día, mucho más sencillo y barato gracias a estas nuevas plataformas, pero en algún momento hay que pasar del prototipo al circuito final (o al menos, a un prototipo ya sin la placa de Arduino a cuestas). Vamos a ver cómo usar el microcontrolador Atmega328P en un circuito real e independiente de la placa de Arduino.

El bootloader es parte de la magia de Arduino. Es un pequeño código almacenado en su memoria que se ejecuta al arrancar y que se encarga de leer datos por su puerto serie y almacenarlo en la memoria flash. Es decir, que nos permite cargar nuestro propio código sin necesidad de usar un programador externo. Los Atmega328P se pueden adquirir a muy bajo precio, pero en la mayoría de los casos vendrán sin su correspondiente bootloader (a veces incluso aunque el vendedor diga que sí). Así que, si no lo trae, lo primero que tendremos que hacer es cargar el bootloader en el microcontrolador. La buena noticia es que podemos hacerlo con la ayuda de la propia placa Arduino. Esta es la lista de materiales que vamos a necesitar:

  • Arduino UNO.
  • Protoboard.
  • Un Atmega328P (ojo, no un Atmega328, son distintos).
  • Oscilador 16MHz (tipo HC49S)
  • Dos condensadores cerámicos de 22pF.
  • Dos resistencias (1K y 10K)
  • Cables
La distribución de pines del Atmega328P es la siguiente:
Esquema Atmega328P

Lo mínimo necesario para que el Atmega328P funcione es, por supuesto, conectar los pines 7 y 20 a VCC (5V) y el 8 y 22 a tierra. Aunque el Atmega328P puede funcionar con su reloj interno de 8MHz, sin bootloader no vamos a poder activarlo, así que usaremos uno externo a 16MHz que se conecta a las patillas 9 y 10, con sus correspondientes condensadores (he usado dos cerámicos de 22pF). Si tienes un resonador a 16MHz (yo no tenía ninguno a mano) puedes usarlo en lugar del oscilador y ahorrarte los dos condensadores.

Finalmente el circuito queda así:

Bootloader

El programa que se encarga de escribir el bootloader necesita (como mínimo) una conexión al pin de Reset (con la resistencia de 10K) y a los pines 13, 12 y 11. Así queda el circuito ya montado en la protoboard.

Bootloader foto

Ahora, con el Arduino conectado al PC y el entorno de desarrollo ejecutándose, seleccionamos en el menú Archivo: Ejemplos > Arduino ISP.

captura 1

En el menú Herramientas: Programador > Arduino as ISP.

captura 2

Y finalmente, también en el menú Herramientas, seleccionamos Grabar secuencia de inicio.

captura 3

Sólo nos queda pulsar el botón para cargar el código en el microcontrolador (el botón de la flechita). Si todo va bien, nuestro Atmega328P ya tiene grabado su bootloader y está listo para que podamos cargar nuestro programa en él. Podríamos pincharlo en el zócalo de una placa Arduino y programarlo normalmente para después volver a ponerlo en la protoboard, pero la buena noticia es que podemos programarlo directamente en la protoboard conectando los pines TX y RX a la placa Arduino. Ojo, antes hay que quitar el Atmega328P que hay en la placa Arduino. Las conexiones quedarían así:

esquema

Así es como debe quedar. Nótese que el Arduino tiene el zócalo del Atmega328P vacío.

Programador

Pues bien, ahora vamos a programarlo. Usaremos el famoso Blink que trae de ejemplo el entorno de desarrollo. Está en el menú Archivo > Ejemplos > Basic > Blink.

captura 5

Cambiamos el programador en Herramientas > Programador > AVR ISP.

captura 6

Finalmente pulsamos el botón de la flechita para cargar nuestro programa. Ahora el código está grabado en el microcontrolador y cada vez que le suministremos 5V y lo pongamos en marcha, lo ejecutará. El programa Blink hace parpadear un led de la placa Arduino que está conectado al pin 13, así que tendremos que poner un led y una resistencia de 1K en la protoboard para poder probar el montaje.

Arduino standalone

En la fotografía de cabecera del artículo se puede ver el resultado final.

Nuestro circuito aún no estaría completo, ya que en un circuito real es necesario usar algún tipo de regulador de voltaje a 5V como el l7805cv, incluso aunque alimentemos el montaje con pilas, pero para simplificar, alimentaré el circuito con una fuente de alimentación estabilizada. Recuerda que hay que suministrar 5V (el circuito apenas consume 20 miliamperios). Si todo está correcto, el led comenzará a parpadear gracias a nuestro circuito basado en el Atmega328.

Comentarios

Entradas populares de este blog

Scripts en NMAP

Cuando pensamos en NMAP, pensamos en el escaneo de puertos de un host objetivo al que estamos relizando una prueba de intrusión, pero gracias a las posibilidades que nos ofrecen su Scripting Engine , NMAP es mucho más que eso. Antes de continuar, un aviso: algunas de posibilidades que nos ofrecen los scripts de NMAP son bastante intrusivas, por lo que recomiendo hacerlas contra hosts propios, máquinas virtuales como las de Metasploitable, o contrato de pentesting mediante. Para este artículo voy a usar las máquinas de Metasploitable3 . No voy a entrar en los detalles sobre el uso básico de NMAP, ya que hay miles de tutoriales en Internet que hablan sobre ello. Lo cierto es que NMAP tiene algunas opciones que permiten obtener información extra, además de qué puertos están abiertos y cuales no. Por ejemplo, la opción -sV trata de obtener el servicio concreto, e incluso la versión del servicio que está corriendo en cada puerto. Otro ejemplo es la opción -O, que intenta averiguar el ...

Manejo de grafos con NetworkX en Python

El aprendizaje computacional es un área de investigación que en los últimos años ha tenido un auge importante, sobre todo gracias al aprendizaje profundo (Deep Learning). Pero no todo son redes neuronales. Paralelamente a estas técnicas, más bien basadas en el aprendizaje de patrones, también hay un auge de otras técnicas, digamos, más basadas en el aprendizaje simbólico. Si echamos la vista algunos años atrás, podemos considerar que quizá, la promesa de la web semántica como gran base de conocimiento ha fracasado, pero no es tan así. Ha ido transmutándose y evolucionando hacia bases de conocimiento basadas en ontologías a partir de las cuales es posible obtener nuevo conocimiento. Es lo que llamamos razonamiento automático y empresas como Google ya lo utilizan para ofrecerte información adicional sobre tus búsquedas. Ellos lo llaman Grafos de Conocimiento o Knowledge Graphs . Gracias a estos grafos de conocimiento, Google puede ofrecerte información adicional sobre tu búsqueda, ad...

Creando firmas de virus para ClamAV

ClamAv es un antivirus opensource y multiplataforma creado por Tomasz Kojm muy utilizado en los servidores de correo Linux. Este antivirus es desarrollado por la comunidad, y su utilidad práctica depende de que su base de datos de firmas sea lo suficientemente grande y actualizado. Para ello es necesario que voluntarios contribuyan activamente aportando firmas. El presente artículo pretende describir de manera sencilla cómo crear firmas de virus para ClamAV y contribuir con ellas a la comunidad.