{"id":135828,"date":"2018-08-31T12:01:00","date_gmt":"2018-08-31T09:01:00","guid":{"rendered":"https:\/\/ruuvi.com\/ruuvi-firmware-part-6-accelerometer-polling\/"},"modified":"2026-06-11T08:48:57","modified_gmt":"2026-06-11T05:48:57","slug":"ruuvi-firmware-part-6-accelerometer-polling","status":"publish","type":"post","link":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-part-6-accelerometer-polling\/","title":{"rendered":"Ruuvi Firmware &#8211; Teil 6: Abfrage des Beschleunigungssensors"},"content":{"rendered":"\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"535\" src=\"https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-part-6-intro-image-1024x535.jpeg\" alt=\"Einf&#xFC;hrungsbild f&#xFC;r Teil 6 der Ruuvi Firmware-Serie\" class=\"wp-image-3645\" srcset=\"https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-part-6-intro-image-1024x535.jpeg 1024w, https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-part-6-intro-image-450x235.jpeg 450w, https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-part-6-intro-image-768x401.jpeg 768w, https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-part-6-intro-image-600x314.jpeg 600w, https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-part-6-intro-image.jpeg 1280w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n<p class=\"wp-block-paragraph\">In diesem Teil des Tutorials bauen wir auf Teil 5 des Tutorials auf und f\u00fcgen Unterst\u00fctzung f\u00fcr den <a href=\"https:\/\/www.st.com\/en\/mems-and-sensors\/lis2dh12.html\"><strong>LIS2DH12<\/strong><\/a> an Bord des RuuviTag Modells + 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.6.0-alpha<\/em>, heruntergeladen werden. <\/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\/job\/ruuvi.firmware.c\/22\/\">Ruuvi Jenkins<\/a> heruntergeladen werden. <\/p>\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"681\" height=\"689\" src=\"https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-architecture-3-6-0.png\" alt=\"ruuvi.firmware.c Architektur 3.6.0\" class=\"wp-image-3646\" srcset=\"https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-architecture-3-6-0.png 681w, https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-architecture-3-6-0-445x450.png 445w, https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-architecture-3-6-0-600x607.png 600w, https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-architecture-3-6-0-100x100.png 100w\" sizes=\"auto, (max-width: 681px) 100vw, 681px\" \/><figcaption>ruuvi.firmware.c Architektur 3.6.0<\/figcaption><\/figure><\/div>\n\n<h2 class=\"wp-block-heading\">Hinzuf\u00fcgen von LIS2DH12-Treibern<\/h2>\n\n<h3 class=\"wp-block-heading\">SPI-Wrapper<\/h3>\n\n<p class=\"wp-block-paragraph\">STMicroelectronics bietet <a href=\"https:\/\/github.com\/STMicroelectronics\/STMems_Standard_C_drivers\">C-Treiber<\/a> f\u00fcr einige ihrer Sensoren an, darunter den <strong>LIS2DH12<\/strong>. Wir werden ihr Github-Projekt als Submodul zu unserem Projekt hinzuf\u00fcgen. Wie der Bosch <strong>BME280<\/strong>-Treiber erwartet auch der <strong>LIS2DH12<\/strong>-Treiber Schnittstellenfunktionen zum Schreiben und Lesen.  <\/p>\n\n<pre class=\"wp-block-code\"><code>int32_t platform_write(void *handle, uint8_t Reg, uint8_t *Bufp, uint16_t len)int32_t platform_read(void *handle, uint8_t Reg, uint8_t *Bufp, uint16_t len)<\/code><\/pre>\n\n<p class=\"wp-block-paragraph\">Erweitern wir unsere <strong>SPI<\/strong>&#8211;<em>Schnittstelle<\/em> um <strong>LIS2DH12<\/strong>-Unterst\u00fctzung:<\/p>\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"663\" src=\"https:\/\/ruuvi.com\/i\/u\/ruuvi-interface-spi-lis2dh12-c-1024x663.png\" alt=\"ruuvi_interface_spi_lis2dh12.c\" class=\"wp-image-3647\" srcset=\"https:\/\/ruuvi.com\/i\/u\/ruuvi-interface-spi-lis2dh12-c-1024x663.png 1024w, https:\/\/ruuvi.com\/i\/u\/ruuvi-interface-spi-lis2dh12-c-450x291.png 450w, https:\/\/ruuvi.com\/i\/u\/ruuvi-interface-spi-lis2dh12-c-768x497.png 768w, https:\/\/ruuvi.com\/i\/u\/ruuvi-interface-spi-lis2dh12-c-600x389.png 600w, https:\/\/ruuvi.com\/i\/u\/ruuvi-interface-spi-lis2dh12-c.png 1396w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>ruuvi_interface_spi_lis2dh12.c<\/figcaption><\/figure><\/div>\n\n<p class=\"wp-block-paragraph\">Die Funktionen sind fast identisch mit denen des <strong>BME280<\/strong>, aber unser R\u00fcckgabewert ist vom Typ <em>int32_t<\/em> und das Handle ist ein <em>void<\/em>-Zeiger. Zus\u00e4tzlich hat der <strong>LIS2DH12<\/strong> eine spezielle Handhabung des Lesens\/Schreibens \u00fcber den <strong>SPI<\/strong>-Bus und von Mehrbyte-Lese-\/Schreibvorg\u00e4ngen. Der Lese-\/Schreibmodus wird durch das h\u00f6chstwertige Bit der Registeradresse bestimmt, und das zweith\u00f6chstwertige Bit der <em>reg_addr<\/em> muss gesetzt werden, wenn wir mehr als ein Byte gleichzeitig \u00fcbertragen m\u00f6chten.  <\/p>\n\n<h3 class=\"wp-block-heading\"><strong>Implementierung der Sensorschnittstelle<\/strong><\/h3>\n\n<p class=\"wp-block-paragraph\">Die Sensorschnittstelle hat genau die gleichen Funktionen wie unser Umweltsensor, nur <em>data_get<\/em> setzt einen anderen Datentyp auf den void-Zeiger. Streng genommen k\u00f6nnten wir Beschleunigungsdaten an den Umweltsensordaten-Typ \u00fcbergeben, da beide <em>uint64_t<\/em> und drei <em>Floats<\/em> haben, aber die Definition der Einheit im Datentyp verdeutlicht die Bedeutung jedes Floats. <\/p>\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"928\" height=\"374\" src=\"https:\/\/ruuvi.com\/i\/u\/ruuvi-interface-acceleration-h.png\" alt=\"ruuvi_interface_acceleration.h\" class=\"wp-image-3648\" srcset=\"https:\/\/ruuvi.com\/i\/u\/ruuvi-interface-acceleration-h.png 928w, https:\/\/ruuvi.com\/i\/u\/ruuvi-interface-acceleration-h-450x181.png 450w, https:\/\/ruuvi.com\/i\/u\/ruuvi-interface-acceleration-h-768x310.png 768w, https:\/\/ruuvi.com\/i\/u\/ruuvi-interface-acceleration-h-600x242.png 600w\" sizes=\"auto, (max-width: 928px) 100vw, 928px\" \/><figcaption>ruuvi_interface_acceleration.h<\/figcaption><\/figure><\/div>\n\n<p class=\"wp-block-paragraph\">Vorerst werden wir keine gepufferten Lesevorg\u00e4nge vom <strong>LIS2DH12<\/strong> First-In-First-Out (<strong>FIFO<\/strong>) implementieren, da dies f\u00fcr die <a href=\"https:\/\/github.com\/ruuvi\/ruuvi-sensor-protocols\">Ruuvi-Datenformate<\/a> nicht erforderlich ist. Vielleicht werden wir die Schnittstelle sp\u00e4ter erweitern, oder wir werden <strong>FIFO<\/strong> als einen weiteren Sonderfall betrachten, der von der Anwendung behandelt werden muss. <\/p>\n\n<p class=\"wp-block-paragraph\">Die Implementierung selbst umfasst \u00fcber 600 Zeilen, wobei der gr\u00f6\u00dfte Teil aus Eingabepr\u00fcfungen und Switch-Cases besteht. Der Selbsttest muss die Sensoren abtasten und \u00fcberpr\u00fcfen, ob sich die Ausgabe der Achsen wie angegeben \u00e4ndert. <\/p>\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"870\" src=\"https:\/\/ruuvi.com\/i\/u\/ruuvi-interface-lis2dh12-c-self-test-1024x870.png\" alt=\"ruuvi_interface_lis2dh12.c &#x2014; Selbsttest\" class=\"wp-image-3649\" srcset=\"https:\/\/ruuvi.com\/i\/u\/ruuvi-interface-lis2dh12-c-self-test-1024x870.png 1024w, https:\/\/ruuvi.com\/i\/u\/ruuvi-interface-lis2dh12-c-self-test-450x382.png 450w, https:\/\/ruuvi.com\/i\/u\/ruuvi-interface-lis2dh12-c-self-test-768x653.png 768w, https:\/\/ruuvi.com\/i\/u\/ruuvi-interface-lis2dh12-c-self-test-600x510.png 600w, https:\/\/ruuvi.com\/i\/u\/ruuvi-interface-lis2dh12-c-self-test.png 1346w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>ruuvi_interface_lis2dh12.c \u2014 Selbsttest<\/figcaption><\/figure><\/div>\n\n<p class=\"wp-block-paragraph\">Hier sto\u00dfen wir an die Grenzen unseres Sensorkonfigurationsdatenformats. Der <strong>LIS2DH12<\/strong> k\u00f6nnte im 8-Bit-Modus bis zu 5 <em>kHz<\/em> erreichen, w\u00e4hrend unser Sensorabtastratenwert nur bis zu 200 <em>Hz<\/em> darstellen kann. Wieder einmal halten wir die Dinge einfach und begrenzen unseren Sensor auf 200 <em>Hz<\/em> Abtastung. Wenn jemand eine Vibrationsanalyse am RuuviTag durchf\u00fchren und h\u00f6here Abtastraten ben\u00f6tigt, kann er den <strong>LIS2DH12<\/strong>-Treiber direkt anstelle dieser Schnittstelle verwenden.  <\/p>\n\n<p class=\"wp-block-paragraph\">Die Funktion der digitalen Signalverarbeitung (<strong>DSP<\/strong>) ist ebenfalls etwas knifflig, da das <a href=\"https:\/\/www.st.com\/resource\/en\/datasheet\/lis2dh12.pdf\"><strong>LIS2DH12<\/strong>-Datenblatt<\/a> uns nicht wirklich sagt, was das Register f\u00fcr die <em>Hochpass-Grenzfrequenz<\/em> (<strong>HPCF<\/strong>) bewirkt. Der ST-Treiber enth\u00e4lt etwas mehr Informationen, da es eine Enumeration <em>lis2dh12_hpcf_t<\/em> gibt, die die Einstellungen mit einer Skala von <strong>LIGHT<\/strong> bis <strong>AGGRESSIVE<\/strong> benennt. Wir akzeptieren den <strong>DSP<\/strong>-Parameter von 0 bis 3 und definieren 0 als die am wenigsten aggressive und 3 als die aggressivste Einstellung. Es gibt auch eine Konfigurationsoption f\u00fcr die Verwendung eines Hochpasses f\u00fcr Interrupt-Funktionen, aber diese werden wir vorerst ignorieren.   <\/p>\n\n<h2 class=\"wp-block-heading\">Abfrage des LIS2DH12 im Programm<\/h2>\n\n<p class=\"wp-block-paragraph\">Nachdem der Treiber implementiert ist, testen wir ihn, indem wir die Beschleunigungswerte zusammen mit den Umgebungswerten bei einem Tastendruck ausgeben. Die Anpassung der Hauptfunktion ist einfach: <\/p>\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"724\" height=\"1024\" src=\"https:\/\/ruuvi.com\/i\/u\/main-c-part-6-724x1024.png\" alt=\"main.c\" class=\"wp-image-3650\" srcset=\"https:\/\/ruuvi.com\/i\/u\/main-c-part-6-724x1024.png 724w, https:\/\/ruuvi.com\/i\/u\/main-c-part-6-318x450.png 318w, https:\/\/ruuvi.com\/i\/u\/main-c-part-6-768x1087.png 768w, https:\/\/ruuvi.com\/i\/u\/main-c-part-6-600x849.png 600w, https:\/\/ruuvi.com\/i\/u\/main-c-part-6.png 1084w\" sizes=\"auto, (max-width: 724px) 100vw, 724px\" \/><figcaption>main.c<\/figcaption><\/figure><\/div>\n\n<p class=\"wp-block-paragraph\">Wir haben die Initialisierung des Beschleunigungssensors in Zeile 49 hinzugef\u00fcgt und die Tastenaufgabe in Zeile 53 auf <em>task_button_on_press<\/em> ge\u00e4ndert. Unsere Tastenaufgabe ruft die Umgebungs- und Beschleunigungsaufgaben auf und l\u00e4sst die rote LED blinken. Die Initialisierung des Beschleunigungssensors \u00e4hnelt der Initialisierung des Umweltsensors: Wir laden die Standardkonfiguration aus application_config.h und schreiben sie in den Sensor.  <\/p>\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"985\" src=\"https:\/\/ruuvi.com\/i\/u\/task-acceleromter-c-initialization-1024x985.png\" alt=\"task_accelerometer.c &#x2014; Initialisierung\" class=\"wp-image-3651\" srcset=\"https:\/\/ruuvi.com\/i\/u\/task-acceleromter-c-initialization-1024x985.png 1024w, https:\/\/ruuvi.com\/i\/u\/task-acceleromter-c-initialization-450x433.png 450w, https:\/\/ruuvi.com\/i\/u\/task-acceleromter-c-initialization-768x739.png 768w, https:\/\/ruuvi.com\/i\/u\/task-acceleromter-c-initialization-600x577.png 600w, https:\/\/ruuvi.com\/i\/u\/task-acceleromter-c-initialization.png 1106w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>task_accelerometer.c \u2014 Initialisierung<\/figcaption><\/figure><\/div>\n\n<p class=\"wp-block-paragraph\">Die Datenleseaufgabe \u00e4hnelt ebenfalls der Umweltsensoraufgabe. Wir lesen die Daten vom Sensor und geben sie auf der Konsole aus. <\/p>\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"629\" src=\"https:\/\/ruuvi.com\/i\/u\/task-acceleromter-c-data-printout-1024x629.png\" alt=\"task_accelerometer.c &#x2014; Datenausgabe\" class=\"wp-image-3652\" srcset=\"https:\/\/ruuvi.com\/i\/u\/task-acceleromter-c-data-printout-1024x629.png 1024w, https:\/\/ruuvi.com\/i\/u\/task-acceleromter-c-data-printout-450x276.png 450w, https:\/\/ruuvi.com\/i\/u\/task-acceleromter-c-data-printout-768x472.png 768w, https:\/\/ruuvi.com\/i\/u\/task-acceleromter-c-data-printout-600x368.png 600w, https:\/\/ruuvi.com\/i\/u\/task-acceleromter-c-data-printout.png 1192w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>task_accelerometer.c \u2014 Datenausgabe<\/figcaption><\/figure><\/div>\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"207\" height=\"184\" src=\"https:\/\/ruuvi.com\/i\/u\/acceleration-values.png\" alt=\"Beschleunigungswerte\" class=\"wp-image-3653\"\/><figcaption>Beschleunigungswerte<\/figcaption><\/figure><\/div>\n\n<p class=\"wp-block-paragraph\">Der Beschleunigungssensor zeigt insgesamt 1,068 <em>G<\/em> an (Quadratwurzel der Quadrate der X-, Y- und Z-Komponenten), was nahe genug an den erwarteten 1,000 <em>G<\/em> liegt. Die Umgebungswerte sind plausibel, die Temperatur ist etwas hoch, da das <strong>nRF52-DK<\/strong> unter meinem Ruuvi-Devkit den <strong>RuuviTag<\/strong> etwas aufheizt. <\/p>\n\n<p class=\"wp-block-paragraph\">\u00dcberpr\u00fcfen wir den Stromverbrauch:<\/p>\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"796\" src=\"https:\/\/ruuvi.com\/i\/u\/ruuvi-tag-plus-idling-1-1024x796.png\" alt=\"Ein RuuviTag+ im Leerlauf\" class=\"wp-image-3654\" srcset=\"https:\/\/ruuvi.com\/i\/u\/ruuvi-tag-plus-idling-1-1024x796.png 1024w, https:\/\/ruuvi.com\/i\/u\/ruuvi-tag-plus-idling-1-450x350.png 450w, https:\/\/ruuvi.com\/i\/u\/ruuvi-tag-plus-idling-1-768x597.png 768w, https:\/\/ruuvi.com\/i\/u\/ruuvi-tag-plus-idling-1-1536x1194.png 1536w, https:\/\/ruuvi.com\/i\/u\/ruuvi-tag-plus-idling-1-600x466.png 600w, https:\/\/ruuvi.com\/i\/u\/ruuvi-tag-plus-idling-1.png 1800w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>Ein RuuviTag+ im Leerlauf<\/figcaption><\/figure><\/div>\n\n<p class=\"wp-block-paragraph\">Der Stromverbrauch betr\u00e4gt jetzt 5,4 <em>\u03bcA<\/em>, gegen\u00fcber 3,4 <em>\u03bcA<\/em> im letzten Teil. Dies ist ein erwartetes Verhalten, da der <strong>LIS2DH12<\/strong> bei 1 <em>Hz<\/em> und 10 Bit Aufl\u00f6sung eine Abtastung von 2 <em>\u03bcA<\/em> verbrauchen soll. Das Lesen der Probe selbst macht keinen gro\u00dfen Unterschied im Vergleich zum Warten, bis der <strong>BME280<\/strong> den 16-fachen Oversampling-Prozess abgeschlossen hat, wie unten gezeigt. Die Abtastung kann mit der einfachen Umgebungsabtastung im vorherigen Beitrag verglichen werden.   <\/p>\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"803\" src=\"https:\/\/ruuvi.com\/i\/u\/ruuvi-tag-plus-sampling-the-sensors-1024x803.png\" alt=\"Ein RuuviTag+ beim Abtasten der Sensoren\" class=\"wp-image-3655\" srcset=\"https:\/\/ruuvi.com\/i\/u\/ruuvi-tag-plus-sampling-the-sensors-1024x803.png 1024w, https:\/\/ruuvi.com\/i\/u\/ruuvi-tag-plus-sampling-the-sensors-450x353.png 450w, https:\/\/ruuvi.com\/i\/u\/ruuvi-tag-plus-sampling-the-sensors-768x602.png 768w, https:\/\/ruuvi.com\/i\/u\/ruuvi-tag-plus-sampling-the-sensors-1536x1205.png 1536w, https:\/\/ruuvi.com\/i\/u\/ruuvi-tag-plus-sampling-the-sensors-600x471.png 600w, https:\/\/ruuvi.com\/i\/u\/ruuvi-tag-plus-sampling-the-sensors.png 1800w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>Ein RuuviTag+ beim Abtasten der Sensoren<\/figcaption><\/figure><\/div>\n\n<h2 class=\"wp-block-heading\">Testen<\/h2>\n\n<p class=\"wp-block-paragraph\">Im Laufe der Blogserie wurden einige Dinge auf die lange Bank geschoben. Obwohl wir sowohl Vanilla-<strong>ARMGCC<\/strong>&#8211; als auch <a href=\"https:\/\/www.segger.com\/products\/development-tools\/embedded-studio\/\">Segger Embedded Studio<\/a> (<strong>SES<\/strong>)-Builds unterst\u00fctzen, testet unser <a href=\"https:\/\/jenkins.io\">Jenkins<\/a> derzeit nur, ob er das Programm mit <strong>ARMGCC<\/strong> kompilieren kann. Mindestens zwei Probleme sind bekannt:  <\/p>\n\n<ul class=\"wp-block-list\"><li>Unser Linker-Skript unterscheidet sich zwischen <strong>ARMGCC<\/strong>&#8211; und <strong>SES<\/strong>-Builds.<\/li><li>Unser ARMGCC-Build unterst\u00fctzt das Drucken von Floats und 64-Bit-Ganzzahlen nicht.<\/li><\/ul>\n\n<p class=\"wp-block-paragraph\">Obwohl <strong>SES<\/strong> das generierte Linker-Skript ausgibt, f\u00fchrt das Verkn\u00fcpfen der .hex-Datei mit unserer <strong>ARMGCC<\/strong>-Version nicht zu einer lauff\u00e4higen Version der .hex-Datei. Vielleicht k\u00f6nnte dies durch ein Update unseres <strong>ARMGCC<\/strong> auf Version <em>7\u20132017-q4-major<\/em> behoben werden, die dieselbe ist, die <strong>SES<\/strong> verwendet, aber wir bleiben bei der von Nordic Semiconductor getesteten Toolchain mit <em>6\u20132017-q2-update<\/em>. Daher m\u00fcssen wir akzeptieren, dass die Linker-Skripte unterschiedlich sein werden. <\/p>\n\n<p class=\"wp-block-paragraph\">Wir m\u00fcssen das <strong>ARMGCC<\/strong>-Makefile ein wenig \u00e4ndern, um die Floats auszugeben, indem wir Folgendes hinzuf\u00fcgen:<\/p>\n\n<pre class=\"wp-block-code\"><code>LDFLAGS += -u _printf_float<\/code><\/pre>\n\n<p class=\"wp-block-paragraph\">weist den Linker an, die Float-Unterst\u00fctzung zu unserem printf hinzuzuf\u00fcgen.<\/p>\n\n<p class=\"wp-block-paragraph\">Nach dem Flashen des <strong>ARMGCC<\/strong>-kompilierten Hex k\u00f6nnen wir \u00fcberpr\u00fcfen, ob die <strong>LED<\/strong>s in der Reihenfolge <strong>ROT<\/strong>&#8211;<strong>GR\u00dcN<\/strong> blinken, unser Programm also gestartet ist und den Selbsttest als erfolgreich betrachtet. Die <a href=\"https:\/\/www.segger.com\/products\/debug-probes\/j-link\/technology\/about-real-time-transfer\/\">Real Time Transfer<\/a> (<strong>RTT<\/strong>)-Protokolle deuten darauf hin, dass die Sensoren gelesen werden und plausible Werte zur\u00fcckgeben. <\/p>\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"632\" src=\"https:\/\/ruuvi.com\/i\/u\/rtt-log-1024x632.png\" alt=\"Ein RTT-Protokoll des ARMGCC-kompilierten Hex\" class=\"wp-image-3656\" srcset=\"https:\/\/ruuvi.com\/i\/u\/rtt-log-1024x632.png 1024w, https:\/\/ruuvi.com\/i\/u\/rtt-log-450x278.png 450w, https:\/\/ruuvi.com\/i\/u\/rtt-log-768x474.png 768w, https:\/\/ruuvi.com\/i\/u\/rtt-log-600x371.png 600w, https:\/\/ruuvi.com\/i\/u\/rtt-log.png 1182w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>Ein RTT-Protokoll des ARMGCC-kompilierten Hex<\/figcaption><\/figure><\/div>\n\n<p class=\"wp-block-paragraph\">Ein Problem ist offensichtlich: Unsere Druckfunktion gibt den 64-Bit-Zeitstempel nicht korrekt aus. Vorerst werden wir dieses Problem im Backlog belassen. <\/p>\n\n<h2 class=\"wp-block-heading\">Fazit<\/h2>\n\n<p class=\"wp-block-paragraph\">Wir haben jetzt eine grundlegende Unterst\u00fctzung f\u00fcr beide externen Sensoren an Bord des RuuviTag. Wir haben auch eine generische <em>Schnittstelle<\/em> zu den Sensoren, die es uns erm\u00f6glicht, Updates an den Sensoren an Bord vorzunehmen, ohne die Anwendung zu beeintr\u00e4chtigen, die auf den Empfang der Daten angewiesen ist. <\/p>\n\n<p class=\"wp-block-paragraph\">Die n\u00e4chsten Teile der Serie werden die grundlegende Funktionalit\u00e4t der verbleibenden Peripherieger\u00e4te hinzuf\u00fcgen, die f\u00fcr den aktuellen RuuviTag-Betrieb ben\u00f6tigt werden, wie z. B. Bluetooth Low Energy (<strong>BLE<\/strong>)-Broadcasting und Near-Field Communication (<strong>NFC<\/strong>)-Lesen. Sollte es der Zeitplan zulassen, werden wir auch automatische Tests f\u00fcr die Sensoren und andere Peripherieger\u00e4te entwickeln. <\/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 bauen wir auf Teil 5 des Tutorials auf und f\u00fcgen Unterst\u00fctzung f\u00fcr den LIS2DH12 an Bord des RuuviTag Modells + hinzu. Der finale Code dieses Blogbeitrags kann auf Ruuvi GitHub im ruuviblog-Branch, Tag 3.6.0-alpha, heruntergeladen werden. Bitte folge Teil 1 der Serie f\u00fcr Details zum Klonen des Repositories und Kompilieren [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":135830,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[324],"tags":[],"class_list":["post-135828","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 - Teil 6: Abfrage des Beschleunigungssensors - Ruuvi<\/title>\n<meta name=\"description\" content=\"Hinzuf\u00fcgen von LIS2DH12-Treibern und Implementierung der Sensorschnittstelle f\u00fcr die Beschleunigungssensor-Abfrage. Der gesamte Code kann kostenlos heruntergeladen werden.\" \/>\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-part-6-accelerometer-polling\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ruuvi Firmware - Teil 6: Abfrage des Beschleunigungssensors - Ruuvi\" \/>\n<meta property=\"og:description\" content=\"Hinzuf\u00fcgen von LIS2DH12-Treibern und Implementierung der Sensorschnittstelle f\u00fcr die Beschleunigungssensor-Abfrage. Der gesamte Code kann kostenlos heruntergeladen werden.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ruuvi.com\/de\/ruuvi-firmware-part-6-accelerometer-polling\/\" \/>\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-08-31T09:01: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-part-6-intro-image.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"1280\" \/>\n\t<meta property=\"og:image:height\" content=\"669\" \/>\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-part-6-accelerometer-polling\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-part-6-accelerometer-polling\\\/\"},\"author\":{\"name\":\"Otso Jousimaa\",\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/#\\\/schema\\\/person\\\/143b8e2a095f1e6484b9186673c9ec00\"},\"headline\":\"Ruuvi Firmware &#8211; Teil 6: Abfrage des Beschleunigungssensors\",\"datePublished\":\"2018-08-31T09:01:00+00:00\",\"dateModified\":\"2026-06-11T05:48:57+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-part-6-accelerometer-polling\\\/\"},\"wordCount\":1134,\"image\":{\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-part-6-accelerometer-polling\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/ruuvi.com\\\/i\\\/u\\\/ruuvi-firmware-part-6-intro-image.jpeg\",\"articleSection\":[\"Ruuvi-Software-Artikel\"],\"inLanguage\":\"de\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-part-6-accelerometer-polling\\\/\",\"url\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-part-6-accelerometer-polling\\\/\",\"name\":\"Ruuvi Firmware - Teil 6: Abfrage des Beschleunigungssensors - Ruuvi\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-part-6-accelerometer-polling\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-part-6-accelerometer-polling\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/ruuvi.com\\\/i\\\/u\\\/ruuvi-firmware-part-6-intro-image.jpeg\",\"datePublished\":\"2018-08-31T09:01:00+00:00\",\"dateModified\":\"2026-06-11T05:48:57+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/#\\\/schema\\\/person\\\/143b8e2a095f1e6484b9186673c9ec00\"},\"description\":\"Hinzuf\u00fcgen von LIS2DH12-Treibern und Implementierung der Sensorschnittstelle f\u00fcr die Beschleunigungssensor-Abfrage. Der gesamte Code kann kostenlos heruntergeladen werden.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-part-6-accelerometer-polling\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-part-6-accelerometer-polling\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-part-6-accelerometer-polling\\\/#primaryimage\",\"url\":\"https:\\\/\\\/ruuvi.com\\\/i\\\/u\\\/ruuvi-firmware-part-6-intro-image.jpeg\",\"contentUrl\":\"https:\\\/\\\/ruuvi.com\\\/i\\\/u\\\/ruuvi-firmware-part-6-intro-image.jpeg\",\"width\":1280,\"height\":669,\"caption\":\"Einf\u00fchrungsbild f\u00fcr Teil 6 der Ruuvi Firmware-Serie\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-part-6-accelerometer-polling\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/front\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Ruuvi Firmware &#8211; Teil 6: Abfrage des Beschleunigungssensors\"}]},{\"@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 - Teil 6: Abfrage des Beschleunigungssensors - Ruuvi","description":"Hinzuf\u00fcgen von LIS2DH12-Treibern und Implementierung der Sensorschnittstelle f\u00fcr die Beschleunigungssensor-Abfrage. Der gesamte Code kann kostenlos heruntergeladen werden.","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-part-6-accelerometer-polling\/","og_locale":"de_DE","og_type":"article","og_title":"Ruuvi Firmware - Teil 6: Abfrage des Beschleunigungssensors - Ruuvi","og_description":"Hinzuf\u00fcgen von LIS2DH12-Treibern und Implementierung der Sensorschnittstelle f\u00fcr die Beschleunigungssensor-Abfrage. Der gesamte Code kann kostenlos heruntergeladen werden.","og_url":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-part-6-accelerometer-polling\/","og_site_name":"Ruuvi","article_publisher":"https:\/\/www.facebook.com\/ruuvi.cc","article_published_time":"2018-08-31T09:01:00+00:00","article_modified_time":"2026-06-11T05:48:57+00:00","og_image":[{"width":1280,"height":669,"url":"https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-part-6-intro-image.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-part-6-accelerometer-polling\/#article","isPartOf":{"@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-part-6-accelerometer-polling\/"},"author":{"name":"Otso Jousimaa","@id":"https:\/\/ruuvi.com\/de\/#\/schema\/person\/143b8e2a095f1e6484b9186673c9ec00"},"headline":"Ruuvi Firmware &#8211; Teil 6: Abfrage des Beschleunigungssensors","datePublished":"2018-08-31T09:01:00+00:00","dateModified":"2026-06-11T05:48:57+00:00","mainEntityOfPage":{"@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-part-6-accelerometer-polling\/"},"wordCount":1134,"image":{"@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-part-6-accelerometer-polling\/#primaryimage"},"thumbnailUrl":"https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-part-6-intro-image.jpeg","articleSection":["Ruuvi-Software-Artikel"],"inLanguage":"de"},{"@type":"WebPage","@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-part-6-accelerometer-polling\/","url":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-part-6-accelerometer-polling\/","name":"Ruuvi Firmware - Teil 6: Abfrage des Beschleunigungssensors - Ruuvi","isPartOf":{"@id":"https:\/\/ruuvi.com\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-part-6-accelerometer-polling\/#primaryimage"},"image":{"@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-part-6-accelerometer-polling\/#primaryimage"},"thumbnailUrl":"https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-part-6-intro-image.jpeg","datePublished":"2018-08-31T09:01:00+00:00","dateModified":"2026-06-11T05:48:57+00:00","author":{"@id":"https:\/\/ruuvi.com\/de\/#\/schema\/person\/143b8e2a095f1e6484b9186673c9ec00"},"description":"Hinzuf\u00fcgen von LIS2DH12-Treibern und Implementierung der Sensorschnittstelle f\u00fcr die Beschleunigungssensor-Abfrage. Der gesamte Code kann kostenlos heruntergeladen werden.","breadcrumb":{"@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-part-6-accelerometer-polling\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ruuvi.com\/de\/ruuvi-firmware-part-6-accelerometer-polling\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-part-6-accelerometer-polling\/#primaryimage","url":"https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-part-6-intro-image.jpeg","contentUrl":"https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-part-6-intro-image.jpeg","width":1280,"height":669,"caption":"Einf\u00fchrungsbild f\u00fcr Teil 6 der Ruuvi Firmware-Serie"},{"@type":"BreadcrumbList","@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-part-6-accelerometer-polling\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/ruuvi.com\/de\/front\/"},{"@type":"ListItem","position":2,"name":"Ruuvi Firmware &#8211; Teil 6: Abfrage des Beschleunigungssensors"}]},{"@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\/135828","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=135828"}],"version-history":[{"count":1,"href":"https:\/\/ruuvi.com\/de\/wp-json\/wp\/v2\/posts\/135828\/revisions"}],"predecessor-version":[{"id":135842,"href":"https:\/\/ruuvi.com\/de\/wp-json\/wp\/v2\/posts\/135828\/revisions\/135842"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ruuvi.com\/de\/wp-json\/wp\/v2\/media\/135830"}],"wp:attachment":[{"href":"https:\/\/ruuvi.com\/de\/wp-json\/wp\/v2\/media?parent=135828"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ruuvi.com\/de\/wp-json\/wp\/v2\/categories?post=135828"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ruuvi.com\/de\/wp-json\/wp\/v2\/tags?post=135828"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}