找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1242|回复: 9
打印 上一主题 下一主题
收起左侧

网上看的单片机电子秤程序,有几点疑问请教各位大神

[复制链接]
跳转到指定楼层
楼主
ID:686513 发表于 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;
                }

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

使用道具 举报

板凳
ID:686513 发表于 2022-4-27 21:35 | 只看该作者
Hephaestus 发表于 2022-4-27 19:50
按键当然可以省,但是你要如何操作才能把去皮、开机和校准功能都给实现呢?我感觉硬件去掉两个键,软件复杂 ...

这个例程中的key1 和key2键就是标定使用,其它时间不用!我想用开机和去皮键代替这两个键标定。
回复

使用道具 举报

地板
ID:123289 发表于 2022-4-28 12:42 | 只看该作者
CPU读到的是电压值V,输出的是重量W,就必须有一个V-W的表或公式。
程序只要根据读的的V,经公式计算或查表就可以得到对应的W值。
通常用表比较方便。
你当然可以将这个V-W转换表放进24C02里,届时你只要会从24C02取表查寻就可以了。
如果是公式,直接计算出结果就可以了。其它就不必了。
回复

使用道具 举报

5#
ID:161164 发表于 2022-4-28 12:47 来自手机 | 只看该作者
加长短按检测就可以了~
回复

使用道具 举报

6#
ID:514901 发表于 2022-4-28 17:42 | 只看该作者
用不同重量砝码多次测量记录AD值,用MATLAB算出曲线公式
回复

使用道具 举报

7#
ID:686513 发表于 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)不是很明白!
回复

使用道具 举报

8#
ID:686513 发表于 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)不是很明白!
回复

使用道具 举报

9#
ID:686513 发表于 2022-4-29 09:27 | 只看该作者
Hephaestus 发表于 2022-4-27 19:50
按键当然可以省,但是你要如何操作才能把去皮、开机和校准功能都给实现呢?我感觉硬件去掉两个键,软件复杂 ...

是的,我现在打算不省这两个按键或用组合键(如up+unit和down=unit)来取这两点,不知道可行不?
回复

使用道具 举报

10#
ID:686513 发表于 2022-4-29 09:32 | 只看该作者
lkc8210 发表于 2022-4-28 12:47
加长短按检测就可以了~

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表