完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
大家好,我正在移植一个项目,它以前工作得很好,从pic24FV32KA301到PIC24FJ64GB002。问题是,即使INT0在正常例程中正确地生成中断,当在深睡眠时它也不会唤醒mcu。我真的不明白为什么。遵循以下规则:说实话,它不能说服我也处于真正的深度睡眠中,因为它正在消耗377mA几秒钟,然后是444mA(测量断开所有输入),即使OSCO上的时钟信号停止到vdd.谢谢大家,卢卡会回答的。
|
|
相关推荐
15个回答
|
|
|
我基本上从来不在任何照片上使用深度睡眠。现在我来看看数据表的第94.2节,嗯,有一些窍门,但看起来它应该工作…
|
|
|
|
|
|
你好,达里奥,首先,祝贺你在微芯片论坛的头10年,我在这里不是很活跃,但多年来,你总是在我的所有话题上提供帮助,谢谢你继续支持社区。我不明白为什么深睡眠();不能工作,当睡眠();的确。我反复检查了92.4.2次,所以我记住了所有的句子。说实话,我仍然对睡眠和深度睡眠的区别感到困惑,主要是关于功耗(我不能分析,因为除了4mA““深度睡眠””“问题,它们淹没在电路消耗中)。在PIC24FV32 KA301的深度睡眠()上,工作良好,获得与睡眠()相当的结果;在PIC24FJ64 GBB2中。你知道有什么不同吗?谢谢,卢卡
|
|
|
|
|
|
@IUABBM,您发布的代码片段是如此的不完整,以至于不可能识别出您哪里出错了。目前我有一个PIC24FJ64GB004,所以这里有一个在INT0上的从高到低的转换中醒来的深度睡眠的工作示例。在我的测试套接字中,PIC24FJ64GB004绘制了0.0007毫安在深睡眠和51.6毫安时峰值运行在32 MHz。
|
|
|
|
|
|
上面应该映射到asm(“pwrsav#0”),不同之处在于前面的代码——“通过将DSEN位设置到DSCON寄存器中,然后在一个指令周期内执行Sleepcommand(PWRSAV#SLEEP_MODE)来输入深度睡眠模式,以最小化将引发深度睡眠的可能性“闯入”
|
|
|
|
|
|
@IUABBM(又名意大利面),在查看代码之后,您似乎忽略了PIC24F部件家族中睡眠和深度睡眠之间的一些基本区别。请学习第39节。具有深度睡眠的节电特性-PIC24F FRM(http://ww1.micro..com/...n/DeviceDoc/39727b.pdf)并特别注意39.3.4节,并特别尝试理解以下段落:当唤醒事件在深度睡眠模式下(通过复位、RTCC警报、外部中断(INT0)或DS发生WDT),该设备将退出深度休眠模式,并重新上电复位(POR)。当设备从复位释放时,代码执行将在设备的复位向量恢复。本节07。重置-PIC24F FRM(http://WW1.Microchip .com /…N/DeviceDoc /9712D.PDF)和本节32。高级设备集成-PIC24F FRM(http://ww1.micro..com/...n/DeviceDoc/39719d.pdf)具有与使用深度睡眠相关的信息。在真正理解深度睡眠模式的所有要求和限制之前,你应该避免使用它。
|
|
|
|
|
|
亲爱的达里奥和丹,谢谢你们有趣的回答,是的,我错过了进入深度睡眠程序的有效途径,但不是他们的差异。自从我从一个pic24FV32KA301中获得了相同的消耗量后,我的困惑就开始了,我用GoToDeepSleep()命令和一个PIC24FJ64GB002成功地在“深度睡眠”中驾驶,我刚刚到达PIC24FJ64GB002以睡眠状态发送它。我把你链接到我的所有手册都涂红了,即使我对其中的一些很了解,问题也在于“第39节”。“具有深度睡眠的节电特性”FRM,第“39.3.4.1节进入深度睡眠模式”,它说:根据对于正确的场景(“场景(1):使用外部唤醒源(INT0)或RTCC”)的“39.3.4.1.1进入深度睡眠模式时的特殊情况”,工作代码是:不再使用GoToDeepSleep功能,并且用插入0到4NOPS的原始asm代码进行了广泛的测试,设备根本不会进入DeepSleep,它只是在一个未知的状态中耗尽3到4mA。不是通过INT或WDT唤醒两者。也试图用DISI控制禁用中断,MCU进入相同的“状态”。我是否犯了其他错误?:(
|
|
|
|
|
|
我发布的代码在PIC24FJ64GB004中工作,应该在PIC24FJ64GB002中工作。如果不能判断PIC处于什么状态,那么代码中就有bug。你可能犯了很多错误。直到您决定创建最小的可能的测试应用程序,您将永远不会了解您的具体错误是什么。由于您没有提供完整和准确的电路示意图,您的PIC24FJ64GB002是在没有人可以评论,如果过剩的电流是从PIC没有进入深。睡眠或差低功耗电路设计。
|
|
|
|
|
|
我正在开发我的学位论文(EE MSc),实际上我有成千上万件事情要集中精力,有时对我来说非常奇特(比如处理结构工程问题),所以我没有时间对此进行如此广泛的测试,我只是想知道为什么微处理器在执行时卡住了按照微芯片FRM的说法,相同的代码应该绝对足以发送处于深度睡眠状态的mcu。在睡眠状态下,它耗尽6uA,执行上面的“深度睡眠例程”,在删除了所有硬件的情况下,它坚持绘制3.7mA(除了mclr an)。D电源电路,所以我想这不是一个示意性的问题。谢谢你耐心地帮助我,回答我的评论。卢卡
|
|
|
|
|
|
看起来PIC24FJ64GB002深度睡眠模式的这些问题正在分散你更好地利用时间的注意力。也许在您有了更多的经验之后,您能更好地理解问题然后理解解决方案。这不是我使用PIC24FJ64GB004的经验。从你已经发布的测试方法来看,不可能排除硬件或固件的问题。因此,您需要找到一些方法,使您的硬件工作正常,以定位PIC24FJ64GB002中的深度睡眠问题。由于您没有逐字尝试此代码或详细描述您的目标硬件,以便有人能够专门为您的目标硬件创建代码,因此实际上您使自己处于无法解决这个问题的位置。在你的时间,你最好的行动是放弃使用深度睡眠,并完成你可以管理的项目。
|
|
|
|
|
|
好吧,最后我想出了这个问题。一旦进入深度睡眠,WDT在2.1毫秒后唤醒MCU,所以我没有测量深睡眠MCU状态的消耗。4mA是mcu在运行状态下的实际消耗。在启动后(约60mA)和深度睡眠唤醒(4mA)我从运行状态中产生了很大的不匹配,因为我没有完全工作的代码,在醒来后没有正确设置所有外部外围设备。这是我的实际问题。我面对的是,在深度睡眠醒来后,监视OSCO管脚,振荡器在INT0WDT中断后大约3秒开始,然后似乎主程序开始时的初始设置的一部分丢失(例如,管脚没有设置高)。我把这些设置放在主代码的开头,如果我通过mclre重置它们工作的mcu,如果从深度睡眠中醒来它们不工作。/附加代码:有提示吗?我正在开发用于结构监视的WSN节点,并且功耗是一个非常关键的主题,因此我不得不使用DeepSleep,这促使整个项目使用pic24来构建它们的xlp体系结构。)卢卡
|
|
|
|
|
|
你发布的代码组织得不好,应该被重构成一种可以被局外人理解的形式。在目前的形式下,我认为不可能实施正确的深度睡眠行为。另外,你还没有领会到深度睡眠的唤醒唤醒电源重置这个概念。你的代码必须做什么才能在深度睡眠的唤醒后重新启动。本质上,深度睡眠的唤醒与从睡眠中唤醒完全不同。这意味着没有明显的“提示”可以解决这个问题。在PIC24F型微控制器中,您需要了解更多关于创建固件以实现低功耗行为的信息。这些想法很难学,很难教。我无法说出你可能需要学习的其他关键概念来赋予你真正理解的“Eureka”时刻。
|
|
|
|
|
|
亲爱的丹,乍一看,我写了一些代码片段,对500行代码进行了重新排列,以表明情况,但是你认为它们“非常不完整”,以至于我们花了一周的时间才意识到解决方案正好在我发布的代码的第一行。UEST即使考虑到我自己的困惑。我重新安排了我最后一篇文章中的大部分代码来匹配深度睡眠行为,你看过了吗?在根据我的情况修改代码时,我尽我最大的努力遵循您的示例,DeepSleep是这个项目的基础,并且我正在尽我最大的努力遵循您的提示来达到这个目标。这不是工作,这是一个案例研究,我来这里是为了学习。所以,请问,请问,在深睡眠之后,单片机在哪里重新开始执行?如果它开始像一个电源,从主的第一行,为什么所有的设置在第一部分的主要遗漏?最奇怪的是(从第39节开始)。具有深度睡眠的节电特性-39.3.4.2 39.3.4.2唤醒延迟)“深度睡眠的唤醒时间与设备POR时间相同”,但是从深度睡眠的中断唤醒到OSCO管脚上的振荡器实际上需要大约3秒钟。
|
|
|
|
|
|
你所张贴的是无法编译的代码片段。两天后我在post#6isexample代码中发布的内容,该代码在真正的硬件中构建并正确使用配置字。我不确定我对代码的看法会如何导致您花一周时间来发现代码如何设置配置词的问题。您对两个目标的努力应该没有差别。是的,我已经看过了,有些问题对于简单的嗅觉。你需要考虑几个启动案例来正确地实现深度睡眠。我发布的示例以一种特定的方式工作,而您的实现并不以这种方式工作。您似乎不理解DSCONbits的设置。RELEASE bit正在做什么,以及重置启动代码时应该在什么地方出现这种情况。您可能需要关心很多事情这些看起来很小,但是对于用嵌入式固件实现正确的低功耗行为非常重要。只有你能在这里学习。也许因为你没有一个真正的努力的工作例子,它对你没有真正的价值。关于免费物品的事情是接收器通常分配它很小的值。你似乎看到一个3秒的振荡启动时间从深度睡眠中醒来。为什么这样做是不容易通过检查代码来确定的。
|
|
|
|
|
|
您好IUABBM,DAN1138已经发布了一个非常有用的例子给你。你的关键位是在“主())程序开始时的部分。这是if...else if...else if...else if测试链。为了扩展Dans的帮助。在进入主例程时,这通常是由于重置电源(包括BOR)、看门狗或MCLR。因此,您可以通过数据表漫游,并假定所有寄存器都按POR值,包括TIS和LAT寄存器。然而,在深度睡眠后,PIC已经被“冻结”,以防止任何不必要的信号在引脚上,因为上电过程。因此,大多数寄存器都按照它们的POR值进行操作,但是保留了一些寄存器,以允许对POR进行不同的深睡眠操作。RCON寄存器DPSLP中的信号标识CPU从深度睡眠中醒来的事实。对于这个事件,需要在“主()”中采取不同的动作,以及唤醒的原因。因此,丹如果……如果链。在从深度睡眠初始化(回到标准管脚配置)唤醒之后,有必要“解冻”PIC,以使管脚反映TRIS和LAT寄存器(释放位)中配置的内容。McGM还提供两个通用寄存器,用于保存(预深度睡眠上下文)中的值。这些可能是程序地址,序列状态等。请注意,RAM在深睡眠后无效。3秒的延迟听起来像看门狗的延迟。希望这有助于。T Yorky
|
|
|
|
|
|
谢谢你,约克,丹的代码很有用,但是你的回答让我大吃一惊,它给了我,一个深度睡眠的新手,帮助我理解问题并指出我的新手错误。我不想不合适,但是亲爱的Yorky,如果你有一个PayPal账户,我想给你一杯咖啡。请通过下午通知我。我还有重置检查程序,所以请把它作为草案,但是深度睡眠唤醒现在工作得很好,我的仪器无法测量消耗,没有延迟,所有设置都正确执行。FRM表是关于RCON在相关事件之后设置的。再次感谢Dario和Dan的代码,这些代码对于帮助我建立fw、Luca、IU8BBMPS至关重要。由于我的引文有很多混淆/错误,我将把IU8BBM屏幕名恢复为意大利面条昵称。
|
|
|
|
|
只有小组成员才能发言,加入小组>>
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
473 浏览 0 评论
5793 浏览 9 评论
2334 浏览 8 评论
2224 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3530 浏览 3 评论
1121浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
1095浏览 1评论
我是Microchip 的代理商,有PIC16F1829T-I/SS 技术问题可以咨询我,微信:A-chip-Ti
872浏览 1评论
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
473浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-1 18:44 , Processed in 0.942753 second(s), Total 100, Slave 83 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1820