在线时间128 小时
UID2091686
注册时间2014-5-7
NXP金币0
TA的每日心情 | 开心 2017-4-27 08:44 |
---|
签到天数: 64 天 连续签到: 1 天 [LV.6]常住居民II
金牌会员
 
- 积分
- 1703
- 最后登录
- 1970-1-1
|
如题,读出来的ADC值为245或246,进计算为24°。相关代码如下:
#define TEMP_CHANNEL 0x1A //Temp Sensor is selected as input
#define BG_CHANNEL 0x1B //Bandgap is selected as input
#define AD_DISABLE 0x1F //Module Disable
#define ADCR_TEMP25 239 // 25℃时ADC值
#define TempSlope_Cold 56 //低温时的斜率,ADC值大于ADCR_TEMP25
#define TempSlope_Hot 60 //高温时的斜率,ADC值小于ADCR_TEMP25
void InitADC( void )
{
SIM_SCGC6 |= SIM_SCGC6_ADC0_MASK; // enable ADC0 clock
/*ADC0_CFG1 = ADC_CFG1_ADIV(1)|
ADC_CFG1_MODE(2)|
ADC_CFG1_ADICLK(3);*/
ADC0_CFG1 = ADC_CFG1_ADIV(0)| //The divide ratio is 1 and the clock rate is (input clock)/1.
ADC_CFG1_MODE(2)| //It is single-ended 10-bit conversion.
ADC_CFG1_ADICLK(0)| //Bus clock
ADC_CFG1_ADLPC_MASK|
ADC_CFG1_ADLSMP_MASK;
ADC0_SC2 = 0;
ADC0_SC1A = ADC_SC1_AIEN_MASK | ADC_SC1_ADCH(0X1A);
}
unsigned char TriggerADC(unsigned char Channel)
{
if(Channel == 0x1B) // Bandgap is selected as input
PMC_REGSC |= PMC_REGSC_BGBE_MASK; // Bandgap buffer enabled
ADC0_SC1A = Channel; // update the channel value
return 1;
}
unsigned int ReadADCPoll(void)
{
while((ADC0_SC1A & ADC_SC1_COCO_MASK) == 0);
//ADC0_SC1A &= ~ ADC0_SC1A_COCO_MASK;
return ADC0_RA;
}
unsigned int ReadADC_TempChannel(void)
{
unsigned int i = 0, adc_value = 0;
for(i=0; i> 4;
TriggerADC(AD_DISABLE);
return adc_value;
}
int Get_Temperature(void)
{
unsigned int adc_temp;
int value, temp_value;
adc_temp = ReadADC_TempChannel();
DEBUG_TRACE(MOD_ADC,"adc_temp = %d", adc_temp);
if (adc_temp >= ADCR_TEMP25)
{
value = (adc_temp - ADCR_TEMP25) * 10 / TempSlope_Cold;
temp_value = (int)(25 - value);
}
else
{
value = (ADCR_TEMP25 - adc_temp) * 10 / TempSlope_Hot;
temp_value = (int)(25 + value);
}
return temp_value;
}
|
|