I use atmel controllers exclusively, prominently the ATMEGA8... the mega32 ADC works a little differently than the MEGA8.
When I develop microcontroller code, the very first thing I do is to flash an LED!!! It doesn't just make you feel damn proud, it lets you know the system is working. Now, on a kit board, that may not be a big deal. But on a new design, it lets you know everything is hooked up and powered up correctly. Once you know your system works, you can get on to bigger and better things. No need stratching your head over why you can't read the ADC when you don't even have the micro powered up correctly.
I also program exclusively in asm code. Not that C doesn't have it's advantages, but ASM is where it's at, man!
I once built an RF interface, and had the serial ports configured wrong, but since the transmitter and receiver both had the same setup code, who's to say it was wrong??? I only noticed it when I tried to send data to a PC terminal. I was using the wrong (wrong for windows) edge to clock data. Also, if you want to protect your data on a closed system (you control both ends), you can use non standard bit rates (say 5000 baud vs 4800) and clock unusual edges (yeah, that's what I was doing) and of course encrypt your data. Of course, on a RF link, the FCC has rules about data encryption and all.
So, I don't know how much help to you my code will be, but for using the ADC here are some basics:
setup ADC for 8 bit, 10 bit right or 10 bit left justified (has to do with the odd 2 bits ... are they MSD or LSD, most significant digits or least significant digits). ADC ref source = external, internal 2.56V, or vcc/2. ADC clock source/scale. ADC channel (multiplexer channel, actually). Note that there are 8 external (dip) or 10 external (SMD) channels, but a multiplexer channel selection of (0-31) for single ended inputs or differential inputs. The upper selections include ground (so you can check for offset) and an internal 1.22V bandgap reference (so you can check your conversions against your selected reference). The MEGA8 only has a mux of 16 selections, and cannot do differential. So your mux selection code will be different. You also need to program single conversion mode or continous conversion mode, and interrupt mode (on or off). Once set up, you start the conversion, and wait for the end of conversion bit to set or the ADC interrupt.