概述
應廣PMS171B單片機有很實用的功能,就是可以用內部的分壓電阻,Band-gap 電路提供 1.2V 參考電壓,和比較器一起,測試單片機VDD電壓.不使用任何外部器件,不占用端口就可以測試供電的電源電壓.!當電池低壓的時候可以做相應的動作.比如休眠,進入低功耗等。本章就寫一個實例,當低于4.2V時候,LED輸出低電平,高于4.2V時候,LED輸出高電平。
PMS171B配置之比較器初始化
在這里插入圖片描述
gpcc寄存器是比較器 比較器控制寄存器,需要打開時需要7位配置為1,本文使用內部1.20V的band-gap參考電壓,需配置3-1位為010,gpcc配置如下所示:
gpcc=0b1_0_0_0_010_0;
在這里插入圖片描述
在這里插入圖片描述
gpcs寄存器是配置比較電壓,本文中以測試4.2V電壓為例,將VDD=4.2V帶入,得到N只為0.14、5.85、2.43、8.14;由于N為整數,所以Case 4模式較為適合,即gocs寄存器4-5位配置為11,切換為Case4模式,N為8,3-0位設置為1000,gpcs配置如下所示:
gpcs=0B0_0_11_1000;//檢測4.2V
比較器測供電電源VDD電壓完整代碼
#include "extern.h"//是程序的頭文件。
BIT LED : PA.7;
#define f_Com !p_Com_Out
BIT p_Com_Out : gpcc.6
BIT f_getBat;
/*比較器初始化*/
void InitCompare ( void )
{
/*b7@1=開啟比較器
b6@0=負輸入大于正輸入
b5@0=比較器不用tm2_ck采樣
b4@0=比較結果沒有極性相反
b3:1@ 010=內部Band-gap電壓
b0@1=PA4輸入0=內部電阻輸入*/
gpcc=0b1_0_0_0_010_0;
//$ padier 0b111_0_100_1;
/*
b7@0=不輸出到PA0
b6@0保留
b5@0=高R
b4@0=低R
b3:0@0000-1111內部r值
*/
gpcs=0B0_0_0_0_0000;
}
void GetBat ( void )
{
/*設置模式為Case 4,檢測4.2V*/
gpcs=0B0_0_11_1000;
.delay 10;
if ( f_Com )
{
/*電壓低于4.2V,執行LED低電平*/
f_getBat=1;
}
else//LED高電平
{
f_getBat=0;
}
}
void FPPA0 (void)//相當于程序的 main() 函數。
{
/*單片機內部RC震動時鐘為 IHRC默認為16M,因此,IHRC/4=4M,系統時鐘為4M*/
.ADJUST_IC SYSCLK=IHRC/4, IHRC=16MHz, VDD=5V;
/*端口設置為輸出*/
pa.7=0;
pac.7=1;/*輸入*/
paph.7=0;/*上拉*/
/***********電壓比較器****************/
InitCompare();
while (1)
{
GetBat();
if(f_getBat)
LED = 0;
else
LED = 1;
.delay 4000*10;
}
}
演示效果
可以看到,4.2V以上為LED輸出高電平,4.2以下為LED輸出低電平,由于4.2V左右會抖動,建議后期加防抖保證穩定運行。
在這里插入圖片描述
在這里插入圖片描述
審核編輯:湯梓紅
-
單片機
+關注
關注
6035文章
44553瀏覽量
634766 -
比較器
+關注
關注
14文章
1650瀏覽量
107193 -
PMS171B
+關注
關注
1文章
7瀏覽量
2417
發布評論請先 登錄
相關推薦
評論