既然是要换算给AD,那么直接电阻分压好了,5V-8V分一半,25V-4V,AD的读数再换算回来,也就是乘2就好了。只要两个电阻匹配度够高,那精度就没问题。
另外,设备输出信号是否高阻?如果不确定,那么分压阻值尽量选大,否则会影响输出信号的电压,另外缓慢变化的频率是多少?如果足够慢,可以在AD输入加一个小的电容,提高精度,容值1nF左右足够。

补充:10位的AD精度5mV,理想情况下精度应该是5mV((8V-5V)/5V)=3mV,你现在用100K和220K分压,得到输入范围15625V-25V,精度只有5mV32=16mV。用100K和60K分压,输入范围3125V-5V,精度5mV16=8mV。
这是C语言中的“右移运算符”。一般情况下,他是按位操作。
特点:1双目运算符,就像+、-、、/一样,格式为(数1)>>(数2)
2数1是被操作数,如被减数、被除数等;数2是右移位数。
3优先级低,结合性:从左向右运算
如:8>>1=?表示将被移数向右移动1位
如何操作?
1化十进制数为(注意了)对应的二进制数,对应指格式对应

2通通右移,不足补0
3化为十进制数
举例:short int a=8;a=a>>1;
1a=0 000 1000
2右移一位后:a= 0 000 100
3补0:a=0 000 0100
4化为十进制数:a=4

举例:int a=8;a=a>>1;
1a=0 000 0000 0000 1000
2右移一位后:a= 0 000 0000 0000 100
3补0:a=0 000 0000 0000 0100
4化为十进制数:a=4


