499|1

7

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

【EFM32 Zero Gecko Starter Kit】-4-ADC采集温度信息 [复制链接]

本帖来记录一下ADC模块的使用。目的是读取一个模拟温度传感器,这个传感器的接口直接通过ADC读取接口。

温度传感器型号是Adafruit TMP235:

 

 

温度计算范围:

Temp °C = 100*(reading in V) - 50 

 

计划选用PD6,目前暂未被使用。

 

从数据手册来看:

  、

还在在Simplicity Studio里面,找到SoftwareComponent的ADC组件,点击Install。

 

在main里面编写核心代码:

#define adcFreq   13000000

volatile uint32_t sample;
volatile uint32_t millivolts;
volatile char Temperature[20];
/**************************************************************************//**
 * @brief   Initialize ADC function
 *****************************************************************************/
void initADC (void)
{
  // Enable ADC0 clock
  CMU_ClockEnable(cmuClock_ADC0, true);

  // Declare init structs
  ADC_Init_TypeDef init = ADC_INIT_DEFAULT;
  ADC_InitSingle_TypeDef initSingle = ADC_INITSINGLE_DEFAULT;

  // Modify init structs and initialize
  init.prescale = ADC_PrescaleCalc(adcFreq, 0); // Init to max ADC clock for Series 0
  init.timebase = ADC_TimebaseCalc(0);

  initSingle.diff       = false;        // single ended
  initSingle.reference  = adcRef2V5;    // internal 2.5V reference
  initSingle.resolution = adcRes12Bit;  // 12-bit resolution

  // Select ADC input. See README for corresponding EXP header pin.
  initSingle.input = adcSingleInputCh6;

  ADC_Init(ADC0, &init);
  ADC_InitSingle(ADC0, &initSingle);

  // Enable ADC Single Conversion Complete interrupt
  ADC_IntEnable(ADC0, ADC_IEN_SINGLE);

  // Enable ADC interrupts
  NVIC_ClearPendingIRQ(ADC0_IRQn);
  NVIC_EnableIRQ(ADC0_IRQn);
}

/**************************************************************************//**
 * @brief  ADC Handler
 *****************************************************************************/
void ADC0_IRQHandler(void)
{
  // Clear the interrupt flag
  ADC_IntClear(ADC0, ADC_IFC_SINGLE);

  // Get ADC result
  sample = ADC_DataSingleGet(ADC0);

  // Calculate input voltage in mV
  millivolts = (sample * 2500) / 4096;

  // Start next ADC conversion
  ADC_Start(ADC0, adcStartSingle);
}

/**************************************************************************//**
 * @brief  Main function
 *****************************************************************************/
int main(void)
{
  CHIP_Init();

  initADC();

  // Start first conversion
  ADC_Start(ADC0, adcStartSingle);
  sprintf(Temperature, "%10.3f", (100*Temperature - 50));	
  GLIB_drawStringOnLine(&glibContext,
                        Temperature,
                        currentLine++,
                        GLIB_ALIGN_LEFT,
                        5,
                        5,
                        true);
    DMD_updateDisplay();

  // Infinite loop
  while(1);
}

 

需要注意的是采用通道是CH6,因为选择的是PD6.

至此程序编写已经完成,还有一个需要注意的地方:

 

 

测试结果:

待完善。

此帖出自单片机论坛

最新回复

这个小模块看着不错,上边温度传感器是个什么类型的,看着好像是LDO一样的封装   详情 回复 发表于 2024-3-24 21:39
点赞 关注
 

回复
举报

6060

帖子

7

TA的资源

版主

沙发
 

这个小模块看着不错,上边温度传感器是个什么类型的,看着好像是LDO一样的封装

此帖出自单片机论坛
 
个人签名

在爱好的道路上不断前进,在生活的迷雾中播撒光引

 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表