---------------------温度传感器温度采集
在用户手册的第十二章有详细说明
ADC 结构图如下:
Adc inputs
the registers TR0.ADCTM and
ATEST.ATESTCTRL must be set as described in the register descriptions in Section 12.2.10 and
Section 23.15.3 (CC253x) or Section 24.1 (CC2540), or Section 25.12 (CC2541).
打开温度传感器
TR0 = 0x01;
ATEST = 0x01;
采用手动触发的方式进行ad采样
Adc有三个控制寄存器ADCCON1 ADCCON2 ADCCON3
寄存器的设置如下:00110011
最低两位始络为11
ADCCON1.EOC为0
ADCCON1.ST为0
ADCCON1.STSEL 为11
ADCCON2的设置和ADCCON3的配置是一样的0011 1110
ADC参考电压使用内部电压采用12位精度采集,值为0x3e
示例代码如下:
复制lcd工程,添加如下代码:
ADC.h文件如下:
/******************************************************************************
版权所有 (C), 2014-2020
******************************************************************************
文 件 名 : ADC.h
版 本 号 : V1.0
作 者 : retacn
生成日期 : 2014年9月20日
功能描述 : ADC.c 的头文件
函数列表 :
修改历史 :
1.日 期 : 2014年9月20日
作 者 : retacn
修改内容 : 创建文件
******************************************************************************/
#ifndef __ADC_H__
#define __ADC_H__
/*----------------------------------------------*
* 包含头文件 *
*----------------------------------------------*/
#include "common.h"
#ifdef __cplusplus
#if __cplusplus
extern "C"{
#endif
#endif /* __cplusplus */
/*读取温度传感器值*/
extern uint16 ADC_Read (uint8 channel);
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* __cplusplus */
#endif /* __ADC_H__ */
ADC.c文件
/******************************************************************************
版权所有 (C), 2014-2020
******************************************************************************
文 件 名 : ADC.c
版 本 号 : V1.0
作 者 : retacn
生成日期 : 2014年9月20日
功能描述 : ADC采样
函数列表 :
ADC_Read
修改历史 :
1.日 期 : 2014年9月20日
作 者 : retacn
修改内容 : 创建文件
******************************************************************************/
/*----------------------------------------------*
* 包含头文件 *
*----------------------------------------------*/
#include <ioCC2540.h>
#include "common.h"
/*****************************************************************************
函 数 名 : ADC_Read
功能描述 : 读取指定通道的电压值
输入参数 : uint8 channel 通道号
输出参数 : 无
返 回 值 :
注意 :
默认读取12位精度的电压,读取10次取平均值
修改历史 :
1.日 期 : 2014年9月20日
作 者 : tetacn
修改内容 : 创建
*****************************************************************************/
/*channel 14*/
uint16 ADC_Read (uint8 channel)
{
int16 reading = 0;
/*0x01左移14,0001 1100*/
uint8 adcChannel = 0x01<<channel;
int16 Result = 0;
if (channel <= 7) // 通道0-7需要通过P0.0-P0.7输入
{
/*adccfg=0xf2,1111 0010*/
/* | 0001 1100*/
/* 1111 1110*/
ADCCFG |= adcChannel;
}
uint8 i=0;
do{
/*adccon3=0xb6,1011 0110*/
/* 14 0001 0100*/
/* 0001 1110 */
/* | 20 0010 0000*/
/* 0011 1110*/
ADCCON3 = channel | 0x20; // 12位精度,启动转换
while (!(ADCCON1 & 0x80)); // 等待转换完成
// 读取采样结果
reading = (int16)(ADCL);
reading |= (int16)(ADCH << 8);
reading >>= 4; // 丢弃低位
Result += reading; // 累加
}while(i++ < 10); // 连续采样10次
if (channel <= 7)
{
ADCCFG &= (adcChannel ^ 0xFF);
}
return (Result/10);
}
Main.c文件
/******************************************************************************
版权所有 (C), 2014-2020
******************************************************************************
文 件 名 : main.c
版 本 号 : V1.0
作 者 : retacn
生成日期 : 2014年9月20日
功能描述 : ADC温度采集
函数列表 :
修改历史 :
1.日 期 : 2014年9月20日
作 者 : retacn
修改内容 : 创建文件
******************************************************************************/
/*----------------------------------------------*
* 包含头文件 *
*----------------------------------------------*/
#include <stdio.h>
#include <ioCC2540.h>
#include "Lcd12864.h"
#include "adc.h"
/*----------------------------------------------*
* 宏定义 *
*----------------------------------------------*/
#define TEMP_ADC_CHANNEL 14
int main(void)
{
float temp=0;
char LCDBuf[21] = {0};
SysStartXOSC(); // 启动外部晶振
LCD12864_Init(); // LCD初始化
// 打开温度传感器
TR0 = 0x01;
ATEST = 0x01;
while(1)
{
temp = (ADC_Read(TEMP_ADC_CHANNEL) - 1340) /10.0;
sprintf(LCDBuf, " temp : %0.1f", temp); //
LCD12864_DisStr(3, LCDBuf);
SoftWaitUs(100000);
}
return 0;
}