samples: nrf: battery: add documentation

Provide a description of the sample and how it works with different
power supply source configurations.

Signed-off-by: Peter Bigot <peter.bigot@nordicsemi.no>
diff --git a/samples/boards/nrf/battery/README.rst b/samples/boards/nrf/battery/README.rst
new file mode 100644
index 0000000..4ace4e9
--- /dev/null
+++ b/samples/boards/nrf/battery/README.rst
@@ -0,0 +1,81 @@
+.. _boards_nrf_battery:
+
+Battery Voltage Measurement
+###########################
+
+Overview
+********
+
+This sample demonstrates using Nordic configurations of the Zephyr ADC
+infrastructure to measure the voltage of the device power supply.  Two
+power supply configurations are supported:
+
+* If the board devicetree has a ``/vbatt`` node with compatible
+  ``voltage-divider`` then the voltage is measured using that divider.
+* Otherwise the power source is assumed to be directly connected to the
+  digital voltage signal, and the internal source for ``Vdd`` is
+  selected.
+
+An example of a devicetree node describing a voltage divider for battery
+monitoring is:
+
+.. code-block:: none
+
+   / {
+   	vbatt {
+   		compatible = "voltage-divider";
+   		io-channels = <&adc 4>;
+   		output-ohms = <180000>;
+   		full-ohms = <(1500000 + 180000)>;
+   		power-gpios = <&sx1509b 4 0>;
+   	};
+   };
+
+Note that in many cases where there is no voltage divider the digital
+voltage will be fed from a regulator that provides a fixed voltage
+regardless of source voltage, rather than by the source directly.  In
+configuration involving a regulator the measured voltage will be
+constant.
+
+The sample provides discharge curves that map from a measured voltage to
+an estimate of remaining capacity.  The correct curve depends on the
+battery source: a standard LiPo cell requires a curve that is different
+from a standard alkaline battery.  Curves can be measured, or estimated
+using the data sheet for the battery.
+
+Application Details
+===================
+
+The application initializes battery measurement on startup, then loops
+displaying the battery status every five seconds.
+
+Requirements
+************
+
+A Nordic-based board, optionally with a voltage divider specified in its
+devicetree configuration as noted above.
+
+Building and Running
+********************
+
+The code can be found in :zephyr_file:`samples/boards/nrf/battery`.
+
+.. zephyr-app-commands::
+   :zephyr-app: samples/boards/nrf/battery
+   :board: nrf52_pca20020
+   :goals: build flash
+   :compact:
+
+
+Sample Output
+=============
+
+.. code-block:: console
+
+   *** Booting Zephyr OS build zephyr-v2.2.0-318-g84219bdc1ac2  ***
+   [0:00:00.016]: 4078 mV; 10000 pptt
+   [0:00:04.999]: 4078 mV; 10000 pptt
+   [0:00:09.970]: 4078 mV; 10000 pptt
+   [0:00:14.939]: 4069 mV; 10000 pptt
+   [0:00:19.910]: 4078 mV; 10000 pptt
+   [0:00:24.880]: 4069 mV; 10000 pptt
diff --git a/samples/boards/nrf/battery/src/battery.c b/samples/boards/nrf/battery/src/battery.c
index 3e12aac..318d38e 100644
--- a/samples/boards/nrf/battery/src/battery.c
+++ b/samples/boards/nrf/battery/src/battery.c
@@ -57,13 +57,10 @@
 };
 
 static const struct divider_config divider_config = {
+#if DT_HAS_NODE(VBATT)
 	.io_channel = {
-#if DT_NODE_HAS_PROP(VBATT, io_channels)
 		DT_IO_CHANNELS_LABEL(VBATT),
 		DT_IO_CHANNELS_INPUT(VBATT),
-#else
-		DT_LABEL(DT_ALIAS(adc_0)),
-#endif
 	},
 #if DT_NODE_HAS_PROP(VBATT, power_gpios)
 	.power_gpios = {
@@ -74,6 +71,11 @@
 #endif
 	.output_ohm = DT_PROP(VBATT, output_ohms),
 	.full_ohm = DT_PROP(VBATT, full_ohms),
+#else /* /vbatt exists */
+	.io_channel = {
+		DT_LABEL(DT_ALIAS(adc_0)),
+	},
+#endif /* /vbatt exists */
 };
 
 struct divider_data {