我是靠谱客的博主 善良糖豆,最近开发中收集的这篇文章主要介绍ZigBee_CC2530_03H_ADC寄存器ADC输入ADC运行模式,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

    ADC支持多达14位模数转换,有效位数(ENOB)多达12位。ADC包括一个具有多达8个独立配置通道的模拟多路转换器和参考电压发生器,并且通过DMA将转换结果写入存储器。具有多种运行模式。ADC主要特征如下:

可选的采样率,可设置分辨率(7~12位)。

8个独立的输入通道,单端或者差分。

参考电压可选为内部、外部单端、外部差分或AVDD5。

中断请求产生。

转换结束时DMA触发。

温度传感器输入。

电池测量能力。

ADC输入

     当使用ADC时,端口0引脚必须配置为ADC输入。ADC输入最多可以使用8个,这些端口引脚将被称为AIN0~AIN7引脚。输入引脚AIN0~AIN7连接至ADC。为了配置端口0的引脚为ADC输入,寄存器APCCFG的对应位必须设置为1.该寄存器的默认值为选择端口0的引脚为非ADC输入,即数字输入/输出。

 可以把输入配置为单端或者差分输入。在选择差分输入的情况下,差分输入包括输入对AIN0~1、AIN2~3、AIN4~5和AIN6~7。注意:这些引脚不能使用负电源,或者大于VDD(未校准电源)的电源。

    除了输入引脚AIN0~AIN7,片上温度传感器的输出也可以选择作为用于温度测量的ADC输入。为了实现作为温度测量的ADC输入,寄存器TR0.ADCTM和ATEST.ATESTCTRL必须分别进行设置。

    还可以选择一个对应AVDD5/3的电压作为ADC输入。这个输入允许实现例如要求电池检测功能的应用。注意,这种情况下的参考电压不能由电池电压决定,例如,AVDD5电压不能作为参考电压。

   单端输入AIN0~AIN7以通道号码0~7表示。通道8~11表示由AIN0~1、AIN2~3、AIN4~5和AIN6~7组成的差分输入。通道号码12~15分别表示GND(12)、温度传感器(14)和AVDD5/3(15)。这些值在ADCCON2.SCH和ADCCON3.SCH域中使用。

    ADC可以配置为使用通用I/O引脚P2.0作为一个外部触发来开始转换。当P2.0用于ADC外部触发时,它必须配置为输入模式下的通用I/O。

ADC运行模式

   ADC具有三个控制寄存器,即ADCCON1、ADCCON2和ADCCON3。这些寄存器用于配置ADC和报告状态。

(1)ADCCON1控制寄存器

    

ADCCON1(0xB4)
名称复位读/写描述
7EOC0R/H0转换结束,当ADCH被读取时清除。如果在前一个数据被读取之前,已经完成了一个新的转换,该位保持为高
0:转换未完成
1:转换完成
6ST0 开始转换。在转换完成之前都读为1
0:没有进行中的转换
1:如果ADCCON1.STSEL = 11且没有序列正在进行转换,就启动一个转换序列
5:4STSEL[1:0]11R/W1启动选择。选择哪个事件将启动一个新的转换序列
00:P2.0引脚上的外部触发;
01:全速。不等待触发
10:定时器1通道0比较事件
11:ADCCON1.ST = 1
3:2RCTRL[1:0]00R/W控制16位随机数发生器。如果写为01,当操作完成后该设置将自动返回0x00
00:正常运行
01:同步LFSR一次
10:保留
11:停止,随机数发生器关闭
1:0 11R/W未使用。总是置为11
    ADCCON1.EOC位是一个状态位,当一个转换结束时该位置1,当读取ADCH时,清除该位。

    ADCCON1.ST位用于启动一个转换蓄力。当该位置1,ADCCON1.STSEL位为11,且当前没有正在进行的转换时,将启动一个序列。当这个序列转换完成,该位自动清除。

   ADCCON1.STSEL位选择哪个事件将启动一个新的转换序列。可以被选择的事件选项有:外部引脚P2.0上的上升沿,前一个序列的结束,定时器1通道0比较事件或ADCCON1.ST置1.

