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);
}