MSP430 中ADC12用法

1.1.    介紹

Figure 4  AD模塊圖

在處AD時,我們關注的對象有如下幾個,參考源、通道、存儲地址、時鐘、觸發方式、精度,速度(200k)。

在上圖中我們都可以找到,msp430f149的參考正電源有VRFE+ VeREF+ ,Vcc,同時有對應的負電源。採樣通道有16個,存儲地址則有對應16個通道,時鐘則是有內部時鐘及3種時鐘源的分頻,觸發方式有4種。

因此,對於這些特點我們可以實現4種模式,單通道單次採樣,單通道多次採樣,多通道單次採樣,多通道多次採樣。

1.2.    相關寄存器

ADC12CTL0:前面8位是對採樣保持時間的設置。後8位分別對應8種設置

ADC12CTL1:4位進行通道選擇,後12位中有其它設置

ADC12MEMX:存儲地址

ADC12MCTLX:通道,是否結速,在ENC=0時纔可寫

1.3.    樣例代碼

單通道單次採樣:

P6SEL |= 0x01;                        // 使能A/D 通道A0

ADC12CTL0 = ADC12ON+SHT0_2; // 打開 ADC12, 設置採樣時鐘

ADC12CTL1 = SHP;                      // 使用採樣時鐘

//ADC12MCTL0 = SREF_2;            // Vr+ = VeREF+ (外部)

ADC12CTL0 |= ENC+ADC12SC;                     // 使能轉換

While(1)

{

   ADC12CTL0 |= ADC12SC;               // 開始轉換

   while ((ADC12IFG & ADC12BUSY)==0);

   value=ADC12MEM0;

}

單通道多次採樣:

P6SEL |= 0x01;                        // 使能A/D 通道A0

ADC12CTL0 = ADC12ON+SHT0_2; // 打開 ADC12, 設置採樣時鐘

ADC12CTL1 = SHP+CONSEQ_2;                      // 使用採樣時鐘

//ADC12MCTL0 = SREF_2;            // Vr+ = VeREF+ (外部)

ADC12CTL0 |= ENC+ADC12SC+MSC;                     // 使能轉換

While(1)

{

  while ((ADC12IFG & ADC12BUSY)==0);

           value=ADC12MEM0;

}

多通道單次採樣

P6SEL |= 0xff;                        // 使能A/D 通道A0

   ADC12CTL0 = ADC12ON+SHT0_2; // 打開 ADC12, 設置採樣時鐘

   ADC12CTL1 = SHP+CONSEQ_1;                      // 使用採樣時鐘

   //ADC12MCTL0 = SREF_2;            // Vr+ = VeREF+ (外部)

   ADC12MCTL4|=INCH_5;

   ADC12MCTL6|=EOS+INCH_4;

   ADC12CTL0 |= ENC+ADC12SC+MSC;                     // 使能轉換

While(1)

{

   ADC12CTL0 |= ADC12SC;               // 開始轉換

   while ((ADC12IFG & ADC12BUSY)==0);

   value=ADC12MEM0;

  // value=ADC12MEM1;

}

多通道多次轉換

P6SEL |= 0xff;                        // 使能A/D 通道A0

   ADC12CTL0 = ADC12ON+SHT0_2; // 打開 ADC12, 設置採樣時鐘

   ADC12CTL1 = SHP+CONSEQ_3;                      // 使用採樣時鐘

   //ADC12MCTL0 = SREF_2;            // Vr+ = VeREF+ (外部)

   ADC12MCTL4|=INCH_5;

   ADC12MCTL6|=EOS+INCH_4;

   ADC12CTL0 |= ENC+ADC12SC+MSC;                     // 使能轉換

   ADC12CTL0 |= ADC12SC;               // 開始轉換

while(1)

 

   while ((ADC12IFG & ADC12BUSY)==0);

         value=ADC12MEM0;

    Delay_nop(1000);

  }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章