I can do microcontrollers. Let's start there.
I got pretty intimate with the Microchip PIC16F84 a few years ago, to the point of writing compilers and driving pretty much every type of peripheral from it. So I naturally figured that that would be a good starting point - moreso given that I already had programmers and chips and crystals. But after reviewing the specs again, I became less convinced. No PWM. No UARTs. Only 13 I/O lines - which seemed like a lot before - but which would probably be quite constrained on a robot.
So I did a review of what I could actually purchase without too much effort, and settled on the Atmel ATmega32. New programming environment, new equipment, new instruction set, new peripherals - but look at the features! 4 PWM channels, brilliant for driving motors. Tons of I/O. Plenty of ADC channels. Gobs of RAM and program space. Trivial programmer. The option to program in C. I was sold. I built a simple board based on the "Captain's Universe" ATmega16 progammer. I skipped the power regulator section of the circuit and powered it all from four NiMH AA's (oh, how I love NiMH AA's!).
After I fixed a few wiring mistakes, I had the board programming, first blinking its LED, then later 'breathing' like the LEDs on Apple machines.
The front of the microcontroller board: The empty header is for the programming cable, which links directly to the parallel port pins. All of the programmer components are on the board itself.
The back of the microcontroller board
I went with the WinAVR programming environment, which provides a C compiler, programmer, and lots of other goodies that I really haven't looked at yet. To program the chip, I used avrdude. I needed to add an entry to the config file (WinAVR/bin/avrdude.conf) to make it work with my programmer:
programmer id = "dapa";
desc = "Direct AVR Parallel Access cable";
type = par;
vcc = 3;
reset = 16;
sck = 1;
mosi = 2;
miso = 11;
After that, I could program the chip with:
avrdude -c dapa -p atmega32 -P lpt1 -U flash:w:avrledtest.hex
The code on the programmer page worked with some slight modifications. After much arguing with the on-chip PWM, I got the LED pulsing.
The timing was way off. I didn't intend to keep the timing routines in the code, so I didn't bother fixing them. The main issue was that the timing crystal wasn't being used. I fixed this by programming the fuse bits on the AVR. The first time I did this, the chip refused to work afterwards. My guess is that the chip needs a functional timer to be programmed with this programmer. I found another wiring mistake, and everything came good. In future, I'll be double-checking that my clock is working before committing such permanent changes...
Next, we need some motors to push the thing around. To connect motors to the microcontroller, we need high-current motor drivers.