使用pic10f222内部绝对电压参考

时间:2018-11-09 16:43:18

标签: microcontroller pic

我想使用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而变化),
我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

要读取10F2xx PIC系列上的绝对电压基准(0.6V),然后在CCS C编译器(看起来像您所使用的)中执行以下操作:

set_adc_channel(2);

如果您使用其他编译器,请执行以下操作:

ADCON0 = (ADCON0 & 0xF3) | 0xC;

这并不能完全回答您的问题,因为您要设置PIC的ADC,以便将该绝对电压基准用于其他通道的ADC转换。该PIC不支持此功能。但是您可以使用该绝对电压基准的ADC读数来确定VDD的实际值,然后在软件中对ADC读数进行必要的补偿。