标题: 网上看的单片机电子秤程序,有几点疑问请教各位大神 [打印本页]

作者: zhth1979    时间: 2022-4-27 19:20
标题: 网上看的单片机电子秤程序,有几点疑问请教各位大神
这段就是电子秤的标定程序,原理我是懂了,主要是保存两个坐标值到EEPROM,这段程序他是做到主程序里了,并加两个独立按键用于校准但有两个问题没弄明白:问题1:这段程序我能不能独立出来,放进24C02里, 要校准时我外接24CO2校准?  问题2:这两个独立按键能不能省掉,用开机键和去皮键共用?另外关于压力传感器的标定程序网上资料很少,哪位大神对这方面有研究或有这方面的资料能分享一下吗?在这里先谢谢了!

单片机源程序如下:
while(1)
        {
                if(Key_1)//去皮后的值保存到EEPROM里面,必须在5V环境下 校准专用
                {
                        Key_1 = 0;
                        LED2 = 0;//灯亮
                        Main_Loop = 10;
                        while(Main_Loop--)
                                Tare = Read_18Bit_AD();//读取出CS1237的数据,5V情况下
                        Main_Loop = 10;
                        while(Main_Loop--)
                                BGA_EEPROM = Get_BGA();//在5V供电情况下,保存BGA参数
                        Wr_20_Long(0XD3B8,EEROM_20Long);//保存数据到EEPROM
                        LED2 = 1;//关灯
                }
               
                if(Key_2)//放上一个500g砝码,用于校准误差,必须在5V供电环境下
                {
                        Key_2 = 0;
                        LED2 = 0;//灯亮
                        Main_Loop = 10;
                        while(Main_Loop--)
                                Weight_500g = Read_18Bit_AD();//读取出500G的数据
                        Weight_Coe = Weight_500g -  Tare;//除去皮重的ADC数值
                        Weight_Coe = 500000 / Weight_Coe;//放大1000倍的斜率
                        Tare_Coe = Weight_Coe * Tare;//皮重的重量,放大1000倍之后的
                        Wr_20_Long(0XD3B8,EEROM_20Long);//保存数据到EEPROM
                        LED2 = 1;
                }


作者: Hephaestus    时间: 2022-4-27 19:50
按键当然可以省,但是你要如何操作才能把去皮、开机和校准功能都给实现呢?我感觉硬件去掉两个键,软件复杂度要增加10倍。
作者: zhth1979    时间: 2022-4-27 21:35
Hephaestus 发表于 2022-4-27 19:50
按键当然可以省,但是你要如何操作才能把去皮、开机和校准功能都给实现呢?我感觉硬件去掉两个键,软件复杂 ...

这个例程中的key1 和key2键就是标定使用,其它时间不用!我想用开机和去皮键代替这两个键标定。
作者: yzwzfyz    时间: 2022-4-28 12:42
CPU读到的是电压值V,输出的是重量W,就必须有一个V-W的表或公式。
程序只要根据读的的V,经公式计算或查表就可以得到对应的W值。
通常用表比较方便。
你当然可以将这个V-W转换表放进24C02里,届时你只要会从24C02取表查寻就可以了。
如果是公式,直接计算出结果就可以了。其它就不必了。
作者: lkc8210    时间: 2022-4-28 12:47
加长短按检测就可以了~
作者: 郑汉松    时间: 2022-4-28 17:42
用不同重量砝码多次测量记录AD值,用MATLAB算出曲线公式
作者: zhth1979    时间: 2022-4-29 09:22
yzwzfyz 发表于 2022-4-28 12:42
CPU读到的是电压值V,输出的是重量W,就必须有一个V-W的表或公式。
程序只要根据读的的V,经公式计算或查 ...

可能我表达的不清楚,我现在是用公式y=kx+b计算的,这个传感器是线性的,只要我用两个按键按下,在这条斜线上取两点求斜率就行了,上面例程是取两点的数据保存在EEPROM里,主程序的功能我都写好了,按键按下显示按键的值,不按闪三秒就返回显示实时压力值。如果在不动或不影响主程序的情况下实现标定,两个方案:A.直接外接一个24c02加组合按键来实现,并实时显示标定的两个点的AD值。B.如例程一样,直接把这个标定程序放进main函数里,但这种方式我尝试过,会出现两个问题:1.不能显示两个点的AD值,显示时会和主程序要显示的内容冲突(例程序是用两个小灯指示解决)。2.组合键或单按键都不能把这两点值保存到EEPROM(其它按键如加减可以把加减的数字保存到EEPROM)不是很明白!
作者: zhth1979    时间: 2022-4-29 09:24
郑汉松 发表于 2022-4-28 17:42
用不同重量砝码多次测量记录AD值,用MATLAB算出曲线公式

可能我表达的不清楚,我现在是用公式y=kx+b计算的,这个传感器是线性的,只要我用两个按键按下,在这条斜线上取两点求斜率就行了,上面例程是取两点的数据保存在EEPROM里,主程序的功能我都写好了,按键按下显示按键的值,不按闪三秒就返回显示实时压力值。如果在不动或不影响主程序的情况下实现标定,两个方案:A.直接外接一个24c02加组合按键来实现,并实时显示标定的两个点的AD值。B.如例程一样,直接把这个标定程序放进main函数里,但这种方式我尝试过,会出现两个问题:1.不能显示两个点的AD值,显示时会和主程序要显示的内容冲突(例程序是用两个小灯指示解决)。2.组合键或单按键都不能把这两点值保存到EEPROM(其它按键如加减可以把加减的数字保存到EEPROM)不是很明白!
作者: zhth1979    时间: 2022-4-29 09:27
Hephaestus 发表于 2022-4-27 19:50
按键当然可以省,但是你要如何操作才能把去皮、开机和校准功能都给实现呢?我感觉硬件去掉两个键,软件复杂 ...

是的,我现在打算不省这两个按键或用组合键(如up+unit和down=unit)来取这两点,不知道可行不?
作者: zhth1979    时间: 2022-4-29 09:32
lkc8210 发表于 2022-4-28 12:47
加长短按检测就可以了~

一开始我也是这样处理的,但这种会出现误操作把斜率系数改变掉!还有就是我按上面的例程总是保存和显示这两个AD值,(按下按键1显示0点的AD值并保存,按下按键2显示500g的AD值并保存)




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1