|
之前寫過,我也是找網上程序進行修改的。我做的是基于msp430g2231的傳感器平臺,運用到了多路ad采集,當然我是直接采集的,另外2種方式是中斷采集和dma采集,中斷采集以前做過,dma采集只在stm32中使用過,msp430沒有。
我用的msp430g2231,ad多路采集有很多種方法,我只說一種。
20150917165949_44558.jpg (1 MB, 下載次數: 167)
下載附件
2016-3-30 19:13 上傳
20150917170017_62151.jpg (678.33 KB, 下載次數: 159)
下載附件
2016-3-30 19:13 上傳
這個是之前發的圖片,msp430g2231 4路ad采樣,LED顯示。
其他的我不用說,我只寫主要的代碼。
這個事初始化函數,初始化用的,當然也可以用其他的方式初始化,初始化函數盡量在系統啟動之后寫。
void init_ADC10()
{
P1SEL|=BIT3+BIT4+BIT5+BIT7;
ADC10AE0|=BIT3+BIT4+BIT5+BIT7; // 使P1.0允許AD模擬輸入信號
ADC10CTL0=ADC10ON+MSC+SREF_0;//+REFON 開AD內核,選擇電源為參考電壓
ADC10CTL1=ADC10SSEL_0+CONSEQ_0; //+INCH_1+INCH_2 選擇ADC12SC為觸發源,選擇系統時鐘為AD內核時鐘,采用單通道多次采用
}
然后就是采樣函數,就這樣簡單,當然如果需要定時采樣,可以開啟ad定時器,也不是很難,仔細研究下就可以了。
單通道多次采樣幾乎是4個重復的步驟,如果采集的是實時的信號,我是不建議這樣寫的,要么中斷,要么dma,干不干就看你了。具體的意思我就不過多解釋了。
void start_ADC10()
{
ADC10CTL1|=INCH_3;
ADC10CTL0|=ADC10SC+ENC;
while(ADC10CTL1&ADC10BUSY!=0);
result[0]= ADC10MEM;
//printf("%dn",result[1]);
ADC10CTL0&=~(ADC10SC+ENC);
ADC10CTL1&=~INCH_3;
ADC10CTL1|=INCH_4;
ADC10CTL0|=ADC10SC+ENC;
while(ADC10CTL1&ADC10BUSY!=0);
result[1]= ADC10MEM;
ADC10CTL0&=~(ADC10SC+ENC);
ADC10CTL1&=~INCH_4;
ADC10CTL1|=INCH_5;
ADC10CTL0|=ADC10SC+ENC;
while(ADC10CTL1&ADC10BUSY!=0);
result[2]= ADC10MEM;
ADC10CTL0&=~(ADC10SC+ENC);
ADC10CTL1&=~INCH_5;
ADC10CTL1|=INCH_7;
ADC10CTL0|=ADC10SC+ENC;
while(ADC10CTL1&ADC10BUSY!=0);
result[3]= ADC10MEM;
ADC10CTL0&=~(ADC10SC+ENC);
ADC10CTL1&=~INCH_7;
}
|
-
-
傳感器參數采樣.zip
2016-3-30 19:08 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
28.77 KB, 下載次數: 84, 下載積分: 黑幣 -5
|