娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年04月09日(星期三)

正在發生

2019年04月09日 | ZigBee基礎實驗(七)--AD采集溫度串口顯示

發布者:渤海灣 來源: eefocus關鍵字:ZigBee  采集溫度  串口顯示 手機看文章 掃描二維碼
隨時隨地手機看文章

1、ADC 簡介

  ADC 支持多達14 位的模擬數字轉換,具有多達12 位有效數字位。它包括一個模擬多路轉換器,具有多達8 個各自可配置的通道;以及一個參考電壓發生器。轉換結果通過DMA 寫入存儲器。還具有若干運行模式。

  ADC 的主要特性如下:

● 可選的抽取率,這也設置了分辨率(7 到12 位)
● 8 個獨立的輸入通道,可接受單端或差分信號
● 參考電壓可選為內部單端、外部單端、外部差分或AVDD5
● 產生中斷請求
● 轉換結束時的DMA 觸發
溫度傳感器輸入
● 電池測量功能


 

2、ADC 操作

  本節描述了ADC 的一般安裝和操作,并描述了CPU 存取的ADC 控制和狀態寄存器的使用。

 

2.1、ADC 輸入

  The signals on the Port 0 pins can be used as ADC inputs. In the following, these port pins are referred to as the AIN0–AIN7 pins. The input pins AIN0–AIN7 are connected to the ADC.


  可以把輸入配置為單端或差分輸入。在選擇差分輸入的情況下,差分輸入包括輸入對AIN0-1、AIN2-3、AIN4-5 和AIN6-7。電壓不能為負或者大于VDD。這些輸入對之間的區別書他們采用不同的模式進行轉換。


  除了輸入引腳AIN0-AIN7,片上溫度傳感器的輸出也可以選擇作為ADC 的輸入,用于溫度測量。為此寄存器TR0.ADCTM 和ATEST.ATESTCTRL 必須分別按2.10 節和寄存器描述所述設置。


  還可以輸入一個對應AVDD5/3 的電壓作為一個ADC 輸入。這個輸入允許諸如需要在應用中實現一個電池監測器的功能。注意在這種情況下參考電壓不能取決于電源電壓,比如AVDD5 電壓不能用作一個參考電壓。


  單端電壓輸入AIN0 到AIN7 以通道號碼0 到7 表示。通道號碼8 到11 表示差分輸入,由AIN0–AIN1、AIN2–AIN3、AIN4–AIN5 和AIN6–AIN7 組成。通道號碼12 到15 表示G N D(12)溫度傳感器(14),和AVDD5/3(15)。這些值在ADCCON2.SCH 和ADCCON3.SCH 域中使用。

 

2.2、ADC 轉換序列(暫時難理解)

  ADC將執行一系列的轉換,并把結果移動到存儲器(通過DMA),不需要任何CPU 干預。


  轉換序列可以被APCFG 寄存器影響,八位模擬輸入來自I/O 引腳,不必經過編程變為模擬輸入。如果一個通道正常情況下應是序列的一部分,但是相應的模擬輸入在APCFG 中禁用,那么通道將被跳過。當使用差分輸入,處于差分對的兩個引腳都必須在APCFG 寄存器中設置為模擬輸入引腳。


  The ADCCON2.SCH(用于定義轉換序列) register bits are used to define an ADC conversion sequence from the ADC inputs.


  If ADCCON2.SCH is set to a value less than 8, the conversion sequence contains a conversion from each channel from 0 up to and including the channel number programmed in ADCCON2.SCH.(當設置該寄存器值小于8時,轉換序列為從通道0到SCH定義的值,包括該值)


  When ADCCON2.SCH is set to a value between 8 and 12, the sequence consists of differential inputs, starting at channel 8 and ending at the programmed channel.(在8~12之間,為纏粉輸入,通道從8到定義的值)


  For ADCCON2.SCH greater than or equal to 12, the sequence consists of the selected channel only.(如果大于12,則定義哪個就是哪個)

  PS:the channel define in the last of 2.1

 

