11

#导入Word文档图片# CC2530 ADC配置步骤

 2 years ago
source link: https://blog.51cto.com/u_11822586/5342422
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

第一章 A/D转换的基本工作原理​

将时间上连续变化的模拟量转化为脉冲有无的数字量,这一过程就叫做数字化,实现数字化的关键设备是ADC。

ADC:数模转换器,将时间和幅值连续的模拟量转化为时间和幅值离散的数字量,A/D转换一般要经过采样、保持、量化和编码4个过程。

#导入Word文档图片# CC2530 ADC配置步骤_寄存器

第二章 CC2530的A/D转换模块​

CC2530的ADC模块支持最高14位二进制的模拟数字转换,具有12位的有效数据位,它包括一个模拟多路转换器,具有8个各自可配置的通道,以及一个参考电压发生器。

#导入Word文档图片# CC2530 ADC配置步骤_引脚_02

该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并返回转换结果。

第五章ADC配置步骤​

【1】配置APCFG寄存器

当使用ADC时,端口0的引脚必须配置为ADC模拟输入。要配置一个端口0引脚为一个ADC输入,APCFG寄存器中相应的位必须设置为1。这个寄存器的默认值是0,选择端口0为非模拟输入,即作为数字I/O端口。

注意:寄存器的设置将覆盖P0SEL的设置。

#导入Word文档图片# CC2530 ADC配置步骤_引脚_03

【2】配置ADCCON3寄存器

单通道的ADC转换,只需将控制字写入ADCCON3寄存器即可。

#导入Word文档图片# CC2530 ADC配置步骤_引脚_04
#导入Word文档图片# CC2530 ADC配置步骤_寄存器_05

【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


Recommend

  • 3

    ​第一章原理图分析​CC2530核心板上带有两颗晶振:第一颗频率为32MHZ,第二颗频率为32.768KHZ​CC250正常运行的时候,需要一个高频的时钟信号和一个低频的时钟信号。​高频时钟...

  • 3
    • blog.51cto.com 2 years ago
    • Cache

    #导入Word文档图片# Web APIs

  • 7

    #导入Word文档图片# CC2530 GPIO口输入配置说明 原创 DS小龙哥 2022-05-2...

  • 4

    1.1 makefile简介​在 Linux(unix )环境下使用GNU 的make工具能够比较容易的构建一个属于你自己的工程,整个工程的编译只需要一个命令就可以完成编译、连接以至于最后的执行。不过这需要我们投入一些时间去完成一个或者多个称之为Makefile 文件的...

  • 7

    1.1 打开目录​头文件​#include <sys/types.h>#include <dirent.h>函数原...

  • 8
    • blog.51cto.com 2 years ago
    • Cache

    MapReduce #导入Word文档图片#

    这是我的分布式作业报告!不要抄不要抄!1 提出背景MapReduce最早是由Google公司研究提出的一种面向大规模数据处理的并行计算模型和方法。Google公司设计MapReduce的初衷主要是为了解决其搜索引擎中大规模网页数据的并行化处理。说Ma...

  • 8

    Linux下可用信号列表1.1 查看系统支持的信号​[root@wbyq FileSend2]# kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR111) SIGSEGV 12...

  • 4

    Linux下音频编程一、ALSA音频架构简单介绍​ALSA是Advanced Linux Sound Architecture,高级Linux声音架构的简称,它在Linux操作系统上提供了音频和MIDI(Musical Instrument Digital Interface,音乐设备数字化接口)的支持。在2.6...

  • 7

    #导入Word文档图片# linux三剑客​ 推荐 原创 linux三剑客​Linux...

  • 8

    Linux内核版本:linux3.5​1.1 简介​阻塞操作是指在执行设备操作时若不能获得资源则挂起进程,直到满足可操作的条件后再进行操作。被挂起的进程进入休眠状态,从CPU调度器的运行队列中移走, 直到等待的条...

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK