初窥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. CI4框架应用一 - 环境搭建

    CI框架 (codeigniter)算是一个古老的框架了,由于在工作中一直在使用这个框架,还是比较有感情的.我对CI的感觉就是,简单易用,学习曲线平滑,对于新手友好. 目前CI框架已经更新到CI4了, ...

  2. Java项目中经常遇到的一些异常情况

    一. 1. java.lang.nullpointerexception 这个异常大家肯定都经常遇到,异常的解释是"程序遇上了空指针",简单地说就是调用了未经初始化的对象或者是不存 ...

  3. Java连接Redis,存储对象获取对象()byte和json),连接池

    Java连接Redis Jedis连接Redis,Lettuce连接Redis Jedis连接Redis 1. 创建maven项目 2. 引入依赖 <dependencies> <d ...

  4. FSAF

    Feature Selective Anchor-Free Module for Single-Shot Object Detection https://zhuanlan.zhihu.com/p/5 ...

  5. 最火热的极速开发框架Spring Boot

    Spring Boot是Spring家族中的一个全新的框架,它用来简化Spring应用程序的创建和开发过程,也可以说Spring Boot能简化我们之前采用Spring mvc + Spring + ...

  6. Linux查询版本、查询端口

    lsb_release -a 查看当前Linux系统版本 netstat 检查端口 netstat 是一个命令行工具,可以提供有关网络连接的信息.要列出正在侦听的所有 TCP 或 UDP 端口,包括使 ...

  7. C#LeetCode刷题之#16-最接近的三数之和(3Sum Closest)

    目录 问题 示例 分析 问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3620 访问. 给定一个包括 n 个整数的 ...

  8. C#LeetCode刷题之#55-跳跃游戏(Jump Game)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3674 访问. 给定一个非负整数数组,你最初位于数组的第一个位置. ...

  9. LeetCode 122 best-time-to-buy-and-sell-stock-ii 详解

    题目描述 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票). 注意:你不能同时参与多笔交易(你 ...

  10. 文件上传控件bootstrap-fileinput中文设置没有效果的情况

    1.引入zh.js顺序错误 zh.js需放到fileinput.js下面 2. 组件创建语法错误 (class=“file”) 如果你使用js初始化fileinput组件,那么在html元素中应删除 ...