OBDuino
Contact : info@obduino.ca


Tools

I had inquiries about the tools I use to make all of this, so here's a small list

Hardware tools

Soldering station

Edsyn 951SXThe Edsyn 951SX is a wonderful soldering station, used in industries for more than 15 years.
First I had a small Radio-Shack iron that was crap, I then bought a nicer Xytronic 200GX-30 but temperature reach 900°F and it's way too much, so I plugged it on a dimmer (see instructions). It was way better but it was still not perfect. I then had the opportunity to buy a lightly used Edsyn and this station is very good, industrial grade.

Plier, cutter, striper, etc

For the plier I use a dollar store bent-nose one, one without teeth.
My stripper is a Ripley/Miller 101-S, a wonderful tool to strip wires to make prototypes! The 101-S is the same as the model 100 but with an opening spring and closing lock feature.
My cutter is a classic Xcelite 175D.

Softwares

At first I used the Arduino Java IDE, version 0012, it worked fine until 0013 went out with a new gcc compiler with broken optimization, my application didn't fit anymore in the 16K flash. So I checked what the IDE was doing under to compile and upload.
It turned out the IDE is built on WinAVR, a toolchain including GCC, binutils, avr-libc, avrdude, etc and a couple of unix utilities. I then set up a cygwin suite and used avr-gcc 4.3.0 (the same one as in the 0012 Arduino package) and modified a Makefile to fit my need. I splitted my sketch into multiple .c and slowly re-wrote all the Arduino/Wiring libraries to use my own code. Using agressive optimization I went from 19k to less than 16k.

AVR Programmer

I started with an Arduino (in fact, a FreeDuino) so it was easy to upload my application via the serial port and bootloader, nothing special to use, only a regular serial cable. When the application reached more than 14k, I had to get rid of the bootloader and use an ISP programmer, with the avrdude software.
My first one was a parallel port programmer, it does work... but sometimes it does not! One day I was able to flash my chip ten times in a row without problem, the next day all I had was bad verify and one day it even screwed the fuses so I was not able to talk to the chip anymore! The programming is pretty fast, about 5s to write 16k, same for reading.
I then made a ponyprog serial programmer, embedded into a serial plug (like here). It works fine, but it's slooooowwwww... about 45s to write and 45s to read... and it takes 100% of a CPU core to do its bit banging.
I found a better parallel port programmer, the Protected Parallel Port Programming Dongle but was not sure of still using a parallel port, it starts to become rare on desktop and even if there is still sometimes serial port on laptop, forget it for a parallel port one. USB to serial may work with serial dongle, but USB to parallel interfaces do not work with this kind of programmer.
The right think to use nowadays is a USB interface, there is two kind of USB programmer, the one with hardware USB controller like an FTDI chip, can be expensive, and the one with "software USB", cheaper.
I went the cheap way :) especially because I like the DIY hack approach. There is two major designs: the USBtinyISP and the USBasp. As I had an ATMEGA8 laying around, I did an USBasp, result is pretty nice as you can see in the following pictures. What I like about this programmer is that it's reliable, and is very fast, 3.4s to write 16k and 2.8s to read it, and I can use it anywhere (especially with my netbook)
USBasp USBasp
(Note the copper wire used as a ground collector at the bottom, thanks to a tip of my co-worker!)

As I bricked a couple of AVR because of faulty hardware or my fault, I then bougth an Atmel STK500, it's still with a serial cable, but it's easy to use with AVRStudio to either flash, change fuses and especially use with high voltage (12V) parallel programming to recover those bricked AVR!