Babygnusbuino-v2
By disabling the RESET pin and moving the USB lines to the two least interesting pins we're able to free up four inout/output pins with the most needed functions. This allows for example for a RGB-Led (3 Hardware PWMS) and an analog sensor. Or a complete serial communication device over SPI, or a I2C sensor chain and 2 pushbuttons… all while retaining full MIDI communication to the host over USB.
Apart from the special functions, each pin can function as a general purpose digital input / output.
Please note the rather bizarre numbering scheme on the Attiny85. Available pins are PB0, PB1, PB2 and PB4. If you want MIDI functionality you should not connect anything to PB3 and never write anything to this pin, otherwise the USB connection will drop. PB5 can sink a status led (a logic low on PB5 will light the led). Here again: don't ever write to this pin if you want to keep a MIDI connection -but you can see a faint blinking if there's activity on the USB line, and a more visible blinking every time the line is driven low to disconnect/reconnect the device.
If you don't need USB/MIDI functionality, you can use PB5 and PB3 for status leds (as long as you use high enough series resitors to not disturb the USB line - 1kOhm should be ok). Push buttons are ok too, but you should not try to use these two pins for analog input - it could disturb the USB lines of the bootloader.
A word of warning
This is minimalist hardware with no safety features whatsoever.
Inserting a Babygnusbuino in your computers USB port exposes its electrical components to the outside world - this is the equivalent of running around with a double edged sword IN YOUR MOUTH: it's fun and exciting but you better not trip over… Take special care with external power sources - you can easily fry your computers USB port and ALL the devices (webcams, mice etc..) connected to the same port.
You've been warned. but dusjagr has been warned too late :-(
Building
Parts List
The only parts needed are:
- 1 Atmel Attiny85 microprocessor
- 2 resistors 68 Ohms
- 2 zeners 3.3V
- 1 resistor 1k6
- 1 capacitor 100n
optional: another 1k6 resistor and LED
Schematic
Variants
Reference design
This version can be equipped with normal SMD or smd-style through hole parts… (500%) File:15babies.pdf
Breadboardbabygnusbuino
Midify your breadboard with this version of the Babygnusbuino:
File:Breadboardbabygnusbuino-pcb.pdf
Download
Babygnusbuino now lives on Github. There's an Arduino hardware description folder (goes into …sketchbook/hardware/ ) and the GnusbuinoMIDI library for USB-MIDI functionality (goes into …sketchbook/libraries/ ). You can either download the two folders and add their contents to the corresponding folders in your Arduino working directory (if they do not exist yet, you have to create them manually), or - better - you pull the latest version directly through git:
Cloning the repository on Github
cd "the/path/to/Arduino/" (for me on a Mac it is cd ~/Documents/Arduino/ and on Ubuntu it is cd ~/sketchbook/ ) git clone https://github.com/mirdej/babygnusbuino.git hardware/babygnusbuino git clone https://github.com/mirdej/GnusbuinoMIDI.git libraries/GnusbuinoMIDI
later on, you can always update to the latest version by typing
git pull
Patching avrdude
The Babygnusbuino has a bootloader ("ATtiny85 USB Boot Loader" by Louis Beaudoin / embedded creations) and can thus be reprogrammed directly via USB without the need for a AVR ISP programmer. Unfortunately, because of the architecture of the ATTINY85, this has to be done a bit slower than usual and the avrdude uploader program that ships with the Arduino IDE is a bit too fast. You will get errors like "broken pipe" and "transmission stalled" and your upload will fail miserably.
The problem and a description of the great job Louis did to get a working bootloader for the Attiny in more detail here: http://embedded-creations.com/projects/attiny85-usb-bootloader-overview/details/
The solution is to patch avrdude (compile a customized version of it) so that it recognizes when we try to program an Attiny85 and slows down its speed - and to replace the version that comes bundled with Arduino with our patched version.
gnubl
An additional benefit: the new avrdude contains some special command that kicks (or tries to kick) the Babygnusbuino into bootloader-mode before programming. No need to unplug/replug and quickly hit upload in under 5 seconds… This feature only works when the Babygnusbuino is connected as a functional MIDI device.
On Mac
Either: use the binary
You can try to use the binary in ~/Documents/Arduino/hardware/baygnusbuino/patch/mac/
cd ~/Documents/Arduino/hardware/baygnusbuino/patch/mac/ sudo ./install.sh
OR: Compile from source
- Download the avrdude source files from http://download.savannah.gnu.org/releases/avrdude/avrdude-6.0rc1.tar.gz
- replace the file usbasp.c with the one in ...Arduino/hardware/baygnusbuino/patch/
- in order to be able to compile you might need to install libusb from here http://www.ellert.se/PKGS/libusb-2012-10-21/
cd path/to/downloaded/avrdude-6.0rc1 ./configure make
On Ubuntu
Either: use the binary
maybe you can use the precompiled binary in ~/sketchbook/hardware/babygnusbuino/patch/linux:
cd ~/sketchbook/hardware/babygnusbuino/patch/linux/ sudo ./install.sh
otherwise you have to compile a patched avrdude yourself
OR: Compile from source
- Download the avrdude source files from http://download.savannah.gnu.org/releases/avrdude/avrdude-6.0rc1.tar.gz
- replace the file usbasp.c with the one in hardware/baygnusbuino/patch
Then
sudo apt-get install bison sudo apt-get install flex sudo apt-get install libusb-dev cd path/to/downloaded/avrdude-6.0rc1 ./configure make
I also had to correct permissions for libusb. Not sure this is the right way, but anyway:
sudo gedit /lib/udev/rules.d/50-udev-default.rules
change
# 'libusb' device nodes SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0664"
to
# 'libusb' device nodes SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0666"
see http://unix.stackexchange.com/questions/44308/understanding-udev-rules-and-permissions-in-libusb
Code examples
see Babygnusbuino version 1.0 for some examples. adapt pins accordingly
- Don't use PB3/PB5 if you want MIDI
- Software PWM is not needed anymore
Todo
- Make nice pictures of new Babygnusbuinos and post them here
- More examples
- Clean up schematic and pcb layouts
recent issues
- dusjagr (on ubuntu) has troubles with the new GnusbuinoMIDI library. the device constantly resets. something buggy cos of gnubl?
- bengt somehow got the new one to work on ubuntu
- different versions of avr-gcc issues...