以下是数据表中的过压和欠压计算公式。
剩下的只有中间的8个。、是要写入寄存器的值。
(a) OV_TRIP_FULL =(OV–ADCOFFSET)÷ADCGAIN
(b) UV_TRIP_FULL =(UV–ADCOFFSET)÷ADCGAIN
下面是基准程序上方的计算
#define OV_THRESH_base 0x2008
#define UV_THRESH_base 0x1000
Registers.OVTrip =(unsigned char)(((unsigned short)(((OVPThreshold - Registers.ADCOffset)/增益+ 0.5)- OV_THRESH_base)>> 4)& 0xFF);
Registers.UVTrip =(unsigned char)((((unsigned short)((UVPThreshold - Registers.ADCOffset)/增益+ 0.5)- UV_THRESH_base)>> 4)& 0xFF);
我验证的参考例程与直接移动到低8位相同。
Registers.UVTrip =(unsigned char)((((unsigned short)((UVPThreshold - Registers.ADCOffset)/增益))>> 4)& 0xFF);
但它与数据手册末尾的计算略有不同、我根据4300mv 和2500mv 进行了计算
读取 寄存器.ADCOffset=45mv GAIN=0.377
结果 OV_TRIP=0xc1、这与 数据表中的最后一个相似。
但 UV_TRIP=0x96、 这与 数据表完全不匹配。
为什么?以及 如何解决?
下面是 数据表第47页上的计算。
–所选 OV 阈值为4.30V
•因此、OV_TRIP 应编程为0xC9。
–所选 UV 阈值为2.5V
•因此、UV_TRIP 应编程为0x1A。