(转自) http://blog.csdn.net/qq_15647227/article/details/53393253

CC2530 ADC学习笔记

CC2530的ADC最大支持14位(实际上为12位)的模拟数字转换。它包括一个模拟多路转换器,具有多达8个可独立配置的通道以及一个参考电压发生器。 
ADC框图如下所示: 

由图中可知CC2530的AD有多种输入通道如AIN0~AIN7、VDD/3、温度传感器等。 
CC2530的采样精度有7Bit、9Bit、10Bit、12Bit四种,可通过对ADCCON2寄存器、ADCCON3寄存器进行配置来改变ADC的采样精度。

一、GPIO配置

由于ADC的AIN引脚设定在P0端口,因此需要对P0端口的寄存器进行配置。需要配置的寄存器有:APCFG寄存器、P0SEL寄存器、P0DIR寄存器(CC2530的GPIO默认情况下为输入状态)。

寄存器名称 寄存器介绍
APCFG P0.0~P0.7模拟IO功能配置
P0SEL P0.0~P0.7外设功能选择
P0DIR P0.0~P0.7引脚方向

注:P0.0对应AIN0, P0.7对应AIN7;

例程:

/** ADC AIN通道引脚定义 */
#define USE_P0_0_AS_ADC_CH0 (0x01)
#define USE_P0_1_AS_ADC_CH1 (0x02)
#define USE_P0_2_AS_ADC_CH2 (0x04)
#define USE_P0_3_AS_ADC_CH3 (0x08)
#define USE_P0_4_AS_ADC_CH4 (0x10)
#define USE_P0_5_AS_ADC_CH5 (0x20)
#define USE_P0_6_AS_ADC_CH6 (0x40)
#define USE_P0_7_AS_ADC_CH7 (0x80)/********************************************************************************** @brief   ADC通道初始化函数* @param   [in/out]  channel    初始化通道* @return  [in/out]  void* @note    NONE********************************************************************************/
void MCU_ADC_CH_Init( uint8 channel )
{APCFG |= channel;P0SEL |= channel;//P0DIR &= ~channel;//P0INP |= channel;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

二、ADC配置

ADC有6个控制寄存器,它们分别是:ADCL寄存器、ADCH寄存器、ADCCON1寄存器、ADCCON2寄存器、ADCCON3寄存器、TR0寄存器。

1. ADC数据寄存器介绍

ADCL寄存器和ADCH寄存器保存的是AD转换完成的结果,数据以2的补码形式表现。下表为采样精度与有效数据解析表:

采样精度 有效数据(从低到高)
7 Bit ADCH寄存器的第0位到第6位
9 Bit ADCL寄存器的第6位到ADCH寄存器的第6位
10 Bit ADCL寄存器的第5位到ADCH寄存器的第6位
12 Bit ADCL寄存器的第3位到ADCH寄存器的第6位

例程

/********************************************************************************** @brief       读取AD转换数值* @param       [in/out]  void* @return      [in/out]  bool    程序运行状态* @note        ADC工作在单次转换模式********************************************************************************/
bool Rd_ADC_Data( uint16 *data, uint8 convert_bit )
{uint16 temp = (uint16)(ADCH << 8);temp |= (uint16)ADCL;if( !MCU_ADC_FLAG ){return false;}switch(convert_bit){case ADC_CONVERT_7BIT:temp >>= 8;*data = temp & ~(1 << 8);break;case ADC_CONVERT_9BIT:temp >>= 5;*data = temp & ~(1 << 10);break;case ADC_CONVERT_10BIT:temp >>= 4;*data = temp & ~(1 << 11);break;case ADC_CONVERT_12BIT:temp >>= 2;*data = temp & ~(1 << 13);break;default:return false;break;}return true;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44

2. ADCCON1寄存器介绍

名称 功能介绍 占用空间 参数枚举
EOC ADC转换完成标志 1 Bit -
- - - 0(转换未完成)
- - - 1(转换完成)
ST 软件开启转换位 1 Bit -
- - - 0(ADC没有转换任务)
- - - 1(软件触发ADC转换信号)
STSEL 配置AD转换触发信号 2 Bit  
- - - 00(P2.0引脚触发AD转换)
- - - 01(ADC一直处于转换状态,不等待触发信号)
- - - 10(定时器0通道1比较事件触发AD转换)
- - - 11(ST触发AD转换)
RCTRL 控制16位随机数发生器 2 Bit 不介绍
- 保留 2 Bit -

3. ADCCON2、ADCCON3寄存器介绍

名称 功能介绍 占用空间 参数枚举
REF ADC转换参考电压 2 Bit -
- - - 00(使用内部参考电压)
- - - 01(使用AIN7引脚上的外部点电压作为参考电压)
- - - 10(使用AVDD5作为参考电压)
- - - 11(使用AIN6-AIN7差分输入外部电压作为参考电压)
DIV ADC转换抽取率(转换时间和转换精度) 2 Bit -
- - - 00(转换精度为7)
- - - 01(转换精度为9)
- - - 10(转换精度为10)
- - - 11(转换精度为12)
CH ADC采样通道 4 Bit -
- - - 0000(配置ADC采样通道为AIN0)
- - - 0001(配置ADC采样通道为AIN1)
- - - 0010(配置ADC采样通道为AIN2)
- - - 0011(配置ADC采样通道为AIN3)
- - - 0100(配置ADC采样通道为AIN4)
- - - 0101(配置ADC采样通道为AIN5)
- - - 0110(配置ADC采样通道为AIN6)
- - - 0111(配置ADC采样通道为AIN7)
- - - 1000(配置ADC采样通道为AIN0-AIN1电压)
- - - 1001(配置ADC采样通道为AIN2-AIN3电压)
- - - 1010(配置ADC采样通道为AIN4-AIN5电压)
- - - 1011(配置ADC采样通道为AIN6-AIN7电压)
- - - 1100(GND)
- - - 1101(正参考电压)
- - - 1110(温度传感器)
- - - 1111(VDD/3)

配置ADCCON2寄存器完成循环AD转换,配置ADCCON3寄存器完成单次AD转换。

例程:

// AD参考电压配置
#define ADC_SREF_VREF       (0x00)
#define ADC_SREF_AIN7       (0x01)
#define ADC_SREF_AVDD       (0x02)
#define ADC_SREF_AIN6_AIN7  (0x03)// AD转换精度
#define ADC_CONVERT_7BIT    (0x00)
#define ADC_CONVERT_9BIT    (0x10)
#define ADC_CONVERT_10BIT   (0x20)
#define ADC_CONVERT_12BIT   (0x30)// AD转换通道
#define ADC_CONVERT_CH0     (0x00)
#define ADC_CONVERT_CH1     (0x01)
#define ADC_CONVERT_CH2     (0x02)
#define ADC_CONVERT_CH3     (0x03)
#define ADC_CONVERT_CH4     (0x04)
#define ADC_CONVERT_CH5     (0x05)
#define ADC_CONVERT_CH6     (0x06)
#define ADC_CONVERT_CH7     (0x07)
// AD转换差分输入信号
#define ADC_CONVERT_CH0_CH1 (0x08)
#define ADC_CONVERT_CH2_CH3 (0x09)
#define ADC_CONVERT_CH4_CH5 (0x0A)
#define ADC_CONVERT_CH6_CH7 (0x0B)
// AD转换其它信号
#define ADC_CONVERT_GND     (0x0C)
#define ADC_CONVERT_VREF    (0x0D)
#define ADC_CONVERT_TEMP    (0x0E)
#define ADC_CONVERT_VDD_3   (0x0F)// 启动ADC转换
#define MCU_ADC_START()     ( ADCCON1 |= 0x70 )
// ADC转换完成标识
#define MCU_ADC_FLAG        ( ADCCON1 & 0x80 )
// 使能AD转换中断
#define enable_adc_isr()    (IEN0 |= 0x02)
//失能AD转换中断
#define disable_adc_isr()   (IEN0 &= ~0x02)/********************************************************************************** @brief       ADC启动单次转换函数* @param       [in/out]  channel        转换通道* @param       [in/out]  convert_bit    转换数据打小* @return      [in/out]  void* @note        None********************************************************************************/
void MCU_ADC_SIGNAL_START( uint8 adc_ref, uint8 channel, uint8 convert_bit )
{ADCCON3 = adc_ref | channel | convert_bit;enable_adc_isr();MCU_ADC_START();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57

三、参考资料

[1]. CC2530数据手册

(转)CC2530 ADC学习笔记相关推荐

  1. Stm32f103 ADC 学习笔记

    原文地址为: Stm32f103 ADC 学习笔记 在做有AD模块项目的时候遇到几个问题: 1,  ADC配合DMA采样规则是怎样的. 2,  ADC在DMA采可否不连续采样,以提高有效采样使用率和降 ...

  2. CC2530 ADC学习

    CC2530有8个ADC通道,系统框图如下: 使用ADC有两种情况: 第一种是连续转换,此时需要配置ADCCON1和ADCCON2寄存器: 第二种是单次转换,此时只需要配置寄存器ADCCON3即可. ...

  3. DM365 adc学习笔记

    Data: 2015.11.23 Author: cjh Theme: DM365 adc Note 数据手册并没有写明ADC可采集电压的范围,但是整个ADC模块的供电电压是1.8V,并且参照合众达的 ...

  4. ADC 学习笔记(二)指标参数总结

    分辨率 这个参数仅仅代表输出位数,不代表有效的性能参数 有效位数ENOB 真正代表了多少位为精确的数据,与SNR和NSD(噪声功率谱密度)有密切的关系 最大量程FSR(full scale range ...

  5. 嵌入式学习笔记——ADC模数转换器

    ADC模数转换器 前言 ADC介绍 ADC概述 ADC的数量 ADC的特性 ADC框图 芯片外部框图 芯片内部框图 转换部分框图 状态输出部分 条件触发框图 寄存器介绍 编程思路 模式选择 规则通道的 ...

  6. GD32F103学习笔记(8)——ADC接口使用

    一.简介 ADC(Analog-to-Digital Converter),即模拟-数字转换器,可以将连续变化的模拟信号转换为离散的数字信号,进而使用数字电路进行处理,称之为数字信号处理. GD32F ...

  7. 小猫爪:S32K3学习笔记05-S32K3之ADC

    小猫爪:S32K3学习笔记05-S32K3之ADC 1 前言 2 资源简介 3 ADC功能详解 3.1 ADC mux-mode channels 3.2 ADC内部框架 3.3 时钟源 3.4 通道 ...

  8. STM32学习笔记(13)——模数转换ADC

    这个月一直忙于准备考试,已经考完一半科目了,偷闲写了这篇文章.因为还没考完试,估计还得咕一段时间了. STM32学习笔记(13)--模数转换ADC 第一部分:ADC功能框图 一.输入电压 二.输入通道 ...

  9. STM32学习笔记(八)丨ADC模数转换器(ADC单、双通道转换)

    本篇文章包含的内容 一.ADC 模数转换器 1.1 ADC简介 1.2 逐次逼近型ADC工作原理 1.3 STM32中的ADC基本结构 1.4 STM32中ADC的输入通道 1.5 STM32中的AD ...

最新文章

  1. ASP.NET页面缓存介绍
  2. linux网络协议栈之数据包处理过程,Linux网络协议栈之数据包处理过程
  3. 【20181102T2】飞越行星带【智商题+最小瓶颈路】
  4. 解决:Cannot read property ‘component‘ of undefined ( 即 vue-router 0.x 转化为 2.x)
  5. java语言factory_一个简单例子解释 Java factory
  6. 嵌入式Linux入门4:版本控制git的使用
  7. 5 video关掉字幕选项_让PPT字幕滚动起来,一秒高端大气,赶紧码住!
  8. catch(…) vs catch(CException *)?
  9. db link hang的解决方法
  10. FastAPI 教程翻译 - 介绍
  11. Keil5安装教程(包含C51与MDK共存)WIN10 亲测可用
  12. oracle 查询日期转为字符串,SQL Server和Oracle日期与字符串之间的转换
  13. java拯救公主_Java实现 计蒜客 拯救行动
  14. rasa算法_Rasa 入门教程 NLU 系列(三)
  15. 冯俪 | 成为最好的你,才最有魅力!
  16. python tkinter根据多选框设置state=‘disabled‘控件的属性
  17. 快速使用Vitamio框架播放网络视频
  18. 蒲公英内测分发平台使用体验
  19. mysql忽略中英文括号_MySQL查询删除方括号之间的文本?
  20. 快播转型,用户且用切珍惜

热门文章

  1. 约书亚-摩西的好助手
  2. 一元二次方程求根(含根情况的判断)
  3. 当我们浏览器访问某个网站时,中间经历了什么,如何到达对方的?
  4. 教培行业变天,宝宝巴士的上市之路还“巴适”吗?
  5. 如何写好科研论文 撰写技巧(四)
  6. 内毒素检测——内毒素检测-LAL显色试剂盒
  7. 做一个网站需要多少钱?有哪些费用组成?
  8. 微软 Win10 Dev 预览版 21354 发布
  9. 呕心沥血苦战6个月,熬夜总结的这份Java0基础进阶架构师视频+笔记+课件+源码资料,快快收藏手慢无
  10. DRV8825电机驱动芯片使用细则