一、ADC功能介紹
ADC功能是將模擬量轉(zhuǎn)為數(shù)字量的數(shù)模轉(zhuǎn)換器;平時測量的溫度、光照強度、煙霧濃度、酒精濃度這些數(shù)據(jù)都是屬于模擬量,需要使用相關(guān)的線性變化傳感器進行檢測,然后通過ADC采樣轉(zhuǎn)為數(shù)字量,得到最終的一組數(shù)據(jù)。
ADC這個功能在很多低配單片機上是不自帶的,CC2530是帶了ADC采集功能,做一些模擬轉(zhuǎn)換的應(yīng)用就很方便,不需要再去額外的掛載其他外設(shè)ADC芯片。
二、配置ADC相關(guān)寄存器
要使用ADC功能,需要配置APCFG寄存器,下面截圖來至官方的數(shù)據(jù)手冊,將寄存器對應(yīng)位配置為1即可開啟模擬IO功能。
三、示例代碼
3.1 配置ADC采集內(nèi)部溫度示例代碼
/******************************************************************************
CC2530模塊AD測試程序
通過內(nèi)置溫度傳感器實現(xiàn)溫度采集
******************************************************************************/
#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)
/**************************
系統(tǒng)時鐘 不分頻
計數(shù)時鐘 32分頻
**************************/
void InitClock(void)
{
CLKCONCMD = 0x28; //時器計數(shù)時鐘設(shè)定為1M Hz, 系統(tǒng)時鐘設(shè)定為32 MHz
while(CLKCONSTA & 0x40); //等晶振穩(wěn)定
}
/*****************************************
串口初始化函數(shù):初始化串口 UART0
*****************************************/
void InitUART0(void)
{
PERCFG = 0x00; //位置1 P0口
P0SEL = 0x3c; //P0用作串口
P2DIR &= ~0XC0; //P0優(yōu)先作為UART0
U0CSR |= 0x80; //串口設(shè)置為UART方式
U0GCR |= 9;
U0BAUD |= 59; //波特率設(shè)為19200
UTX0IF = 1; //UART0 TX中斷標志初始置位1
U0CSR |= 0X40; //允許接收
IEN0 |= 0x84; //開總中斷,接收中斷
}
/****************************************************************
串口發(fā)送字符串函數(shù)
****************************************************************/
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); //根據(jù)AD值,計算出實際的溫度
}
/****************************************************************
主函數(shù)
****************************************************************/
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);
}
}
復(fù)制代碼;j++)>
3.2 配置ADC通道0采集模擬數(shù)據(jù)
#include "ioCC2530.h"
/*===============定時器1初始化函數(shù)==================*/
void Init_Timer1()
{
T1CC0L = 0xd4; //設(shè)置最大計數(shù)值的低8位
T1CC0H = 0x30; //設(shè)置最大計數(shù)值的高8位
T1CCTL0 |= 0x04; //開啟通道0的輸出比較模式
T1IE = 1; //使能定時器1中斷
T1OVFIM = 1; //使能定時器1溢出中斷
EA = 1; //使能總中斷
T1CTL = 0x0e; //分頻系數(shù)是128,模模式
}
unsigned char count = 0;
unsigned char F_time = 0;
/*================定時器1服務(wù)函數(shù)====================*/
#pragma vector = T1_VECTOR
__interrupt void Timer1_Sevice()
{
T1STAT &= ~0x01; //清除定時器1通道0中斷標志
count++;
if(count == 10) //定時1秒到
{
F_time = 1;
count = 0;
}
}
/*===================UR0初始化函數(shù)====================*/
void Init_Uart0()
{
PERCFG = 0x00; //串口0的引腳映射到位置1,即P0_2和P0_3
P0SEL = 0x0C; //將P0_2和P0_3端口設(shè)置成外設(shè)功能
U0BAUD = 59; //16MHz的系統(tǒng)時鐘產(chǎn)生9600BPS的波特率
U0GCR = 9;
U0UCR |= 0x80; //禁止流控,8位數(shù)據(jù),清除緩沖器
U0CSR |= 0xC0; //選擇UART模式,使能接收器
UTX0IF = 0; //清除TX發(fā)送中斷標志
URX0IF = 0; //清除RX接收中斷標志
URX0IE = 1; //使能URAT0的接收中斷
EA = 1; //使能總中斷
}
unsigned char dat[4];
/*===================UR0發(fā)送字符串函數(shù)==================*/
void UR0SendString(unsigned char *str, unsigned char count)
{
while(count--)
{
U0DBUF = *str++; //將要發(fā)送的1字節(jié)數(shù)據(jù)寫入U0DBUF
while(!UTX0IF); //等待TX中斷標志,即數(shù)據(jù)發(fā)送完成
UTX0IF = 0;
}
}
/*===================ADC初始化函數(shù)====================*/
void Init_ADC0()
{
P0SEL |= 0x01; //P0_0端口設(shè)置為外設(shè)功能
P0DIR &= ~0x01; //P0_0端口設(shè)置為輸入端口
APCFG |= 0x01; //P0_0作為模擬I/O使用
}
/*===================讀取ADC的數(shù)據(jù)====================*/
void Get_ADC0_Value()
{
ADCIF = 0;
//參考電壓選擇AVDD5引腳,256抽取率,AIN0通道0
ADCCON3 = (0x80 | 0x10 | 0x00);
while(!ADCIF); //等待A/D轉(zhuǎn)換完成,
dat[0] = 0xaf;
dat[1] = ADCH; //讀取ADC數(shù)據(jù)低位寄存器
dat[2] = ADCL; //讀取ADC數(shù)據(jù)高位寄存器
dat[3] = 0xfa;
}
/*=======================主函數(shù)======================*/
void main()
{
Init_Uart0();
Init_Timer1();
Init_ADC0();
while(1)
{
if(F_time == 1) //定時1秒時間到
{
Get_ADC0_Value(); //進行A/D轉(zhuǎn)換并讀取數(shù)據(jù)
UR0SendString(dat,4); //向上位機發(fā)送數(shù)據(jù)
F_time = 0; //定時1秒標志清0
}
}
}
審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
寄存器
+關(guān)注
關(guān)注
31文章
5608瀏覽量
130001 -
adc
+關(guān)注
關(guān)注
100文章
7511瀏覽量
556011 -
CC2530
+關(guān)注
關(guān)注
19文章
222瀏覽量
60138
發(fā)布評論請先 登錄
相關(guān)推薦
熱點推薦
【技術(shù)精選】嵌入式STM32原創(chuàng)征文活動精選文章
CC2530(zigbee)入門開發(fā): 看門狗C2530(zigbee)入門開發(fā): 低功耗模式
發(fā)表于 07-27 18:26
cc2530 adc測外部電壓
CC2530 是用于2.4-GHz IEEE 802.15.4、ZigBee 和RF4CE 應(yīng)用的一個真正的片上系統(tǒng)(SoC)解決方案。它能夠以非常低的總的材料成本建立強大的網(wǎng)絡(luò)節(jié)點。要在zigbee的組網(wǎng)中加入煙霧傳感器的模塊
發(fā)表于 11-07 18:53
?6176次閱讀
基于CC2530的ZigBee協(xié)調(diào)器節(jié)點設(shè)計
本文給出了基于TI新一代芯片CC2530的ZigBee協(xié)調(diào)器節(jié)點設(shè)計方法,該方法選用TICC2591作為射頻前端芯片。
發(fā)表于 01-05 15:25
?5w次閱讀
CC2530芯片的基本特性和CC2530無線模塊的設(shè)計
本文介紹了CC2530芯片的基本特性,論述了以CC2530芯片為核心的無線通信模塊的硬件設(shè)計和調(diào)試軟件設(shè)計,在介紹設(shè)計規(guī)范和模塊結(jié)構(gòu)的基礎(chǔ)上,采用TI公司的CC2530芯片作為主控制芯片設(shè)計出具
發(fā)表于 02-11 08:00
?101次下載
如何使用ZigBee TI ZStack CC2530 2.5搭建開發(fā)環(huán)境
本文檔的主要內(nèi)容詳細介紹的是如何使用ZigBee TI ZStack CC2530 2.5搭建開發(fā)環(huán)境。
發(fā)表于 05-10 18:14
?31次下載
微雪電子ZIGBEE開發(fā)板 CC2530 Eval Kit簡介
ZigBee CC2530 串口透傳 開發(fā)套件 物聯(lián)網(wǎng)套件 板載電池插槽 支持多種供電方式 引出所有IO 方便用戶功能擴展 板載一個CP2102 方便調(diào)試下載 型號 CC2530 Ev
微雪電子ZIGBEE開發(fā)板 CC2530 Eval Kit5簡介
ZigBee CC2530 串口透傳 開發(fā)套件 XBEE 物聯(lián)網(wǎng)套件 直插接口兼容Xbee 支持自動組網(wǎng) 支持板載PCB天線及IPEX外接天線 型號 CC2530 Eval Kit5
CC2530 Zigbee射頻模塊開發(fā)板的電路原理圖免費下載
本文檔的主要內(nèi)容詳細介紹的是CC2530 Zigbee射頻模塊開發(fā)板的電路原理圖免費下載。
發(fā)表于 09-07 08:00
?181次下載
基于CC2530的ZigBee通信網(wǎng)的應(yīng)用設(shè)計.pdf
基于CC2530的ZigBee通信網(wǎng)的應(yīng)用設(shè)計.pdf
發(fā)表于 12-15 18:17
?24次下載
CC2530(zigbee)入門開發(fā): 安裝IAR開發(fā)環(huán)境
CC2530本身是一個51單片機內(nèi)核,開發(fā)過51的搞起來非常容易,也就是多了一個無線射頻部分;如果不使用無線射頻功能,那么就和一個正常的51單片機一樣。要進行CC2530的軟件開發(fā),需
基于CC2530的ZigBee通信網(wǎng)絡(luò)的應(yīng)用設(shè)計
電子發(fā)燒友網(wǎng)站提供《基于CC2530的ZigBee通信網(wǎng)絡(luò)的應(yīng)用設(shè)計.pdf》資料免費下載
發(fā)表于 10-26 09:34
?6次下載
CC2530(zigbee)入門開發(fā): ADC應(yīng)用
評論