{"id":135815,"date":"2018-09-14T09:22:00","date_gmt":"2018-09-14T06:22:00","guid":{"rendered":"https:\/\/ruuvi.com\/ruuvi-firmware-teil-8-echtzeituhr\/"},"modified":"2026-06-11T08:48:57","modified_gmt":"2026-06-11T05:48:57","slug":"ruuvi-firmware-teil-8-echtzeituhr","status":"publish","type":"post","link":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-8-echtzeituhr\/","title":{"rendered":"Ruuvi Firmware \u2013 Teil 8: Echtzeituhr"},"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-part-8-1024x536.jpeg\" alt=\"Ruuvi Firmware Serie Teil 8 Intro-Bild\" class=\"wp-image-3684\" srcset=\"https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-series-part-8-1024x536.jpeg 1024w, https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-series-part-8-450x236.jpeg 450w, https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-series-part-8-768x402.jpeg 768w, https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-series-part-8-600x314.jpeg 600w, https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-series-part-8.jpeg 1400w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n<p class=\"wp-block-paragraph\" id=\"21bb\">In diesem Teil des Tutorials f\u00fcgen wir Unterst\u00fctzung f\u00fcr die <em>Echtzeituhr<\/em> (<strong>RTC<\/strong>) auf dem <strong>nRF52832<\/strong> hinzu. Der finale Code dieses Blogbeitrags kann auf <a href=\"https:\/\/github.com\/ruuvi\/ruuvi.firmware.c\">Ruuvi GitHub<\/a> im <em>ruuviblog<\/em>-Branch, Tag <em>3.8.0-alpha<\/em>, heruntergeladen werden. <\/p>\n\n<p class=\"wp-block-paragraph\" id=\"1517\">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\/job\/ruuvi.firmware.c\/26\/\">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-8-0.png\" alt=\"ruuvi-firmware.c Architektur 3.8.0\" class=\"wp-image-3685\" srcset=\"https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-c-architecture-3-8-0.png 821w, https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-c-architecture-3-8-0-450x373.png 450w, https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-c-architecture-3-8-0-768x637.png 768w, https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-c-architecture-3-8-0-600x498.png 600w\" sizes=\"auto, (max-width: 821px) 100vw, 821px\" \/><\/figure><\/div>\n\n<h2 class=\"wp-block-heading\">Echtzeituhr<\/h2>\n\n<p class=\"wp-block-paragraph\">Die <strong>RTC<\/strong> wird verwendet, um die verstrichene Zeit au\u00dferhalb des Programmzustands zu verfolgen. Vorerst begn\u00fcgen wir uns damit, Millisekunden seit dem Programmstart zu z\u00e4hlen und unsere Sensordatenproben mit Zeitstempeln zu versehen. Sp\u00e4ter k\u00f6nnten wir einen Mechanismus hinzuf\u00fcgen, um die interne Uhr des <strong>nRF52832<\/strong> mit einer extern vorgegebenen Zeit zu synchronisieren, wie z. B. der <a href=\"https:\/\/en.wikipedia.org\/wiki\/Unix_time\">Unix-Epoche<\/a>.  <\/p>\n\n<h3 class=\"wp-block-heading\">RTC-Schnittstelle<\/h3>\n\n<p class=\"wp-block-paragraph\">Da die Konfiguration von Dingen wie <em>Skalierung<\/em>, <em>Aufl\u00f6sung<\/em> oder <em>Abtastrate<\/em> f\u00fcr die <strong>RTC<\/strong> nicht wirklich sinnvoll ist, verwenden wir die Sensor-<em>Schnittstelle<\/em> nicht f\u00fcr das <strong>RTC<\/strong>-Peripheral. Wir definieren nur die Funktionen <em>init<\/em>, <em>uninit<\/em> und <em>millis<\/em> f\u00fcr die <strong>RTC<\/strong> und f\u00fcgen einen Funktionszeiger zur Zeitstempelfunktion in unserer Sensor-<em>Schnittstelle<\/em> hinzu. <\/p>\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"428\" src=\"https:\/\/ruuvi.com\/i\/u\/ruuvi-interface-rtc-h-1024x428.png\" alt=\"ruuvi_interface_rtc.h\" class=\"wp-image-3686\" srcset=\"https:\/\/ruuvi.com\/i\/u\/ruuvi-interface-rtc-h-1024x428.png 1024w, https:\/\/ruuvi.com\/i\/u\/ruuvi-interface-rtc-h-450x188.png 450w, https:\/\/ruuvi.com\/i\/u\/ruuvi-interface-rtc-h-768x321.png 768w, https:\/\/ruuvi.com\/i\/u\/ruuvi-interface-rtc-h-600x251.png 600w, https:\/\/ruuvi.com\/i\/u\/ruuvi-interface-rtc-h.png 1254w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>ruuvi_interface_rtc.h<\/figcaption><\/figure><\/div>\n\n<h3 class=\"wp-block-heading\"><strong>RTC-Treiber<\/strong><\/h3>\n\n<p class=\"wp-block-paragraph\">Der interne Z\u00e4hler des <strong>nRF52<\/strong> hat nur 24 Bit, aber gl\u00fccklicherweise haben wir ein Overflow-Event, das verwendet werden kann, um die Zeitpunkte zu verfolgen, an denen der interne Z\u00e4hler \u00fcbergelaufen ist.<\/p>\n\n<p class=\"wp-block-paragraph\">Bisher hat unser Sleep-Modus alle Takte ausgeschaltet, und die einzige M\u00f6glichkeit zum Aufwachen war \u00fcber einen externen Interrupt, wie z. B. einen Tastendruck. Das bedeutet jedoch, dass die Zeit f\u00fcr unser Ger\u00e4t w\u00e4hrend des Schlafens nicht existiert. Wir k\u00f6nnen den Niederfrequenztakt (<strong>LFCLK<\/strong>) starten, wenn wir die <strong>RTC<\/strong> initialisieren, und den <strong>LFCLK<\/strong> w\u00e4hrend des Schlafens aktiv halten, um die Zeit \u00fcber die Schlafphasen hinweg zu verfolgen.  <\/p>\n\n<p class=\"wp-block-paragraph\">Da das vom Bluetooth-Stack verwendete Nordic Softdevice den Niederfrequenzquarz aktiv h\u00e4lt, entstehen f\u00fcr den <strong>LFCLK<\/strong> im fertigen Programm keine \u201ezus\u00e4tzlichen\u201c Energiekosten. Das <strong>SDK<\/strong> bietet praktische <em>Anforderungs<\/em>&#8211; und <em>Freigabe<\/em>-Funktionen f\u00fcr den <strong>LFCLK<\/strong>, die verfolgen, ob der <strong>LFCLK<\/strong> gestoppt werden kann, falls es mehrere Benutzer f\u00fcr den Taktgeber gibt, sodass unser <strong>RTC<\/strong>-Treiber den <em>LFCLK<\/em> <em>anfordern<\/em> und <strong>freigeben<\/strong> kann, ohne sich um den Zustand anderer Treiber k\u00fcmmern zu m\u00fcssen. <\/p>\n\n<p class=\"wp-block-paragraph\">Da wir 64 Bit als Z\u00e4hlerbreite verwenden, brauchen wir den <em>Prescaler<\/em> der <strong>RTC<\/strong> nicht wirklich. Wir erh\u00f6hen die Ticks mit 32,768 <em>kHz<\/em> des <strong>LFCLK<\/strong>, was uns etwa 512 Sekunden zwischen den Hardware-Z\u00e4hler\u00fcberl\u00e4ufen und 17.850 Jahre bis zum \u00dcberlauf unseres Software-Z\u00e4hlers gibt. Wir k\u00f6nnten auch eine Sub-Millisekunden-Aufl\u00f6sung f\u00fcr die Zeitstempel erhalten, aber vorerst ist das nicht notwendig. <\/p>\n\n<h2 class=\"wp-block-heading\">Integration der RTC<\/h2>\n\n<p class=\"wp-block-paragraph\">Wir f\u00fcgen die Zeitstempelfunktion zu unserer <strong>RTC<\/strong>&#8211;<em>Schnittstelle<\/em> hinzu und passen unsere <em>Treiber<\/em> an, um diese aufzurufen, anstatt den Zeitstempel der Proben einfach als <em>ung\u00fcltig<\/em> zu markieren. Um Abh\u00e4ngigkeiten zwischen den Sensor-<em>Schnittstellen<\/em> und der <strong>RTC<\/strong> selbst zu vermeiden, f\u00fcgen wir die Zeitstempelfunktion als Funktionszeiger zur Sensor-<em>Schnittstelle<\/em> hinzu und setzen den Funktionszeiger bei der <strong>RTC<\/strong>-Initialisierung auf die <em>Schnittstelle<\/em>. <\/p>\n\n<p class=\"wp-block-paragraph\">Jetzt k\u00f6nnen wir endlich auch <em>Debouncing<\/em>-Unterst\u00fctzung zu unserem Button-Code hinzuf\u00fcgen: Wir versehen den Tastendruck mit einem Zeitstempel und ignorieren das Event, wenn nicht genug Zeit seit dem letzten registrierten Druck vergangen ist.<\/p>\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"846\" height=\"652\" src=\"https:\/\/ruuvi.com\/i\/u\/task-button-c-no-more-double-clicks.png\" alt=\"task_button.c &#x2013; keine Doppelklicks mehr\" class=\"wp-image-3687\" srcset=\"https:\/\/ruuvi.com\/i\/u\/task-button-c-no-more-double-clicks.png 846w, https:\/\/ruuvi.com\/i\/u\/task-button-c-no-more-double-clicks-450x347.png 450w, https:\/\/ruuvi.com\/i\/u\/task-button-c-no-more-double-clicks-768x592.png 768w, https:\/\/ruuvi.com\/i\/u\/task-button-c-no-more-double-clicks-600x462.png 600w\" sizes=\"auto, (max-width: 846px) 100vw, 846px\" \/><figcaption>task_button.c \u2013 keine Doppelklicks mehr<\/figcaption><\/figure><\/div>\n\n<p class=\"wp-block-paragraph\">Schlie\u00dflich beheben wir den <strong>UINT64<\/strong>-Druckfehler bei <strong>ARMGCC<\/strong>, indem wir einfach die h\u00f6heren 32 Bit des Zeitstempels weglassen. Das gibt uns immer noch fast 50 Tage, bevor unser Zeitstempel \u00fcberl\u00e4uft. <\/p>\n\n<h2 class=\"wp-block-heading\">Testen<\/h2>\n\n<p class=\"wp-block-paragraph\">Im vorherigen Teil haben wir begonnen, Unit-Tests zu erstellen, die pr\u00fcfen, ob jede Sensor-<em>Schnittstelle<\/em> bei <em>Initialisierung<\/em> und <em>Deinitialisierung<\/em> das richtige Verhalten zeigt. Erweitern wir den Test und f\u00fcgen Tests f\u00fcr das Abrufen und Setzen von <em>Skalierung<\/em>, <em>Abtastrate<\/em> und <em>Aufl\u00f6sung<\/em> hinzu. Da alle Funktionen dieselbe <a href=\"https:\/\/en.wikipedia.org\/wiki\/Type_signature\"><em>Signatur<\/em><\/a> haben, k\u00f6nnen wir dieselben Tests f\u00fcr jede der Funktionen verwenden.  <\/p>\n\n<p class=\"wp-block-paragraph\">Diesmal findet unser neuer Test ein Problem im vorherigen Test. Da der Initialisierungstest die Sensorstruktur vor der ersten Initialisierung nicht auf Null setzt, ist unser Initialisierungstest zufrieden zu sehen, dass ein Funktionszeiger nicht <strong>NULL<\/strong> ist, wenn alte Werte im Speicher verbleiben, auf den unsere Struktur zeigt. Wenn wir tats\u00e4chlich versuchen, die Funktion aufzurufen, st\u00fcrzt das Programm ab, da der Funktionszeiger nicht auf eine g\u00fcltige Adresse zeigt. Beheben wir sowohl den Test als auch den Fehler und machen weiter.   <\/p>\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"756\" height=\"854\" src=\"https:\/\/ruuvi.com\/i\/u\/debug-terminal.png\" alt=\"Debug-Terminal\" class=\"wp-image-3688\" srcset=\"https:\/\/ruuvi.com\/i\/u\/debug-terminal.png 756w, https:\/\/ruuvi.com\/i\/u\/debug-terminal-398x450.png 398w, https:\/\/ruuvi.com\/i\/u\/debug-terminal-600x678.png 600w\" sizes=\"auto, (max-width: 756px) 100vw, 756px\" \/><figcaption>Wieder einmal finden unsere Tests Fehler<\/figcaption><\/figure><\/div>\n\n<p class=\"wp-block-paragraph\">Zeit, zur\u00fcckzugehen und die Treiber etwas aufzur\u00e4umen. Zuerst sehen wir, dass wir Probleme mit den Zeilen <em>187<\/em>, <em>193<\/em> und <em>223<\/em> unseres <strong>ADC<\/strong>-Selbsttests hatten. <\/p>\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"338\" src=\"https:\/\/ruuvi.com\/i\/u\/error-is-in-null-check-1024x338.png\" alt=\"Unser Fehler liegt in der NULL-Pr&#xFC;fung\" class=\"wp-image-3689\" srcset=\"https:\/\/ruuvi.com\/i\/u\/error-is-in-null-check-1024x338.png 1024w, https:\/\/ruuvi.com\/i\/u\/error-is-in-null-check-450x148.png 450w, https:\/\/ruuvi.com\/i\/u\/error-is-in-null-check-768x253.png 768w, https:\/\/ruuvi.com\/i\/u\/error-is-in-null-check-600x198.png 600w, https:\/\/ruuvi.com\/i\/u\/error-is-in-null-check.png 1152w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>Unser Fehler liegt in der NULL-Pr\u00fcfung<\/figcaption><\/figure><\/div>\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"902\" height=\"226\" src=\"https:\/\/ruuvi.com\/i\/u\/error-source.png\" alt=\"Die Fehlerquelle liegt in den Skalierungsfunktionen\" class=\"wp-image-3690\" srcset=\"https:\/\/ruuvi.com\/i\/u\/error-source.png 902w, https:\/\/ruuvi.com\/i\/u\/error-source-450x113.png 450w, https:\/\/ruuvi.com\/i\/u\/error-source-768x192.png 768w, https:\/\/ruuvi.com\/i\/u\/error-source-600x150.png 600w\" sizes=\"auto, (max-width: 902px) 100vw, 902px\" \/><figcaption>Die Fehlerquelle liegt in den Skalierungsfunktionen<\/figcaption><\/figure><\/div>\n\n<p class=\"wp-block-paragraph\">Es scheint, dass unser <strong>ADC<\/strong> keine ordnungsgem\u00e4\u00dfe <strong>NULL<\/strong>-Zeiger-Pr\u00fcfung im <em>Skalierungs<\/em>-Setter und -Getter hat. Beheben wir das.<\/p>\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"936\" height=\"530\" src=\"https:\/\/ruuvi.com\/i\/u\/null-checks-added.png\" alt=\"NULL-Pr&#xFC;fungen hinzugef&#xFC;gt\" class=\"wp-image-3691\" srcset=\"https:\/\/ruuvi.com\/i\/u\/null-checks-added.png 936w, https:\/\/ruuvi.com\/i\/u\/null-checks-added-450x255.png 450w, https:\/\/ruuvi.com\/i\/u\/null-checks-added-768x435.png 768w, https:\/\/ruuvi.com\/i\/u\/null-checks-added-600x340.png 600w\" sizes=\"auto, (max-width: 936px) 100vw, 936px\" \/><figcaption>NULL-Pr\u00fcfungen hinzugef\u00fcgt<\/figcaption><\/figure><\/div>\n\n<p class=\"wp-block-paragraph\">Jetzt f\u00fchren wir die Tests erneut aus:<\/p>\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"760\" height=\"722\" src=\"https:\/\/ruuvi.com\/i\/u\/adc-test-pass.png\" alt=\"Der ADC-Test besteht jetzt\" class=\"wp-image-3692\" srcset=\"https:\/\/ruuvi.com\/i\/u\/adc-test-pass.png 760w, https:\/\/ruuvi.com\/i\/u\/adc-test-pass-450x428.png 450w, https:\/\/ruuvi.com\/i\/u\/adc-test-pass-600x570.png 600w\" sizes=\"auto, (max-width: 760px) 100vw, 760px\" \/><figcaption>Der ADC-Test besteht jetzt<\/figcaption><\/figure><\/div>\n\n<p class=\"wp-block-paragraph\">Nach der Behebung bestehen wir 11 von 16 Tests, gegen\u00fcber vorher 9 von 16. Die restlichen Fehler werden auf \u00e4hnliche Weise aufgesp\u00fcrt und behoben. <\/p>\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"306\" height=\"368\" src=\"https:\/\/ruuvi.com\/i\/u\/issues-found.png\" alt=\"Gefundene Probleme\" class=\"wp-image-3693\"\/><figcaption>Die von den Tests gefundenen Probleme sind jetzt behoben und die Zeitstempel sehen gut aus<\/figcaption><\/figure><\/div>\n\n<h2 class=\"wp-block-heading\">Stromverbrauch<\/h2>\n\n<p class=\"wp-block-paragraph\">Da der <strong>LFCLK<\/strong> st\u00e4ndig l\u00e4uft, k\u00f6nnen wir nach Aktivierung der <strong>RTC<\/strong> einen gewissen Anstieg des Stromverbrauchs erwarten. Schauen wir uns an, wie es aussieht. <\/p>\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"708\" src=\"https:\/\/ruuvi.com\/i\/u\/idle-power-consumption-1024x708.png\" alt=\"Stromverbrauch im Leerlauf\" class=\"wp-image-3694\" srcset=\"https:\/\/ruuvi.com\/i\/u\/idle-power-consumption-1024x708.png 1024w, https:\/\/ruuvi.com\/i\/u\/idle-power-consumption-450x311.png 450w, https:\/\/ruuvi.com\/i\/u\/idle-power-consumption-768x531.png 768w, https:\/\/ruuvi.com\/i\/u\/idle-power-consumption-1536x1063.png 1536w, https:\/\/ruuvi.com\/i\/u\/idle-power-consumption-600x415.png 600w, https:\/\/ruuvi.com\/i\/u\/idle-power-consumption.png 2044w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>Stromverbrauch im Leerlauf<\/figcaption><\/figure><\/div>\n\n<p class=\"wp-block-paragraph\">Unser aktueller Verbrauch liegt jetzt bei 6,4 <em>\u03bcA<\/em> im Leerlauf, 1,4 <em>\u03bcA<\/em> mehr als die 5,0 <em>\u03bcA<\/em> in unserem vorherigen Beitrag.<\/p>\n\n<h2 class=\"wp-block-heading\">Fazit<\/h2>\n\n<p class=\"wp-block-paragraph\">In diesem Tutorial haben wir <strong>RTC<\/strong>-Unterst\u00fctzung und Zeitstempel zu unseren Sensorauslesungen hinzugef\u00fcgt. Jetzt haben wir alles, was wir brauchen, um das Ruuvi-Datenformat 3 zu implementieren. Im n\u00e4chsten Beitrag werden wir beginnen, die Daten vom RuuviTag zu \u00fcbertragen.  <\/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 Unterst\u00fctzung f\u00fcr die Echtzeituhr (RTC) auf dem nRF52832 hinzu. Der finale Code dieses Blogbeitrags kann auf Ruuvi GitHub im ruuviblog-Branch, Tag 3.8.0-alpha, heruntergeladen werden. Bitte folge Teil 1 der Serie f\u00fcr Details zum Klonen des Repositories und Kompilieren des Codes. Die finale Hex-Datei dieses Tutorials kann vom Ruuvi [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":135822,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[324],"tags":[],"class_list":["post-135815","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 8: Echtzeituhr - Ruuvi<\/title>\n<meta name=\"description\" content=\"Hinzuf\u00fcgen der Unterst\u00fctzung f\u00fcr die Echtzeituhr des nRF52832, um die verstrichene Zeit au\u00dferhalb des Programmzustands zu verfolgen.\" \/>\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-8-echtzeituhr\/\" \/>\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 8: Echtzeituhr - Ruuvi\" \/>\n<meta property=\"og:description\" content=\"Hinzuf\u00fcgen der Unterst\u00fctzung f\u00fcr die Echtzeituhr des nRF52832, um die verstrichene Zeit au\u00dferhalb des Programmzustands zu verfolgen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-8-echtzeituhr\/\" \/>\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-14T06:22:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-06-11T05:48:57+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-series-part-8.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=\"5\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-8-echtzeituhr\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-8-echtzeituhr\\\/\"},\"author\":{\"name\":\"Otso Jousimaa\",\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/#\\\/schema\\\/person\\\/143b8e2a095f1e6484b9186673c9ec00\"},\"headline\":\"Ruuvi Firmware \u2013 Teil 8: Echtzeituhr\",\"datePublished\":\"2018-09-14T06:22:00+00:00\",\"dateModified\":\"2026-06-11T05:48:57+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-8-echtzeituhr\\\/\"},\"wordCount\":915,\"image\":{\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-8-echtzeituhr\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/ruuvi.com\\\/i\\\/u\\\/ruuvi-firmware-series-part-8.jpeg\",\"articleSection\":[\"Ruuvi-Software-Artikel\"],\"inLanguage\":\"de\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-8-echtzeituhr\\\/\",\"url\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-8-echtzeituhr\\\/\",\"name\":\"Ruuvi Firmware \u2013 Teil 8: Echtzeituhr - Ruuvi\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-8-echtzeituhr\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-8-echtzeituhr\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/ruuvi.com\\\/i\\\/u\\\/ruuvi-firmware-series-part-8.jpeg\",\"datePublished\":\"2018-09-14T06:22:00+00:00\",\"dateModified\":\"2026-06-11T05:48:57+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/#\\\/schema\\\/person\\\/143b8e2a095f1e6484b9186673c9ec00\"},\"description\":\"Hinzuf\u00fcgen der Unterst\u00fctzung f\u00fcr die Echtzeituhr des nRF52832, um die verstrichene Zeit au\u00dferhalb des Programmzustands zu verfolgen.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-8-echtzeituhr\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-8-echtzeituhr\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-8-echtzeituhr\\\/#primaryimage\",\"url\":\"https:\\\/\\\/ruuvi.com\\\/i\\\/u\\\/ruuvi-firmware-series-part-8.jpeg\",\"contentUrl\":\"https:\\\/\\\/ruuvi.com\\\/i\\\/u\\\/ruuvi-firmware-series-part-8.jpeg\",\"width\":1400,\"height\":733,\"caption\":\"Ruuvi Firmware Serie Teil 8 Intro-Bild\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-8-echtzeituhr\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/front\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Ruuvi Firmware \u2013 Teil 8: Echtzeituhr\"}]},{\"@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 8: Echtzeituhr - Ruuvi","description":"Hinzuf\u00fcgen der Unterst\u00fctzung f\u00fcr die Echtzeituhr des nRF52832, um die verstrichene Zeit au\u00dferhalb des Programmzustands zu verfolgen.","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-8-echtzeituhr\/","og_locale":"de_DE","og_type":"article","og_title":"Ruuvi Firmware \u2013 Teil 8: Echtzeituhr - Ruuvi","og_description":"Hinzuf\u00fcgen der Unterst\u00fctzung f\u00fcr die Echtzeituhr des nRF52832, um die verstrichene Zeit au\u00dferhalb des Programmzustands zu verfolgen.","og_url":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-8-echtzeituhr\/","og_site_name":"Ruuvi","article_publisher":"https:\/\/www.facebook.com\/ruuvi.cc","article_published_time":"2018-09-14T06:22:00+00:00","article_modified_time":"2026-06-11T05:48:57+00:00","og_image":[{"width":1400,"height":733,"url":"https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-series-part-8.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":"5\u00a0Minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-8-echtzeituhr\/#article","isPartOf":{"@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-8-echtzeituhr\/"},"author":{"name":"Otso Jousimaa","@id":"https:\/\/ruuvi.com\/de\/#\/schema\/person\/143b8e2a095f1e6484b9186673c9ec00"},"headline":"Ruuvi Firmware \u2013 Teil 8: Echtzeituhr","datePublished":"2018-09-14T06:22:00+00:00","dateModified":"2026-06-11T05:48:57+00:00","mainEntityOfPage":{"@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-8-echtzeituhr\/"},"wordCount":915,"image":{"@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-8-echtzeituhr\/#primaryimage"},"thumbnailUrl":"https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-series-part-8.jpeg","articleSection":["Ruuvi-Software-Artikel"],"inLanguage":"de"},{"@type":"WebPage","@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-8-echtzeituhr\/","url":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-8-echtzeituhr\/","name":"Ruuvi Firmware \u2013 Teil 8: Echtzeituhr - Ruuvi","isPartOf":{"@id":"https:\/\/ruuvi.com\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-8-echtzeituhr\/#primaryimage"},"image":{"@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-8-echtzeituhr\/#primaryimage"},"thumbnailUrl":"https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-series-part-8.jpeg","datePublished":"2018-09-14T06:22:00+00:00","dateModified":"2026-06-11T05:48:57+00:00","author":{"@id":"https:\/\/ruuvi.com\/de\/#\/schema\/person\/143b8e2a095f1e6484b9186673c9ec00"},"description":"Hinzuf\u00fcgen der Unterst\u00fctzung f\u00fcr die Echtzeituhr des nRF52832, um die verstrichene Zeit au\u00dferhalb des Programmzustands zu verfolgen.","breadcrumb":{"@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-8-echtzeituhr\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-8-echtzeituhr\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-8-echtzeituhr\/#primaryimage","url":"https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-series-part-8.jpeg","contentUrl":"https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-series-part-8.jpeg","width":1400,"height":733,"caption":"Ruuvi Firmware Serie Teil 8 Intro-Bild"},{"@type":"BreadcrumbList","@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-8-echtzeituhr\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/ruuvi.com\/de\/front\/"},{"@type":"ListItem","position":2,"name":"Ruuvi Firmware \u2013 Teil 8: Echtzeituhr"}]},{"@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\/135815","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=135815"}],"version-history":[{"count":1,"href":"https:\/\/ruuvi.com\/de\/wp-json\/wp\/v2\/posts\/135815\/revisions"}],"predecessor-version":[{"id":135826,"href":"https:\/\/ruuvi.com\/de\/wp-json\/wp\/v2\/posts\/135815\/revisions\/135826"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ruuvi.com\/de\/wp-json\/wp\/v2\/media\/135822"}],"wp:attachment":[{"href":"https:\/\/ruuvi.com\/de\/wp-json\/wp\/v2\/media?parent=135815"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ruuvi.com\/de\/wp-json\/wp\/v2\/categories?post=135815"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ruuvi.com\/de\/wp-json\/wp\/v2\/tags?post=135815"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}