2.3、Single ADC Conversion(單個ADC轉換,2.2是設置一個ADC序列進行轉換)

  In addition to this sequence of conversions, the ADC can be programmed to perform a single conversion from any channel(ADC能夠配置從任何一個channel開執行一次單通道轉換). Such a conversion is triggered by writing to the ADCCON3 register. (轉換開始的條件->)The conversion starts immediately unless a conversion sequence is already ongoing, in which case the single conversion is performed as soon as that sequence is finished.

 

2.4、ADC Operating Modes

  本節描述:operating modes and initialization of conversions.

  The ADC has three control registers: ADCCON1, ADCCON2, and ADCCON3. These registers are used to configure the ADC and to report status.

  1. ADCCON1.EOC 位是一個狀態位,當一個轉換結束時,設置為高電平;當讀取ADCH 時,它就被清除。

  2. ADCCON1.ST 位用于啟動一個轉換序列。當這個位設置為高電平,ADCCON1.STSEL 是11,且當前沒有轉換正在運行時,就啟動一個序列。當這個序列轉換完成,這個位就被自動清除。

  3. ADCCON1.STSEL 位選擇哪個事件將啟動一個新的轉換序列。該選項可以選擇為外部引腳P2.0 上升沿或外部引腳事件,之前序列的結束事件,定時器1 的通道0 比較事件或ADCCON1.ST 是1。

  4. ADCCON2 寄存器控制轉換序列是如何執行的。

  5. ADCCON2.SREF 用于選擇參考電壓。參考電壓只能在沒有轉換運行的時候修改。

  6. ADCCON2.SDIV 位選擇抽取率(并因此也設置了分辨率和完成一個轉換所需的時間,或樣本率)。抽取率只能在沒有轉換運行的時候修改。

  7. 轉換序列的最后一個通道由ADCCON2.SCH 位選擇,如上所述。

  8. ADCCON3 寄存器控制單個轉換的通道號碼、參考電壓和抽取率。單個轉換在寄存器ADCCON3 寫入后將立即發生,或如果一個轉換序列正在進行,該序列結束之后立即發生。該寄存器位的編碼和ADCCON2 是完全一樣的。

 

2.5、ADC 轉換結果

  數字轉換結果以2 的補碼形式表示。對于單端配置,結果總是為正。這是因為結果是輸入信號和地面之間的差值,它總是一個正符號數(Vconv=Vinp-Vinn,其中Vinn=0V)。當輸入幅度等于所選的電壓參考VREF時,達到最大值。


  對于差分配置,兩個引腳對之間的差分被轉換,這個差分可以是負符號數。對于抽取率是512的一個數字轉換結果的12 位MSB,當模擬輸入Vconv 等于VREF 時,數字轉換結果是2047。當模擬輸入等于-VREF 時,數字轉換結果是-2048。


  當ADCCON1.EOC 設置為1 時,數字轉換結果是可以獲得的,且結果放在ADCH 和ADCL 中。注意轉換結果總是駐留在ADCH 和ADCL 寄存器組合的MSB 段中。

  當讀取ADCCON2.SCH 位時,它們將指示轉換在哪個通道上進行。ADCL 和ADCH 中的結果一般適用于之前的轉換。如果轉換序列已經結束, ADCCON2.SCH 的值大于最后一個通道號碼,但是如果最后寫入ADCCON2.SCH 的通道號碼是12 或更大,將讀回同一個值。

 

2.6、ADC 參考電壓

  模擬數字轉換的正參考電壓可選擇為一個內部生成的電壓,AVDD5 引腳,適用于AIN7 輸入引腳的外部電壓,或適用于AIN6-AIN7 輸入引腳的差分電壓。


  轉換結果的準確性取決于參考電壓的穩定性和噪音屬性。希望的電壓有偏差會導致ADC 增益誤差,與希望電壓和實際電壓的比例成正比。參考電壓的噪音必須低于ADC 的量化噪音,以確保達到規定的SNR。

 

