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

msp430內部含有ADC12模塊,可以完成12位的模數轉換,當對精度或其他指標要求不高時,可以選用430單片機內部的ADC12完成模數轉換工作。這里主要實現了一個比較通用的ADC12模塊初始化程序,具體的數據存儲和處理需要自己在中斷處理函數中添加。


硬件介紹:

msp430單片機內的ADC12模塊的特點如下:12位轉換精度,1位非線形誤差,1位非線形積分誤差;多種時鐘源給ADC12模塊,切本身自帶時鐘發生器;內置溫度傳感器;TimerA/TimerB硬件觸發器;8路外部通道和4路內部通道;內置參考電壓源和6種參考電壓組合;4種模式的模數轉換;16bit的轉換緩存;ADC12關閉支持超低功耗;采用速度快,最高200Kbps;自動掃描和DMA使能。430內部的ADC12功能還是蠻強大的,可以有定時器觸發模數轉換開始,還可以和內部的DMA模塊共同使用,完成高速的采樣轉儲等高級功能。


這個AD的轉化公式如下,可以根據它計算采樣的模擬電壓值:


image


使用AD是還要注意采樣時間,430單片機的模數ADC12模塊的等效模擬電壓輸入電路如下:


image


其中VS是信號源電壓,RS是信號源內阻,VI在Ax(ADC12模塊模擬輸入端)上的電壓,RI單片機內多路開關等效電阻,VC是保持電容上的電壓(ADC12模塊采樣的電壓),CI 是電容的值。需要根據這些值計算采樣時間:


image


代入單片機上的參數后公式如下:


image


我的程序中采樣時間設的是4us,可以算出如果用我的程序(不更改采樣時間)的話,最大信號源內阻可以是6.8k,當信號源內阻更大時,可以自己按要求設采樣時間(在程序的初始化函數內的寄存器設置部分)。


還有,ADC模數轉換時要求參考電壓等很穩定,為了達到這個要求,德州儀器要求這部分的電路如下:


image


即:所有參考源和電源均并聯一組 0.1uF和10uF的電容。


硬件部分就說這么多了;如果需要更詳細的說明,參考用戶指南。


程序實現:

程序主要實現的是一個比較通用的初始化程序,內容如下:


char ADC12Init(char n,char channels[],char rep)

{

    if(n>15)

        return 0;

    //SHT0_0 

    ADC12CTL0 = ADC12ON + MSC + SHT0_0 + REFON + REF2_5V;// 開啟ad,參考電壓2.5v

    ADC12CTL1 = SHP + ADC12SSEL_3;                  //Use sampling timer, SMCLK

    

    for(int i = 0;i < n;i++)

    {

        if(channels[i] >= 0x80)

            return 0;

        *(char*)(ADC12MCTL0_ + i) = channels[i];    //每個MCTL設置

    }

    *(char*)(ADC12MCTL0_ + n - 1) |= EOS;           //序列結束

    

    if(rep != 0)                                  //多次轉換

    {

        ADC12CTL1 |= CONSEQ_3;

    }

    else

    {

        ADC12CTL1 |= CONSEQ_1;

    }

    

    ADC12IE = 1<<(n-1);                                 // Enable ADC12IFG.n-1

    return 1;

}

程序先判斷n 通道總數是否超過了可用的個數,超過則返回零然后設置ADC12CTL0和ADC12CTL1中不需要特殊設置的部分,然后在設置通道模式(根據rep參數的值);for循環設置的是每個存儲寄存器的設置ADC12MCTLx ;*(char*)(ADC12MCTL0_ + n - 1) |= EOS; //序列結束 這句加入序列結束標志;最后設置中斷寄存器并返回成功設置標志。其中比較特殊的是ADC12MCTL0_,這個是430提供的頭文件中定義的ADC12MCTL0的地址值,以其為指針首址操作ADCMCTLx寄存器,從而利用循環設置寄存器的內容,大量減少了代碼行數。


參數channels[]是每個存儲寄存器的設置(除EOS位之外的),含義如下:


channels[]:對應通道設置,高四位,參考源選擇;

低四位,通道選擇。具體如下:

SREFx Bits

6-4

Select reference

000 VR+ = AVCC and VR. = AVSS

001 VR+ = VREF+ and VR. = AVSS

010 VR+ = VeREF+ and VR. = AVSS

011 VR+ = VeREF+ and VR. = AVSS

100 VR+ = AVCC and VR. = VREF./ VeREF.

101 VR+ = VREF+ and VR. = VREF./ VeREF.

110 VR+ = VeREF+ and VR. = VREF./ VeREF.

