Higher ADC resolution using oversampling:16 bits with 12
Posted: Mon Feb 11, 2013 10:49 pm
It is possible to have more than 1 bit resolution with oversampling
16 bits resolution was possible with a 12 bit ADC in our tests (see text below).
A good starting document can be found hereĀ :
http://www.atmel.com/images/doc8003.pdf
For this, the noise must be 1 LSB minimum(least significant bit)
We test this with a dsPIC 30F3014(with 12 bits ADC)
No oversampling:
1862 to 1863
1 LSB
ENOB=12 (effective number of bit)
Oversampling 16
1862,1 to 1862,6
0,5 LSB
ENOB=13 bits
Oversampling 32768
1862,155 to 1862,206
0,05 LSB
ENOB=16 bits
Time 10s
Here is the test program This should work with 16F and 18F family but dsPIC is better for signal processing.
I didn't test yet but it should be used on new DSP macro(different ways).
It is possible to improve the ADC sampling time. I use the standard ReadAsInt Macro and I must wait for the capacitor to charge.
A good option should be to use ADC_RAW_Configure_Channel+ ADC_RAW_Sample_Channel+ADC_RAW_Disable_Channel macro but the macro " ADC_RAW_Sample_Channel" doesn't work on my tests:the program block on that macro if used.
Is this a bug for dsPIC?
Another good option would be to develop the ADC_RAW_Average_Channel(not working on my 30F3014) with a 16 bits return and not 12 bits return. In fact, it should be a sum and not average. This should be easy to do in the macro C code: no divide by count...but don't work because ADC_RAW_Sample stop the program...
Can you help for "ADC_RAW_Sample_Channel" :stop program on use
16 bits resolution was possible with a 12 bit ADC in our tests (see text below).
A good starting document can be found hereĀ :
http://www.atmel.com/images/doc8003.pdf
For this, the noise must be 1 LSB minimum(least significant bit)
We test this with a dsPIC 30F3014(with 12 bits ADC)
No oversampling:
1862 to 1863
1 LSB
ENOB=12 (effective number of bit)
Oversampling 16
1862,1 to 1862,6
0,5 LSB
ENOB=13 bits
Oversampling 32768
1862,155 to 1862,206
0,05 LSB
ENOB=16 bits
Time 10s
Here is the test program This should work with 16F and 18F family but dsPIC is better for signal processing.
I didn't test yet but it should be used on new DSP macro(different ways).
It is possible to improve the ADC sampling time. I use the standard ReadAsInt Macro and I must wait for the capacitor to charge.
A good option should be to use ADC_RAW_Configure_Channel+ ADC_RAW_Sample_Channel+ADC_RAW_Disable_Channel macro but the macro " ADC_RAW_Sample_Channel" doesn't work on my tests:the program block on that macro if used.
Is this a bug for dsPIC?
Another good option would be to develop the ADC_RAW_Average_Channel(not working on my 30F3014) with a 16 bits return and not 12 bits return. In fact, it should be a sum and not average. This should be easy to do in the macro C code: no divide by count...but don't work because ADC_RAW_Sample stop the program...
Can you help for "ADC_RAW_Sample_Channel" :stop program on use