msp430單片機AD轉換

來源:互聯網
上載者:User

標籤:blog   http   os   使用   ar   for   資料   div   art   

msp430單片機AD轉換  

2010-08-01 20:14:05|  分類: msp430單片機|舉報|字型大小 訂閱

  

一。簡單介紹:

ADC12模組中是由以下部分組成:輸入的16路類比開關(外部8路,內部4路),ADC內部電壓參考源,ADC12核心,ADC時鐘源部分,採集與保持/觸發源部分,ADC資料輸出部分,ADC控制寄存器等組成。

 

四種取樣模式:

(1)單通道單次轉換模式

(2)序列通道單詞轉換模式

(3)單通道多次轉換模式

(4)序列通道多次轉換模式

 

個人覺得(3)模式應該是使用較多的,

對選定的通道進行多次轉換,直到關閉該功能或ENC=0。進行如下設定:
x=CSStartAdd,指向轉換開始地址
ADC12MEMx存放轉換結果 
ADC12MCTLx寄存器中定義了通道和參考電壓
在這種模式下,改變轉換模式,不必先停止轉換,在當前進行中的轉換結束後,可改變轉換模式。該模式的停止可有如下幾種辦法:
使用CONSEQ=0的辦法,改變為單通道單次模式。
使用ENC=0直接使當前轉換完成後停止。
使用單通道單次模式替換當前模式,同時使ENC=0  
    ADC控制寄存器
ADC12CTL0 轉換控制寄存器0
ADC12CTL1 轉換控制寄存器1
ADC12IE   中斷使能寄存器
ADC12IFG  中斷標誌寄存器
ADC12IV   中斷向量寄存器
ADC12MEM0-15 儲存控制寄存器0-15
ADC12MCTL0-15 儲存控制寄存器0-15
一般做法:在大迴圈裡開始轉換,轉換完畢引發中斷,我們在中斷裡記錄並處理轉換資料。

 

 

 

 

二。ADC12寄存器說明
-----------------------------------------------------------------------
寄存器類型           寄存器縮寫                寄存器含義
-----------------------------------------------------------------------
轉換控制寄存器       ADC12CTL0                 轉換控制寄存器0 
                     ADC12CTL1                 轉換控制寄存器1 
-----------------------------------------------------------------------
中斷控制寄存器       ADC12IFG                  中斷標誌寄存器 
                     ADC12IE                   中斷使能寄存器 
                     ADC12IV                   中斷向量寄存器 
-----------------------------------------------------------------------
儲存及其控制寄存器   ADC12MCTL0~ADC12MCTL15   儲存控制寄存器0~15 
                     ADC12MEM0~ADC12MEM15     儲存寄存器0~15 