111 VR+ = VeREF+ and VR. = VREF./ VeREF.

INCHx Bits

3-0

Input channel select

0000 A0

0001 A1

0010 A2

0011 A3

0100 A4

0101 A5

0110 A6

0111 A7

1000 VeREF+

1001 VREF./VeREF.

1010 Temperature sensor

1011 (AVCC – AVSS) / 2

1100 (AVCC – AVSS) / 2

1101 (AVCC – AVSS) / 2

1110 (AVCC – AVSS) / 2

1111 (AVCC – AVSS) / 2

這是從用戶指南里復制來的,每一位和ADC12MCTLx的意義相同(去掉EOS位),所以可用宏定義來制定這個參數,如:


char channels[3];

channels[0] = SREF_1+INCH_0;

channels[1] = SREF_1+INCH_1;

channels[2] = SREF_1+INCH_2;

ADC12Init(3,channels,1);

這是3個通道A0-A2采樣,多次采樣。


啟動轉換函數:


void ADC12Start()

{

    ADC12CTL0 |= ENC;

    ADC12CTL0 |= ADC12SC;

}

ADC初始化完成后,調用此函數開始AD轉換,轉換完成后(一個序列通道,如:剛才的0-2),程序自動進入AD中斷,用戶需要在這里為自己的函數添加處理邏輯;這里只存儲了轉化的結果:


#pragma vector=ADC_VECTOR

__interrupt void ADC12ISR (void)

{

    static int i;

    results[0][i] = ADC12MEM0;                // Move results, IFG is cleared

    results[1][i] = ADC12MEM1;                // Move results, IFG is cleared

    results[2][i] = ADC12MEM2;                // Move results, IFG is cleared

    i++;

    if(i>31)                                  //多次轉換時 轉換次數

    {

        //多次重復采樣時,在這里方處理函數

        ADC12CTL0 &=~ ENC;                      //停止轉換

        i=0;

    }


}

該程序實現的是多次A0-A2 32次轉換,把結果存入results數組。單次時,僅僅采樣一次(A0-A2)可用自己更改處理函數。


程序部分就完成了,調用時注意要自己實現處理邏輯或存儲邏輯。


使用示例:

 


本程序使用方式還是加入C文件,包含H文件;不過和之前的程序不同的是要自己實現中斷處理邏輯。


使用示例參見程序庫中的ADC12.


#include

#include "ADC12.h"

void main( void )

{

    // Stop watchdog timer to prevent time out reset

    WDTCTL = WDTPW + WDTHOLD;

    ClkInit();

    char channels[3];

    channels[0] = SREF_1+INCH_0;

    channels[1] = SREF_1+INCH_1;

    channels[2] = SREF_1+INCH_2;

    ADC12Init(3,channels,1);

    _EINT();

    ADC12Start();

    LPM0;

}

這里實現的是3通道多次轉換,參考電壓都是內部參考電壓。自己實現的處理邏輯參見前面的程序實現的最后一部分。


ADC12模塊部分就到這里了,有什么不足之處,歡迎提出建議、討論。


關鍵字:MSP430  程序庫  ADC12模塊 引用地址:MSP430程序庫<十>ADC12模塊

上一篇:MSP430程序庫<十一>定時器TA的PWM輸出
下一篇:MSP430程序庫<九>數碼管顯示

推薦閱讀

學習單片機---- 我們該做什么?我們為什么要學單片機?單片機是大專學校電類專業的一門普通課,有些學校甚至把它列為選修課,在眾多課程中,沒有顯出它有多么重要。為什么要學習它呢?電類專業有很多專業課,這些專業課非常重要,是各個專業存在的必需課程,學完這些課程可以使學習者成為大學者的繼承人,市場對學者繼承人的需求太少,大量需要的是產品的研...
  隨著全球暖化與氣候變遷日益加劇,再生能源產業已成為必然的趨勢,而臺灣也無法置身事外。在臺灣當局的光伏中長期規劃中,目標設定在 2020 年完成裝設 6.5GW 光伏, 2025 年裝設 3GW 屋頂型、17 GW 地面型共 20GW 的光伏容量。累積至2018年,全臺的光伏安裝容量已超過 1GW,正式邁向了 GW 級市場。看好臺灣地區光伏市場,在臺已深根 ...
  ARM Cortex-M7 處理器  Cortex-M處理器系列的最新成員是Cortex-M7。這款新的核心具備可用于支持新型嵌入式技術需求的功能,它設計用于需要較高處理性能、實時響應能力和能效的應用。總體而言,Cortex-M7處理器包含下列關鍵特性:  ? 高性能、雙指令簽發6級流水線,每個時鐘周期最多可執行兩個指令;  ? 64位AXI系統總線接口;  ? 可選...
