初窥ZIGBEE

要在zigbee的组网中加入烟雾传感器的模块,所以需要用到cc2530的ADC对传感器输出的模拟信号进行采样。下面是自己对实现用CC2530的ADC采集外部电压的程序过程。

以下是ADC的配置:

 #include<iocc2530.h>
#include"adc.h"
#include"uart.h"
#include<stdio.h>
#include"led.h" #define VDD_REF 3.3
float ADCValue = 0.0;//global ,传递电压值
/**************************************************************
*function:ADInit()
*This funciton is order to initialize ADC of CC2530
*单次采样,采用端口为P0.6
**************************************************************/
void ADInit(void)
{
uint ADCREGValue = ;
SET_IO_PORT_DIR(,,IO_IN);//设置P0..6为输入模式
ADC_ENABLE_CHANNEL(); //使能通道6作为ADC的采样通道
ADC_SINGLE_CONVERSION(ADC_REF_AVDD|ADC_12_BIT| ADC_AIN6); //配置ADC参数,参考电压为AVDD5引脚电压,抽取率为512(12位分辨率)
ADC_SAMPLE_SINGLE(); //启动单次采样 while(!(ADCCON1&0x80)) ;//等待AD转换完成
// while ( !ADCIF );
/*获取结果,并转换为电压*/
ADCREGValue = ADCL>>;//程序中设置的是12bit的精度,取低4位值
ADCREGValue |= ADCH<<; //高八位值
ADCValue = (float)(ADCREGValue/(float))*3.3;//此处有疑问,本来是12bit的精度,除数应该是4096的,但是得用2048才能得到准确的值
}

以下是UART0的配置:

#include<iocc2530.h>
#include"uart.h" void UARTInit(void)
{ PERCFG = ; //配置UART0的IO位置为备用位置1
P0SEL = 0x3c; //P0.2-PO.5设置为外设功能的端口
P2DIR &= ~(<<);//设置UART0为第一优先级,UART1为第二优先级,
U0CSR |= (<<); //select the mode as UART mode
U0GCR |= 0x09;
U0BAUD |= ; //
UTX0IF = ; //clear the interrupt flag
U0CSR |= (<<); //enable receive bit
IEN0 |= 0x84;
}
/*********************************************************
note: "length" is the length of one line
**********************************************************/
void UARTSend(char *data,int length)
{
int i;
for(i=;i<length;i++)
{
U0DBUF = *data;
data++;
while(UTX0IF==); // complete receive
UTX0IF = ; //clear the flag
}
U0DBUF =0x0A; //carriage return
while(UTX0IF==); // complete receive
UTX0IF = ;
}

以下是主函数:

#include<iocc2530.h>
#include"adc.h"
#include"uart.h"
#include"led.h"
#include<stdio.h>
#include <string.h> void delay(uint n);
void ClockInit(void); void main(void)
{
char i = ;
char TempValue[];
float average ;
char len;
P1_0 = ;
ClockInit();
UARTInit();
SET_IO_PORT_DIR(,,IO_OUT); //设置LED,作为ADC采样进行的标志
IO_FUNC_PORT_PIN(, , IO_FUNC_GIO);//INIT_LED();
IEN0 =IEN1=IEN2 =; while()
{
average = 0.0;
for(i=;i<;i++)//取64次均值
{
ADInit();
average +=ADCValue;
}
average /=;
LED();
sprintf(TempValue,"%fV\r",(float)average);//将数值格式化为字符串
len = strlen(TempValue);//字符串的长度
UARTSend(TempValue,len);//向串口发送数据
delay();
} } /***********************************************************
初始化时钟参数
*************************************************************/
void ClockInit(void)
{
CLKCONCMD = 0x28; //时器计数时钟设定为1M Hz, 系统时钟设定为32 MHz
while(CLKCONSTA & 0x40); //等晶振稳定
}

串口显示结果:

一开始的时候,读取出来的AD数值完全不对,最后发现是之前选取板子上的采样端口出现问题,换了P0.6之后,效果就好多了,估计就是由于端口复用的造成的影响。。弄好了基本的驱动,后面得开始将程序添加到ZIGBEE的模块中,实现组网。。

