{"id":135766,"date":"2018-09-07T16:23:00","date_gmt":"2018-09-07T13:23:00","guid":{"rendered":"https:\/\/ruuvi.com\/ruuvi-firmware-teil-7-batteriemessung-mit-naivem-ansatz\/"},"modified":"2026-06-11T07:39:58","modified_gmt":"2026-06-11T04:39:58","slug":"ruuvi-firmware-teil-7-batteriemessung-mit-naivem-ansatz","status":"publish","type":"post","link":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-7-batteriemessung-mit-naivem-ansatz\/","title":{"rendered":"Ruuvi Firmware \u2013 Teil 7: Batteriemessung mit naivem Ansatz"},"content":{"rendered":"\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"536\" src=\"https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-series-battery-1024x536.jpeg\" alt=\"Einleitungsbild zur Ruuvi Firmware-Serie Teil 7\" class=\"wp-image-3671\" srcset=\"https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-series-battery-1024x536.jpeg 1024w, https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-series-battery-450x236.jpeg 450w, https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-series-battery-768x402.jpeg 768w, https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-series-battery-600x314.jpeg 600w, https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-series-battery.jpeg 1400w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n<p class=\"wp-block-paragraph\">In diesem Teil des Tutorials f\u00fcgen wir eine einfache Batteriemessung mit dem internen Analog-Digital-Wandler (<strong>ADC)<\/strong> des <strong>nRF52832<\/strong> hinzu. Den fertigen Code dieses Blog-Beitrags kannst du bei <a href=\"https:\/\/github.com\/ruuvi\/ruuvi.firmware.c\">Ruuvi GitHub<\/a> im <em>ruuviblog<\/em>-Branch unter dem Tag <em> 3.7.0-alpha<\/em> herunterladen. <\/p>\n\n<p class=\"wp-block-paragraph\">Bitte folge <a href=\"https:\/\/ruuvi.com\/ruuvi-firmware-part-1-sleep\/\">Teil 1 der Serie<\/a> f\u00fcr Details zum Klonen des Repositories und Kompilieren des Codes. Die finale Hex-Datei dieses Tutorials kann vom <a href=\"http:\/\/jenkins.ruuvi.com:8080\/job\/ruuvi.firmware.c\/24\/\">Ruuvi Jenkins<\/a> heruntergeladen werden. <\/p>\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"821\" height=\"681\" src=\"https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-c-architecture-3-7-0.png\" alt=\"ruuvi.firmware.c Architektur 3.7.0\" class=\"wp-image-3672\" srcset=\"https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-c-architecture-3-7-0.png 821w, https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-c-architecture-3-7-0-450x373.png 450w, https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-c-architecture-3-7-0-768x637.png 768w, https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-c-architecture-3-7-0-600x498.png 600w\" sizes=\"auto, (max-width: 821px) 100vw, 821px\" \/><\/figure><\/div>\n\n<h2 class=\"wp-block-heading\">Batteriemessung \u2013 der einfache Weg<\/h2>\n\n<p class=\"wp-block-paragraph\">Der einfachste Weg, die verbleibende Batteriekapazit\u00e4t zu sch\u00e4tzen, besteht darin, die Spannung zu messen, mit der unser Tag betrieben wird. Dieser Ansatz hat jedoch einige Nachteile: <\/p>\n\n<ul class=\"wp-block-list\"><li>Die Temperatur wird nicht ber\u00fccksichtigt<\/li><li>Der Innenwiderstand der Batterie wird nicht ber\u00fccksichtigt<\/li><li>Die nichtlineare Kurve der Batteriekapazit\u00e4t und der verbleibenden Ladung wird nicht ber\u00fccksichtigt<\/li><li>Eine punktuelle Spannungsmessung sagt uns unter Umst\u00e4nden nichts \u00fcber den Spannungseinbruch aus, der bei leistungsintensiven Vorg\u00e4ngen wie einer BLE-\u00dcbertragung auftritt.<\/li><\/ul>\n\n<p class=\"wp-block-paragraph\">Wir werden den <strong>nRF52 ADC <\/strong>verwenden, um die Batterie vorerst trotz dieser Einschr\u00e4nkungen zu messen.<\/p>\n\n<h2 class=\"wp-block-heading\">ADC-Schnittstelle<\/h2>\n\n<p class=\"wp-block-paragraph\">Obwohl das zuvor definierte Sensor-<em>Interface<\/em> f\u00fcr den Anwendungsfall, eine einzelne Spannung aus dem internen <strong>ADC<\/strong> des <strong>nRF52<\/strong> auszulesen, etwas \u00fcberdimensioniert sein mag, wird es bereits zum Auslesen der Temperatur des <strong>nRF52 <\/strong>verwendet. Lass es uns weiter nutzen, um unn\u00f6tige Sonderf\u00e4lle in unserer Datenverarbeitung zu vermeiden. Wir k\u00f6nnen den <em>Handle<\/em> eines Sensors verwenden, um einen Kanal des <strong>ADC <\/strong>darzustellen, genau wie wir ihn verwenden, um einen <strong>GPIO<\/strong>-Pin am <strong>SPI<\/strong>-Bus darzustellen. <\/p>\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"288\" src=\"https:\/\/ruuvi.com\/i\/u\/ruuvi-interface-adc-h-1024x288.png\" alt=\"ruuvi_interface_adc.h\" class=\"wp-image-3673\" srcset=\"https:\/\/ruuvi.com\/i\/u\/ruuvi-interface-adc-h-1024x288.png 1024w, https:\/\/ruuvi.com\/i\/u\/ruuvi-interface-adc-h-450x127.png 450w, https:\/\/ruuvi.com\/i\/u\/ruuvi-interface-adc-h-768x216.png 768w, https:\/\/ruuvi.com\/i\/u\/ruuvi-interface-adc-h-600x169.png 600w, https:\/\/ruuvi.com\/i\/u\/ruuvi-interface-adc-h.png 1264w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>ruuvi_interface_adc.h<\/figcaption><\/figure><\/div>\n\n<p class=\"wp-block-paragraph\">Um so kompatibel wie m\u00f6glich mit den anderen Sensoren zu bleiben, f\u00fcgen wir zwei reservierte Floats zu unserer <strong>ADC<\/strong>-Datenstruktur hinzu.<\/p>\n\n<p class=\"wp-block-paragraph\">Unser Sensor-<em>Interface<\/em> unterst\u00fctzt das Erstellen von Sensor-Instanzen nicht richtig, daher werden wir keine Multichannel-Unterst\u00fctzung f\u00fcr den <strong>ADC<\/strong> haben. Da wir zum jetzigen Zeitpunkt nicht mehr als die Batteriespannung ben\u00f6tigen, werden wir das <em>Interface<\/em> nicht erweitern, um mehrere <strong>ADC<\/strong>-Instanzen unterzubringen. Falls der Bedarf entsteht, werden wir uns vielleicht ansehen, das gesamte <em>Interface<\/em> mit C++ umzusetzen. <\/p>\n\n<h2 class=\"wp-block-heading\">ADC-Treiber<\/h2>\n\n<h3 class=\"wp-block-heading\">Aufl\u00f6sung<\/h3>\n\n<p class=\"wp-block-paragraph\">Der <strong>ADC<\/strong> unterst\u00fctzt Aufl\u00f6sungen von 8, 10, 12 und 14 Bit. Wir werden sie alle unterst\u00fctzen und 10 Bit als Standardaufl\u00f6sung w\u00e4hlen, da dies auch im Beispiel von Nordic Semiconductor verwendet wird. <\/p>\n\n<h3 class=\"wp-block-heading\">Skalierung<\/h3>\n\n<p class=\"wp-block-paragraph\">Die absolute Skala unseres <strong>ADC<\/strong> h\u00e4ngt von der Referenzspannung und dem Verst\u00e4rkungsfaktor des <strong>ADC<\/strong> ab. Als Referenz k\u00f6nnen wir interne 600 <em>mV<\/em> oder die Versorgungsspannung (<a href=\"https:\/\/www.maximintegrated.com\/en\/glossary\/definitions.mvp\/term\/Vdd\/gpk\/943\"><strong>VDD<\/strong><\/a><strong>) <\/strong>\/ 4 verwenden. Da unser Ger\u00e4t batteriebetrieben ist, entscheiden wir uns f\u00fcr die bekannte interne Referenz. Der Verst\u00e4rkungsfaktor kann zwischen 1\/6 und 4\/1 liegen, jedoch darf die analoge Eingangsspannung <strong>VDD <\/strong>nicht \u00fcberschreiten, was uns eine Obergrenze von 3,6 <em>V<\/em> f\u00fcr die Skala gibt. Die Untergrenze w\u00e4re die <em>Referenz<\/em> \/ <em>maximale Verst\u00e4rkung<\/em>, also 150 <em>mV<\/em>. Da wir jedoch nur den Single-Ended-Modus unterst\u00fctzen werden und die maximale Aufl\u00f6sung von 14 Bit eine Millivolt-Genauigkeit bietet, die f\u00fcr unseren Anwendungsfall ausreicht, legen wir die Skala auf <em>interne Referenz<\/em> \/ <em>minimale Verst\u00e4rkung<\/em>, also 3600 <em>mV<\/em>, fest. In der Funktion <em>scale_get<\/em> geben wir 3 zur\u00fcck, um dem Prinzip treu zu bleiben, dass Parameter \u201emindestens\u201c erreicht werden.      <\/p>\n\n<h3 class=\"wp-block-heading\">DSP<\/h3>\n\n<p class=\"wp-block-paragraph\">Der <strong>ADC<\/strong> unterst\u00fctzt <em>Oversampling<\/em> bis zu 256-fach. Da unser Konfigurationsdatenformat nur Werte bis 200 unterst\u00fctzt, begrenzen wir das maximale Oversampling auf 128, was eine Stufe unter dem vom Hardware unterst\u00fctzten Maximum liegt. <\/p>\n\n<h3 class=\"wp-block-heading\">Modus<\/h3>\n\n<p class=\"wp-block-paragraph\">Theoretisch k\u00f6nnten wir kontinuierliches Sampling mit <strong>nRF52<\/strong>-Timern und Peripheral-Peripheral Interconnects (<strong>PPI<\/strong>) unterst\u00fctzen, aber lass uns die Dinge auch hier einfach halten: Wir unterst\u00fctzen nur Einzelmessungen und f\u00fchren bei jedem <em>data_get<\/em>-Aufruf eine neue Messung durch, um den kontinuierlichen Modus zu emulieren.<\/p>\n\n<h2 class=\"wp-block-heading\">Hinzuf\u00fcgen des ADC zum Programm<\/h2>\n\n<p class=\"wp-block-paragraph\">Der <strong>ADC<\/strong>-Task ist fast identisch mit dem Environmental-Task. Wir initialisieren und konfigurieren den <strong>ADC<\/strong> und geben die Messwerte bei Tastendruck aus. <\/p>\n\n<p class=\"wp-block-paragraph\">Unser Main- und Button-Task erfordern kleine Anpassungen: Die <strong>ADC<\/strong>-Initialisierung muss in Main hinzugef\u00fcgt und das ADC-Logging im Button-Task aufgerufen werden. Probieren wir es aus! <\/p>\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"308\" height=\"275\" src=\"https:\/\/ruuvi.com\/i\/u\/printout-battery-voltage.png\" alt=\"Ausgabe der Batteriespannung\" class=\"wp-image-3674\"\/><figcaption>Ausgabe der Batteriespannung<\/figcaption><\/figure><\/div>\n\n<p class=\"wp-block-paragraph\">Mein billiges Multimeter zeigt 2,79 <em>V<\/em> an, daher scheint der ADC vern\u00fcnftige Ergebnisse zu liefern. Es ist Zeit, das Stromprofil zu \u00fcberpr\u00fcfen. <\/p>\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"959\" src=\"https:\/\/ruuvi.com\/i\/u\/ruuvi-tag-plus-idling-2-1024x959.png\" alt=\"RuuviTag+ im Leerlauf\" class=\"wp-image-3675\" srcset=\"https:\/\/ruuvi.com\/i\/u\/ruuvi-tag-plus-idling-2-1024x959.png 1024w, https:\/\/ruuvi.com\/i\/u\/ruuvi-tag-plus-idling-2-450x422.png 450w, https:\/\/ruuvi.com\/i\/u\/ruuvi-tag-plus-idling-2-768x719.png 768w, https:\/\/ruuvi.com\/i\/u\/ruuvi-tag-plus-idling-2-1536x1439.png 1536w, https:\/\/ruuvi.com\/i\/u\/ruuvi-tag-plus-idling-2-2048x1919.png 2048w, https:\/\/ruuvi.com\/i\/u\/ruuvi-tag-plus-idling-2-600x562.png 600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>RuuviTag+ im Leerlauf<\/figcaption><\/figure><\/div>\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"962\" src=\"https:\/\/ruuvi.com\/i\/u\/ruuvi-tag-plus-sampling-1024x962.png\" alt=\"RuuviTag+ bei der Messung\" class=\"wp-image-3676\" srcset=\"https:\/\/ruuvi.com\/i\/u\/ruuvi-tag-plus-sampling-1024x962.png 1024w, https:\/\/ruuvi.com\/i\/u\/ruuvi-tag-plus-sampling-450x423.png 450w, https:\/\/ruuvi.com\/i\/u\/ruuvi-tag-plus-sampling-768x722.png 768w, https:\/\/ruuvi.com\/i\/u\/ruuvi-tag-plus-sampling-1536x1443.png 1536w, https:\/\/ruuvi.com\/i\/u\/ruuvi-tag-plus-sampling-600x564.png 600w, https:\/\/ruuvi.com\/i\/u\/ruuvi-tag-plus-sampling.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>RuuviTag+ bei der Messung<\/figcaption><\/figure><\/div>\n\n<p class=\"wp-block-paragraph\">Kurioserweise liegt unser Stromverbrauch im Leerlauf jetzt bei 5,0 <em>\u03bcA<\/em>, gegen\u00fcber 5,4 <em>\u03bcA<\/em> in unserem letzten Beitrag. Das k\u00f6nnte ein Temperatureffekt sein oder an der Wiederholgenauigkeit der Messungen mit dem <a href=\"https:\/\/www.nordicsemi.com\/eng\/Products\/Power-Profiler-Kit\">Nordic Power Profiler Kit<\/a> liegen. In jedem Fall k\u00f6nnen wir mit dem Stromverbrauch zufrieden sein.  <\/p>\n\n<h2 class=\"wp-block-heading\">Testen<\/h2>\n\n<p class=\"wp-block-paragraph\">Wie bereits angedeutet, steht der Aufbau einer besseren Testumgebung auf unserer Agenda. Wir sollten testen, ob die von uns geschriebenen Treiber wie erwartet funktionieren und Sonderf\u00e4lle gnadenvoll behandeln. Die Tests geben uns auch ein klar definiertes Verhalten f\u00fcr die <em>Versionierung<\/em>: Jeder ver\u00f6ffentlichte Test, der einmal bestanden wurde, muss auch in Zukunft bestanden werden, es sei denn, wir erh\u00f6hen die <em>Major<\/em>-Versionsnummer der Ruuvi Firmware.  <\/p>\n\n<p class=\"wp-block-paragraph\">Wir werden einen neuen Ordner f\u00fcr die Tests erstellen, da wir sie von den Releases trennen wollen, die die Endnutzer ausf\u00fchren. Hier ist das Sensor-Interface wieder sehr praktisch: Wir k\u00f6nnen genau denselben Test-Satz f\u00fcr jede Implementierung ausf\u00fchren und pr\u00fcfen, ob das Verhalten \u00fcberall gleich ist. <\/p>\n\n<p class=\"wp-block-paragraph\">Fangen wir mit dem Initialisierungs- und Deinitialisierungsverhalten jedes Sensors an. Die Initialisierung sollte bei g\u00fcltiger Konfiguration keinen Fehler zur\u00fcckgeben, es sei denn, der Sensor wurde bereits initialisiert. Die Deinitialisierung sollte immer erfolgreich sein. Funktionspointer des Sensors sollten nach der Initialisierung konfiguriert und nach der Deinitialisierung auf <strong>NULL<\/strong> gesetzt werden. Wenn <strong>NULL<\/strong> an eine der Funktionen \u00fcbergeben wird, sollten sie einen Fehler zur\u00fcckgeben.    <\/p>\n\n<p class=\"wp-block-paragraph\">Wir definieren au\u00dferdem eine Hilfsfunktion, um zu pr\u00fcfen, wie viele Tests ausgef\u00fchrt wurden und wie viele bestanden haben, sowie eine einzelne Funktion, um alle Tests auszuf\u00fchren.<\/p>\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"676\" src=\"https:\/\/ruuvi.com\/i\/u\/test-sensor-h-initialization-1024x676.png\" alt=\"test_sensor.h &#x2013; Initialisierung, Status der Tests und Ausf&#xFC;hrung.\" class=\"wp-image-3677\" srcset=\"https:\/\/ruuvi.com\/i\/u\/test-sensor-h-initialization-1024x676.png 1024w, https:\/\/ruuvi.com\/i\/u\/test-sensor-h-initialization-450x297.png 450w, https:\/\/ruuvi.com\/i\/u\/test-sensor-h-initialization-768x507.png 768w, https:\/\/ruuvi.com\/i\/u\/test-sensor-h-initialization-1536x1014.png 1536w, https:\/\/ruuvi.com\/i\/u\/test-sensor-h-initialization-600x396.png 600w, https:\/\/ruuvi.com\/i\/u\/test-sensor-h-initialization.png 1636w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>test_sensor.h \u2013 Initialisierung, Status der Tests und Ausf\u00fchrung.<\/figcaption><\/figure><\/div>\n\n<p class=\"wp-block-paragraph\">Wir verwenden hier die <strong>SES<\/strong>&#8211;<em>Build-Konfigurationen<\/em> und definieren <strong>RUUVI_RUN_TESTS <\/strong>in der Debug-Konfiguration. Dann f\u00fcgen wir die Tests in die main.c ein. <\/p>\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"268\" src=\"https:\/\/ruuvi.com\/i\/u\/main-c-run-tests-1024x268.png\" alt=\"main.c &#x2013; Tests ausf&#xFC;hren.\" class=\"wp-image-3678\" srcset=\"https:\/\/ruuvi.com\/i\/u\/main-c-run-tests-1024x268.png 1024w, https:\/\/ruuvi.com\/i\/u\/main-c-run-tests-450x118.png 450w, https:\/\/ruuvi.com\/i\/u\/main-c-run-tests-768x201.png 768w, https:\/\/ruuvi.com\/i\/u\/main-c-run-tests-600x157.png 600w, https:\/\/ruuvi.com\/i\/u\/main-c-run-tests.png 1290w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>main.c \u2013 Tests ausf\u00fchren.<\/figcaption><\/figure><\/div>\n\n<p class=\"wp-block-paragraph\">Mal sehen, wie es mit dem Code l\u00e4uft, den wir f\u00fcr das ADC-Sampling und das Power-Profiling des Tags verwendet haben!<\/p>\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"752\" height=\"350\" src=\"https:\/\/ruuvi.com\/i\/u\/debug-log-of-the-tests.png\" alt=\"Debug-Log der Tests. Ziemlich genau das, was man erwarten w&#xFC;rde. \" class=\"wp-image-3679\" srcset=\"https:\/\/ruuvi.com\/i\/u\/debug-log-of-the-tests.png 752w, https:\/\/ruuvi.com\/i\/u\/debug-log-of-the-tests-450x209.png 450w, https:\/\/ruuvi.com\/i\/u\/debug-log-of-the-tests-600x279.png 600w\" sizes=\"auto, (max-width: 752px) 100vw, 752px\" \/><figcaption>Debug-Log der Tests. Ziemlich genau das, was man erwarten w\u00fcrde. <\/figcaption><\/figure><\/div>\n\n<p class=\"wp-block-paragraph\">Unsere Tests zahlen sich bereits aus, da sie zeigen, dass unsere Initialisierung nicht wie erwartet funktioniert. Nach einigem Suchen finden wir heraus: <\/p>\n\n<ul class=\"wp-block-list\"><li>Der <strong>ADC<\/strong> deinitialisiert nicht ordnungsgem\u00e4\u00df<\/li><li>Beschleunigungssensor, <strong>BME280<\/strong> und <strong>nRF52<\/strong>-Temperatursensoren erlauben eine Re-Initialisierung ohne vorherige Deinitialisierung<\/li><li>Der <strong>nRF52<\/strong>-Temperatursensor gibt keinen Fehler zur\u00fcck, wenn <strong>NULL<\/strong> als Initialisierungs-Pointer \u00fcbergeben wird<\/li><li>Der Funktionspointer <em>samplerate_get<\/em> wird bei der Initialisierung des <strong>nRF52<\/strong>-Umweltsensors nicht richtig gesetzt, da der Getter den Setter \u00fcberschreibt.<\/li><\/ul>\n\n<p class=\"wp-block-paragraph\">Nachdem diese Probleme behoben sind, lassen wir das Programm erneut laufen:<\/p>\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"304\" height=\"293\" src=\"https:\/\/ruuvi.com\/i\/u\/tests-pass-now.png\" alt=\"Tests werden nun bestanden\" class=\"wp-image-3680\"\/><figcaption>Tests werden nun bestanden<\/figcaption><\/figure><\/div>\n\n<h2 class=\"wp-block-heading\">Fazit<\/h2>\n\n<p class=\"wp-block-paragraph\">Wir haben nun die Unterst\u00fctzung f\u00fcr die Messung der Ger\u00e4tespannung \u00fcber den internen <strong>ADC<\/strong> des <strong>nRF52<\/strong> hinzugef\u00fcgt. Unser Testen ist mit grundlegenden Unit-Tests f\u00fcr die Implementierungen der Sensor-Interface-Funktionen einen weiteren Schritt vorangekommen. <\/p>\n\n<p class=\"wp-block-paragraph\">Wir werden die hier erstellten Tests weiter ausbauen, um andere Funktionen des Interface abzudecken, und schlie\u00dflich im n\u00e4chsten Teil der \u201eFirmware Friday\u201c-Serie Zeitstempel f\u00fcr die Sensordaten in unsere Treiber einbauen.<\/p>\n\n<p class=\"wp-block-paragraph\"><strong>Bleib dran und folge <\/strong><a href=\"https:\/\/twitter.com\/ojousima\"><strong>@ojousima<\/strong><\/a><strong> und <\/strong><a href=\"https:\/\/twitter.com\/ruuvicom\"><strong>@ruuvicom<\/strong><\/a><strong> auf Twitter f\u00fcr #FirmwareFriday-Beitr\u00e4ge!<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In diesem Teil des Tutorials f\u00fcgen wir eine einfache Batteriemessung mit dem internen Analog-Digital-Wandler (ADC) des nRF52832 hinzu. Den fertigen Code dieses Blog-Beitrags kannst du bei Ruuvi GitHub im ruuviblog-Branch unter dem Tag 3.7.0-alpha herunterladen. Bitte folge Teil 1 der Serie f\u00fcr Details zum Klonen des Repositories und Kompilieren des Codes. Die finale Hex-Datei dieses [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":135767,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[324],"tags":[],"class_list":["post-135766","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ruuvi-software-artikel"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Ruuvi Firmware \u2013 Teil 7: Batteriemessung mit naivem Ansatz \u2013 Ruuvi<\/title>\n<meta name=\"description\" content=\"Implementierung eines einfachen Analog-Digital-Wandlers (ADC) f\u00fcr die grundlegende Batteriemessung basierend auf dem Spannungswert.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-7-batteriemessung-mit-naivem-ansatz\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ruuvi Firmware \u2013 Teil 7: Batteriemessung mit naivem Ansatz \u2013 Ruuvi\" \/>\n<meta property=\"og:description\" content=\"Implementierung eines einfachen Analog-Digital-Wandlers (ADC) f\u00fcr die grundlegende Batteriemessung basierend auf dem Spannungswert.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-7-batteriemessung-mit-naivem-ansatz\/\" \/>\n<meta property=\"og:site_name\" content=\"Ruuvi\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/ruuvi.cc\" \/>\n<meta property=\"article:published_time\" content=\"2018-09-07T13:23:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-06-11T04:39:58+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-series-battery.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"1400\" \/>\n\t<meta property=\"og:image:height\" content=\"733\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Otso Jousimaa\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@ruuvicom\" \/>\n<meta name=\"twitter:site\" content=\"@ruuvicom\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Otso Jousimaa\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"6\u00a0Minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-7-batteriemessung-mit-naivem-ansatz\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-7-batteriemessung-mit-naivem-ansatz\\\/\"},\"author\":{\"name\":\"Otso Jousimaa\",\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/#\\\/schema\\\/person\\\/143b8e2a095f1e6484b9186673c9ec00\"},\"headline\":\"Ruuvi Firmware \u2013 Teil 7: Batteriemessung mit naivem Ansatz\",\"datePublished\":\"2018-09-07T13:23:00+00:00\",\"dateModified\":\"2026-06-11T04:39:58+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-7-batteriemessung-mit-naivem-ansatz\\\/\"},\"wordCount\":1172,\"image\":{\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-7-batteriemessung-mit-naivem-ansatz\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/ruuvi.com\\\/i\\\/u\\\/ruuvi-firmware-series-battery.jpeg\",\"articleSection\":[\"Ruuvi-Software-Artikel\"],\"inLanguage\":\"de\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-7-batteriemessung-mit-naivem-ansatz\\\/\",\"url\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-7-batteriemessung-mit-naivem-ansatz\\\/\",\"name\":\"Ruuvi Firmware \u2013 Teil 7: Batteriemessung mit naivem Ansatz \u2013 Ruuvi\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-7-batteriemessung-mit-naivem-ansatz\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-7-batteriemessung-mit-naivem-ansatz\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/ruuvi.com\\\/i\\\/u\\\/ruuvi-firmware-series-battery.jpeg\",\"datePublished\":\"2018-09-07T13:23:00+00:00\",\"dateModified\":\"2026-06-11T04:39:58+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/#\\\/schema\\\/person\\\/143b8e2a095f1e6484b9186673c9ec00\"},\"description\":\"Implementierung eines einfachen Analog-Digital-Wandlers (ADC) f\u00fcr die grundlegende Batteriemessung basierend auf dem Spannungswert.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-7-batteriemessung-mit-naivem-ansatz\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-7-batteriemessung-mit-naivem-ansatz\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-7-batteriemessung-mit-naivem-ansatz\\\/#primaryimage\",\"url\":\"https:\\\/\\\/ruuvi.com\\\/i\\\/u\\\/ruuvi-firmware-series-battery.jpeg\",\"contentUrl\":\"https:\\\/\\\/ruuvi.com\\\/i\\\/u\\\/ruuvi-firmware-series-battery.jpeg\",\"width\":1400,\"height\":733,\"caption\":\"Einleitungsbild zur Ruuvi Firmware-Serie Teil 7\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-7-batteriemessung-mit-naivem-ansatz\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/front\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Ruuvi Firmware \u2013 Teil 7: Batteriemessung mit naivem Ansatz\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/#website\",\"url\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/\",\"name\":\"Ruuvi\",\"description\":\"Measure Your World\",\"potentialAction\":[],\"inLanguage\":\"de\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/#\\\/schema\\\/person\\\/143b8e2a095f1e6484b9186673c9ec00\",\"name\":\"Otso Jousimaa\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fd52303e35b8b23c01cfeec7bb2636768de567cd33604f794ae86dd971e61645?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fd52303e35b8b23c01cfeec7bb2636768de567cd33604f794ae86dd971e61645?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fd52303e35b8b23c01cfeec7bb2636768de567cd33604f794ae86dd971e61645?s=96&d=mm&r=g\",\"caption\":\"Otso Jousimaa\"},\"url\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/author\\\/ojousima\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Ruuvi Firmware \u2013 Teil 7: Batteriemessung mit naivem Ansatz \u2013 Ruuvi","description":"Implementierung eines einfachen Analog-Digital-Wandlers (ADC) f\u00fcr die grundlegende Batteriemessung basierend auf dem Spannungswert.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-7-batteriemessung-mit-naivem-ansatz\/","og_locale":"de_DE","og_type":"article","og_title":"Ruuvi Firmware \u2013 Teil 7: Batteriemessung mit naivem Ansatz \u2013 Ruuvi","og_description":"Implementierung eines einfachen Analog-Digital-Wandlers (ADC) f\u00fcr die grundlegende Batteriemessung basierend auf dem Spannungswert.","og_url":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-7-batteriemessung-mit-naivem-ansatz\/","og_site_name":"Ruuvi","article_publisher":"https:\/\/www.facebook.com\/ruuvi.cc","article_published_time":"2018-09-07T13:23:00+00:00","article_modified_time":"2026-06-11T04:39:58+00:00","og_image":[{"width":1400,"height":733,"url":"https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-series-battery.jpeg","type":"image\/jpeg"}],"author":"Otso Jousimaa","twitter_card":"summary_large_image","twitter_creator":"@ruuvicom","twitter_site":"@ruuvicom","twitter_misc":{"Verfasst von":"Otso Jousimaa","Gesch\u00e4tzte Lesezeit":"6\u00a0Minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-7-batteriemessung-mit-naivem-ansatz\/#article","isPartOf":{"@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-7-batteriemessung-mit-naivem-ansatz\/"},"author":{"name":"Otso Jousimaa","@id":"https:\/\/ruuvi.com\/de\/#\/schema\/person\/143b8e2a095f1e6484b9186673c9ec00"},"headline":"Ruuvi Firmware \u2013 Teil 7: Batteriemessung mit naivem Ansatz","datePublished":"2018-09-07T13:23:00+00:00","dateModified":"2026-06-11T04:39:58+00:00","mainEntityOfPage":{"@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-7-batteriemessung-mit-naivem-ansatz\/"},"wordCount":1172,"image":{"@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-7-batteriemessung-mit-naivem-ansatz\/#primaryimage"},"thumbnailUrl":"https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-series-battery.jpeg","articleSection":["Ruuvi-Software-Artikel"],"inLanguage":"de"},{"@type":"WebPage","@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-7-batteriemessung-mit-naivem-ansatz\/","url":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-7-batteriemessung-mit-naivem-ansatz\/","name":"Ruuvi Firmware \u2013 Teil 7: Batteriemessung mit naivem Ansatz \u2013 Ruuvi","isPartOf":{"@id":"https:\/\/ruuvi.com\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-7-batteriemessung-mit-naivem-ansatz\/#primaryimage"},"image":{"@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-7-batteriemessung-mit-naivem-ansatz\/#primaryimage"},"thumbnailUrl":"https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-series-battery.jpeg","datePublished":"2018-09-07T13:23:00+00:00","dateModified":"2026-06-11T04:39:58+00:00","author":{"@id":"https:\/\/ruuvi.com\/de\/#\/schema\/person\/143b8e2a095f1e6484b9186673c9ec00"},"description":"Implementierung eines einfachen Analog-Digital-Wandlers (ADC) f\u00fcr die grundlegende Batteriemessung basierend auf dem Spannungswert.","breadcrumb":{"@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-7-batteriemessung-mit-naivem-ansatz\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-7-batteriemessung-mit-naivem-ansatz\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-7-batteriemessung-mit-naivem-ansatz\/#primaryimage","url":"https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-series-battery.jpeg","contentUrl":"https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-series-battery.jpeg","width":1400,"height":733,"caption":"Einleitungsbild zur Ruuvi Firmware-Serie Teil 7"},{"@type":"BreadcrumbList","@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-7-batteriemessung-mit-naivem-ansatz\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/ruuvi.com\/de\/front\/"},{"@type":"ListItem","position":2,"name":"Ruuvi Firmware \u2013 Teil 7: Batteriemessung mit naivem Ansatz"}]},{"@type":"WebSite","@id":"https:\/\/ruuvi.com\/de\/#website","url":"https:\/\/ruuvi.com\/de\/","name":"Ruuvi","description":"Measure Your World","potentialAction":[],"inLanguage":"de"},{"@type":"Person","@id":"https:\/\/ruuvi.com\/de\/#\/schema\/person\/143b8e2a095f1e6484b9186673c9ec00","name":"Otso Jousimaa","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/fd52303e35b8b23c01cfeec7bb2636768de567cd33604f794ae86dd971e61645?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/fd52303e35b8b23c01cfeec7bb2636768de567cd33604f794ae86dd971e61645?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/fd52303e35b8b23c01cfeec7bb2636768de567cd33604f794ae86dd971e61645?s=96&d=mm&r=g","caption":"Otso Jousimaa"},"url":"https:\/\/ruuvi.com\/de\/author\/ojousima\/"}]}},"_links":{"self":[{"href":"https:\/\/ruuvi.com\/de\/wp-json\/wp\/v2\/posts\/135766","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ruuvi.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ruuvi.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ruuvi.com\/de\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/ruuvi.com\/de\/wp-json\/wp\/v2\/comments?post=135766"}],"version-history":[{"count":1,"href":"https:\/\/ruuvi.com\/de\/wp-json\/wp\/v2\/posts\/135766\/revisions"}],"predecessor-version":[{"id":135773,"href":"https:\/\/ruuvi.com\/de\/wp-json\/wp\/v2\/posts\/135766\/revisions\/135773"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ruuvi.com\/de\/wp-json\/wp\/v2\/media\/135767"}],"wp:attachment":[{"href":"https:\/\/ruuvi.com\/de\/wp-json\/wp\/v2\/media?parent=135766"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ruuvi.com\/de\/wp-json\/wp\/v2\/categories?post=135766"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ruuvi.com\/de\/wp-json\/wp\/v2\/tags?post=135766"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}