最近調(diào)試122檢測(cè)小電流,有一種遇到鬼打墻的狀態(tài),就是看到寄存器的值在數(shù)據(jù)轉(zhuǎn)移時(shí)改動(dòng)了。要不是親眼見,還真不會(huì)相信。在ADC中寫入了這么一小段:
AD_Start=1;//Skip first ADC, can delete by your select
while(!AD_DONE)
ad_temp$1 = adcrh;
ad_temp$0 = adcrl;
你說(shuō)要是有問題,你在檢測(cè)內(nèi)部1.2V時(shí)也有問題,那也更容易查找問題吧。可是在轉(zhuǎn)換以內(nèi)部1.2V為一路輸入電壓時(shí)又沒有問題,而且這個(gè)程序,在以前的調(diào)試好象也問題。
可是一到轉(zhuǎn)換另外一路小電壓的時(shí)候,就出現(xiàn)問題了??窗烧{(diào)試窗口里的數(shù)據(jù)明明提示ADCRH的值為0x01,ADCRL的值為0x17. 在轉(zhuǎn)移到ad_temp 時(shí),變成了ad_temp$1的值為00x03,ad_temp$0為0x17還是正常的。這個(gè)問題,以前也弄出來(lái)過,可能是后來(lái)把系統(tǒng)時(shí)鐘改低了,系統(tǒng)時(shí)鐘跑1mips,當(dāng)時(shí)又正常了,所以就沒有懷疑程序的問題了。
后來(lái)沒有明白問題出在哪里,多弄了一次判斷,不想等再讀一次,想想雖然操作可笑,但也是一種方法:
AD_Start=1;//Skip first ADC, can delete by your select
while(!AD_DONE)
ad_temp$1 = adcrh;
ad_temp$0 = adcrl;
if(ad_temp$1 != adcrh) ad_temp$1 = adcrh;
ad_temp = ad_temp >> 4;
ad16 += ad_temp ;
這樣一改,結(jié)果是對(duì)了,但是還是沒有明白問題出在哪里?
后來(lái)想到可能系統(tǒng)時(shí)鐘跑太快了,讀數(shù)有問題,所以就在while(!AD_DONE)后面加了兩個(gè)nop;這樣也正常了。后來(lái)終于想明白。數(shù)據(jù)轉(zhuǎn)移出錯(cuò),確實(shí)和系統(tǒng)時(shí)鐘跑得快有關(guān)系,所以在頻率較低時(shí),上面的程序不會(huì)出問題。其實(shí)真正的問題就是出在“while(!AD_DONE)”這里,這里少了一個(gè)“;”,編譯器沒有提示錯(cuò)誤,本來(lái)也是可以不提示錯(cuò)誤的,編譯器不知道你等待的時(shí)候具體是需要干嘛。因?yàn)橛小埃弧睍r(shí),在等待AD轉(zhuǎn)換完的時(shí)間里,編譯器會(huì)自動(dòng)增加一條nop指令,而沒有“;”時(shí),在等待的時(shí)間里是一直在讀AD轉(zhuǎn)化的高位,等AD結(jié)束后,馬上是讀取AD轉(zhuǎn)換的低位。所以在等待的過程中,讀取的高位,是一個(gè)還沒有轉(zhuǎn)化完。而低位則是轉(zhuǎn)換結(jié)束后的數(shù)據(jù),所以讀起來(lái)不會(huì)錯(cuò)了。加上NOP后,再等待的時(shí)間強(qiáng)制是執(zhí)行空指令了,結(jié)束完還會(huì)執(zhí)行一個(gè)空指令再取高位,所以都不會(huì)有問題了。
審核編輯:劉清
-
寄存器
+關(guān)注
關(guān)注
31文章
5363瀏覽量
121158 -
輸入電壓
+關(guān)注
關(guān)注
1文章
506瀏覽量
16624 -
AD轉(zhuǎn)換器
+關(guān)注
關(guān)注
4文章
250瀏覽量
41522 -
系統(tǒng)時(shí)鐘
+關(guān)注
關(guān)注
1文章
30瀏覽量
9363 -
pfs
+關(guān)注
關(guān)注
0文章
5瀏覽量
5106
原文標(biāo)題:PFS122 AD調(diào)試心得分享---小電流檢測(cè)
文章出處:【微信號(hào):應(yīng)廣單片機(jī),微信公眾號(hào):應(yīng)廣單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
如何燒錄PFS122-MSOP10的封裝
![如何燒錄<b class='flag-5'>PFS122</b>-MSOP10的封裝](https://file1.elecfans.com/web2/M00/B4/D6/wKgZomVxP8yAEzrvAAAfg5i8LcA399.png)
圖解JLINK在ADS下調(diào)試心得
![圖解JLINK在ADS下<b class='flag-5'>調(diào)試</b><b class='flag-5'>心得</b>](https://file1.elecfans.com//web2/M00/A7/40/wKgZomUMQ1iAXmqqAAAZiUIxJ1k438.jpg)
CAT-PFS0002 壓電電纜
![CAT-<b class='flag-5'>PFS</b>0002 壓電電纜](https://file.elecfans.com/web1/M00/D4/70/pIYBAF_XsiOAR126AAAPTTd2bCw621.jpg)
CAT-PFS0002 TE 壓電電纜
PFS122檢測(cè)VDD及IO口的AD電壓方法
開關(guān)模式電源電流檢測(cè):電流檢測(cè)方法
![開關(guān)模式電源<b class='flag-5'>電流</b><b class='flag-5'>檢測(cè)</b>:<b class='flag-5'>電流</b><b class='flag-5'>檢測(cè)</b><b class='flag-5'>方法</b>](https://file.elecfans.com//web2/M00/89/3C/pYYBAGO2SYOAeyA8AADOlcVyg1Y362.png)
PFS122檢測(cè)VDD及IO口的AD電壓方法
![<b class='flag-5'>PFS122</b><b class='flag-5'>檢測(cè)</b>VDD及IO口的AD電壓<b class='flag-5'>方法</b>](https://file1.elecfans.com/web2/M00/88/6F/wKgZomRm2lOAK2e_AAE1rDMT15E443.jpg)
電流探頭用于調(diào)試電機(jī)的測(cè)試方法和操作步驟
![<b class='flag-5'>電流</b>探頭用于<b class='flag-5'>調(diào)試</b>電機(jī)的測(cè)試<b class='flag-5'>方法</b>和操作步驟](https://file1.elecfans.com//web2/M00/8E/F7/wKgZomTLBK2AKlZeAABxbe4cr0Y83.jpeg)
PFS122B和PFS122 MCU的主要區(qū)別
![<b class='flag-5'>PFS122</b>B和<b class='flag-5'>PFS122</b> MCU的主要區(qū)別](https://file1.elecfans.com/web2/M00/B8/7A/wKgZomWE7qSAQN-TAAAfnYKPyJg476.png)
評(píng)論