-----------------------------------------------------------------------
1.ADC12CTL0 控制寄存器0,各位定義:
bit15~12   bit11~8   bit7   bit6   bit5   bit4      bit3         bit2        bit1   bit0
SHT1        SHT0       MSC    2.5V   REFON  ADC12 ON  ADC12 TOVIE  ADC12 TVIE   ENC    ADC12 SC 
ADC12SC——採樣/轉換控制位。在不同條件下,ADC12SC的含義如下所示:
--------|---------------------------------------------------------------------
ENC=1,  | SHP=1:  ADC12SC由0變為1啟動A/D轉換; A/D轉換完成後ADC12SC自動複位 
ISSH=0  |  SHP=0:  ADC12SC保持高電平採樣; ADC12SC複位時啟動一次轉換 
--------|---------------------------------------------------------------------
ENC——轉換允許位。
0:ADC12為初始狀態,不能啟動A/D轉換;
1:首次轉換由SAMPCON上升沿啟動
ADC12TVIE——轉換時間溢出中斷允許位(當前轉換還沒完成時,又發生一次採樣請求,則會發生轉換時間溢出)
0:沒發生轉換時間溢出
1:發生轉換時間溢出
ADC12OVIE——溢出中斷允許位(當ADC12MEMx中原有資料還沒有讀出,而又有新的轉換結果資料要寫入時,則發生溢出)
0:沒發生溢出
1:發生溢出
ADC12ON——ADC12核心控制位
0:關閉ADC12核心
1:開啟ADC12核心
REFON——參考電壓控制位
0:內部參考電壓發生器關閉
1:內部參考電壓發生器開啟
2.5V——內部參考電壓的電壓值選擇位
0:選擇1.5V內部參考電壓
1:選擇2.5V內部參考電壓
MSC——多次採樣轉換位(CONSEQ<>0表示當前轉換模式不是單通道單次轉換)
-----------|---------------------------------------------------------------------------------------------
有效條件   | MSC值    含義
SHP=1      |  0       每次轉換需要SHI訊號的上升沿觸發採樣定時器     
CONSEQ<>0  |  1       僅首次轉換由SHI訊號的上升沿觸發採樣定時器,而後採樣轉換將在前一次轉換完成後立即進行 
-----------|---------------------------------------------------------------------------------------------
SHT1、SHT0——採樣保持定時器1,採樣保持定時器0
分別定義儲存在轉換結果寄存器ADC12MEM8~ADC12MEM15和ADC12MEM0~ADC12MEM7中的轉換採樣時序與採樣時鐘ADC12CLK的關係。採樣周期是ADC12CLK周期乘4的整數倍,即:
SHITx   0   1   2   3   4    5   6   7   8   9  10   11    12~15 
n       1   2   4   8  16   24  32  48  64  96  128  192   256 
2.ADC12CTL1 轉換控制寄存器1(大多數3~15位,只有在ENC=0時才可被修改),各位定義:
bit15~12    bit11~10  bit9  bit8   biy7~5     bit4~3      bit2~1    bit0
CSSTARTADD   SHS        SHP   ISSH   ADC12 DIV   ADC12 SSEL   CONSEQ     ADC12 BUSY
CSSTARTADD——轉換儲存空間地址位。該4位所表示的位元0~15分別對應ADC12MEM0~15。可以定義單次轉換地址或序列轉換的首地址。
SHS——採樣觸發輸入源選擇位。
0:ADC12SC
1:Timer_A.OUT1
2:Timer_B.OUT0
3:Timer_B.OUT1
SHP——採樣訊號(SAMPCON)選擇控制位。
0:SAMPCON源自採樣觸發輸入訊號
1:SAMPCON源自採樣定時器,由採樣輸入訊號的上升沿觸發採樣定時器
ISSH——採樣輸入訊號方向控制位
0:採樣輸入訊號為同向輸入
1:採樣輸入訊號為反向輸入
ADC12DIV——ADC12時鐘源分頻因子選擇位。分頻因子為該3位位元加1
ADC12SSEL——ADC12核心時鐘源選擇
0:ADC12內部時鐘源——ADC12OSC
1:ACLK
2:MCLK
3:SMCLK
CONSEQ——轉換模式選擇位
0:單通道單次轉換模式
1:序列通道單次轉換模式
2:單通道多次轉換模式
3:序列通道多次轉換模式
ADC12BUSY——ADC12忙標誌(只用於單通道單次轉換模式,在其它轉換模式下,該位無效)
0:表示沒有活動的操作
1:表示ADC12正處於採樣期間、轉換期間或序列轉換期間
3.ADC12MEM0~ADC12MEM15 轉換儲存寄存器
該組寄存器均為16位寄存器,用來存放A/D轉換結果。中用其中低12位,高4位在讀出時為0
4.ADC12MCTLx 轉換儲存控制寄存器(所有位只有在ENC為低電平時可修改,在POR時各位被複位)
對於每個轉換儲存空間有一個對應的轉換儲存空間控制寄存器,所以在進行CSSTARTADD轉換儲存空間地址位設定的同時,也確定了ADC12MCTLx。該寄存器各位含義如下:
bit7   bit6~4   bit3~0
EOS    SREF      INCH 
EOS——序列結束控制位
0:序列沒有結束
1:該序列中最後一次轉換
SREF——參考電壓源選擇位
0:Vr+=AVcc,Vr-=AVss
1:Vr+=VREF+,Vr-=AVss
2,3:Vr+=VEREF+,Vr-=AVss
4:Vr+=AVcc,Vr-=VREF-/VEREF-
5:Vr+=VREF+,Vr-=VREF-/VEREF-
6,7:Vr+=VEREF+,Vr-=VREF-/VEREF-
INCH——選擇類比輸入通道
0~7:A0~A7
8:VeREF+
9:VREF-/VeREF-
10:片內溫度感應器的輸出
11~15:(AVCC-AVSS)/2
5.ADC12IFG 中斷標誌寄存器 為16位,其中中斷標誌位ADC12IFG.x對應於轉換儲存寄存器ADC12MEMx。各位含義如下:
bit15   bit14    ......      bit1   bit0 
IFG15   IFG14    ......      IFG1   IFG0 
ADC12IFG.x置位:轉換結束,並且轉換結果已經裝入轉換儲存寄存器。
ADC12IFG.x複位:ADC12MEMx被訪問。
6.ADC12IE 中斷使能寄存器 為16位,對應於ADC12IFG寄存器。各位含義如下:
bit15   bit14    ......     bit1   bit0 
IE.15   IE.14    ......     IE.1   IE.0 
ADC12IE.x=1:允許相應的中斷標誌位ADC12IFG.x在置位時發生的插斷要求服務。
ADC12IE.x=0:禁止相應的中斷標誌位ADC12IFG.x在置位時發生的插斷要求服務。
7.ADC12IV 中斷向量寄存器 
ADC12是一個多源中斷:有18個中斷標誌(ADC12IFG.0~ADC12IFG.15與ADC12TOV,ADC12OV),但只有一個中斷向量。所以需要設定這18個標誌的優先順序順序,按照優先順序順序安排中斷標誌的響應,高優先順序的請求可以中斷正在服務的低優先順序。 

 