2.7、ADC 轉換時間

  ADC 只能運行在32 MHz XOSC 上,用戶不能整除系統時鐘。實際ADC 采樣的4 MHz 的頻率由固定的內部劃分器產生。執行一個轉換所需的時間取決于所選的抽取率。總的來說,轉換時間由以下公式給定:

Tconv = (抽取率+ 16) x 0.25 μs。

 

2.8、ADC 中斷

  當通過寫ADCCON3 觸發的一個單個轉換完成時,ADC 將產生一個中斷。當完成一個序列轉換時,不產生一個中斷。

 

2.9、ADC DMA 觸發(和ADC中斷有種互補的感覺~)

  每完成一個序列轉換,ADC 將產生一個DMA 觸發。當完成一個單個轉換,不產生DMA 觸發。


  There is one DMA trigger for each of the eight channels defined by the first eight possible settings for ADCCON2.SCH。當通道中一個新的樣本準備轉換,DMA 觸發是活動的。The DMA triggers are named ADC_CHsd in Following Table, where s is single-ended channel and d is differential channel。


  In addition, one DMA trigger, ADC_CHALL, is active when new data is ready from any of the channels in the ADC conversion sequence.


 

3、工程解析

從下面main函數可以看出,整個流程是先初始化串口收發(這個和上一節介紹的串口收發一模一樣,請參考上一節);接著是初始化ADC將片上片上溫度傳感器的輸出選擇作為ADC 的輸入用于溫度測量;在while大循環內則是連續讀取64次溫度數據并求平均(代碼中求平均方法有點怪),最后通過串口將采集的片內溫度傳感器數據輸出。


 1 void main(void) 

 2 {   

 3     char i; 

 4     float AvgTemp;   

 5     char strTemp[6];

 6     

 7     InitUART();                           //初始化串口 

 8     InitSensor();                         //初始化 ADC 

 9     

10     while(1) 

11     { 

12         AvgTemp = GetTemperature();   

13         

14         for (i=0; i<63; i++) 

15         {    

16             AvgTemp += GetTemperature();  

17             AvgTemp = AvgTemp/2;          //每次累加后除 2 

18         }

19        

20         memset(strTemp, 0, 6);

21         sprintf(strTemp,"%.02f", AvgTemp);//將浮點數轉成字符串

22         UartSendString(strTemp, 5);       //通過串口發給電腦顯示芯片溫度

23         DelayMS(1000);                    //延時

24     } 

25 }

 

其中initSensor()是對ADC進行初始化:

第3行#define DISABLE_ALL_INTERRUPTS() (IEN0 = IEN1 = IEN2 = 0x00)是關閉所有中斷;

第4行為設置系統主時鐘為32M,上一節中main函數最前面做的工作;

1 void InitSensor(void)

2 { 

3    DISABLE_ALL_INTERRUPTS();     //關閉所有中斷 

4    InitClock();                  //設置系統主時鐘為 32M 

5    TR0=0x01;                     //設置為1來連接溫度傳感器到SOC_ADC

6    ATEST=0x01;                   //使能溫度傳感

7 }   


第5行TR0=1為設置溫度傳感器連接到SOC_ADC:

第6行ATEST=1為使能溫度傳感器:

 

其中GetTemperature()函數用來獲取溫度傳感器AD的值:

 1 /****************************************************************************

 2 * 名    稱: GetTemperature()

 3 * 功    能: 獲取溫度傳感器 AD 值

 4 * 入口參數: 無

 5 * 出口參數: 通過計算返回實際的溫度值

 6 ****************************************************************************/

 7 float GetTemperature(void)

 8 { 

 9    uint  value; 

10    

11    ADCCON3  = (0x3E);            //選擇1.25V為參考電壓;14位分辨率;對片內溫度傳感器采樣

12    ADCCON1 |= 0x30;              //選擇ADC的啟動模式為手動

13    ADCCON1 |= 0x40;              //啟動AD轉化  

14    while(!(ADCCON1 & 0x80));     //等待 AD 轉換完成 

15    value =  ADCL >> 4;           //ADCL 寄存器低 2 位無效,由于他只有12位有效,ADCL寄存器低4位無效。網絡上很多代碼這里都是右移兩位,那是不對的

16    value |= (((uint)ADCH) << 4);

17    

18    return (value-1367.5)/4.5-5;  //根據 AD 值,計算出實際的溫度,芯片手冊有錯,溫度系數應該是4.5 /℃

19                                  //進行溫度校正,這里減去5℃(不同芯片根據具體情況校正)

20 }


