MAX813L看门狗电路不复位?, 本帖最后由 不吃鱼的猫2012 于 2021-1-12 13:05 编辑
采用MAX813来代替复位电路(未单独采用复位电路),在while(1)大循环中喂狗,设备上电、调试、现场运行均正常,但是不定期有几台出现程序跑飞的现象,感觉就像死机了,所有输入输出均不起作用,数码管显示乱码。重启设备电源,工作又正常了,设备在振动环境中,环境温度为—25摄氏度~+70摄氏度,请问是什么原因造成了?最近发现一次是在不停按按钮时出现过一次类似现象。
电路原理图如下:
,顶一下,会不会中断的时候跑飞了,那就回不到喂狗那句了,要不把程序多贴一点?, 本帖最后由 不吃鱼的猫2012 于 2020-12-28 09:28 编辑
会不会是因为数码管时间太长,引起中断冲突,我吧数码管驱动由原来的74HC573改成MAX7219会不会好一点呢?, 本帖最后由 不吃鱼的猫2012 于 2020-12-28 09:20 编辑
程序已经贴出来了,麻烦看看那里有毛病,我最近发现我的PCB板上继电器离晶振太近,会不会是这个原因造成的?,你的程序有没有没写错呢?,
anli88 发表于 2020-12-28 10:04
你的程序有没有没写错呢?
程序已经贴在附件,麻烦帮我看看呢?,
glinfei 发表于 2020-12-25 15:07
会不会中断的时候跑飞了,那就回不到喂狗那句了,要不把程序多贴一点?
程序已经上传到附件,麻烦帮我看看呢?,能否把JBTZ_moto() ,放到最后一句?因为你是热启动,又有太多全局变量,放太靠前了,复位后变量都有值的,这应该导致显示乱码。
void INIT_main()
{
P0=0xff;
P1=0xff;
JBTZ_moto();
INIT_BJmoto();
, 本帖最后由 不吃鱼的猫2012 于 2020-12-28 12:17 编辑
glinfei 发表于 2020-12-28 11:40
能否把JBTZ_moto() ,放到最后一句?因为你是热启动,又有太多全局变量,放太靠前了,复位后变量都有值的, …
您的意思是放在初始化函数的最后一句(中断初始化后面)吗?void INIT_main()
{
//P0=0xff;
P1=0xff;
//JBTZ_moto();
INIT_BJmoto();
second=second_30=count=second_300=BJ_count=count_clk=second_clk=an_count=second_1=beep=0;
FBAN_flag=CLAN_flag=BJ_flag=flag_sh=flag_hw=power_flag=JR_flag=DW_flag=GW_flag=JR_GZ_flag=0;
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=0;
TMOD=0x11;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=(65536-250)/256;
TL1=(65536-250)%256;
JBTZ_moto();
}
,我感觉是中断程序出问题了,
麦麦123 发表于 2020-12-28 12:51
我感觉是中断程序出问题了
麻烦标注一下,
glinfei 发表于 2020-12-28 11:40
能否把JBTZ_moto() ,放到最后一句?因为你是热启动,又有太多全局变量,放太靠前了,复位后变量都有值的, …
放在初始化函数的最后一句吗?,
不吃鱼的猫2012 发表于 2020-12-28 12:56
放在初始化函数的最后一句吗?
就是放到初始化的最后,也不行吗? 我建议你重点考虑一下,复位与冷启动对变量的差异。另外,1、用狗的时候,时间中断应该先赋值再开中断;2、T1时间太短吧?,
不吃鱼的猫2012 发表于 2020-12-28 12:56
放在初始化函数的最后一句吗?
总之,我的意思程序跑飞跟变量的值有关,虽然程序反复不能喂狗而复位,但初始化没做好,变量的值一直处于无法执行下去的状态,导致反复的复位,建议观察一下RST,估计一直在复位。但如果冷启动就清了变量,进而就正常了。如果我说的对,那PCB板还是少改吧,多麻烦啊。,
glinfei 发表于 2020-12-28 14:26
总之,我的意思程序跑飞跟变量的值有关,虽然程序反复不能喂狗而复位,但初始化没做好,变量的值一直处于 …
关键有故障的时候才能看到,有时候几天都没有故障,偶尔有一个出现这种现象。100个里面过几天偶尔有1个出现这种问题,只要出过这种问题的,重启正常后,连续运行10天都没有问题。,会不会是数码管扫描引起混乱?,您的意思是放在初始化函数的最后一句(中断初始化后面)吗?void INIT_main()
{
//P0=0xff;
P1=0xff;
//JBTZ_moto();
INIT_BJmoto();
second=second_30=count=second_300=BJ_count=count_clk=second_clk=an_count=second_1=beep=0;
FBAN_flag=CLAN_flag=BJ_flag=flag_sh=flag_hw=power_flag=JR_flag=DW_flag=GW_flag=JR_GZ_flag=0;
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=0;
TMOD=0x11;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=(65536-250)/256;
TL1=(65536-250)%256;
JBTZ_moto();
}
我现在直接把这句话删掉了,还是会出现这个问题,
,我最近发现过一次:是在不停按按钮时出现类似现象,重启设备又正常了,请问是什么原因早成的?,顶一下,
不吃鱼的猫2012 发表于 2021-1-12 13:04
我最近发现过一次:是在不停按按钮时出现类似现象,重启设备又正常了,请问是什么原因早成的?
楼主的程序写得有点繁杂,嵌套有点深。全局变量满天飞,也没有注释,看得眼花缭乱。感觉是两路18B20组成的多点温度监控报警电路。按常理这点功能有其一半的代码量就够了。楼主怀疑MAX813看门狗不能复位这很容易判断。没有示波器用万用表也能根据平均电压判断喂狗脉冲和复位脉冲的存在。程序中也没有看出《最近发现一次是在不停按按钮时出现过一次类似现象》的按钮在哪。操控出问题也不一定是程序跑飞。数据类型使用不当也是常见因素。振动环境也有可能使按钮触点不稳定。不知楼主实际电路采用哪个型号MCU。STC的芯片内置看门狗和EEPROM,EEPROM保存运行数据,测试过程中人为引发看门狗复位,如果不是做了标记,直观感觉不到热复位重启过程。