Buffers for ADC inputs? Increase precision?

I want to use the ADC inputs to precisely (with 10bit resolution obviously) measure a 0-10V signal source.

Obviously I need to scale this voltage down so I planned to use an opamp with 0.5 gain. From what I have read it is a good idea to use a more precise opamp (less drift etc.) like an LM358.
Is this a good idea? Anything better? Should I also add some diodes (like a precision rectifier scheme)?

On two of the other ADC inputs I am reading coarser 0-5V signals.
Since the ADC input is high impedence do I need an Op Amp buffer or could I just have a 100k resistor in series? I would also put clamping diodes to 5V and Gnd to protect the input from going out of range.

Anything better?

Yes a potential divider, no power requirements no drift no DC offset.

Since the ADC input is high impedence do I need an Op Amp buffer or could I just have a 100k resistor in series?

No that doesn't make sense, it is a high impedance so that is good, it will not load what you are driving it with. As long as your driving voltage has a 10K or so output impedance you will be fine.

so I don't need any kind of protection on the inputs to the adc? The reason for the 100k was if I had clamping diodes then there would be something to limit the current through them. The voltage source should be much lower than 10k impedence.

Another possibility, depending on what you actually want to measure, is to use a zener diode. A 5.6V zener will simply chop off a chunk of the voltage you're dealing with, so that the range of 5.6 ... 10 V shows up as 0 ... 4.4 V to the A2D. This gives you better resolution, but total loss of the lower range. I use this approach for measuring the voltage on my lead-acid battery using a 10V zener diode. Since voltages under 10V mean the battery is dead, I can concentrate on the 10 V ... 15 V range that I really care about, and use the full resolution of the Arduino's A2D.

See this for a discussion on protection. http://www.thebox.myzen.co.uk/Tutorial/Protection.html

For your case use 200R or so in place of the 20R shown to limit the current a bit but 100K is so high it will interfere with the A/D input.

just keep in mind that the output impedance of an ideal voltage source followed by a potential divider is the parallel combination of the two resistors

so if I have a resistor divider then the values need to be low or else they increase the impedence of the voltage source. But low values will also draw more current ( may not be a big deal). So I could have 1k+1k divider to divide the input voltage down, then this divided voltage could go through the pair of shottky diodes but no need for any other resistor since the dividing resistors create a path for the extra current if there is overvoltage.

Yes but I would use two 10K resistors, it uses less current and is the "right" value of the input sample and hold on the input capacitor of the A/D. Your voltage source should be able to drive into 20K without problems I would have thought. Don't put it through any diodes as you will loose voltage across them. But put either a 5v1 zenner across the input or two clamping diodes to the rail if you want some protection.

Sorry when I said “go through shottky” I really meant clamping diodes to +5 and 0

Also is it better to use the ARef pin and in code use Aref? Should I use a value lower than 5V for any reason?

If you use an external reference voltage then you have to supply a stable one with a reference voltage generator chip, probably at 3v3. You then need to adjust your potential divider to make sure the maximum voltage is this reference voltage. This will make the readings accuracy independent of the arduino's supply voltage. I don't know if this is an advantage to you but it is more hardware.