RUDY is a simple ATmega328 development board to make life slightly easier when creating projects using the V-USB ilbrary - a software implementation of USB - or simply any ATmega328 development without bothering much about connecting the ISP header.


  • breadboard-friendly prototyping board, taking up only one additional
    row on each side compared to a standalone ATmega328 microcontroller
  • Arduino compatible ..ish
  • USB port wired to the ATmega328 for out-of-the-box USB functionality via the V-USB library
  • own, dedicated USB VID/PID pair thanks to
  • USB-powered with additional 3.3V voltage regulator on board to select either 5.0 or 3.3V supply voltage
  • clocked by 12.0 MHz crystal to comply with V-USB and also 3.3V supply voltage
  • 6-pin ISP header for programming, with additional option to power the board directly from the programmer
  • power-indicating LEDs mounted under the IC, shining in a mysterious glow (oh yeah)
  • DIP28 ATmega328, allowing easy replacement if it ever gets fried (no no)
  • fully open source and certified as such by the Open Source Hardware Association (OSHWA)

History And Motivation

The origin of RUDY lies in a previous, more-than-simple ATmega328 prototyping board that essentially just replaced a flimsy ISP header by combining the microcontroller with the header itself on a breadboard-friendly breakout board (if you can even call it that). After a few projects that involved the V-USB library, I decided that I wanted to have the same carefree life for hooking up the USB circuitry it requires, along with an option to choose between the standard USB 5.0V as supply voltage and an additional 3.3V for projects that require it. As a result, RUDY was created, and that's... well, that's pretty much it. The End.

Why V-USB?

Of all the choices for USB connectivity, V-USB is certainly not the most optimal one: it only implements the ancient USB 1.1 standard, won't win any efficiency prize as it implements everything straight in software, and has a few other limitations. It does however do a great (or definitely good enough) job for many tasks that you would usually do with an 8-bit microcontroller, and offers a nice range of support for different AVR devices.

Plus, after looking into other USB implementations, the general concept of implementing USB functionality seems to apply also to more sophisticated choices, so the knowledge you gain while working with V-USB can certainly be transferred later on.

Why ATmega328?

To me, the ATmega328 is just the perfect general-purpose 8-bit microcontroller. It's cheap, it's a great compromise of size and functionality offering enough memory, peripherals, and I/O pins for a wide variety of prototyping projects, and it comes in a breadboard-friendly package. On top of that, the AVR GCC toolchain is available on basically any relevant platform, along with AVRDUDE, and there's no need for any obscure vendor-specific software.

Example Code

While RUDY - as a development board - is mainly a hardware project, it would be rather useless inconvenient to get started without some basic examples to get an idea of how to use it. Well, it is a generic ATmega328 board, so basically anything that's valid for ATmega328 in general is more or less valid for RUDY, but still, to get started, a set of examples can be found in its GitHub repository.

The main focus of these examples is on using it with the V-USB library, RUDY is after all the Random USB Device, but there's also a quick demonstration of using regular bare-metal code and even Arduino as I also added a 3rd party board package for it.

Some examples also come with a host-side Python script to control for example an LED from your computer, others hook up a sensor via ADC and turn that into a MIDI device. There's even an option to turn RUDY into an USBasp programmer and program another RUDY with it - hooray!