7月底以來,股價長期低迷的天音控股猶如坐上“過山車”,短短一月股價便漲愈2倍,9月9日股價更一度攀升到27.85元/股的最高位。不過緊接著卻又突然大跳水,接連數日呈一字跌停。顯而易見,天音控股股價劇烈波動的背后,與近日沸沸揚揚的收購事件有關。在股價上漲初期,其曾兩度發布公告稱,公司目前并沒有以披露而未披露的事項或與該事項有關的籌劃、商談、...

史海拾趣

問答坊 | AI 解惑

采用SPI的高速ADC雙線控制電路

     多數現行微處理器、DSP、現  場可編程門陣列都集成了硬件和軟件資源,它們支持兩種常見接口標準——SPI(串行外設接口)和I2C /SMBus——中的一種或兩種。兩種雙線接口標準都有幾個關鍵缺點。例如,I2C在標準模式、快速模式 ...…

查看全部問答∨

掃盲書籍下載:醫療儀器原理

醫療儀器原理  王成    上海交通大學出版社  2008-05-01 目錄: 1 緒論 ----------------8   1.1 醫療儀器 ----------------8   1.2 醫療儀器的構成 ----------------10   1.3 ...…

查看全部問答∨

printk()問題,急待解決!

   各位大俠:     我現在是交叉編譯了一個驅動模塊,現在已經能夠成功的加載在開發板上,這個開發板是MIPS處理器,上面跑的是linux系統。但是我的程序里有printk()函數,按道 理說應該可以打印出信息在/var/log/messages里 ...…

查看全部問答∨

誰能用比較通俗的語言告訴下驅動下的kobject和sys干什么用的?

誰能用比較通俗的語言告訴下驅動下的kobject和sys干什么用的?謝謝!…

查看全部問答∨

有沒人在調試S3C6400下的SPI通信,我的怎么怪怪的,設置成接收模式,還沒接數據源,SPI中斷會被不斷地被觸發,不知道為什么?干擾嗎?!

有沒人在調試S3C6400下的SPI通信,我的怎么怪怪的,設置成接收模式,還沒接數據源,SPI中斷會被不斷地被觸發(進了SPI中斷,接到的數據個數一般為1個,數據不定,0X00和0XFF居多),不知道為什么?干擾嗎?怎么查干擾因素?!…

查看全部問答∨

51中,設置定時器,然后啟動定時器的匯編語句怎么寫?

51中,設置定時器,然后啟動定時器的匯編語句怎么寫? …

查看全部問答∨

HelloM3應用筆記--TI M3 Tempest C1版本編程說明

  2010年5月份以后生產的Tempest系列C1版本的芯片,其前4K內部Flash里打了一個復位補丁,所以所有的用戶程序的代碼起始地址需要修改為0x1000,在用戶程序的啟動代碼中,需要將FLASH Controll的中斷向量指向0x881的地址(注意不要將該補丁擦除 ...…

查看全部問答∨

版主求教virtualComPort

硬件連接電路如:USB電路.jpg和cpu.jpg所示,電源4腳USB_HOST_DEC接AD,不過現在不用。CPU為STM32F103VCT6,采用外部晶振12M,固件庫采用STM32_USB-FS-Device_Lib_V3.2.1中的virtual_Com_port。 按照USB時鐘要求,已經把PLLCLK配置為72M,USB ...…

查看全部問答∨

stm32f測試小程序

希望對新手有用! 使用內部晶振,PC口進行閃燈! stm32f.JPG (51.25 KB) 下載次數:13 2010-9-28 16:41 …

查看全部問答∨

STM32的同步注入模式怎么用啊?

STM32的同步注入模式怎么用阿?怎么設置都只能使得ADC1可以轉換,ADC2似乎沒有反應。/******************************************************************************** Function Name  : ADC_Config* Descr ...…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

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

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

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 泉州市| 巢湖市| 呼玛县| 徐闻县| 牙克石市| 玛多县| 应城市| 天气| 临江市| 长汀县| 云梦县| 大渡口区| 连城县| 牡丹江市| 双鸭山市| 辽源市| 建瓯市| 海丰县| 崇左市| 娱乐| 浑源县| 武强县| 遵化市| 芮城县| 长治市| 仲巴县| 赫章县| 桂林市| 灌阳县| 讷河市| 高平市| 思南县| 米易县| 诸城市| 五常市| 关岭| 雅安市| 宝丰县| 洛南县| 绥江县| 孝昌县|