其中ADCCON3設置為0x3E,即選擇內聯參考電壓,512采樣率(12位有效位數),對片內溫度傳感器單通道采樣!

其中 ADCCON1 |= 0x30 即Start select. Selects the event that starts a new conversion sequence(ADC啟動模式為手動)

其中 ADCCON1 |= 0x40 即Start a conversion sequence if ADCCON1.STSEL = 11 and no sequence is running(啟動ADC轉換)

其中 while(!(ADCCON1 & 0x80)) 即等待一次轉換完成

第15、16行:是獲得ADC采樣的12位有效數據的值保存在value中

15    value =  ADCL >> 4;           //ADCL 寄存器低 2 位無效,由于他只有12位有效,ADCL寄存器低4位無效。網絡上很多代碼這里都是右移兩位,那是不對的

16    value |= (((uint)ADCH) << 4);


但是value值只是ADC值,并不是溫度值,需要轉換,代碼18、19行就是完成轉換:(至于怎么算的我猜測應該有個公式對應!)

18    return (value-1367.5)/4.5-5;  //根據 AD 值,計算出實際的溫度,芯片手冊有錯,溫度系數應該是4.5 /℃

19                                  //進行溫度校正,這里減去5℃(不同芯片根據具體情況校正)

4、實驗現象

將程序燒入CC2530,用USB連接開發板與PC,可以用串口助手觀察zigbee發來的溫度數據,當用手觸摸芯片時溫度會有明顯變化:


關鍵字:ZigBee  采集溫度  串口顯示 引用地址:ZigBee基礎實驗(七)--AD采集溫度串口顯示

上一篇:ZigBee基礎實驗(八)--定時器一
下一篇:ZigBee基礎實驗(六)--UART(串口收發)

0

推薦閱讀

為提升智能制造創新能力、進一步完善 AI+IoT 布局,曠視科技 (Face++) 全資收購艾瑞思機器人 (Ares robot),正式進軍智能機器人業務。此次艾瑞思加入曠視業務矩陣,一方面會為物流倉儲、智能工廠等行業提供更加豐富的、更加智能的產品及解決方案;另一方面會積極探索智能機器人與新零售、行業物聯等領域的融合。此前曠視已經與富士康、菜鳥網絡、閃...
引言:硬件中的看門狗,不是門衛的意思,而是一只很兇的狗!如果你不按時喂它,它就會讓系統重啟!這反而是我們想要的功能~ 1、看門狗概述  看門狗定時器(WDT,Watch Dog Timer)是單片機的一個組成部分,它實際上是一個計數器,一般給看門狗一個數字,程序開始運行后看門狗開始倒計數。如果程序運行正常,過一段時間CPU應發出指令讓看門狗復位,重新...
據《科創板日報》消息,從供應鏈處獲悉,華為于今晚舉行的2020年春季發布會上,將發布一款氮化鎵充電器新品(單品),功率65W,支持雙口(Type-C和A)模式,能給手機和平板充電。小米10系列發布會讓氮化鎵充電器一舉捧紅,成為新晉網紅配件。小米的入局,可以說是極大地提高了氮化鎵的關注度。甚至有業內人士認為,此次小米推出的氮化鎵充電器,從終端客戶...
近日,禹創半導體宣布完成數千萬元A+輪融資,投資方為君盛投資。36氪消息顯示,本輪融資資金將主要用于新產品開發和團隊的擴充。此前,該公司還獲得了和利資本、欣旺達的投資。據當時報道,和利資本投資的A輪融資資金主要用于MicroLED、OLED驅動芯片和氮化鎵電源管理芯片的研發、測試。禹創半導體成立于2018年,是一家顯示驅動及電源管理IC研發商,目前集...

