MSP430F4250 AD解讀
1.關于MSP430F4250:
2.關于MSP430F4250 AD:
參考MSP430X4XXFamily User’s Guide:
關于16位AD采樣有兩種:
2.1 MSP430F4250選的是哪種?
其實并不是軟件設置哪種,而是型號決定,由上述可知,MSP430F4250使用的是SD16_A
2.2 MSP430F4250 AD的輸入電壓范圍是多少?
此時參考的手冊需要更換為MSP430F42X0手冊:
2.3 MSP430F4250 AD的轉換結果在哪?數(shù)據格式是什么?
繼續(xù)參考MSP430X4XX Family User’s Guide手冊:
AD的轉換結果就在SD16MEMx這個寄存器里保存,數(shù)據格式和設置有關:
其中SD16UNI和SD16DF都是SD16CCTLx(其中x是用戶選擇的通道編號)寄存器中的兩位。
另外補充,關于FSR:
MSP430F4250 AD有內部參考電壓1.2V,如果設置了選取內部參考電壓,那么FSR = 1.2V/2/GAIN= 0.6V(當GAIN = 1時)。
如果沒有選取內部參考電壓,那么FSR = Vref/2/GAIN(想得到最大的輸入范圍,就把AVcc[3.3v]接到單片機的Vref引腳上)。(純屬個人理解和設置,最高只試過1.6V的,但是手冊上的意思應該可以0-3.3V,暫時沒有嘗試)。
是否選擇內部參考電壓,在SD16CTL寄存器中的:
2.4 MSP430F4250 AD的轉換速率?
參考MSP430X4XX Family User’s Guide手冊,AD轉換速率和單片機時鐘配置有關:
可知如果使用32768-Hz的外部晶振,則CPU主時鐘MCLK=外設時鐘SMCLK=1MHz左右(默認值,如果想要改變則可以通過設置SCFQCTL和SCFI0進行倍頻)。AD設置時鐘源可以選擇是ACLK(32768Hz)和SMCLK(1MHz),AD時鐘選擇上選擇SMCLK(SMCLK=MCLK為最快)即可得到最快的轉換速率,下面是一種設置下的轉換速率的說明:
256的過采樣率,并且每四次采樣觸發(fā)一次中斷,那么約244us進行一次AD轉換。
AD代碼如下:
#include?? #define???Num_of_Results???80 /*?Arrays?to?store?SD16_A?conversion?results?*/ /*?NOTE:?arrays?need?to?be?global?to???????*/ /*???????prevent?removal?by?compiler???????*/ static?unsigned?int?results[Num_of_Results]; void?main(void) { ??volatile?unsigned?int?i;??????????????????//?Use?volatile?to?prevent?removal ????????????????????????????????????????????//?by?compiler?optimization ??WDTCTL?=?WDTPW?+?WDTHOLD;?????????????????//?Stop?WDT ??FLL_CTL0?|=?XCAP14PF;?????????????????????//?Configure?load?caps ??for?(i?=?0;?i?<?10000;?i++);??????????????//?Delay?for?32?kHz?crystal?to ????????????????????????????????????????????//?stabilize ??P1SEL?=?0;????????????????????????????????//GPIO ??P1DIR?=?0xff;?????????????????????????????//out ?? ??SD16CTL?=?SD16REFON+SD16SSEL0;????????????//?1.2V?ref,?SMCLK ??SD16INCTL0?|=?SD16INTDLY_0;???????????????//?Interrupt?on?4th?sample ??SD16CCTL0?|=?SD16IE?;?????????????????????//?Enable?interrupt ??for?(i?=?0;?i?<?0x3600;?i++);?????????????//?Delay?for?1.2V?ref?startup ??_EINT();??????????????????????????????????//?Enable?general?interrupts ??SD16CCTL0?|=?SD16SC;??????????????????????//?Set?bit?to?start?conversion ??_BIS_SR(LPM0_bits);???????????????????????//?Enter?LPM0 ?? } #pragma?vector=SD16_VECTOR __interrupt?void?SD16ISR(void) { ??static?unsigned?int?index?=?0; ??switch?(SD16IV) ??{ ??case?2:???????????????????????????????????//?SD16MEM?Overflow ????break; ??case?4:???????????????????????????????????//?SD16MEM0?IFG ????results[index]?=?SD16MEM0;??????????????//?Save?CH0?results?(clears?IFG) ????P1OUT?=?0x03;???????????????????????????//Pin?0,1?out?1 ????if?(++index?==?Num_of_Results) ????{ ??????index?=?0;????????????????????????????//?SET?BREAKPOINT?HERE ??????//SD16CCTL0?&=~?SD16SC; ??????P1OUT?=?0x00;?????????????????????????//Pin?0,1?out?0??? ????} ????break; ??} }
AD代碼的示波器測試:(通過觀察P1.0輸出)
連續(xù)轉換的每次轉換時間為224us,轉換80次為19.6ms。
以上純屬個人見解,初學者可以參考但一切以官方手冊為準。