打印
[PIC®/AVR®/dsPIC®产品]

单片机看门狗溢出前锁存输出状态

[复制链接]
1295|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
powerwang921|  楼主 | 2023-4-23 14:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好!
现在有个问题要请教下,具体情况如下:

我用PIC18F45K80系列单片机做了一个通过RS485进行固件升级的程序,其中使用了锁存器,型号是:SN74ALVCH373,它的LE引脚我连接到单片机的一个引脚并设置为输出模式,LE为高电平时锁存器输出端跟随输入端,当为低电平时锁存信号,输出端不再受输入端的影响。我是在用软件重启单片机之前将LE信号拉低以锁存一些重要的输出信号,更新完固件后再将LE拉高以使输出和输入同步。这里其实是可控制的,没有什么问题,最主要系统要求使用看门狗,而PIC18F45K80系列没有看门狗中断,而且也没有办法读取它的看门狗计数器值(似乎很多单片机都不能读取看门狗计数器值),以便我能知道它是否快要溢出了。能否麻烦大家给个思路,如何在看门狗计时器快要溢出时(也就是我程序极有可能跑飞了)将锁存器的LE脚拉低,以便锁存信号,我想过将LE脚和单片机的复位脚连接在一起,因为单片机复位时复位脚会被拉低,但是我要系统重启并且输出稳定后再拉高LE脚,LE脚直接连接复位脚估计不行,在此先谢谢大家了!

使用特权

评论回复
沙发
wutaosamuel| | 2023-4-23 17:49 | 只看该作者
LE引脚是由锁存器控制,拉高拉低的吗?

使用特权

评论回复
板凳
powerwang921|  楼主 | 2023-4-23 18:50 | 只看该作者
wutaosamuel 发表于 2023-4-23 17:49
LE引脚是由锁存器控制,拉高拉低的吗?

你好!LE引脚是锁存器自身的控制引脚,它连接单片机,由单片机来控制它是否锁存,如果单片机控制LE脚为高,则锁存器的输入和输出是一致的,如果单片机控制LE脚为低,则锁存器会锁存相关的输出信号。

使用特权

评论回复
地板
hjl2832| | 2023-4-24 08:29 | 只看该作者
为什么要去读这个溢出数,计算好溢出时间后,定时喂狗不就行了。

使用特权

评论回复
评论
powerwang921 2023-5-6 10:22 回复TA
@hjl2832 :好的,非常感谢!我使用下拉电阻,用示波器看了波形,在单片机重启时确实是可以将LE保持为低电平。 
hjl2832 2023-4-29 09:40 回复TA
@powerwang921 单片机在重启过程中,直到程序初始化完成之前,IO口都是默认不受控制的状态,所有厂家的默认定义都是高阻开漏输入模式,这时用下拉电阻是可以保证IO口为低电平的,程序初始化完成后,IO口才能按照你程序的设定状态执行。 
powerwang921 2023-4-28 08:51 回复TA
@hjl2832 :你好!请问下,我的程序在正常执行时是要将LE拉高的,就是让输出端跟随输入端,只有在要升级固件需要重启MCU,或者程序跑飞看门狗计数器溢出后重启MCU时才将LE拉低并让它保持这个状态直到重启完成,重新开始执行程序我再将LE拉高,LE加下拉电阻就可以吗?我们硬件工程师说这种情况不能加下拉电阻 
hjl2832 2023-4-27 22:19 回复TA
@powerwang921 :其实我认为最简单的办法,就是其它老师提出的LE加下拉电阻,你的程序在空闲时一直保持锁存就对了,而不用管程序跑飞,就算复位也不影响LE的状态。 
hjl2832 2023-4-27 22:15 回复TA
@powerwang921 :我又仔细看了你的提问,其实PIC的看门狗,有一种方法是响应中断,不是复位。那就是MCU设置成休眠模式,这时的看门狗相当于定时器,定时激活后,是唤醒单片机,而不是复位。当然,这个设置,还需要有选项字里设置是否在休眠时开启看门狗。(目前好像只有PIC的单片机支持配置休眠时停止,工作时运行。 
powerwang921 2023-4-26 16:57 回复TA
@hjl2832 :我现在想我的做法可能是自相矛盾的,希望在程序跑飞的情况下来锁存输出,程序都跑飞了,根本就不可能执行任何代码了。是不是只能通过外部器件来监测程序是不是跑飞了? 
hjl2832 2023-4-25 08:08 回复TA
@powerwang921 :程序跑飞时触发狗后就会跳到复位,执行硬件复位了,这时锁存输出状态有实际意义吗。与其这样还不如处理好初始化时的锁存输出状态到安全状态。 另外按你的说法,如果真要求锁存输出的安全,还要考虑硬件防异常,毕竟在单片机上电复位至初始化 完成这个过程中,IO口的状态是三态不受控制的。 
powerwang921 2023-4-24 12:07 回复TA
我有喂狗操作,就是怕程序跑飞时不能及时锁存输出状态。 
5
wutaosamuel| | 2023-4-24 10:27 | 只看该作者
那就用timer0,开启中断。
在你需要定时的时候,设置timer0的时间,然后使能timer0。一旦时间到了,会自动运行中断函数,这个函数你可以写重启系统

使用特权

评论回复
6
dalarang| | 2023-4-27 08:19 | 只看该作者
LE接一个下拉电阻不好吗,复位的时候单片机IO是高阻的,下拉电阻生效

使用特权

评论回复
7
powerwang921|  楼主 | 2023-4-27 09:14 | 只看该作者
dalarang 发表于 2023-4-27 08:19
LE接一个下拉电阻不好吗,复位的时候单片机IO是高阻的,下拉电阻生效

感谢你提供的方法,我先测试下。

使用特权

评论回复
8
nongshengjiang| | 2023-4-29 16:30 | 只看该作者
本帖最后由 nongshengjiang 于 2023-4-29 16:31 编辑

这就是硬件补吗

使用特权

评论回复
9
powerwang921|  楼主 | 2023-5-6 10:26 | 只看该作者
感谢大家的回复,问题已解决,确实使用下拉电阻在单片机重启时LE引脚可以保持为低电平。

使用特权

评论回复
10
powerwang921|  楼主 | 2023-5-6 10:27 | 只看该作者
powerwang921 发表于 2023-4-27 09:14
感谢你提供的方法,我先测试下。

非常感谢你!使用你的方法确实解决了问题!

使用特权

评论回复
11
powerwang921|  楼主 | 2023-5-6 10:28 | 只看该作者
dalarang 发表于 2023-4-27 08:19
LE接一个下拉电阻不好吗,复位的时候单片机IO是高阻的,下拉电阻生效

非常感谢你!使用你的方法确实解决了问题!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

24

帖子

0

粉丝