(转)CC2530 ADC学习笔记
(转自) 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学习笔记相关推荐
- Stm32f103 ADC 学习笔记
原文地址为: Stm32f103 ADC 学习笔记 在做有AD模块项目的时候遇到几个问题: 1, ADC配合DMA采样规则是怎样的. 2, ADC在DMA采可否不连续采样,以提高有效采样使用率和降 ...
- CC2530 ADC学习
CC2530有8个ADC通道,系统框图如下: 使用ADC有两种情况: 第一种是连续转换,此时需要配置ADCCON1和ADCCON2寄存器: 第二种是单次转换,此时只需要配置寄存器ADCCON3即可. ...
- DM365 adc学习笔记
Data: 2015.11.23 Author: cjh Theme: DM365 adc Note 数据手册并没有写明ADC可采集电压的范围,但是整个ADC模块的供电电压是1.8V,并且参照合众达的 ...
- ADC 学习笔记(二)指标参数总结
分辨率 这个参数仅仅代表输出位数,不代表有效的性能参数 有效位数ENOB 真正代表了多少位为精确的数据,与SNR和NSD(噪声功率谱密度)有密切的关系 最大量程FSR(full scale range ...
- 嵌入式学习笔记——ADC模数转换器
ADC模数转换器 前言 ADC介绍 ADC概述 ADC的数量 ADC的特性 ADC框图 芯片外部框图 芯片内部框图 转换部分框图 状态输出部分 条件触发框图 寄存器介绍 编程思路 模式选择 规则通道的 ...
- GD32F103学习笔记(8)——ADC接口使用
一.简介 ADC(Analog-to-Digital Converter),即模拟-数字转换器,可以将连续变化的模拟信号转换为离散的数字信号,进而使用数字电路进行处理,称之为数字信号处理. GD32F ...
- 小猫爪: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 通道 ...
- STM32学习笔记(13)——模数转换ADC
这个月一直忙于准备考试,已经考完一半科目了,偷闲写了这篇文章.因为还没考完试,估计还得咕一段时间了. STM32学习笔记(13)--模数转换ADC 第一部分:ADC功能框图 一.输入电压 二.输入通道 ...
- STM32学习笔记(八)丨ADC模数转换器(ADC单、双通道转换)
本篇文章包含的内容 一.ADC 模数转换器 1.1 ADC简介 1.2 逐次逼近型ADC工作原理 1.3 STM32中的ADC基本结构 1.4 STM32中ADC的输入通道 1.5 STM32中的AD ...
最新文章
- ASP.NET页面缓存介绍
- linux网络协议栈之数据包处理过程,Linux网络协议栈之数据包处理过程
- 【20181102T2】飞越行星带【智商题+最小瓶颈路】
- 解决:Cannot read property ‘component‘ of undefined ( 即 vue-router 0.x 转化为 2.x)
- java语言factory_一个简单例子解释 Java factory
- 嵌入式Linux入门4:版本控制git的使用
- 5 video关掉字幕选项_让PPT字幕滚动起来,一秒高端大气,赶紧码住!
- catch(…) vs catch(CException *)?
- db link hang的解决方法
- FastAPI 教程翻译 - 介绍
- Keil5安装教程(包含C51与MDK共存)WIN10 亲测可用
- oracle 查询日期转为字符串,SQL Server和Oracle日期与字符串之间的转换
- java拯救公主_Java实现 计蒜客 拯救行动
- rasa算法_Rasa 入门教程 NLU 系列(三)
- 冯俪 | 成为最好的你,才最有魅力!
- python tkinter根据多选框设置state=‘disabled‘控件的属性
- 快速使用Vitamio框架播放网络视频
- 蒲公英内测分发平台使用体验
- mysql忽略中英文括号_MySQL查询删除方括号之间的文本?
- 快播转型,用户且用切珍惜