{"id":513,"date":"2017-11-25T15:00:47","date_gmt":"2017-11-25T14:00:47","guid":{"rendered":"http:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=513"},"modified":"2017-12-30T19:40:22","modified_gmt":"2017-12-30T18:40:22","slug":"84-spi_lis3dsh-library-stm32f4","status":"publish","type":"page","link":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=513","title":{"rendered":"84-SPI_LIS3DSH-Library (STM32F4)"},"content":{"rendered":"<p><div id=\"nav-below\" class=\"navigation\"><div class=\"nav-previous\"><a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=511\" title=\"83-KeyMatrix-Library (STM32F4)\"><span class=\"meta-nav\">\u2190<\/span> 83-KeyMatrix-Library (STM32F4)<\/a><\/div><\/div><!-- #nav-below --><div id=\"nav-below\" class=\"navigation\"><div class=\"nav-next\"><a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=515\" title=\"85-Modplayer-Library (STM32F4)\">85-Modplayer-Library (STM32F4) <span class=\"meta-nav\">&rarr;<\/span><\/a><\/div><\/div><!-- #nav-below --><\/p>\n<p>Auf dem Discovery-Board (der neuen Revision C) ist ein 3Achs-Beschleunigungs-Sensor eingebaut (LIS3DSH)<\/p>\n<p>Hinweis : auf \u201calten\u201d Discovery-Boards ist der LIS302DL best\u00fcckt<br \/>\nf\u00fcr den gibt es eine extra Library hier im Blog.<\/p>\n<p>Mit dem Sensor k\u00f6nnen die Beschleunigungskr\u00e4fte der X-, Y-, Z-Achse gemessen werden. Der Sensor hat eine Genauigkeit von 16bit und eine umschaltbare<br \/>\nAufl\u00f6sung von +\/- 2g, 4g, 6g, 8g, 16g<\/p>\n<p>Mit dieser Library kann der Sensor sehr leicht benutzt werden. Man ruft einfach die Funktion \u201cUB_LIS3DSH_Read()\u201d zyklisch auf und erh\u00e4lt als Ergebnis die aktuellen Beschleunigungswerte in mg aller 3 Achsen als Struktur zur\u00fcck.<br \/>\n(bei 2g Aufl\u00f6sung also Werte von -2000mg bis +2000mg)<\/p>\n<p>Der Sensor kann eigentlich im Interrupt-Betrieb benutzt werden und auch Klick-Events bzw. Doppelklick-Events auswerten \u2026aber darauf hab ich wegen der \u00dcbersichtlichkeit verzichtet. Wer diese Funktionen will, soll sich bei mir melden.<\/p>\n<p>Vorsicht : im UserManual vom Discovery-Board ist ein Fehler, der ChipSelect-Pin vom LIS3DSH liegt an PE3 (nicht wie beschrieben an PE2)<\/p>\n<p>Der Sensor h\u00e4ngt am SPI1 aus dem Grund wird die SPI1-Lib auch ben\u00f6tigt.<\/p>\n<p>Hinweis : es werden nur 8bit (statt 16bit) Aufl\u00f6sung benutzt. Das kann von euch aber leicht abge\u00e4ndert werden. Einfach noch das Lo-Byte auslesen und den Umrechnungsfaktor<br \/>\nanpassen.<\/p>\n<p>Ich konnte die Library selbst nicht testen weil ich nur ein altes Discovery habe,<br \/>\naber laut \u201cMichael\u201d scheint sie zu funktionieren.<\/p>\n<p><strong>Benutzte Pins :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">SCK an PA5\r\nMOSI an PA7\r\nMISO an PA6\r\nChipSelect an PE3<\/pre>\n<p><strong>Voraussetzungen :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">Benutzte Module der CooCox-IDE : GPIO\r\nBenutzte Librarys : STM32_UB_SPI1<\/pre>\n<p><strong>Enumerationen :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">typedef enum {\r\n  SCALE_2G =0,    \/\/ Aufl\u00f6sung +\/- 2g\r\n  SCALE_4G,       \/\/ Aufl\u00f6sung +\/- 4g\r\n  SCALE_6G,       \/\/ Aufl\u00f6sung +\/- 6g\r\n  SCALE_8G,       \/\/ Aufl\u00f6sung +\/- 8g\r\n  SCALE_16G       \/\/ Aufl\u00f6sung +\/- 16g\r\n}LIS3DSH_SCALE_t;<\/pre>\n<p><strong>:<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">typedef enum {\r\n  FILTER_800Hz =0,  \/\/ Filter (800 Hz)\r\n  FILTER_400Hz,     \/\/ Filter (400 Hz)\r\n  FILTER_200Hz,     \/\/ Filter (200 Hz)\r\n  FILTER_50Hz       \/\/ Filter (50 Hz)\r\n}LIS3DSH_FILTER_t;<\/pre>\n<p><strong>Funktionen :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">ErrorStatus UB_LIS3DSH_Init(LIS3DSH_SCALE_t scale); \/\/ zum initialisieren des LIS3DSH\r\nvoid UB_LIS3DSH_Read(void);                         \/\/ zum auslesen der Beschleunigungswerte\r\nvoid UB_LIS3DSH_SetFilter(LIS3DSH_FILTER_t filter); \/\/ zum einstellen des Filters<\/pre>\n<p><strong>Beispiel :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">\/\/--------------------------------------------------------------\r\n\/\/ File     : main.c\r\n\/\/ Datum    : 17.05.2014\r\n\/\/ Version  : 1.0\r\n\/\/ Autor    : UB\r\n\/\/ EMail    : mc-4u(@)t-online.de\r\n\/\/ Web      : www.mikrocontroller-4u.de\r\n\/\/ CPU      : STM32F4\r\n\/\/ IDE      : CooCox CoIDE 1.7.4\r\n\/\/ GCC      : 4.7 2012q4\r\n\/\/ Module   : CMSIS_BOOT, M4_CMSIS_CORE\r\n\/\/ Funktion : Demo der LIS3DSH Library\r\n\/\/ Hinweis  : Diese zwei Files muessen auf 8MHz stehen\r\n\/\/              \"cmsis_boot\/stm32f4xx.h\"\r\n\/\/              \"cmsis_boot\/system_stm32f4xx.c\"\r\n\/\/--------------------------------------------------------------\r\n\r\n#include \"main.h\"\r\n#include \"stm32_ub_lis3dsh.h\"\r\n#include \"stm32_ub_led.h\"\r\n\r\nint main(void)\r\n{\r\n  ErrorStatus check;\r\n\r\n  SystemInit(); \/\/ Quarz Einstellungen aktivieren\r\n\r\n  UB_Led_Init(); \/\/ LEDs initialisieren\r\n\r\n  \/\/ LIS3DSH initialisieren (mit +\/- 2G Aufl\u00f6sung)\r\n  check=UB_LIS3DSH_Init(SCALE_2G);\r\n\r\n  if(check==ERROR) {\r\n    \/\/ LIS3DSH wurde nicht gefunden\r\n    \/\/ rote und gr\u00fcne LED einschalten\r\n    UB_Led_On(LED_RED);\r\n    UB_Led_On(LED_GREEN);\r\n    \/\/ STOP\r\n    while(1);\r\n  }\r\n\r\n  while(1)\r\n  {\r\n    \/\/ LIS3DSH auslesen\r\n    UB_LIS3DSH_Read();\r\n    \/\/ wenn Platine nach links geneigt wird, rote LED einschalten\r\n    if(LIS3DSH.y_achse&gt;250) UB_Led_On(LED_RED); else UB_Led_Off(LED_RED);\r\n    \/\/ wenn Platine nach rechts geneigt wird, gruene LED einschalten\r\n    if(LIS3DSH.y_achse&lt;-250) UB_Led_On(LED_GREEN); else UB_Led_Off(LED_GREEN); \/\/ wenn Platine nach hinten geneigt wird, blaue LED einschalten if(LIS3DSH.x_achse&gt;250) UB_Led_On(LED_BLUE); else UB_Led_Off(LED_BLUE);\r\n    \/\/ wenn Platine nach vorne geneigt wird, orange LED einschalten\r\n    if(LIS3DSH.x_achse&lt;-250) UB_Led_On(LED_ORANGE); else UB_Led_Off(LED_ORANGE);\r\n  }\r\n}\r\n<\/pre>\n<p>Hier die Library zum\u00a0<strong>Download :<\/strong><\/p>\n<p><a href=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2014\/05\/ub_stm32f4_spi_lis3dsh_v100.zip\">ub_stm32f4_spi_lis3dsh_v100<\/a><\/p>\n<p>Hier der komplette CooCox-Projektordner zum\u00a0<strong>Download :<\/strong><\/p>\n<p><a href=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2014\/05\/Demo_84_SPI_LIS3DSH.zip\">Demo_84_SPI_LIS3DSH<\/a><\/p>\n<hr \/>\n<h3 id=\"comments-title\">7 Antworten auf <em>84-SPI_LIS3DSH-Library (STM32F4)<\/em><\/h3>\n<ol class=\"commentlist\">\n<li id=\"li-comment-1875\" class=\"comment even thread-even depth-1\">\n<div id=\"comment-1875\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/1.gravatar.com\/avatar\/d882e54556b1253571b08c0513be7349?s=40&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">Michael Schulze<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">14. Juni 2014 um 22:14<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Habe es eben auf mein Discovery getestet, und es l\u00e4uft super. Danke!<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/p>\n<ul class=\"children\">\n<li id=\"li-comment-1883\" class=\"comment byuser comment-author-admin_ub bypostauthor odd alt depth-2\">\n<div id=\"comment-1883\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/0.gravatar.com\/avatar\/67426419ead44d5afa132e92685bb460?s=40&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">admin_ub<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">17. Juni 2014 um 17:44<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Gut zu wissen, Danke f\u00fcr den Test.<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/li>\n<\/ul>\n<\/li>\n<li id=\"li-comment-1933\" class=\"comment even thread-odd thread-alt depth-1\">\n<div id=\"comment-1933\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/0.gravatar.com\/avatar\/c92b5b2a93a2dc82419d1624615ff418?s=40&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">Borkenk\u00e4fer<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">9. Juli 2014 um 15:45<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Hallo, habe auch CooCox installiert, nachdem ich mit eclipse noch nicht 100%ig klaar komme. Sind doch noch zu viele Parameter, f\u00fcrs erste.<br \/>\nBei den LED\u2019s waren bei mir die X und Y Richtungen vertauscht. Habe das bei mir abge\u00e4ndert.<br \/>\nKlasse Seite<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/li>\n<li id=\"li-comment-2740\" class=\"comment odd alt thread-even depth-1\">\n<div id=\"comment-2740\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/1.gravatar.com\/avatar\/7ca48c5d8311a3200fd3274afb632c2e?s=40&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\"><a class=\"url\" href=\"http:\/\/man3ref.ma\/\" rel=\"external nofollow\">man3ref.ma<\/a><\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">17. Dezember 2014 um 11:06<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>so sieht jetzt mein Code in main.h ab Zeile 44 (Damit leuchtet immer die tiefste LED <img decoding=\"async\" class=\"wp-smiley\" src=\"wp-includes\/images\/smilies\/icon_smile.gif\" alt=\":-)\" \/> )<\/p>\n<p>while(1)<br \/>\n{<br \/>\n\/\/ LIS3DSH auslesen<br \/>\nUB_LIS3DSH_Read();<br \/>\n\/\/ wenn Platine nach links geneigt wird, rote LED einschalten<br \/>\nif(LIS3DSH.x_achse&gt;250) UB_Led_On(LED_RED); else UB_Led_Off(LED_RED);<br \/>\n\/\/ wenn Platine nach rechts geneigt wird, gruene LED einschalten<br \/>\nif(LIS3DSH.x_achse250) UB_Led_On(LED_ORANGE); else UB_Led_Off(LED_ORANGE);<br \/>\n\/\/ wenn Platine nach vorne geneigt wird, blaue LED einschalten<br \/>\nif(LIS3DSH.y_achse&lt;-250) UB_Led_On(LED_BLUE); else UB_Led_Off(LED_BLUE);<br \/>\n}<br \/>\n}<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/li>\n<li id=\"li-comment-3007\" class=\"comment even thread-odd thread-alt depth-1\">\n<div id=\"comment-3007\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/0.gravatar.com\/avatar\/ef77bbd2dd58d51248d136bfd5c16663?s=40&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">Trambulin<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">18. M\u00e4rz 2015 um 19:45<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>These libraries helped me pass my exam.<br \/>\nThank you very much!!<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/li>\n<li id=\"li-comment-3320\" class=\"comment odd alt thread-even depth-1\">\n<div id=\"comment-3320\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/1.gravatar.com\/avatar\/da3adbee3306f72208df14a65d9acd0c?s=40&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">Christian Alpin<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">8. Juni 2015 um 11:13<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Moin, ich schreibe auch grad an einer Lib f\u00fcr den LIS3DSH, basierend auf der f\u00fcr den LIS302DL.<br \/>\nMit dem \u201calten\u201d LIS302DL scheint es m\u00f6glich zu sein mit einem Aufruf mehrere Bytes auf einmal auszulesen (bit1 MS-bit). Ist das mit dem LIS3DSH nicht mehr m\u00f6glich? Das Datenblatt beschreibt das MS-bit nicht, obwohl es in der Abbildung im Datenblatt des Sensors vorhanden ist. Au\u00dferdem gibt es in CTRL-REG6 das ADD-INC bit, das f\u00fcr multi byte read\/write bestimmt zu sein scheint. Wie teile ich dem Sensor aber mit, dass ich multi byte read\/write nutzen m\u00f6chte?<br \/>\nBeste Gr\u00fc\u00dfe!<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/p>\n<ul class=\"children\">\n<li id=\"li-comment-3322\" class=\"comment byuser comment-author-admin_ub bypostauthor even depth-2\">\n<div id=\"comment-3322\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/0.gravatar.com\/avatar\/67426419ead44d5afa132e92685bb460?s=40&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">admin_ub<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">8. Juni 2015 um 20:32<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>es gibt das Bit \u201cADD_INC\u201d im \u201cCTRL_REG6\u2033 zum einstellen\u2026steht alles im Datasheet.<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/li>\n<\/ul>\n<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Auf dem Discovery-Board (der neuen Revision C) ist ein 3Achs-Beschleunigungs-Sensor eingebaut (LIS3DSH) Hinweis : auf \u201calten\u201d Discovery-Boards ist der LIS302DL best\u00fcckt f\u00fcr den gibt es eine extra Library hier im Blog. Mit dem Sensor k\u00f6nnen die Beschleunigungskr\u00e4fte der X-, Y-, &hellip; <a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=513\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":144,"menu_order":84,"comment_status":"open","ping_status":"closed","template":"","meta":{"footnotes":""},"categories":[128],"tags":[242,9,241,223,49,7],"class_list":["post-513","page","type-page","status-publish","hentry","category-stm32f4","tag-beschleunigung","tag-library","tag-lis3dsh","tag-sensor","tag-spi","tag-stm32f4"],"_links":{"self":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=\/wp\/v2\/pages\/513","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=513"}],"version-history":[{"count":3,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=\/wp\/v2\/pages\/513\/revisions"}],"predecessor-version":[{"id":1623,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=\/wp\/v2\/pages\/513\/revisions\/1623"}],"up":[{"embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=\/wp\/v2\/pages\/144"}],"wp:attachment":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=513"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=513"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=513"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}