AVR SPI Master-Slave Communication (Bare-Metal C)

Problem / Motivation

As part of my university embedded systems coursework, I developed a fully functional SPI communication protocol between two Atmega328P microcontrollers using bare-metal AVR C programming. The goal of the project was to implement real-time full-duplex data exchange at the register level without using Arduino libraries or any external abstraction layers.

This project allowed me to gain hands-on experience with synchronous serial protocols, hardware interrupt design, register configuration, and master-slave synchronization — all of which are critical for real-world embedded communication systems used in industrial, automotive, and IoT devices.

System Architecture

Key Technical Challenges

Future Work & Expansion

Technologies Used

AVR C (bare-metal), Atmega328P, SPI Protocol, Register-Level Programming, Interrupt-Driven Firmware, Real-Time Embedded Systems, Logic Analyzer Debugging

🔗 View the GitHub Repository