|
近期用到了二路ADC電壓檢測(cè),很正常穩(wěn)定,沒(méi)有什么問(wèn)題的,設(shè)置要正確.
精簡(jiǎn)代碼如下:
ADCCFG = 0x2f; //設(shè)置ADC時(shí)鐘為系統(tǒng)時(shí)鐘/2/16 ,右對(duì)齊;
P_SW2 |= 0x80; //訪問(wèn)擴(kuò)展RAM區(qū)域寄存器(ADCTIM),需先將P_SW2的BIT7設(shè)置為1,才可正常讀寫(xiě); 手冊(cè)后面P_SW2 &= 0x7f釋放P_SW2非必要已刪除沒(méi)問(wèn)題!
ADCTIM = 0x30; //設(shè)置ADC時(shí)序控制2A~3F,采樣時(shí)間:0A~1F,ok; 用復(fù)位默認(rèn)值0X2A(0010,1010)可省2句(已驗(yàn)證可以但暫未采用),注意低5位SMPDUTY一定不能設(shè)置小于A(01010B);
//2、P32ADC10:測(cè)VTP1(BAT1一半分壓值); 3句合并ok!20220305;
ADC_CONTR = 0xCA; //BAT1:復(fù)位值000x,0000;打開(kāi)ADC電源(B7:1)、啟動(dòng)AD轉(zhuǎn)換(B6:1)、選通道A(P32);
delay_ms(1); //ADC模塊電源打開(kāi)后需等待約1ms等ADC電源穩(wěn)定后再讓ADC工作?? 20220327增加;
_nop_(),_nop_(); //參考手冊(cè)空操作2次; ADC模塊電源打開(kāi)后需等待約1ms等ADC電源穩(wěn)定后再讓ADC工作??
while (!(ADC_CONTR & 0x20)); //查詢ADC完成標(biāo)志; 手冊(cè):檢測(cè)工作約耗時(shí)1mS;
ADC_CONTR &= ~0x20; //清完成標(biāo)志;
ADC_CONTR &= 0x7F; //ADC轉(zhuǎn)換完即斷電更省電; 之前放PD改放這里測(cè)完即關(guān)省時(shí)即省電20220305;ok
res = (ADC_RES << 8) | ADC_RESL; //讀取ADC結(jié)果(右對(duì)齊:高2位低8位,前面自動(dòng)補(bǔ)0);
BAT1 = (int)(3300L*res/1024L+17L);//計(jì)算監(jiān)測(cè)電壓mV;特別注意數(shù)據(jù)類型后面帶L(因I易混淆)!及VDD3.3V參考電壓穩(wěn)定性;修正值:+29L;OK20220309;+17L;OK20220327; |
|