关键词:
第6课 CC2530的ADC工作原理与应用
广东职业技术学院 欧浩源
一、A/D转换的基本工作原理
将时间上连续变化的模拟量转化为脉冲有无的数字量,这一过程就叫做数字化,实现数字化的关键设备是ADC。
ADC:数模转换器,将时间和幅值连续的模拟量转化为时间和幅值离散的数字量,A/D转换一般要经过采样、保持、量化和编码4个过程。
二、CC2530的A/D转换模块
CC2530的ADC模块支持最高14位二进制的模拟数字转换,具有12位的有效数据位,它包括一个模拟多路转换器,具有8个各自可配置的通道,以及一个参考电压发生器。
该ADC模块有如下主要特征:
<1> 可选取的抽取率,设置分辨率(7~12位)。
<2> 8个独立的输入通道,可接收单端或差分信号。
<3> 参考电压可选为内部单端、外部单端、外部差分或AVDD5。
<4> 单通道转换结束可产生中断请求。
<5> 序列转换结束可发出DMA触发。
<6> 可将片内温度传感器作为输入。
<7> 电池电压测量功能。
三、ADC模块的信号输入
端口0引脚可以配置为ADC输入端,依次为AIN0~AIN7:
<1> 可以把输入配置为单端输入或差分输入。
<2> 差分输入对:AIN0~AIN1、AIN2~AIN3、AIN4~AIN5、AIN6~AIN7。
<3> 片上温度传感器的输出也可以作为ADC的输入用于测量芯片的温度。
<4> 可以将一个对应AVDD5/3的电压作为ADC输入,实现电池电压监测。
<5> 负电压和大于VDD的电压都不能用于这些引脚。
<6> 单端电压输入AIN0~AIN7,以通道号码0~7表示;四个差分输入对则以 通道号码8~11表示;温度传感器的通道号码为14;AVDD5/3电压输入的通道号码为15。
四、ADC相关的几个概念
<1> 序列ADC转换:可以按序列进行多通道的ADC转换,并把结果通过DMA传送到存储器,而不需要CPU任何参与。
<2> 单通道ADC转换:在程序设计中,通过写ADCCON3寄存器触发单通道ADC转换,一旦寄存器被写入,转换立即开始。
<3> 参考电压:内部生成的电压、AVDD5引脚、适用于AIN7输入引脚的外部电压,或者 适用于AIN6~AIN7输入引脚的差分电压。
<4> 转换结果:数字转换结果以2的补码形式表示。对于单端,结果总是正的。对于差分配置,两个引脚之间的差分被转换,可以是负数。 当ADCCON1.EOC设置为1时,数字转换结果可以获得,且结果总是驻留在ADCH和ADCL寄存器组合的MSB段中。
<5> 中断请求:通过写ADCCON3触发一个单通道转换完成时,将产生一个中断,而完成 一个序列转换时,是不产生中断的。当每完成一个序列转换,ADC将产生 一个DMA触发。
<6> 寄存器:ADC有两个数据寄存器:ADCL和ADCH;三个控制寄存器:ADCCON1、ADCCON2、ADCCON3;分别用来配置ADC并返回转换结果。
五、实训项目:定时采集电压数据发送到上位机
【1】配置APCFG寄存器
当使用ADC时,端口0的引脚必须配置为ADC模拟输入。要配置一个端口0引脚为一个ADC输入,APCFG寄存器中相应的位必须设置为1。这个寄存器的默认值是0,选择端口0为非模拟输入,即作为数字I/O端口。
注意:APCFG寄存器的设置将覆盖P0SEL的设置。
【2】配置ADCCON3寄存器
单通道的ADC转换,只需将控制字写入ADCCON3寄存器即可。
【3】ADC初始化
主要对端口的功能进行选择,设置其传输方向,并将端口设置为模拟输入。
【4】ADC数据采集
首先将ADCIF标志位清0,接着对ADCCON3寄存器设置,该寄存器一旦被写入,转换立即开启;然后等待ADCIF置1,这时候转换完成,读取数据即可。
【5】实训项目源代码
#include "ioCC2530.h" /*===============定时器1初始化函数==================*/ void Init_Timer1() { T1CC0L = 0xd4; //设置最大计数值的低8位 T1CC0H = 0x30; //设置最大计数值的高8位 T1CCTL0 |= 0x04; //开启通道0的输出比较模式 T1IE = 1; //使能定时器1中断 T1OVFIM = 1; //使能定时器1溢出中断 EA = 1; //使能总中断 T1CTL = 0x0e; //分频系数是128,模模式 } unsigned char count = 0; unsigned char F_time = 0; /*================定时器1服务函数====================*/ #pragma vector = T1_VECTOR __interrupt void Timer1_Sevice() { T1STAT &= ~0x01; //清除定时器1通道0中断标志 count++; if(count == 10) //定时1秒到 { F_time = 1; count = 0; } } /*===================UR0初始化函数====================*/ void Init_Uart0() { PERCFG = 0x00; //串口0的引脚映射到位置1,即P0_2和P0_3 P0SEL = 0x0C; //将P0_2和P0_3端口设置成外设功能 U0BAUD = 59; //16MHz的系统时钟产生9600BPS的波特率 U0GCR = 9; U0UCR |= 0x80; //禁止流控,8位数据,清除缓冲器 U0CSR |= 0xC0; //选择UART模式,使能接收器 UTX0IF = 0; //清除TX发送中断标志 URX0IF = 0; //清除RX接收中断标志 URX0IE = 1; //使能URAT0的接收中断 EA = 1; //使能总中断 } unsigned char dat[4]; /*===================UR0发送字符串函数==================*/ void UR0SendString(unsigned char *str, unsigned char count) { while(count--) { U0DBUF = *str++; //将要发送的1字节数据写入U0DBUF while(!UTX0IF); //等待TX中断标志,即数据发送完成 UTX0IF = 0; } } /*===================ADC初始化函数====================*/ void Init_ADC0() { P0SEL |= 0x01; //P0_0端口设置为外设功能 P0DIR &= ~0x01; //P0_0端口设置为输入端口 APCFG |= 0x01; //P0_0作为模拟I/O使用 } /*===================读取ADC的数据====================*/ void Get_ADC0_Value() { ADCIF = 0; //参考电压选择AVDD5引脚,256抽取率,AIN0通道0 ADCCON3 = (0x80 | 0x10 | 0x00); while(!ADCIF); //等待A/D转换完成, dat[0] = 0xaf; dat[1] = ADCH; //读取ADC数据低位寄存器 dat[2] = ADCL; //读取ADC数据高位寄存器 dat[3] = 0xfa; } /*=======================主函数======================*/ void main() { Init_Uart0(); Init_Timer1(); Init_ADC0(); while(1) { if(F_time == 1) //定时1秒时间到 { Get_ADC0_Value(); //进行A/D转换并读取数据 UR0SendString(dat,4); //向上位机发送数据 F_time = 0; //定时1秒标志清0 } } }
【结语】:
关于CC2530微控制器入门基础教程到此大功告成。
理解并能独立完成上述6个基本模块的应用,可以说基本上掌握了CC2530的基础应用,为日后学习Zigbee组网应用打下了良好的基础。
对于CC2530来说,进行低功耗无线组网应用才是它的真正使命。有了我们入门的基础,后面如果有时间,我会把OSAL操作系统和z-Stack协议栈的应用再做两个系列的教材,让大家真正的掌握CC2530的应用精髓。
--------------------------------------------------------------------------------------------------------------------
cc2530入门教程-03cc2530的中断系统及外部中断应用
第3课 CC2530的中断系统及外部中断应用广东职业技术学院 欧浩源一、中断相关的基础概念 内核与外设之间的主要交互方式有两种:轮询和中断。 轮询的方式貌似公平,但实际工作效率很低,且... 查看详情
cc2530入门教程-05cc2530的串行接口原理与应用
第5课 CC2530的串行接口原理与应用广东职业技术学院 欧浩源一、并行通信与串行通信 微控制器与外设之间的数据通信,根据连线结构和传送方式的不同,可以分为两种:并行通信和串行通信。 &n... 查看详情
cc2530入门教程-增强版基础技能综合实训案例(基础版)-题目需求
【CC2530入门教程-增强版】基础技能综合实训案例(基础版)-题目需求广东职业技术学院 欧浩源一、引用 不管是简单的单片机应用,还是复杂的嵌入式系统,在我看来它们的本质结构是差不多的,都离不开“内核+外... 查看详情
基于cc2530设计的自动晾衣杆
...实现的不断探究,得到了比较好的设计思路。使用CC2530单片机的ADC接口采集雨滴传感器的模拟值,得到雨滴传感器的雨滴测量值之后, 查看详情
cc2530入门教程-增强版基础技能综合实训案例(基础版)-终端源码
【CC2530入门教程-增强版】基础技能综合实训案例(基础版)-终端源码广东职业技术学院欧浩源 一、关于硬件电路 关于这个综合实训案例,具体需求详见《【CC2530入门教程-增强版】基础技能综合实训案例(... 查看详情
1cc2530单片机介绍
...中断控制系统、定时/计数器和通信等多种功能部件。本教程使用的单片机德州仪器生产的CC2530,其针脚分布如下: P0、P1各8个针脚(1字节=8位,针脚/位。一般16进制定义,自己换算二进制... 查看详情
cc2530入门教程-增强版基础技能综合实训案例(基础版)-上位机源码
【CC2530入门教程-增强版】基础技能综合实训案例(基础版)-上位机源码广东职业技术学院 欧浩源一、需求分析 按照指定参数打开串口,与测控终端建立数据传输通道,并根据应用要求实现程序逻辑,具体... 查看详情
stc8051与cc2530单片机有撒不同
STC8051是MCS51为核的单片机,CC2530是以增强型8051为核心开发的的产品。这就是其本质的区别。请看百度百科给的说明:CC2530结合了领先的RF收发器的优良性能,业界标准的增强型8051CPU,系统内可编程闪存,8-KBRAM和许多其它强大的... 查看详情
简述cc2530与8051单片机的区别
简述cc2530与8051单片机的区别最大区别是2530是16位的单片机,8051是8位单片机是比较简单的单片机参考技术A简述如下:处处都是区别。 查看详情
cc2530debug---cc2530无启动之32k晶振
今天焊接CC2530,其中有个模块下载程序(协议栈程序),无法创建也无法加入网络。 第一步先检查32MH晶振是否启动,用basice程序看uart,发现可以正常打印log。 第二步,在线调试,看看程序跑到那里了。 MAC_RADI... 查看详情
zigbee硬件平台小记(cc2530)
文章目录1.CC2530射频模块特征2.CC2530射频模块主要技术指标3.调试器输出接口特点输出引脚排列1.CC2530射频模块特征基于CC2530F256单芯片ZigBeeSOC(SystemOnChip),集成8051内核模块尺寸:36mmx26mmSMA底座,外接50Ω天线模... 查看详情
433mhz(cc1101)与zigbee(cc2530)对比测试
...输数据率低,绕射能力强,但是不能够组网,工作模式只能是1点对多点。受到其他公司所采用433MHz的影响 查看详情
zigbee硬件平台小记(cc2530)
...射电流(最大)34mA接收电流(最大)25MA工作温度-40~85℃电源2.0~3.6V物理尺寸36mmx26mm3 查看详情
zigbee折腾之旅:cc2530最小系统
...在百度一番后就有了下面这篇文章。 作为片上系统Soc,CC2530的集成度是非常高的,这也方便了我们开发者。搭建它的最小系统比较简单。 下面一张图就能代表一切: 上图是CC253x芯片作为zigbee主控制器的基本电路(2 查看详情
cc2530定时器使用
...定时器3)7 说明 依据数据手冊可知CC2530总共同拥有4个定时器,可是定时器2被系统占用,可用的仅仅有三个,分别为定时器1/3/4  查看详情
cc2530定时器(代码片段)
...数功能的外设。 定时/计数器的最基本工作原理是进行计数。不管是定时器还是计数器,本质上都是计数器,可以进行加1(减1)计数,每出现一个计数信号,计数器就会自动加1(自动减1),当计数值从0变成最... 查看详情
如何使用串口调试工具收发cc2530串口数据?
参考技术A在电脑上安装串口助手,连接USB,在串口助手中调整到正确的波特率,就可以收发数据了 查看详情
cc2530串口收发字符串
...程序能跑起来后,串口是第一个要跑起来的设备,所有的工作状态,交互信息都会从串口输出。我们用的是世界上最好的串口芯片FT232,贵的USB串口线都用该芯片。硬件:PC机一台ZB2530(底板、核心板、仿真器、USB线)一套软件... 查看详情