Wake-up function using RTC1. This revision, current consumption is around 80uA at deep sleep mode and this is not enough!! I cannot reduce it until today. This is a temporary revision which I need your help.
Dependents: BLE_LoopbackUART_low_pwr_w_RTC1 BLE_Uart_Server
Please refer following notebook.
/users/kenjiArai/notebook/ty51822r3-current-consumption-using-nrf51_wakeup-l/#
nRF51_WakeUp.h@1:cc54cd1df555, 2016-06-11 (annotated)
- Committer:
- kenjiArai
- Date:
- Sat Jun 11 00:52:47 2016 +0000
- Revision:
- 1:cc54cd1df555
- Parent:
- 0:f50677171f2d
added power off for peripheral functions
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kenjiArai | 0:f50677171f2d | 1 | /* |
kenjiArai | 0:f50677171f2d | 2 | * mbed library program |
kenjiArai | 0:f50677171f2d | 3 | * Wake-Up function only at Sleep mode |
kenjiArai | 0:f50677171f2d | 4 | * Limitation: |
kenjiArai | 0:f50677171f2d | 5 | * 1) only for nRF51822 |
kenjiArai | 0:f50677171f2d | 6 | * 2) RTC1 is used in mbed |
kenjiArai | 0:f50677171f2d | 7 | * |
kenjiArai | 0:f50677171f2d | 8 | * Copyright (c) 2016 Kenji Arai / JH1PJL |
kenjiArai | 0:f50677171f2d | 9 | * http://www.page.sannet.ne.jp/kenjia/index.html |
kenjiArai | 0:f50677171f2d | 10 | * http://mbed.org/users/kenjiArai/ |
kenjiArai | 0:f50677171f2d | 11 | * Created: March 24th, 2016 |
kenjiArai | 1:cc54cd1df555 | 12 | * Revised: June 11th, 2016 |
kenjiArai | 0:f50677171f2d | 13 | * |
kenjiArai | 0:f50677171f2d | 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, |
kenjiArai | 0:f50677171f2d | 15 | * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE |
kenjiArai | 0:f50677171f2d | 16 | * AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
kenjiArai | 0:f50677171f2d | 17 | * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
kenjiArai | 0:f50677171f2d | 18 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
kenjiArai | 0:f50677171f2d | 19 | */ |
kenjiArai | 0:f50677171f2d | 20 | |
kenjiArai | 0:f50677171f2d | 21 | #ifndef NRF51_WAKEUP |
kenjiArai | 0:f50677171f2d | 22 | #define NRF51_WAKEUP |
kenjiArai | 0:f50677171f2d | 23 | |
kenjiArai | 0:f50677171f2d | 24 | #include "mbed.h" |
kenjiArai | 0:f50677171f2d | 25 | #include "nrf_soc.h" |
kenjiArai | 0:f50677171f2d | 26 | #include "nrf_delay.h" |
kenjiArai | 0:f50677171f2d | 27 | |
kenjiArai | 0:f50677171f2d | 28 | #ifndef TARGET_NRF51822 |
kenjiArai | 0:f50677171f2d | 29 | #error "This function is only for nRF51822." |
kenjiArai | 0:f50677171f2d | 30 | #endif |
kenjiArai | 0:f50677171f2d | 31 | |
kenjiArai | 0:f50677171f2d | 32 | /** Set deepsleep duration time and wakeup as same as RESET state |
kenjiArai | 0:f50677171f2d | 33 | * |
kenjiArai | 0:f50677171f2d | 34 | * @code |
kenjiArai | 0:f50677171f2d | 35 | * #include "mbed.h" |
kenjiArai | 0:f50677171f2d | 36 | * #include "nRF51_WakeUp.h" |
kenjiArai | 0:f50677171f2d | 37 | * |
kenjiArai | 0:f50677171f2d | 38 | * DigitalOut myled(LED1); |
kenjiArai | 0:f50677171f2d | 39 | * DigitalIn sw(P0_1); |
kenjiArai | 0:f50677171f2d | 40 | * // RTC1 is 24bit counter, you cannot wait over 582 hours (125ms * 2^24 = 0.125 * 2097152 sec) |
kenjiArai | 0:f50677171f2d | 41 | * nRF51_WakeUp wakeup(LED2, P0_0); // Trigger & Interrupt (MUST tied up together!!) |
kenjiArai | 0:f50677171f2d | 42 | * |
kenjiArai | 0:f50677171f2d | 43 | * int main() { |
kenjiArai | 0:f50677171f2d | 44 | * while(true){ |
kenjiArai | 0:f50677171f2d | 45 | * myled = 1; |
kenjiArai | 0:f50677171f2d | 46 | * wait(1.0); |
kenjiArai | 0:f50677171f2d | 47 | * myled = 0; |
kenjiArai | 0:f50677171f2d | 48 | * wait(1.0); |
kenjiArai | 0:f50677171f2d | 49 | * if (sw == 0){ |
kenjiArai | 0:f50677171f2d | 50 | * wakeup.set_and_wait(120); // 2 minutes |
kenjiArai | 0:f50677171f2d | 51 | * deepsleep(); // just in case |
kenjiArai | 0:f50677171f2d | 52 | * } |
kenjiArai | 0:f50677171f2d | 53 | * } |
kenjiArai | 0:f50677171f2d | 54 | * } |
kenjiArai | 0:f50677171f2d | 55 | * @endcode |
kenjiArai | 0:f50677171f2d | 56 | */ |
kenjiArai | 0:f50677171f2d | 57 | |
kenjiArai | 0:f50677171f2d | 58 | class nRF51_WakeUp |
kenjiArai | 0:f50677171f2d | 59 | { |
kenjiArai | 0:f50677171f2d | 60 | public: |
kenjiArai | 0:f50677171f2d | 61 | /** Configure control pin |
kenjiArai | 0:f50677171f2d | 62 | * @param output(trigger) pin & Interrupt input pin |
kenjiArai | 0:f50677171f2d | 63 | * @Hardware: Trigger pin and Interrupt pin are must connected!! |
kenjiArai | 0:f50677171f2d | 64 | */ |
kenjiArai | 0:f50677171f2d | 65 | nRF51_WakeUp(PinName p_trigger, PinName p_interrupt); |
kenjiArai | 0:f50677171f2d | 66 | |
kenjiArai | 0:f50677171f2d | 67 | /** Set wake-up time then goto Deep Sleep mode |
kenjiArai | 0:f50677171f2d | 68 | * @param wake-up time (in minutes) |
kenjiArai | 0:f50677171f2d | 69 | * @none |
kenjiArai | 0:f50677171f2d | 70 | */ |
kenjiArai | 0:f50677171f2d | 71 | void set_and_wait(uint32_t t_sec); |
kenjiArai | 0:f50677171f2d | 72 | |
kenjiArai | 0:f50677171f2d | 73 | private: |
kenjiArai | 0:f50677171f2d | 74 | void action4restart(void); |
kenjiArai | 0:f50677171f2d | 75 | |
kenjiArai | 0:f50677171f2d | 76 | DigitalOut _pin0; |
kenjiArai | 0:f50677171f2d | 77 | InterruptIn _pin1; |
kenjiArai | 0:f50677171f2d | 78 | DigitalIn _pin2; |
kenjiArai | 0:f50677171f2d | 79 | PinName p_name_trgr; |
kenjiArai | 0:f50677171f2d | 80 | }; |
kenjiArai | 0:f50677171f2d | 81 | |
kenjiArai | 0:f50677171f2d | 82 | #endif // NRF51_WAKEUP |