Read nRF51822(BLE Chip) VDD voltage and return 100 to 0% charging level
Dependents: BLE_Temp_Vdd_via_UART_TY BLE_EddystoneBeacon_w_ACC_TY51822 BLE_LoopbackUART_low_pwr_w_RTC1 BLE_Paired_Server ... more
This is only for nRF51822.
You don't need any hardware circuit. Just read internal Vdd voltage using ADC function inside of the chip.
nRF51_Vdd.h@3:faf2e448c15b, 2018-04-14 (annotated)
- Committer:
- kenjiArai
- Date:
- Sat Apr 14 04:55:32 2018 +0000
- Revision:
- 3:faf2e448c15b
- Parent:
- 2:9b1e219a7695
small modification
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kenjiArai | 0:11c9f031975d | 1 | /* |
kenjiArai | 0:11c9f031975d | 2 | * mbed library program |
kenjiArai | 0:11c9f031975d | 3 | * Read nRF51822 VDD volatage and return 100 to 0% charging level |
kenjiArai | 0:11c9f031975d | 4 | * https://www.nordicsemi.com/eng/Products/Bluetooth-Smart-Bluetooth-low-energy/nRF51822 |
kenjiArai | 0:11c9f031975d | 5 | * |
kenjiArai | 3:faf2e448c15b | 6 | * Copyright (c) 2016,'18 Kenji Arai / JH1PJL |
kenjiArai | 0:11c9f031975d | 7 | * http://www.page.sannet.ne.jp/kenjia/index.html |
kenjiArai | 3:faf2e448c15b | 8 | * https://os.mbed.com/users/kenjiArai/ |
kenjiArai | 0:11c9f031975d | 9 | * Created: January 23rd, 2016 |
kenjiArai | 3:faf2e448c15b | 10 | * Revised: April 14th, 2018 |
kenjiArai | 0:11c9f031975d | 11 | * |
kenjiArai | 0:11c9f031975d | 12 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, |
kenjiArai | 0:11c9f031975d | 13 | * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE |
kenjiArai | 0:11c9f031975d | 14 | * AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
kenjiArai | 0:11c9f031975d | 15 | * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
kenjiArai | 0:11c9f031975d | 16 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
kenjiArai | 0:11c9f031975d | 17 | */ |
kenjiArai | 0:11c9f031975d | 18 | |
kenjiArai | 0:11c9f031975d | 19 | #ifndef NRF51_VDD |
kenjiArai | 0:11c9f031975d | 20 | #define NRF51_VDD |
kenjiArai | 0:11c9f031975d | 21 | |
kenjiArai | 0:11c9f031975d | 22 | #include "mbed.h" |
kenjiArai | 0:11c9f031975d | 23 | |
kenjiArai | 1:7da210f6aff1 | 24 | #define ONLY4VDD 1 |
kenjiArai | 1:7da210f6aff1 | 25 | #define USE_ADC 0 |
kenjiArai | 1:7da210f6aff1 | 26 | |
kenjiArai | 0:11c9f031975d | 27 | /** Read nRF51822 VDD volatage and return 0 to 100% charging level |
kenjiArai | 0:11c9f031975d | 28 | * |
kenjiArai | 0:11c9f031975d | 29 | * @code |
kenjiArai | 0:11c9f031975d | 30 | * #include "mbed.h" |
kenjiArai | 0:11c9f031975d | 31 | * #include "nRF51_Vdd.h" |
kenjiArai | 0:11c9f031975d | 32 | * |
kenjiArai | 0:11c9f031975d | 33 | * nRF51_Vdd vdd(3.6f, 1.8f); |
kenjiArai | 1:7da210f6aff1 | 34 | * // or follows if you don't use ADC function (more low current) |
kenjiArai | 1:7da210f6aff1 | 35 | * // nRF51_Vdd vdd(3.6f, 1.8f, ONLY4VDD); |
kenjiArai | 0:11c9f031975d | 36 | * |
kenjiArai | 0:11c9f031975d | 37 | * int main() { |
kenjiArai | 0:11c9f031975d | 38 | * uint8_t batteryLevel; |
kenjiArai | 0:11c9f031975d | 39 | * float batt; |
kenjiArai | 0:11c9f031975d | 40 | * |
kenjiArai | 0:11c9f031975d | 41 | * while(true){ |
kenjiArai | 0:11c9f031975d | 42 | * wait(1.0); |
kenjiArai | 0:11c9f031975d | 43 | * batteryLevel = vdd.read(); |
kenjiArai | 0:11c9f031975d | 44 | * batt = vdd.read_real_value(); |
kenjiArai | 0:11c9f031975d | 45 | * } |
kenjiArai | 0:11c9f031975d | 46 | * } |
kenjiArai | 0:11c9f031975d | 47 | * @endcode |
kenjiArai | 0:11c9f031975d | 48 | */ |
kenjiArai | 0:11c9f031975d | 49 | |
kenjiArai | 0:11c9f031975d | 50 | class nRF51_Vdd |
kenjiArai | 0:11c9f031975d | 51 | { |
kenjiArai | 0:11c9f031975d | 52 | public: |
kenjiArai | 0:11c9f031975d | 53 | /** Configure data pin |
kenjiArai | 0:11c9f031975d | 54 | * @param 100% voltage reference value |
kenjiArai | 0:11c9f031975d | 55 | * @param 0% voltage reference value |
kenjiArai | 1:7da210f6aff1 | 56 | * @param LOW POWER MODE (none zero) Use PWR_DWN or USE_ADC |
kenjiArai | 1:7da210f6aff1 | 57 | */ |
kenjiArai | 1:7da210f6aff1 | 58 | nRF51_Vdd(float vdd100percent, float vddzeropercent, uint8_t adc_use); |
kenjiArai | 1:7da210f6aff1 | 59 | |
kenjiArai | 1:7da210f6aff1 | 60 | /** Configure data pin |
kenjiArai | 1:7da210f6aff1 | 61 | * @param 100% voltage reference value |
kenjiArai | 1:7da210f6aff1 | 62 | * @param 0% voltage reference value |
kenjiArai | 0:11c9f031975d | 63 | */ |
kenjiArai | 0:11c9f031975d | 64 | nRF51_Vdd(float vdd100percent, float vddzeropercent); |
kenjiArai | 0:11c9f031975d | 65 | |
kenjiArai | 0:11c9f031975d | 66 | /** Configure data pin (with other devices on I2C line) |
kenjiArai | 0:11c9f031975d | 67 | * @param none |
kenjiArai | 0:11c9f031975d | 68 | */ |
kenjiArai | 0:11c9f031975d | 69 | nRF51_Vdd(void); |
kenjiArai | 0:11c9f031975d | 70 | |
kenjiArai | 0:11c9f031975d | 71 | /** Read Voltage value (percentage) |
kenjiArai | 0:11c9f031975d | 72 | * @param none |
kenjiArai | 0:11c9f031975d | 73 | * @return 0 to 100% |
kenjiArai | 0:11c9f031975d | 74 | */ |
kenjiArai | 0:11c9f031975d | 75 | uint8_t read(void); |
kenjiArai | 0:11c9f031975d | 76 | |
kenjiArai | 2:9b1e219a7695 | 77 | /** Read Voltage value (real voltage) |
kenjiArai | 0:11c9f031975d | 78 | * @param none |
kenjiArai | 0:11c9f031975d | 79 | * @return real voltage (example 3.30V) |
kenjiArai | 0:11c9f031975d | 80 | */ |
kenjiArai | 0:11c9f031975d | 81 | float read_real_value(void); |
kenjiArai | 0:11c9f031975d | 82 | |
kenjiArai | 0:11c9f031975d | 83 | private: |
kenjiArai | 1:7da210f6aff1 | 84 | float wrk_vdd, v100p, v0p; // working buffer |
kenjiArai | 1:7da210f6aff1 | 85 | uint32_t reg0,reg1,reg2; // Save current Configuration data |
kenjiArai | 1:7da210f6aff1 | 86 | uint32_t wrk; // save ADC(Vdd) data |
kenjiArai | 1:7da210f6aff1 | 87 | uint8_t use_adc_for_others; // save PWR_DWN or USE_ADC |
kenjiArai | 0:11c9f031975d | 88 | }; |
kenjiArai | 0:11c9f031975d | 89 | |
kenjiArai | 0:11c9f031975d | 90 | #endif // NRF51_VDD |