三。標準程式參考:

#include "msp430x14x.h"
void InitADC12();
unsigned char wait;
int main( void )
{
  // Stop watchdog timer to prevent time out reset
   WDTCTL = WDTPW + WDTHOLD;
  InitADC12();
  return 0;
}
void InitADC12()
{
    //_DINT();
    ADC12CTL0 &= ~ENC; //只有在ENC複位的情況下才能對ADC12CTL0、1進行設定!!!
    ADC12CTL0 = MSC + REFON + REF2_5V + SHT0_15 + SHT1_15;
    /*MSC:多次採樣轉換位,只對序列採樣或者多次多次轉換有效。
        0:採樣定時器需要SHI訊號的上升沿觸發
        1:首次需要採樣定時器SHI訊號觸發,之後的轉換在上次轉換之後隨即開始。*/
    ADC12CTL1 |= SHP + CONSEQ_0;
    /*SHP: 1:採樣訊號源自採樣定時器 0:採樣訊號源自採樣輸入訊號
    CONSEQ: 0: 單通道單次轉換 1:序列通道單詞轉換 2:單通道多次轉換 3:序列通道多次轉換
    CSTARTADD_x(0~15):轉換起始位置 */
    ADC12MCTL0 = EOS + SREF_0 + INCH_7;
    /* EOS:序列結束位
    SREF: 參考電壓選擇
    INCH:類比輸入通道選擇 */
    ADC12IE |= 0x0001;//開相應類比通道中斷,轉換完畢後引發中斷
    _EINT();
    //ADC12CTL0 |= ADC12ON + ENC; //修改!!!// 這樣寫是不對的
    ADC12CTL0 |= ADC12ON;
    ADC12CTL0 |= ENC;


    wait = 0; //此處可定義變數,指示轉換是否完成
    ADC12CTL0 |= ENC+ADC12SC; //轉換開始 若希望在其他時間開始轉換 可將次句放在別處逼比必
    while(wait==0)
      ;
}
#pragma vector=ADC_VECTOR
__interrupt void ADC()
{int result[7];
        wait=1;
        result[0] = ADC12MEM0;
        /*unsigned char q0;
    int *pmem=ADC12MEM;
                    //轉換結束的標誌位置位
    for(q0=0;q0<16;q0++)
    {
        AdMem[q0]= *pmem;
        pmem++;
    }*/
}

msp430單片機AD轉換

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.