PFS122检测VDD及IO口的AD电压方法

pfs122是应广推出的一颗,可以多次烧录的2k程序空间的带数字12位ad转换的单片机。目前以高性价比重新获得用户的喜爱,其价格优势明显,比九齐的062e的价格,可能还更具有优势。
pfs122的ad转换相对于pms132等来说,显得比较劣势,主要是因为ic不能接外部参考电压,也不提供内部的2v,3v, 4v等参考电压。这样在处理vdd处于变化的应用环境,比如锂电池应用,就显得没有那么方便。
在处理vdd方面,也就是获取锂电池电压的时候,还有个别工程师的设计是使用两个电阻分压,再利用一个io口去采集分压点来处理。这样处理用是能用,但是显得很不经济,也浪费io口,甚至还浪费静态功耗。pfs122内部提供的参考电压1.2v,就是专门用来获取vdd电压的。也就是说1.2v相对来说是稳定的,那么不同的vdd电压,采集到稳定1.2v时,所得到的ad转换结果是不一样的,但是遵循比例:vdd/1.2v=4096/nbg.
由上面的比例可以得到vdd = 40961.2v/nbg= 409612000mv/nbg
=4915200mv/nbg=((4b0000)hex)mv/nbg,(1)
nbg: 是使用vdd做ad转换的参考电压,采用内部特殊通道1.2的标准电压所得的数值。
在获取io的电压时,我们可以同样利用比列来计算,计算的基础是
;vbg/vdd=nbg/4096------------------(2)
;vin/vdd=nin/nvdd=nin/4096------- (3)
两个比列相除,可以消掉vdd和4096,得到vin=(nin/nbg)*vbg
;vin=(nin/nbg)vbg=(nin/nbg)1200=nin1200/nbg=0x4b0nin/nbg(4)
因此,只要有nin和 nbg的ad转换数值,就可以得到io口的实际输入电压是多少。由公式(1)和公式(4),可以看出要得到vdd和vin的实际电压,需要用到运算方式,三字节除以2字节,两字节乘以两字节的运算。对于习惯了mini-c开发的用户来说,这些运算处理方式可以在“程序助手”中的/进阶实例/数据运算中获取。
eword div_src3;//被除数(商)
word div_val2, div_res2;//除数,余数
void eword_div_word (void)
{ // div_src3[e] / div_val2[w] = div_src3[e] * div_val2[w] + div_res2[w]
byte div_cnt, div_tmp;
div_cnt = 8;
div_res2 = 0;
do{ div_src3 <<= 1; div_res2 <<<= 1; div_tmp < 8; if (div_tmp.0 || ! cf) { div_res2$1 = a; div_res2$0 -= div_val2$0; div_src3.0 = 1; }} while (! div_cnt.5);}
//--------------------------------------------------------------------------------//
//程序说明:
// 一个16位变量(范围065535)与一个定值(500,范围065535)相乘
// 两个乘数可以为定值,也可为变量
// 同为定值时可直接用“*”运算符
//注意事项:
// 1.案例为pms154c,其他芯片可直接使用
//********************************************************************************//
#include extern.h
dword mul_t4;
word mul_x2;
word mul_y2;
void word_mul_word (void)
{ // mul_t4[d] = mul_x2[w] * mul_y2[w]
mul_t4$3 = 0;
mul_t4$2 = 0;
byte cnt;cnt = 16;do{ mul_x2 >>= 1; if (cf) { mul_t4 += (mul_y2 <>>= 1;} while (--cnt);}
但是对于一些不熟悉mini-c的工程师朋友来说,用汇编弄起来就可能有点难度了。那也没有关系,你打赏我吧,我花了一些时间,整理了一些汇编的参考程序, 哈哈( 0 )。
汇编写起来比较累人,参考一下,16进制转10进制的汇编吧。
;-------hex to bcd subroutine-------------------------
; name :hex2bcd
; input :temp0(h), temp1(l)
; output :temp3(h), temp4(m),temp5(l)
; stack level :2
; function :16-bit-hex to 5-bit-dec
; temp reg :temp2(counter register),temp6,fpp0_index
; argument :
;--------------------------------------------
hex2bcd:
clear hb@fpp0_indexmov a, 0x10mov temp2, aclear temp3clear temp4clear temp5set0 flag_cshift:
slc temp1slc temp0slc temp5slc temp4slc temp3dzsn temp2goto adjdecretadjdec:
mov a, la@temp5 mov lb@fpp0_index, a call adjbcd mov a, la@temp4 mov lb@fpp0_index, a call adjbcd mov a, la@temp3 mov lb@fpp0_index, a call adjbcd goto shiftadjbcd:
;---------------------------------
; mov a, 0x22
; idxm fpp0_index, a
;---------------------------------
idxm a, fpp0_index add a, 0x03 mov temp6, a t0sn temp6.3 idxm fpp0_index, a idxm a, fpp0_index add a, 0x30 mov temp6, a t0sn temp6.7 idxm fpp0_index, a ret 0x00;-------------the end of hex2bcd---------------------
;-----------------------------------------------
;
;-------unsigned (eword)eint div unsigned int-------------------
; name :ueint_div_uint
; input : temp2(d1h),temp3(d1m);temp4(d1l),temp5(d2h),temp6(d2l)
; output : temp11(qh)temp12(ql),temp13(),
; temp7(remainer h),temp8(remainer l)
; stack level :1
; temp reg :temp0(bit count),temp1(bit0:flow flag),temp8(h),temp9(l)
; function :unsigned eint div unsignedd int;d1/d2,
; argument :
;--------------------------------------------
ueint_div_uint:
mov a, 0x18
mov temp0, a
clear temp9clear temp7clear temp8ediv_loop:
sl temp4slc temp3slc temp2slc temp8slc temp7slc temp9t0sn temp9.0goto evalid_bitmov a, temp8sub a, temp6 mov a, temp7subc a, temp5t0sn flag_cgoto einvalid_bitevalid_bit:
mov a, temp6 sub temp8, a mov a, temp5 subc temp7, a set1 flag_c goto eshift_resulteinvalid_bit:
set0 flag_ceshift_result:
slc temp13slc temp12slc temp11dzsn temp0goto ediv_loopret;-----------------------------------------------

联想四轮驱动智能体系,推动5G智能汽车高速发展
如何选购手机数据线指南
DS1390/DS1391 RTC与带SPI的摩托罗拉DSP接口
TI推出正交调制器TRF370317,具有4GHz RF输出
展会资讯-消费电子产业发展晴雨表-2023CEEASIA展,助您开启“爆圈”之旅
PFS122检测VDD及IO口的AD电压方法
CoolSiC MOSFET 电机驱动评估板
余承东表态华为Mate10如果搭载6GB运存,速度快过友商12GB,麒麟970+EMUI6.0就是这么横
聚酷智能利用IoT开发平台来打造多款智能化产品
人工智能将在新零售行业中发挥作用
AI高速扫描机器人实现投产,是否与直线马达有关
iPhone 缺席苹果秋季新品发布会,SE却是关键词之一
步进电机品牌排行榜前十名
安森美半导体推出高能效LED照明应用参考设计
这些新“上线”的智能医疗设备,真的实用吗?
传iPhone 16系列镜头将改版 大立光有望独家供应长焦产品
薄膜表面检测设备可检测出表面上的各种瑕疵污点
语音助理小冰在微博预热,将和小米的小爱同学共同解锁一项技能
发电厂热力管道智能监测系统案例解析
鼠标音频开关的制作