CC2530的ADC采集外部电压的更多相关文章

  1. 【CC2530入门教程-06】CC2530的ADC工作原理与应用

    第6课  CC2530的ADC工作原理与应用 广东职业技术学院  欧浩源 一.A/D转换的基本工作原理 将时间上连续变化的模拟量转化为脉冲有无的数字量,这一过程就叫做数字化,实现数字化的关键设备是AD ...

  2. 关于esp32的ADC采集

    对于ADC采集 程序源码如下: /* ADC1 Example This example code is in the Public Domain (or CC0 licensed, at your ...

  3. TMS320VC5509片内ADC采集

    1. ADC采集比较简单,内部的10位的ADC,AIN0-AIN3的输入,主要是用的CSL的库函数#include <csl_adc.h> ; Uint16 samplestoraage[ ...

  4. 关于右移和除法的关系 , ADC采集电量 ,ADC采集MIC(麦克风)

    //////////////////////////////////////////////////////////////////////////////////////////////////// ...

  5. ADC采集电流相关知识

    1.AD电流采样电路,是把电路中的电流用采样元件转换为电压信号,然后用ADC量化转换为相应的数字信号.需要你在被采集端串联一个采样电阻,然后采集采样电阻两端的电压,这样就可以把电流输出变换为电压输出. ...

  6. 关于ADC采集

    对于ADC采集,想问的一些问题 1.如何初始化? 需要初始化 2.哪里可以看到是多少位采集? 3.8位ADC采集的误差是多少? 4.基准电压从哪里取?

  7. 关于使用单片机读取外部电压ADC阻抗匹配的问题

    单片机的基准电压一般为3.3V,如果外部信号超过了AD测量范围,可以采用电阻分压的方法,但是要注意阻抗匹配问题.比如,SMT32的模数输入阻抗约为10K,如果外接的分压电阻无法远小于该阻值,则会因为信 ...

  8. ADC 与实际电压值的关系

    1.首先确定ADC用几位表示,最大数值是多少.比如一个8位的ADC,最大值是0xFF,就是255. 2.然后确定最大值时对应的参考电压值.一般而言最大值对应3.3V.这个你需要看这个芯片ADC模块的说 ...

  9. STM32L15x——ADC采集DMA数据只第一次正确(已解决)

    前提:我用的芯片是STM32L系列,可能对其它STM32系列不完全适用,仅供参考! 一.问题描述 我在使用DMA方式读取单ADC单通道采集的数据时,发现只能正确的采集一次数据,后来的就一直与第一次的相 ...

随机推荐

  1. 已解决:Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986 问题

    请求: http://127.0.0.1:8080/driverApp/findLikeAddress?json={"shopname":"广东省"," ...

  2. 铁大树洞APP视频讲解和原型演示

    首先放上我们团队视频讲解演示的视频:https://v.youku.com/v_show/id_XNDYyMzA3MTgzNg==.html 团队名称:超能陆战队 团队成员:刘梦鑫(队长) 段行行 徐 ...

  3. GitHub/Git配置与简单的使用

    今天我开始了初步的学习,首先从陌生的开始下手,GitHub,自己通过查询网络上的资料有了初步的理解与认识.进行了Git与GitHub的配置. 一.前期准备 首先下载Git,Git官网->http ...

  4. 集合:List接口的实现类(ArrayList、LinkedList、Vector)

    1.List接口 (1)特点 有序(插入和取出的顺序相等,因为有一个整数索引记录了元素的插入的位置) 允许有重复的元素(调用equals方法返回true,允许有多个null) @Test public ...

  5. 群晖系统如何通过Video Station套件管理NAS中的视频

    一.PC端观看视频 1.在NAS套件中心找到Video Station套件,安装套件 2.设置video套件别名,便于后期使用,控制面板----应用程序门户----video Station 3.选中 ...

  6. 16、Mediator 仲裁者模式

    只有一个仲裁者 Mediator 模式 组员向仲裁者报告,仲裁者向组员下达指示,组员之间不在相互询问和相互指示. 要调整多个对象之间的关系时,就需要用到 Mediator 模式.将逻辑处理交给仲裁者执 ...

  7. JavaIO流,万物皆文件

    引入IO的原因 基本概念: 数据源和流的概念 IO流的概念细分 IO流的体系 IO流在Java中的流对象:inputStream .... Java对象的序列化和反序列化: 1 为什么需要序列化和反序 ...

  8. JAVA多线程之生产者 消费者模式 妈妈做面包案例

    创建四个类 1.面包类 锅里只可以放10个面包 ---装面包的容器2.厨房 kitchen 生产面包 和消费面包  最多生产100个面包3.生产者4消费者5.测试类 多线程经典案例 import ja ...

  9. OGG复制进程延迟高,优化方法一(使用索引)

    日常运维过程中,可能发现OGG同步进程延迟很高: 本篇介绍其中的一种方式. OGG复制进程,或者说同步进程及通过解析ogg trail文件,输出dml语句,在目标库执行dml操作,那么延迟高可能性其一 ...

  10. HTML5+css3 的开心网游戏页面

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...