国际围棋棋盘
我的賬戶
中國電子DIY

科技成就未來

親愛的游客,歡迎!

已有賬號,請

如尚未注冊?

[Arduino]關于省電模式的探索以及ACD、ADC配置說明

[復制鏈接]
420 1
境由心轉。 發表于 2019-9-21 19:22:29 | 只看該作者 |只看大圖 |閱讀模式 打印 上一主題 下一主題
本帖最后由 境由心轉。 于 2019-9-21 19:27 編輯

前言

資料來源:
(1)2月2號-外置采集溫度_讓arduino用2顆5號電池運行1年以上
(2)C:\Program Files (x86)\Arduino\hardware\tools\avr\avr\include\avr目錄下的sleep.h里的例程
(3)ATMEGA328P詳細資料數據手冊(提取碼:qft2),第302頁(ACSR寄存位配置)和第319頁(ADCSRA寄存位配置)
(4)ACSRACSR寄存位配置中文翻譯

因為本人在做一個便攜的自動澆水系統,只用電池和太陽能板供電,所以不澆水時需要用到休眠模式,以增加續航。
澆水部分已經完成,休眠部分完成一半還未整合進澆水系統,先上澆水系統給大家看看,看視頻點這里。
本文使用干掉電源指示燈的arduino pro mini進行測試。
ACD、ADC的開關配置

接下來是本篇文章的重點之一,ACD、ADC的配置。
我查詢了ATMEGA328P詳細資料數據手冊以及網上的其他文章,得知:
休眠前關閉ACD和ADC更省電,0.12ma,不關ACD和ADC就休眠,0.26ma,這樣我們又省了一半的電。
但是不知道關閉ACD和ADC后會不會對后續的外部中斷的喚醒休眠有影響,有待測試。
接下來我們看一下如何開啟和關閉ACD、ADC,代碼如有錯誤請指出。
  1.   //ON ACD
  2.   ACSR &= ~_BV(ACIE);   //禁止模擬比較器中斷后再對ACD位操作,否則ACD位變化會發生中斷,寫入0關閉
  3.   ACSR &= ~_BV(ACD);    //開啟模擬比較器
  4.   ACSR |= _BV(ACIE);    //開啟模擬比較器中斷
  5.   //ON ADC
  6.   ADCSRA |= _BV(ADEN);   //ADC使能開啟
  7.   ADCSRA |= _BV(ADIF);   //ADC中斷使能開啟

  8. //OFF ACD
  9.   ACSR &= ~_BV(ACIE);    //禁止模擬比較器中斷后再對ACD位操作,否則ACD位變化會發生中斷,寫入0關閉
  10.   ACSR |= _BV(ACD);      //關閉模擬比較器 ,寫入1關閉
  11.   //OFF ADC
  12.   ADCSRA |= _BV(ADIF);   //清除標志,寫1清除
  13.   ADCSRA &= ~_BV(ADIE);  //ADC中斷使能關閉
  14.   ADCSRA &= ~_BV(ADEN);  //ADC使能關閉,寫入0關閉
復制代碼
這段代碼,也就是ACD、ADC的配置說明可以從手冊里查出。
第302頁(ACSR寄存位配置)和第319頁(ADCSRA寄存位配置)。


休眠模式

接下來是休眠模式,我直接使用了文章2月2號-外置采集溫度_讓arduino用2顆5號電池運行1年以上里的部分代碼,并做了一下改進和注釋。

原文章把休眠模式已經說的很清楚了,我就不多做介紹了。

需要注意的地方是sleep_mode()這個API,根據sleep.h文件里的說明使用sleep_mode()可能會在某些狀態下失效。

所以,根據例程,我將進入休眠模式的步驟改成:

  cli();                                //關閉全局中斷,防止中斷引起意外

  set_sleep_mode(SLEEP_MODE_PWR_DOWN);  //這里設置睡眠模式

  sleep_enable();                       //開啟休眠功能

  sei();                                //開啟全局中斷

  sleep_cpu();                          //進入休眠

  sleep_disable();                      //關閉休眠功能

  sei();                                //開啟全局中斷



所以,在休眠前是否要開關ADC/ACD,進入休眠的方式是否要使用sleep_mode()或者我的分步進入,看個人所需。













收藏
收藏0
分享
分享
支持
支持0
反對
反對0

精彩評論1

跳轉到指定樓層
2#
 樓主| 境由心轉。 發表于 2019-9-21 19:29:01 | 只看該作者
2月2號-外置采集溫度_讓arduino用2顆5號電池運行1年以上https://www.geek-workshop.com/forum.php?mod=viewthread&tid=12261&highlight=2%E6%9C%882%E5%8F%B7

ATMEGA328P詳細資料數據手冊(提取碼:qft2)
https://pan.baidu.com/s/1ZjL-ZOGHOUfgRMI6jMgJ0Q

ACSRACSR寄存位配置中文翻譯
http://www.21ic.com/3g/765414
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 注冊

本版積分規則

關注0

粉絲2

帖子2

發布主題
最新發布
推薦閱讀
關注我們
中國電子DIY官方微信

客服電話:000-000-0000

客服郵箱:[email protected]

周一至周五 9:00-18:00

公司地址:深圳市南山區美麗灣大廈B座

Powered by Discuz! X3.4@ 2001-2013 Comsenz Inc.

国际围棋棋盘 15选5浙走势图 热血羽毛球 天津11选5 五骑士 河北打麻将的规定 捷报比分网官网 快乐双彩 华东15选5开奖走 22选5每天几点开奖 篮球即时比分365 七月1日北单比分推荐 广西11选5 11选5开奖结果浙 排球比分实时直播 2019低价潜力股 河北11选5在线直