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.

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?

UserRevisionLine numberNew 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