a growing collection of standalone AVR projects for various tasks
C KiCad Python Batchfile
Latest commit 1fe71f4 Feb 11, 2017 @swharden committed on GitHub Update readme.md



This repository contains a growing collection of individual AVR project files for various tasks. I personally use these projects as starting points for new microcontroller projects, or reference for common procedudures I would otherwise have to go back to the datasheet for (timers, counters, frequency counting or synthesis, interrupts, UART, I2C, ADC, etc). Each folder is self-contained and has batch scripts to set fuses to change the clock source (internal RC oscillator at 8MHz, div/8 for 1MHz, or external crystal typically up to 20 MHz)

These are some of my favorites:

Programming Setup

I almost always use AVRISPmkII and AVRdude (launched from a batch script) to program my chips. I virtually never use AVRStudio. I typically develop in a Windows environment, but the code (and AVRdude) works the same in Linux.


  • Just install WinAVR and it should install drivers for common programmers.
  • I prefer to edit C code in Notepad++
  • definately check out AVRDudess (a GUI for AVRdude) as an easy GUI to load flash onto chips



Note Picture
AVRISPmkII is a ceap, fast, and convenient AVR programmer. AVRISPmkII
Bus Pirate technically can program AVRs, but it's so slow it's not practical. Here's a post I wrote about it. I like the bus pirate when I need to use software to measure voltages and toggle pins. It's slow though, because the handshake it bit-banged and it takes tens of seconds to program an AVR. For just programming, I prefer an (ebay knockoff) AVR ISP mkII. Definately check out AVRDudess as a GUI for AVRDude. I usually get a standard command for a project and put it in a batch file in the same folder.
AVRDudess can simplify programming of code and fuses. avrdudess

Common AVR Datasheets and Pinouts

chip pinout datasheets
ATMega328 [summary] [complete]
ATMega2313 [summary] [complete]
ATTiny45 [summary] [complete]

Helpful Links

Misc Code

Reading pins

if(PIND&(1<<PD7)){doSomething();} // runs doSomething() if PD7 is HIGH

Bit flipping in C

PORTD|=(1<<PD6); // sets PD6 high
PORTD&=~(1<<PD6); // sets PD6 low
PORTD^=(1<<PD6); // flips the state of PD6