史海拾趣

問答坊 | AI 解惑

DT-1在線液體密度儀(密度計)

DT-1在線液體密度測試變送器可對各種液體或液態混合物在線進行密度測量。故在石化行業可廣泛應用于煉油、調油、油水介面監測;在食品工業用于葡萄汁、番茄汁、果糖漿、植物油及軟飲料加工等生產現場;奶制品業;造紙業,黑漿、綠漿、白漿、堿溶液的 ...…

查看全部問答∨

數字萬用表“三位半”“五位半”之說

五位半的測量范圍是:000000--199999 三位半的測量范圍是:0000--1999 可見,第一位只起0和1作用,所以稱半位. 數字表的數字有一個特點,它每位數字由七個筆劃組成,不同的筆劃組合先是不同的數字,例如顯示數字1用兩個筆劃,數字2用五個筆劃,如果 ...…

查看全部問答∨

External Medical and IT Power Supplies Meet Latest Energy Efficiency Standards

XP Power has announced the launch of the AEF and AFM series of external AC/DC power supply units. Designed for a wide range of IT and portable medical equipment, the units provide single outputs with power output between 100 - 150 ...…

查看全部問答∨

大家有誰寫過casio dt930手持機的中間層函數嗎?

寫過casio dt930手持機程序的朋友對日趨公司提供的rich_XXX 中間層函數了解多少? 我們公司以前開發casio dt930手持機程序都是用的這個日趨函數,但是因為不清楚其函數內部源碼,現在公司要求自己寫一個類似于這個日趨中間層函數庫的東西,其實現函數 ...…

查看全部問答∨

CxImage移植到WinCE導致的編譯問題

我把CxImage移植到EVC4.0的時候,編譯庫沒發現什么問題,但是鏈接到exe(exe是基于MFC的)的時候發現了如下的鏈接錯誤: ximapng.obj : error LNK2019: unresolved external symbol ___CxxLongjmpUnwind@4 referenced in function "public: bool __th ...…

查看全部問答∨

有些公司申請樣片的時候要交關稅,用什么信用卡?

有些公司申請樣片的時候要交關稅,按美元計算的,要用信用卡支付,不知道大家是用什么卡的?要花費多少?…

查看全部問答∨

如何通過串口發送一個長整型數據?

應該是通過指針,是嗎?下面的發送一個長整型數據的程序幫我看一下是否正確? void SendData(unsigned long int data){ unsigned long int *tmpdata; while((UTCTL1&0x01)==0); tmpdata=&data; // 得到存儲地址 TXBUF1=*tmpdata++; ...…

查看全部問答∨

請教UCOS多任務堆棧的問題

請問是用內部RAM 32K的 LPC2136 。開5個任務。每個任務堆棧大小800字節。請問有問題嗎…

查看全部問答∨

STM32中斷問題

EXIT0_IRQHandler(),這個是開發板提供的外部中斷函數,放在"stm32f10x_it.c"里面,請問一下這個是固定格式么? 再者,其他中斷有沒有什么函數固定搭配嘛?…

查看全部問答∨

關于VCA820的小問題

各位大神,小弟按VCA820 datasheet 23頁Figure84搭出來的圖檢測,Rf和Rg分別為1K與200,增益按道理應該是10倍,現在最大只有2~3倍,極度郁悶,求解中!!!…

查看全部問答∨
小廣播
添点儿料...
无论热点新闻、行业分析、技术干货……
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 甘谷县| 榕江县| 增城市| 迁西县| 伊宁县| 江油市| 太仓市| 连云港市| 吉林省| 库伦旗| 遂宁市| 昌黎县| 成武县| 平陆县| 绥阳县| 营山县| 广安市| 牡丹江市| 绿春县| 望江县| 合作市| 龙海市| 平乡县| 清流县| 什邡市| 布尔津县| 淮北市| 宁津县| 简阳市| 朝阳区| 淮安市| 长葛市| 元阳县| 蒲城县| 长治市| 海伦市| 鄢陵县| 株洲县| 贺州市| 油尖旺区| 翼城县|