我想使用PIC10f222 ADC,并且没有问题:
#include <10F222.h>
#list
#device PIC10F222
#device adc=8
#FUSES NOWDT //No Watch Dog Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOMCPU //Master Clear Pull-up disabled
#FUSES NOMCLR
#FUSES IOSC4 //INTOSC speed 4 MHz
#device adc=8
#use delay(internal=4000000)
#define set_options(value){#ASM \
MOVLW value \
OPTION \
#ENDASM}
setup_adc(true);
set_tris_b (0b111); //set as output
set_options(0xDF); // Enable pin B2 for normal i/o
set_adc_channel(0);
adc1=read_adc();
但是,当VDD改变时,ADC会显示不同的值(这也可以,因为参考电压是VDD)。
我查看了PIC10F222的数据手册,发现“绝对电压系数”等于:
结果= 0.6 * 256 / VDD
我可以从上面的公式中得出VDD,然后获得精确的adc值,如下所示:
adc_set_channel(2);
adc1=read_adc();
vdd=0.6 * 256 / adc1 ;
adc_set_channel(0);
adc=read_adc();
//get the percise adc in popotion of VDD
....
但是adc1(绝对电压基准不会因VDD从4.9到5.2而变化),
我该如何解决这个问题?
答案 0 :(得分:0)
要读取10F2xx PIC系列上的绝对电压基准(0.6V),然后在CCS C编译器(看起来像您所使用的)中执行以下操作:
set_adc_channel(2);
如果您使用其他编译器,请执行以下操作:
ADCON0 = (ADCON0 & 0xF3) | 0xC;
这并不能完全回答您的问题,因为您要设置PIC的ADC,以便将该绝对电压基准用于其他通道的ADC转换。该PIC不支持此功能。但是您可以使用该绝对电压基准的ADC读数来确定VDD的实际值,然后在软件中对ADC读数进行必要的补偿。