Bare-Metal Microcontroller Programming

  • C
  • AVR
  • ATmega328p

A hands-on introduction to bare-metal programming on the Arduino Uno (ATmega328p) using pure C and the AVR-GCC toolchain — no Arduino libraries, no abstractions, just direct register manipulation and timer interrupts.

Why bare metal?

Working at register level gives precise control over timers, interrupts, and peripherals, eliminates library overhead, and builds a much deeper understanding of how the microcontroller actually works. The repository walks through the toolchain setup and a series of progressively lower-level examples.