CC2530的ADC采集外部电压
初窥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采集外部电压的更多相关文章
- 【CC2530入门教程-06】CC2530的ADC工作原理与应用
第6课 CC2530的ADC工作原理与应用 广东职业技术学院 欧浩源 一.A/D转换的基本工作原理 将时间上连续变化的模拟量转化为脉冲有无的数字量,这一过程就叫做数字化,实现数字化的关键设备是AD ...
- 关于esp32的ADC采集
对于ADC采集 程序源码如下: /* ADC1 Example This example code is in the Public Domain (or CC0 licensed, at your ...
- TMS320VC5509片内ADC采集
1. ADC采集比较简单,内部的10位的ADC,AIN0-AIN3的输入,主要是用的CSL的库函数#include <csl_adc.h> ; Uint16 samplestoraage[ ...
- 关于右移和除法的关系 , ADC采集电量 ,ADC采集MIC(麦克风)
//////////////////////////////////////////////////////////////////////////////////////////////////// ...
- ADC采集电流相关知识
1.AD电流采样电路,是把电路中的电流用采样元件转换为电压信号,然后用ADC量化转换为相应的数字信号.需要你在被采集端串联一个采样电阻,然后采集采样电阻两端的电压,这样就可以把电流输出变换为电压输出. ...
- 关于ADC采集
对于ADC采集,想问的一些问题 1.如何初始化? 需要初始化 2.哪里可以看到是多少位采集? 3.8位ADC采集的误差是多少? 4.基准电压从哪里取?
- 关于使用单片机读取外部电压ADC阻抗匹配的问题
单片机的基准电压一般为3.3V,如果外部信号超过了AD测量范围,可以采用电阻分压的方法,但是要注意阻抗匹配问题.比如,SMT32的模数输入阻抗约为10K,如果外接的分压电阻无法远小于该阻值,则会因为信 ...
- ADC 与实际电压值的关系
1.首先确定ADC用几位表示,最大数值是多少.比如一个8位的ADC,最大值是0xFF,就是255. 2.然后确定最大值时对应的参考电压值.一般而言最大值对应3.3V.这个你需要看这个芯片ADC模块的说 ...
- STM32L15x——ADC采集DMA数据只第一次正确(已解决)
前提:我用的芯片是STM32L系列,可能对其它STM32系列不完全适用,仅供参考! 一.问题描述 我在使用DMA方式读取单ADC单通道采集的数据时,发现只能正确的采集一次数据,后来的就一直与第一次的相 ...
随机推荐
- FAT32文件系统下的文件、目录管理
背景 FAT32作为一个文件系统,有着广泛的应用.在安装操作系统时,许多个人用户默认都选择FAT32文件系统,因此,了解FAT32文件系统下的文件.目录的管理方式就显得非常必要了. FAT32文件系统 ...
- Java代码编写规范(转载)
编码规范 1 前言为确保系统源程序可读性,从而增强系统可维护性,java编程人员应具有基本类似的编程风格,兹制定下述Java编程规范,以规范系统Java部分编程.系统继承的其它资源中的源程序也应按此规 ...
- Mixed Precision Training —— caffe-float16
简介 最近有了突如其来的想法,如何把caffe的变得更小更快.后来翻到Nvidia开发caffe-float16,同时也看到它的论文.看完大致了解一番后,就做一下记录. 该工作的目标是,减少网络的所需 ...
- 从零搭建Spring Boot脚手架(2):增加通用的功能
1. 前言 今天开始搭建我们的kono Spring Boot脚手架,首先会集成Spring MVC并进行定制化以满足日常开发的需要,我们先做一些刚性的需求定制,后续再补充细节.如果你看了本文有什么问 ...
- css如何让子元素在父元素中水平垂直居中
方法一: display:flex <!DOCTYPE html> <html lang="en"> <head> <meta chars ...
- 调试备忘录-RS485 MODBUS RTU协议简述
目录--点击可快速直达 目录 写在前面 先简单说下什么是MODBUS? 参考文章 写在前面 最近在做和物联网有关的小项目,有一个传感器通讯用到了RS485 MODBUS RTU协议,所以就写个随笔记录 ...
- 【Spring注解驱动开发】你还不会使用@Resource和@Inject注解?那你就out了!!
写在前面 我在 冰河技术 微信公众号中发表的<[Spring注解驱动开发]使用@Autowired@Qualifier@Primary三大注解自动装配组件,你会了吗?>一文中,介绍了如何使 ...
- Spring Boot系列(四):Spring Boot源码解析
一.自动装配原理 之前博文已经讲过,@SpringBootApplication继承了@EnableAutoConfiguration,该注解导入了AutoConfigurationImport Se ...
- 操作系统-PV习题
(1)阅览室问题:加入阅览室入口有一本登记册,每个人都必须按顺序签名进去. 想法:登记册可以用结构数组A[]表示,包含name和number.此外,还需要信号量seatcount表示剩余座位数. 使用 ...
- 算法-搜索(5)m路搜索树
动态m路搜索树即系统运行时可以动态调整保持较高搜索效率的最多m路的搜索树.以3路搜索树为例说明其关键码排序关系: const int MaxValue=; template <class T ...