cover image
< Inicio
Iot

Arduino LED parpadeante en C puro

El IDE Arduino contiene un lenguaje simplificado para desarrollar para la plataforma Arduino. Este lenguaje se llama Wiring y es una versión dialectal simplificada de C y C++. Las operaciones comunes de entrada y salida están simplificadas, haciendo el entorno ideal para la creación de prototipos para diseñadores y makers. Pero a veces quieres programar en C "real" y usar la cadena de herramientas AVR directamente. Por ejemplo, es posible que desee mirar entre bastidores o que necesite programar una biblioteca. Entonces se hace necesario usar la cadena de herramientas AVR. Cómo programar un simple LED parpadeante en C puro, quiero mostrarlo en este artículo.

Instalación

Para poder compilar y ejecutar el programa C a código máquina AVR, necesitas instalar un compilador cruzado, un enlazador y un cargador para el microcontrolador AVR.

En Ubuntu Linux, esto se hace ejecutando el siguiente comando:

sudo apt-get install gcc-avr binutils-avr gdb-avr avr-libc avrdude make 

Esto instala toda la cadena de herramientas necesarias para el desarrollo en C del AVR en tu máquina.

Configuración del hardware Arduino

El programa en C asume que tienes un Arduino Uno con un LED conectado al puerto 13. Esta imagen de Fritzing muestra la configuración:

LED parpadeante

Led.c

#include <avr/io.h>

#define F_CPU 16000000
#define BLINK_DELAY_MS 5000

#include <util/delay.h>

int main (void)
{
  // Arduino digital pin 13 (pin 5 of PORTB) for output
  DDRB |= 0B100000; // PORTB5

  while(1) {
    // turn LED on
    PORTB |= 0B100000; // PORTB5
    _delay_ms(BLINK_DELAY_MS);

    // turn LED off
    PORTB &= ~ 0B100000; // PORTB5
    _delay_ms(BLINK_DELAY_MS);
  }
}

En este ejemplo en C, el LED se enciende durante 5000 ms (5 seg) y luego se apaga de nuevo. Necesitas importar dos archivos de cabecera, uno para la definición de los puertos IO y otro para la función de retardo. Es importante que en C puro calcules el pin exacto en el que quieres escribir. En nuestro caso, el pin 13 del LED está en el puerto B5 (o en binario: 0B100000). Puedes encontrar información sobre el puerto y los pines en bruto en los Arduino schematics a los que puedes acceder desde la web de Arduino.

Compilando y cargando

Con el Makefile adjunto, se hace fácil compilar el archivo C.

Simplemente ejecuta:

make 

Entre bastidores, el Makefile llama al compilador AVR C (avr-gcc) y convierte el archivo al formato hexadecimal correcto que el uploader puede usar. Antes de que puedas subirlo, necesitas averiguar en qué parte de tu máquina está conectado el Arduino Uno. La ruta se escribe en el Makefile como variable ARDUINO_USB.

Una vez hecho esto, sube el archivo a tu Arduino Uno con:

make deploy 

El uploader que usamos en el Makefile se llama Avrdude.

Conclusión

La familia Arduino es un gran campo de juego para la creación de prototipos de hardware. Pero puedes sumergirte más profundamente y programar el Arduino Uno sin el IDE de Arduino directamente usando AVR C. Espero haber podido quitarte los primeros obstáculos en esta aventura.

Referencias

  • Led en C puro fuente del proyecto: https://github.com/tderflinger/arduino-blink-purec
  • Esquemas del Arduino Uno: https://www.arduino.cc/en/uploads/Main/arduino-uno-schematic.pdf
  • AVR Toolchain: http://nongnu.org/avr-libc/ - Gracias a Sagar: https://github.com/sagarsp/arduino-blink-c

Para obtener la mejor calidad, verlo a través de este enlace aquí: https://www.youtube.com/watch?v=IP4Ikw3KtAU

Imagen de portada por Brian Wangenheim en Unsplash

Publicado el

30 abr. 2025


Creative Commons License

Este trabajo está licenciado bajo una Creative Commons Attribution 4.0 International License.
Thomas Derflinger

Escrito por Thomas Derflinger

Soy un empresario visionario y desarrollador de software. En este blog escribo principalmente sobre programación web y temas relacionados como el IoT.