【问题标题】:How to deep sleep an Attiny until an analog value of a photoresistor changes?如何让 Attiny 深度睡眠,直到光敏电阻的模拟值发生变化?
【发布时间】:2020-11-15 03:07:28
【问题描述】:

对于 电池供电 项目,我想在程序启动后立即将 Attiny85 置于深度睡眠模式,并让它仅在传感器值(在此情况下光敏电阻)的变化。不幸的是,我只能在互联网上找到按钮中断的示例,而不是光敏电阻的示例。有谁知道我如何实现它,或者如果它是不可能的?

【问题讨论】:

  • 我投票结束这个问题,因为它实际上是一个电子问题,而不是一个软件问题。
  • 当然可以,但是需要电路来激活,例如INT0。电路设计和零件选择在这里是题外话。
  • @TomServo,不是真的,因为这是一个编程问题,而不是硬件问题。还是我错了???我完全知道如何对我的问题进行编程,或者是否有可能
  • 并非如此。低功耗模式很简单。每个数据表都详细显示了寄存器设置。正如您所说,当传感器值发生变化时(可能有一些滞后),您必须创建一个将 Vcc 断言到 INT0 的电路。这首先是电路设计。您需要进一步指定(特别是迟滞)并寻找运算放大器/比较器/施密特触发电路设计来触发 INT0。但不是在 Stackoverflow 上。当您使用面包板线将 Vcc 应用到 INT0 引脚时,对 INT0 进行编程以唤醒它。然后在此工作时添加其他电路。容易。
  • 不过,非常感谢您的回答,并对我“污染”了论坛表示歉意。然后我会根据您的建议尝试实施它。谢谢! P.S.:顺便说一句,我的问题更像是这样的:“如果传感器值发生变化,我如何将 Attiny 置于深度睡眠模式并再次唤醒它?”我只是想知道是否可以通过光敏电阻获得中断,但似乎只有将 INT0 设置为高电平才有可能。

标签: attiny


【解决方案1】:

原来这可能是一个软件问题。

实现这一点的最低功耗和最简单的方法可能是......

  1. 将模拟传感器值连接到 ATTINY 上的任一模拟输入引脚。
  2. 确保禁用该引脚上的数字缓冲区。
  3. 将 ADC 设置为指向引脚并设置其他相关值,例如 precaller。
  4. 设置看门狗定时器以触发周期性中断。
  5. 进入深度睡眠并等待看门狗定时器触发。

每次看门狗触发时...

  1. 启用 ADC。
  2. 取样。
  3. 如果值的变化超过您的阈值,则跳转到主代码。
  4. 禁用 ADC。
  5. 重新进入深度睡眠。

这将如何节能实际上取决于定时器中断触发的频率 - 越少越好。如果您的应用程序可以只检查传感器,例如每秒一次,那么我敢打赌,功耗将是个位数的微安或更少。

如果您在传感器值发生变化时确实需要非常低的延迟,那么您可以改用内置模拟比较器... ..在输入电压高于或低于阈值时产生中断,但这可能会使用更多的功率,因为​​只有模拟比较器本身在开启时使用~30ua,而且您还需要产生电压与内部 1.1 电压基准或外部电阻桥或缓冲电容器相比。

【讨论】:

  • 这不是一个糟糕的解决方案。它可能对 OP 和其他人有用;我投了赞成票。不过要明确一点,该电路似乎尚未经过功率测试。当有人说低功耗和深度睡眠时,我认为是纳安级,而不是微安级。我构建的低功耗设计在 nA 范围内运行。
  • 我觉得一秒测量一次应该够了,这样就可以做到无中断低功耗。谢谢
  • @TomServo 即使使用像 MAX40003 这样的超低功耗专用模拟比较器,仍然需要几微安。你会怎么做才能降低到 nA 范围?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-30
  • 2014-08-07
  • 2017-09-29
  • 1970-01-01
  • 2013-03-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多