(2)ADCCON2控制寄存器

ADCCON2(0xB5)
名称复位读写描述
7:6SREF[1:0]00R/W选择用于转换序列的基准电压
00:内部基准
01:AIN7引脚上的外部基准
10:AVDD5引脚
11:AIN6~AIN7差分输入上的外部基准
5:4SDIV[1:0]01R/W为包含在转换序列里的通道选择抽取率,抽取率也决定了分辨率和完成一个转换所需的时间
00:64抽取率(7位分辨率)
01:128抽取率(9位分辨率)
10:: 256抽取率(10位分辨率)
11:512抽取率(12位分别率)
3:0SCH[3:0]0000R/W序列通道选择
0000:AIN0;0001:AIN1;0010:AIN2;0011:AIN3;
0100:AIN4;0101:AIN5;0110:AIN6;0111:AIN7
1000:AIN0-AIN1;1001:AIN2-AIN3;1010:AIN4-AIN5
1011:AIN6-AIN7;1100:GND;1101:保留;
1110:温度传感器;1111:VDD/3
 

   ADCCON2.SREF用于选择基准电压,只有在没有选择进行的时候才能改变基准电压

   ADCCON2.SDIV位选择抽取率,因此也设置了分辨率、完成一个转换所需的时间和采样率。只有在没有转换的时候才能设置抽取率

(3)ADCCON3控制寄存器

ADCCON3(0xB6)
名称复位读写描述
7:6EREF[1:0]00R/W选择用于单个转换的基准电压
00:内部基准
01:AIN7引脚上的外部基准
10:AVDD5引脚
11:AIN6~AIN7差分输入上的外部基准
5:4EDIV[1:0]01R/W为单个转换选择抽取率,抽取率也决定了分辨率和完成一个转换所需的时间
00:64抽取率(7位分辨率)
01:128抽取率(9位分辨率)
10:: 256抽取率(10位分辨率)
11:512抽取率(12位分别率)
3:0ECH[3:0]0000R/W单个通道选择
0000:AIN0;0001:AIN1;0010:AIN2;0011:AIN3;
0100:AIN4;0101:AIN5;0110:AIN6;0111:AIN7
1000:AIN0-AIN1;1001:AIN2-AIN3;1010:AIN4-AIN5
1011:AIN6-AIN7;1100:GND;1101:保留;
1110:温度传感器;1111:VDD/3

   ADCCON3寄存器控制单个转换的通道号码、基准电压和抽取率。在ADCCON3寄存器更新后,立即进行单个转换;或者如果有一个转换序列正在进行,那个在这个转换序列完成后立即进行单个转换。

SET_MAIN_CLOCK_SOURCE(CRYSTAL);   //设置系统时钟源为32MHz晶体振荡器
/*  AIN0通道采样   */
ADC_ENABLE_CHANNEL(ADC_AIN0);

/*配置ADCCON3寄存器以便在ADCCON1.STSEL = 11(复位默认值)且ADCCON1.ST = 1时进行单一转换*/
/*参考电压:AVDD_SOC引脚上的电压*/
/*抽取率:512*/
/*ADC输入通道:AIN0*/
ADC_SINGLE_CONVERSION(ADC_REF_AVDD | ADC_14_BIT | ADC_AIN0);
ADC_SAMPLE_SINGLE();           //启动一个单一转换
while(!ADC_SAMPLE_READY());    //等待转换完成
ADC_ENABLE_CHANNEL(ADC_AIN0);  //禁止AIN0
adc0_value[0] = ADCL;
adc0_value[1] = ADCH;
adc0_value[0] = adc0_value[0] >> 2;


最后

以上就是善良糖豆为你收集整理的ZigBee_CC2530_03H_ADC寄存器ADC输入ADC运行模式的全部内容,希望文章能够帮你解决ZigBee_CC2530_03H_ADC寄存器ADC输入ADC运行模式所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部