[Nov 2010] initial write-up
description after making a usbtiny isp programmer and
using it for 6 months, i was looking at making another one for carrying
around. i like the simplicy of the usbtiny isp design but would like to
make it even smaller and take less parts. one thing in the original
design that i want to change is to eliminate the use of clock crystal.
one solution i found is that v-usb drivers supports the 16.5Mhz internal
oscillator on attiny25/45/85 devices. so i start out this project to
have usbtiny isp employs v-usb for usb communication. the immediate
benefits is that it saves space and have less component counts (no more
crystals).
usbtiny description from http://www.xs4all.nl/~dicks/avr/usbtiny/
USBtiny is a software implementation of
the USB low-speed protocol for the Atmel ATtiny microcontrollers. Of
course, it will also work on the ATmega series. The software is written
for an AVR clocked at 12 MHz. At this frequency, each bit on the USB bus
takes 8 clock cycles, and with a lot of trickery, it is possible to
decode and encode the USB waveforms by software. The USB driver needs
approximately 1250 to 1350 bytes of flash space (excluding the optional
identification strings), depending on the configuration and compiler
version, and 46 bytes RAM (excluding stack space). The C interface
consists of 3 to 5 functions, depending on the configuration.
vusb description from http://www.obdev.at/products/vusb/
V-USB is a software-only implementation of
a low-speed USB device for Atmel's AVR microcontrollers, making it
possible to build USB hardware with almost any AVR microcontroller, not
requiring any additional chip.
features
note that the io lines to the target mcus
are not protected. you can add 1k-2k resistors to SCK and MOSI and
protect against possible wrong connections
references based on the works found at
v-usb from framework http://www.obdev.at/vusb/
usbtiny isp http://www.xs4all.nl/~dicks/avr/usbtiny/
parts list
tools required
application notes
schematic breadboard layout construction
building and flashing the project the project was built in a linux ubuntu
lucid box with avr-gcc toolchain. it is assumed you already have such an
environment, or you can find out from the internet how to setup one up.
source codes are gnu gpl v2 licensed from inheritence.
the source code follows a convention
recommended by v-usb, you can download the source package vusbtiny.tgz
and untarred in into a project directory. within your source directory,
there is a main.c, which is my version of modified usbtiny programmer.
and a usbdrv sub-directory, which contains the v-usb layer. please
observe licensing term from the above two projects when building this.
my source on the programmer logic is based on Dick Streefland version
and not the ladyada version (although they are almost the same).
source can be download here
[Dec 23rd, 2010] add compiled binaries
firmware binaries can be download here
untar the source package into your working directory
tar -zxvf vusbtiny.tgz
after flashing firmware, we need to properly set the fuse, we are using pin 1 reset as io in this project
avrdude -c usbtiny -p t45 -V -U lfuse:w:0xe1:m -U hfuse:w:0x5d:m -U efuse:w:0xff:m this setting disables further programming
via 5V SPI as we need the RESET pin (pin1) for io. you will need access
to a HVSP programmer to recover the fuse.
vusbtiny layout done on mini breadboard direct flashing on breadboard if you are using vusbtiny to flash 8 pin
AVR devices, you can just press your target device on top of the
programmer device. the programmer had been designed so that the
programming pins matches w/ targets. there is one trick though, you will
need to isolate pin 2 and 3 on the programmer mcu, as they are the USB
D+ and D- pins connecting to the PC. i use a cut of scotch tape to
achieve this, you can see it on the photos. show below is a tiny13v
"riding" on the tiny45, ready to receive firmware.
ISP flashing via jumper to program a target circuit via ISP
(in-system programming), you need an ISP cable. here i am not using the
standard 2x3 or 2x5 pin headers. instead i am using a 1x6 jumper which
is more breadboard friendly, you can make 2x3 or 2x5 pin header by
mapping them to J2 as shown on the breadboard layout and schematics. the
following photo shows an tiny2313 ready to get flashed via ISP.
troubleshooting
|