Great, mature but far from obsolete, budget programmer for use with Microchip/ATMEL devices. It is available since many, many years.
You can obtain both - a good quality DIY kit and a soldered, fully functional version. It works under Linux, Windows and MacOS. Official project page: www.fischl.de/usbasp. You will find there more detailed documentation and free for download firmware as well.
Programmer connects with the computer over USB port and acts as serial programmer (SPI). With just few wires attached, it can program chips directly, can also be used to access them over dedicated ports/circuits (ISCP). Of course it doesn't work just by itself. The program to drive the programmer is named avrdude. It is available as source code here: savannah.nongnu.org/projects/avrdude. Check bottom of this page for compiled, ready for use Windows binary version.
Avrdude is console application that can work in terminal mode. Invoking it can be automated with use of Makefile-s. It can be integrated with popular IDE-s like AVR Studio and/or Arduino as well.
To program ATmega devices or their smaller brothers - ATtiny ones, only few signal wires are needed plus the DC power supply.
|usbasp X2 pin||uC pin|
|2||JP1 USB 5V|
Here is an example of getting on the screen value of low fuse byte. Important options to remember are the -p followed by the target uC model name and -U with four colon-separated fields. 1st one is the accessed memory type, like: flash, eeprom, lfuse or hfuse. 2nd tells the type of operation performed and can be r, w or v. It stands for read, write and verify respectively. 3rd parameter is disk file name or "-" character for console output. And finally, 4th field tells the format of handled data: i-intel, r-raw_binary, h-hex, d-decimal, etc.
$ avrdude -c usbasp -p t25 -q -q -U lfuse:r:-:h 0xdf $
To get full avrdude output on the screen, just remove the two -q switches. It's not a mistake they've been given twice... Much more can be found in the program manual or in other online resources.