This section discusses the analog front end for all of my sensors. I had to do some signal conditioning which I'll discuss in a second.
I used a type K thermal couple in this project which outputs about 40uV (micro volts) per degrees C. It is basically impossible to sample a 40uV signal, especially when I'm using an ADC with a resolution of 2mV / sample. The good news is that it is actually pretty easy (and cheap) to fix this problem.
The circuit for the thermal couple is two stage amplifier consisting of two op-amps from microchip. The first stage is a differential input. This means that we can plug in a differential signal (i.e the thermal couple...it has two wires which will have a difference in potential on them) and amplify the difference between the two input signals. I chose a gain of 25 because originally I was thinking that 1mV/C might be ok. So, after this first stage I get an output of 1mv/C and after trying to sample this I came to the conclusion that it still wasn't out of the noise enough. My samples were still too jumpy and unreliable.
Since 1mV/C isn't good enough for me, I had to add a second stage in to boost the output voltage up to something higher. I chose 8mV/C because it is easy to divide by powers of two in C. All you have to do is right shift. Remember, 1 ADC sample = 2mV so we get 4 sample/C and to convert that to 1 sample/C I only have to do a simple right shift twice.
So, the second stage is a non-inverting amplifier with a gain of 8. This gives us an output of 8mV/C.
The second section is a unity gain buffer for the MCP9700A which may or may not be necessary. I was in the middle of all this op-amp work though so I figured, just to be safe, I should run the output of that chip through a unity gain buffer. The reason you use a unity gain buffer is to boost the "Power" of a weak signal. If you have a sensor that outputs, say 2v, but you can't draw more than 1mA from it you may have a problem. If you connect it to something that draws more than 1 mA your voltage will be dragged down. This actually happened to the POT I used to create my ADC reference voltage. The resistor divider consisted of very large impedance resistors and the reference circuit in the ADC was trying to source more current then the voltage divider could support. This in turn dragged down my voltage giving me weird ADC values in the beginning. After passing this signal through the buffer the ADC ref. could pull as much current as it needed. If this doesn't make sense study up on current buffers. There is a lot of info out there and they are actually very simple.
Note-I haven't been able to get the python app packed up as an exe yet because of some technical problems, but when I get this figured out I'll update the package. The source code (python GUI and embedded C) is packed up as the aptana project and CCS studion project respectively. It should be simple to import these and check out the code. If importing doesn't work just check out the source files or create your own project and add the source files only to it.