一、ADC功能介紹
ADC功能是將模擬量轉為數字量的數模轉換器;平時測量的溫度、光照強度、煙霧濃度、酒精濃度這些數據都是屬于模擬量,需要使用相關的線性變化傳感器進行檢測,然后通過ADC采樣轉為數字量,得到最終的一組數據。
ADC這個功能在很多低配單片機上是不自帶的,CC2530是帶了ADC采集功能,做一些模擬轉換的應用就很方便,不需要再去額外的掛載其他外設ADC芯片。
二、配置ADC相關寄存器
要使用ADC功能,需要配置APCFG寄存器,下面截圖來至官方的數據手冊,將寄存器對應位配置為1即可開啟模擬IO功能。
三、示例代碼
3.1 配置ADC采集內部溫度示例代碼
/******************************************************************************
CC2530模塊AD測試程序
通過內置溫度傳感器實現溫度采集
******************************************************************************/
#include
#include
#define uint unsigned int
// Data
typedef unsigned char BYTE;
// Unsigned numbers
typedef unsigned char UINT8;
typedef unsigned char INT8U;
typedef unsigned short UINT16;
typedef unsigned short INT16U;
typedef unsigned long UINT32;
typedef unsigned long INT32U;
// Signed numbers
typedef signed char INT8;
typedef signed short INT16;
typedef signed long INT32;
#define ADC_REF_1_25_V 0x00
#define ADC_14_BIT 0x30
#define ADC_TEMP_SENS 0x0E
#define DISABLE_ALL_INTERRUPTS() (IEN0 = IEN1 = IEN2 = 0x00)
#define ADC_SINGLE_CONVERSION(settings) \
do{ ADCCON3 = (settings); }while(0)
#define ADC_SAMPLE_SINGLE() \
do { ADC_STOP(); ADCCON1 |= 0x40; } while (0)
#define ADC_SAMPLE_READY() (ADCCON1 & 0x80)
#define ADC_STOP() \
do { ADCCON1 |= 0x30; } while (0)
#define ADC14_TO_CELSIUS(ADC_VALUE) ( ((ADC_VALUE) >> 4) - 335)
/**************************
系統時鐘 不分頻
計數時鐘 32分頻
**************************/
void InitClock(void)
{
CLKCONCMD = 0x28; //時器計數時鐘設定為1M Hz, 系統時鐘設定為32 MHz
while(CLKCONSTA & 0x40); //等晶振穩定
}
/*****************************************
串口初始化函數:初始化串口 UART0
*****************************************/
void InitUART0(void)
{
PERCFG = 0x00; //位置1 P0口
P0SEL = 0x3c; //P0用作串口
P2DIR &= ~0XC0; //P0優先作為UART0
U0CSR |= 0x80; //串口設置為UART方式
U0GCR |= 9;
U0BAUD |= 59; //波特率設為19200
UTX0IF = 1; //UART0 TX中斷標志初始置位1
U0CSR |= 0X40; //允許接收
IEN0 |= 0x84; //開總中斷,接收中斷
}
/****************************************************************
串口發送字符串函數
****************************************************************/
void UartTX_Send_String(char *Data,int len)
{
int j;
for(j=0;j> 2; //ADCL寄存器低2位無效
value |= (((UINT16)ADCH) << 6);
AdcValue += value; //AdcValue被賦值為4次AD值之和
}
value = AdcValue >> 2; //累加除以4,得到平均值
return ADC14_TO_CELSIUS(value); //根據AD值,計算出實際的溫度
}
/****************************************************************
主函數
****************************************************************/
void main(void)
{
char i;
char TempValue[10];
InitUART0(); //初始化串口
initTempSensor(); //初始化ADC
while(1)
{
AvgTemp = 0;
for(i = 0 ; i < 64 ; i++)
{
AvgTemp += getTemperature();
AvgTemp >>= 1; //每次累加后除2.
}
sprintf(TempValue, (char *)"%d ℃", (INT8)AvgTemp);
UartTX_Send_String(TempValue,4);
Delay(50000);
}
}
復制代碼;j++)>
3.2 配置ADC通道0采集模擬數據
#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
}
}
}
審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
寄存器
+關注
關注
31文章
5363瀏覽量
121194 -
adc
+關注
關注
99文章
6534瀏覽量
545770 -
CC2530
+關注
關注
19文章
221瀏覽量
58234
發布評論請先 登錄
相關推薦
cc2530 adc測外部電壓
CC2530 是用于2.4-GHz IEEE 802.15.4、ZigBee 和RF4CE 應用的一個真正的片上系統(SoC)解決方案。它能夠以非常低的總的材料成本建立強大的網絡節點。要在zigbee的組網中加入煙霧傳感器的模塊
發表于 11-07 18:53
?5695次閱讀
![<b class='flag-5'>cc2530</b> <b class='flag-5'>adc</b>測外部電壓](https://file1.elecfans.com//web2/M00/A6/DF/wKgZomUMQPyAXAGbAAA7ZUTvWBE098.png)
基于CC2530的ZigBee協調器節點設計
本文給出了基于TI新一代芯片CC2530的ZigBee協調器節點設計方法,該方法選用TICC2591作為射頻前端芯片。
發表于 01-05 15:25
?4.9w次閱讀
![基于<b class='flag-5'>CC2530</b>的<b class='flag-5'>ZigBee</b>協調器節點設計](https://file1.elecfans.com//web2/M00/A7/22/wKgZomUMQpWAZXeeAAA7nytaBZk210.png)
CC2530芯片的基本特性和CC2530無線模塊的設計
本文介紹了CC2530芯片的基本特性,論述了以CC2530芯片為核心的無線通信模塊的硬件設計和調試軟件設計,在介紹設計規范和模塊結構的基礎上,采用TI公司的CC2530芯片作為主控制芯片設計出具
發表于 02-11 08:00
?97次下載
![<b class='flag-5'>CC2530</b>芯片的基本特性和<b class='flag-5'>CC2530</b>無線模塊的設計](https://file.elecfans.com/web1/M00/85/23/pIYBAFxhGfaAG_TvAACNLv2U-qs759.png)
如何使用ZigBee TI ZStack CC2530 2.5搭建開發環境
本文檔的主要內容詳細介紹的是如何使用ZigBee TI ZStack CC2530 2.5搭建開發環境。
發表于 05-10 18:14
?26次下載
![如何使用<b class='flag-5'>ZigBee</b> TI ZStack <b class='flag-5'>CC2530</b> 2.5搭建<b class='flag-5'>開發</b>環境](https://file.elecfans.com/web1/M00/91/6A/o4YBAFzU8VCAReXKAAY2j7otziY991.png)
微雪電子ZIGBEE開發板 CC2530 Eval Kit簡介
ZigBee CC2530 串口透傳 開發套件 物聯網套件 板載電池插槽 支持多種供電方式 引出所有IO 方便用戶功能擴展 板載一個CP2102 方便調試下載 型號 CC2530 Ev
![微雪電子<b class='flag-5'>ZIGBEE</b><b class='flag-5'>開發</b>板 <b class='flag-5'>CC2530</b> Eval Kit簡介](https://file.elecfans.com/web1/M00/B3/2E/pIYBAF4WmJqAbjESAAGpbjONER0066.png)
微雪電子ZIGBEE開發板 CC2530 Eval Kit5簡介
ZigBee CC2530 串口透傳 開發套件 XBEE 物聯網套件 直插接口兼容Xbee 支持自動組網 支持板載PCB天線及IPEX外接天線 型號 CC2530 Eval Kit5
![微雪電子<b class='flag-5'>ZIGBEE</b><b class='flag-5'>開發</b>板 <b class='flag-5'>CC2530</b> Eval Kit5簡介](https://file.elecfans.com/web1/M00/B3/40/pIYBAF4XzPmAOpRjAAH2DsGOHLA762.png)
CC2530 Zigbee射頻模塊開發板的電路原理圖免費下載
本文檔的主要內容詳細介紹的是CC2530 Zigbee射頻模塊開發板的電路原理圖免費下載。
發表于 09-07 08:00
?160次下載
![<b class='flag-5'>CC2530</b> <b class='flag-5'>Zigbee</b>射頻模塊<b class='flag-5'>開發</b>板的電路原理圖免費下載](https://file.elecfans.com/web1/M00/C6/48/pIYBAF9VrsOASDEaAAG93P2aPAo804.png)
CC2530(zigbee)入門開發: 安裝IAR開發環境
CC2530本身是一個51單片機內核,開發過51的搞起來非常容易,也就是多了一個無線射頻部分;如果不使用無線射頻功能,那么就和一個正常的51單片機一樣。要進行CC2530的軟件開發,需
![<b class='flag-5'>CC2530</b>(<b class='flag-5'>zigbee</b>)<b class='flag-5'>入門開發</b>: 安裝IAR<b class='flag-5'>開發</b>環境](https://file.elecfans.com//web2/M00/46/3F/pYYBAGKRtT2ALBt8AABFFtfr47E006.png)
評論