查看: 1880|回复: 4

[已解决] KL46z 内部温度传感器问题咨询(已解决)

[复制链接]

该用户从未签到

4

主题

37

帖子

0

新手上路

Rank: 1

积分
48
最后登录
1970-1-1
发表于 2014-3-22 12:04:15 | 显示全部楼层 |阅读模式
各位大神,我现在使用KL46z开发板,用内部温度传感器采集温度,按照例程配置了ADC,可是在采集时候ADC0_SC1B寄存器COCO状态位怎么都不置高。我看资料里面说ADC0_SC1B寄存器要在硬件触发情况下才能使用,但是我配置了硬件触发之后,ADC0_SC1A寄存器的COCO怎么都不置高了,纠结啊!大家帮忙分析下呗,谢谢啦
void adc_Init(void)
{
    PMC_REGSC |= PMC_REGSC_BGBE_MASK;
  
  SIM_SCGC5 |= SIM_SCGC5_PORTE_MASK;                                  // 开启PE GPIO时钟              
  
  PORTE_PCR18 = PORT_PCR_MUX(0);                                      // 开启PE0管脚模拟功能ADC通道8  
  PORTE_PCR20 = PORT_PCR_MUX(0);
  
  SIM_SCGC6 |= SIM_SCGC6_ADC0_MASK;                                   // 开启ADC时钟                

  ADC0_CFG1 = ADC_CFG1_ADLSMP_MASK | 
                 ADC_CFG1_MODE(3) | 
                   ADC_CFG1_ADICLK(0);
  ADC0_SC2 |= ADC_SC2_ADTRG_MASK | ADC_SC2_REFSEL(0);                                      // 选择电源参考源               
  ADC0_SC3 = (ADC_SC3_ADCO_MASK | 
                ADC_SC3_AVGE_MASK | 
                ADC_SC3_AVGS(0x02));                                    // AD持续转换,平均使能,16次采样取平均
  
  ADC0_SC1A = ADC_SC1_ADCH(27);                                       // 选择27通道 BandGap                              
  ADC0_SC1B = ADC_SC1_ADCH(26);                                       // 选择26通道 Temp sensor     
}
uint16 getTempVal(void)
{
  ADC0_SC1A = ADC_SC1_ADCH(27);                                       // 选择27通道 BandGap                             
  ADC0_SC1B = ADC_SC1_ADCH(26);      
 
  while(( ADC0_SC1A & ADC_SC1_COCO_MASK ) != ADC_SC1_COCO_MASK);
  result0A = ADC0_RA;
 
  while(( ADC0_SC1B & ADC_SC1_COCO_MASK ) != ADC_SC1_COCO_MASK);
  result0B = ADC0_RB;
  Temperature = (uint16)ADC_Calculate(result0A, result0B);
  return   Temperature;
}
我知道答案 目前已有3人回答
回复

使用道具 举报

该用户从未签到

4

主题

37

帖子

0

新手上路

Rank: 1

积分
48
最后登录
1970-1-1
 楼主| 发表于 2014-3-22 14:28:55 | 显示全部楼层

RE:KL46z 内部温度传感器问题咨询

还有一个函数
float ADC_Calculate(uint16 result_A,uint16 result_B)
{
  float Vdd_Cal,ADCR_Temp25,ADCR_100m;
  float i;
  float Temp;
  
  Vdd_Cal=655350/result_A;
  ADCR_Temp25=471197/Vdd_Cal;
  ADCR_100m=112393/Vdd_Cal;
  Temp=(float)((result_B-ADCR_Temp25)*100/ADCR_100m);
  i=(float)(25-Temp);
  return (uint16)i;
}
回复 支持 反对

使用道具 举报

该用户从未签到

4

主题

37

帖子

0

新手上路

Rank: 1

积分
48
最后登录
1970-1-1
 楼主| 发表于 2014-3-22 14:29:38 | 显示全部楼层

回复:KL46z 内部温度传感器问题咨询

还有一个函数
float ADC_Calculate(uint16 result_A,uint16 result_B)
{
  float Vdd_Cal,ADCR_Temp25,ADCR_100m;
  float i;
  float Temp;
 
  Vdd_Cal=655350/result_A;
  ADCR_Temp25=471197/Vdd_Cal;
  ADCR_100m=112393/Vdd_Cal;
  Temp=(float)((result_B-ADCR_Temp25)*100/ADCR_100m);
  i=(float)(25-Temp);
  return (uint16)i;
}
回复 支持 反对

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2014-3-24 15:18:23 | 显示全部楼层

RE:KL46z 内部温度传感器问题咨询

楼主,你把工程给我吧,我调一下。
回复 支持 反对

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2014-3-24 16:56:29 | 显示全部楼层

RE:KL46z 内部温度传感器问题咨询

你好,在另一个帖子里,我们的工程师已经回你了。
https://www.nxpic.org.cn/bbs/article_1282_581252.html
 
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-7-19 04:56 , Processed in 0.100882 second(s), 25 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表