Hallo, hat schon mal jemand einen Beschleunigungssensor LIS3DHH benutzt? Ich möchte ihn in eine Applikation einsetzen, verstehe aber das Datenblatt offenbar nicht ganz richtig!!!??? Er wird per SPI angesprochen. Auf meine Frage "Wer bist Du" antwortet er ordnungsgemäß (Hx11). Und dann geht es los: Die Register setzen. Da habe ich schon alles mögliche probiert, die verschiedenen Betriebsarten (Bypass-/Continuous-Mode...), aber als Antwort auf die Fragen der aktuellen X-/Y-/Z-Achse kommt stets 0 0 0, egal ob ich meine Platine drehe, schlage oder schwenke ... Ich benötige lediglich Werte, die mir sagen, dass sich das Gerät bewegt hat (wie beim Handy z.B.), um es zu aktivieren. Dazu wollte ich stets die letzten Werte speichern und mit der nächsten Messung vergleichen, um eine wesentliche Änderung zu erkennen. MEHR BRAUCHE ICH NICHT. Hat jemand eine Idee, mit welchen Werten ich den LIS3DHH beschreiben muss (CTRL_REG1 4 5, FIFO_CTRL)? Wohl bemerkt: SPI funktioniert grundsätzlich! Geschwindigkeit ca. 2-3 MHz. Freue mich auf Antworten und vielen Dank schon mal im Voraus
Jan K. schrieb: > Hast du ihn eingeschaltet? Manche Sensoren haben einen power down mode. Ahso? Daran hatte ich nicht gedacht. 5 von den Dingern bei Mouser bestellt. Auf eine selbstgeätzte Platine gelötet -> nix. Auf ein professionelles Adapterboard mit vergoldeten Pads gelötet -> nix. I2C-Mode, SPI-Mode, ich-hau-dir-eine-aufs-Maul-Mode probiert -> nix. So ein penetrates Arbeitsverweigerungsgerät habe ich noch nie bebrütet. Die Dinger wurden an die Schweine verfüttert und einen habe ich mit dem Hammer plattgemacht. Keine Gnade. Stattdessen habe ich ADXL335 und 345 genommen. Tun was sie sollen und zicken nicht rum.
Ich glaube, auf dem Arrow/Trenz Max1000 Board ist einer drauf. Vielleicht haben die Beispiele zur Kommunikation.
Jan K. schrieb: > Hast du ihn eingeschaltet? Manche Sensoren haben einen power down mode. Zum LIS331DLH bzw AIS328 meint STM in der AN2847: "Once the device is powered up it automatically downloads the calibration coefficients from the embedded Flash memory to the internal registers. When the boot procedure is complete (i.e. after about 5 milliseconds), the device automatically enters power-down mode. To turn on the device and gather acceleration data, it is necessary to select one of the operating modes through the CTRL_REG1 register, and to enable at least one of the axes. The following general-purpose sequence can be used to configure the device: 1. write CTRL_REG1 2. write CTRL_REG2 3. write CTRL_REG3 4. write CTRL_REG4 5. write Reference 6. write INT1_THS 7. write INT1_DUR 8. write INT2_THS 9. write INT2_DUR 10. read HP_FILTER_RESET (if filter is enabled) 11. write INT1_CFG 12. write INT2_CFG 13. write CTRL_REG5" Vielleicht passt das auch zu Deinem LIS3DHH.
Es ist ein LIS3DH und hier ist die Dokumantation zum Board: https://wiki.trenz-electronic.de/display/PD/TEI0001+-+MAX1000 Ich weiß nicht, wie viel zum LIS3DH da drinsteht.
Vielen Dank für Eure vielen Hinweise. Ich kann mir nicht vorstellen Jürgen (aber es ist auch tatsächlich nicht unmöglich, habe schon Pferde vor der Apotheke ko... sehen), dass der LIS3DHH nur Schrott sein soll. Dennoch: Eingeschaltet wird er durch setzen des Registers CTRL_REG1 auf Hx80. Dass habe ich natürlich getan. Wenn ich mir aber den Beitrag von Jan ansehe, so scheint es wohl, dass man ihn immer wieder erneut einschalten muss???!! Probiere ich mal. Übrigens bezüglich Gold und Platin aufgelötet: Ich arbeite hier (zunächst) zum Experimentieren mit einem Demo-Board https://www.mouser.de/ProductDetail/STMicroelectronics/STEVAL-MKI180V1?qs=HXFqYaX1Q2zdl0LAJ9lZzw%3D%3D Melde mich wieder...
Bernd Ickert schrieb: > Vielen Dank für Eure vielen Hinweise. Ich kann mir nicht vorstellen > Jürgen (aber es ist auch tatsächlich nicht unmöglich, habe schon Pferde > vor der Apotheke ko... sehen), dass der LIS3DHH nur Schrott sein soll. Es ist durchaus denkbar, daß ich durch das Scheitern eine tiefsitzende, narzisstische Kränkung erlitten habe, die die Dinge etwas überbewertet ;-) Am allerwahrscheinlichsten ist, daß die Kontaktierung des Chips auf der Platine jedesmal fehlschlug, das Gehäuse ist nicht ganz ohne. Ansonsten gibt es die LIS302 auch auf dem 407-Discoveryboard, und dort hat er auch bei mir funktioniert. Ich kann leider keine weiteren,sachdienlichen Hinweise geben, und wünsche Dir mit Hilfe der anderen viel Erfolg. Und falls nicht, kannst Du ja auch einen Ausflug zum Bauernhof anvisieren g
Bernd Ickert schrieb: > Ich benötige lediglich Werte, die mir sagen, dass sich das Gerät bewegt > hat (wie beim Handy z.B.), um es zu aktivieren. Dafür müsste der eingebaute Hochpassfilter recht brauchbar sein..
Noch mal kurz zum Thema "Schrott": Da kann ich bezüglich der Datenblätter zustimmen. Was da in so manchen Datenblättern für Fehler drin sind ...!! Im LIS3DHH steht z.B. dass man die Einschaltsequenz wie folgt durchführen soll: Erst Vdd_IO und dann wenige Millisekunden später VDD ??? Sowohl beide parallel an VDD legen oder so, wie beschrieben - Kein Unterschied. Nun habe ich beim Stöbern ein anderes Datenblatt eines Accelerometers gesehen, dass wohl ähnlich aufgebaut ist. Hier steht es logischer: Erst VDD, dann VDD_IO (also die Spannung, die des Signalpegels). Habe ich nun auch getan - Auch kein Unterschied. ====================== Nun zum Thema "Einschalten": Nach jeder Messung setze ich nun den Register CTRL_REG1 erneut auf Hx80. Vorher hatte ich (also beim ersten Einschalten) die Werte (in DEZ) 125,40 (X), 0,0 (Y) und 0,100 (Z) (stets 2 Byte, H- und L-Byte für jede Achse), nach der 2. Messung 6 x 255 und dann nur noch 000000. Jetzt, nach dem Setzen des Registers auf Power ON vor jeder Messung habe ich fast das Gleiche: Nur dass nun nach der 3. Messung nur noch 255 (statt Null) gelesen wird. Ich werde nicht schlau. Offenbar hat noch niemand der hier Anwesenden selbst so einen Chip per Mikroprozessor angesprochen und kann die Frage nach dem "Welche Register muss ich wie setzen" nicht beantworten. Wie nutze ich den eingebauten Hochpassfilter - lieber mts ???
Ich fürchte, dass du viel zu aufgebracht bist um mit sowas Erfolg zu haben. Deine Schreibweise lässt das stark vermuten. Leg das Ding weg, schlaf eine Woche drüber und dann geh nochmal systematisch ran. Alternativ, anderen Sensor mit mehr Verbreitung und entsprechend mehr verfügbarem Beispielcode verwenden.
Hallo Bernd, meine Init-Sequenz sieht folgendermassen aus: uint8_t lis3dhh_init(lis3dhh_t *lis3dhh) { lis3dhh_set_samples(lis3dhh, 1); ret = lis3dhh_write_reg_byte(lis3dhh, LIS3DHH_CTRL_REG1, 0xC1); if (ret!=0) return 1; ret = lis3dhh_write_reg_byte(lis3dhh, LIS3DHH_INT1_CTRL, 0x80); if (ret!=0) return 2; ret = lis3dhh_write_reg_byte(lis3dhh, LIS3DHH_CTRL_REG4, 0x01); if (ret!=0) return 2; return 0; } Die Auslesefunktion so: uint8_t lis3dhh_read_all(lis3dhh_t *lis3dhh, float *temp, float *acc_x, float *acc_y, float *acc_z, uint8_t *status) { uint8_t buf[9]; int16_t tmp=0; ret = lis3dhh_read_reg(lis3dhh, LIS3DHH_OUT_TEMP_L, buf, 9); if (ret!=0) return ret; tmp = (int16_t)((buf[1]<<8) + (uint16_t)buf[0]); *temp = 25.0f + ((float)(tmp)/4096.0f); *status = (uint8_t)buf[2]; tmp = (int16_t)((buf[4]<<8) + (uint16_t)buf[3]); *acc_x = 5.0f*(float)tmp/65536.0f; tmp = (int16_t)((buf[6]<<8) + (uint16_t)buf[5]); *acc_y = 5.0f*(float)tmp/65536.0f; tmp = (int16_t)((buf[8]<<8) + (uint16_t)buf[7]); *acc_z = 5.0f*(float)tmp/65536.0f; return 0; } Viele Grüße Klaus
Ach nein, ich bin wirklich nicht aufgebracht. Muss jedoch nun mal endlich damit zum Ziel gelangen. Habe schon 2 x 2 Wochen darüber geschlafen - heute ist der Tag der Tage ... Hallo Klaus! Das ist doch mal eine KLARE Antwort - Probiere ich jetzt mal aus. Soviel vorab: Das Ding geht wirklich wieder in den Standby - Muss den Register jedes mal neu setzen UND jedes mal vorweg die Frage "Wer bist Du" (Hx0F), sonst kommt keine Antwort. Die NULLEN waren einfach "keine Antwort", sah ich, nachdem ich den SPI BUS mit dem Osszi kontrolliert hatte... Soweit meine Erkenntnisse bis hier her. Danke allen Bernd
Ist der nicht auf dem STM32F407 Discovery Bord verbaut? Da tut er das was er soll. Mit dem Democode. Und der ist nicht geheim.
ich hab mich auch schon mal etliche Stunden mit dem LIS3DH rumgeärgert. Bis ich dann endlich gemerkt hab, dass ich einen LIS3DSH vor mir hatte. Sind nur ein paar Register anders, aber manchmal reicht das. Tja, Ali halt. bist Du Dir sicher, den richtigen zu haben?
Hallo, Der Sensor ist ja noch einfacher als der MPU6050. Ihn fand ich pfelegeicht, wobei ich die zusätzliche I2C-Peripherie nicht brauche. Anscheinend möchtest Du den Fifo benutzen und von dort lesen. Auch noch mit IRQs. Das ist aber schon fortgeschritten. Was passiert, wenn Du die Register 25h und 26h für die Temperatur liest und das Statusregister 27h und die Achsenregister 27h bis 2Eh liest? Man kann sie einzeln lesen oder die Adresse automatisch inkrementieren lassen, wenn man das richtig einstellt. Alleine das Statusregister müßte schon heftige Aktivität anzeigen. Die Fifo-Geschichten würde ich erst mal weg lassen und erst später aktivieren, wenn alles geht. Die Grundfunktionen wären: Statusregister lesen können, Temperatur lesen und Achsenregister lesen können. Ist die Betriebsspannungsrampe korrekt ausgeführt? Oszilloskopbild? wer zu faul ist, das Dabla zu suchen: https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=&ved=2ahUKEwjf58-x0KzrAhWM_qQKHan3C5UQFjAAegQIAhAB&url=https%3A%2F%2Fwww.st.com%2Fresource%2Fen%2Fdatasheet%2Flis3dhh.pdf&usg=AOvVaw1xUGBI3D4qRoGhRFGYwQl- mfG
:
Bearbeitet durch User
Ich habe genau dieses Teil (siehe Anhang). Da ist zumindest lt. der Beschreibung ein LIS3DHH drauf... Schade - auch mit der Einschaltsequenz von Klaus bleibt alles, wie es ist. Im Prinzip mache ich ja die ganze Zeit nichts anderes, als die Register mal so und mal so zu setzen. Es bleibt immer das selbe: Hintereinander abfragen (um Änderungen zu erkennen) geht nicht. Immer erst Einschalten (CTRL_REG1) und dann kommen immer die GLEICHEN Erstwerte. Muss ich noch irgend etwas unternehmen, damit er die intern gemessenen Werte in das Register, was ich auslese, übergibt? Ich brauche keine 32 Werte (internes FIFO). Es müsste doch rein theoretisch so sein, dass die Achsen andere Werte ausgeben, da ich das Teil bei den Messungen heftig bewege. Habe auch mehr von diesen Modulen, die sind ja steckbar. Ist aber bei allen das Gleiche, nur das diese gleichen Werte von Modul zu Modul etwas abweichen...
Hallo Bernd, mit welchem Mikrocontroller arbeitest Du ? Hast Du beim SPI auch das Read/Write-Bit beachtet (MSB)? Da bin ich anfangs drüber gestolpert. Falls Du es noch nicht gemacht hast, lese das Register nach dem Schreiben nochmals aus und schau ob die Werte übernommen worden sind. Meine SPI-Funktionen sehen so aus: uint8_t lis3dhh_write_reg_byte(lis3dhh_t *lis3dhh, uint8_t reg_addr, uint8_t data_byte) { return lis3dhh->write_reg_byte(lis3dhh->dev_handle, (reg_addr & 0x7F), data_byte); } uint8_t lis3dhh_read_reg_byte(lis3dhh_t *lis3dhh, uint8_t reg_addr, uint8_t *data_byte) { return lis3dhh->read_reg(lis3dhh->dev_handle, (reg_addr | 0x80), data_byte, 1); } uint8_t lis3dhh_read_reg(lis3dhh_t *lis3dhh, uint8_t reg_addr, uint8_t *data, uint8_t len) { return lis3dhh->read_reg(lis3dhh->dev_handle, 0x80 | reg_addr, data, len); } Viele Grüße Klaus
Hallo Christian, das hört sich gut an (".. der ist ja so einfach ..."). Schön wärs ja! Das Datenblatt (dein Link) habe ich natürlich auch. Dort habe ich alle bisherigen Weisheiten erfahren. Nein, im Gegenteil, ich will es so einfach wie möglich halten. Ohne FIFO und auch ohne Interrupts. Die nutze ich nicht. Wie schon beschrieben, einfach nur irgend einen aktuellen Wert lesen... Ich versuche es mal mit dem Lesen der Temperatur... Wie auch schon erwähnt, das Einschalten: Lege an VDD direkt meine VDD (3,3V) an und am VDD_IO 2-3ms später den (gleichen) Pegel, indem der µP den Port, der mit VDD_IO verbunden ist, auf High setzt. Auch mit Osszi kontrolliert! Im Datenblatt steht es ja umgekehrt!!! (Erst VDD_IO anlegen, dann VDD - ist doch unlogisch, oder?). Hallo Klaus, ich arbeite mit dem PIC18F4620. Setze den internen SPI-Block extra etwas langsamer: SSPSTAT = %00000000 SSPCON1 = %00110001 'SPI Einschalten (bit.5), Clock High-Level (Bit.4), Clock FOS/16 (Bit.3-0 = 0,0,0,1) Da ich mit 20MHz arbeite. Dann käme man über die 10MHz - Grenze, die der LIS3DHH ab kann. Das Bit für Lesen habe ich beachtet. Alle Adressen zum Lesen (lt. Registerbeschreibung im Datenblatt) mit Hx80 addiert. Sonst würde ich auch nicht die Antworten von "Wer bin ich" und auf die ersten X,Y,Z-Werte nach dem Einschalten erhalten. Meine Daten zeige ich zwar auf einem Display an, aber habe, wie auch schon erwähnt, alles immer mit dem Osszi kontrolliert. So konnte ich auch hin und wieder Programmierfehler erkennen. OK - Register nach dem Setzen gleich lesen (kontrollieren), auch eine gute Idee. Bin ich vielleicht zu langsam? Ein Byte Setzen/Lesen dauert gut 6µs. Dann ist knapp 5µs Pause, ehe ich das nächste Byte sende. Ich kann auch schneller bzw. flüssiger (hintereinander Byte für Byte). Aber das kann doch ein SPI ab!!! Liebe Grüße aus dem sonnigen Norden, Bernd
Bernd Ickert schrieb: > Ich habe genau dieses Teil (siehe Anhang). Da ist zumindest lt. der > Beschreibung ein LIS3DHH drauf... Lt der Beschreibung? Du hast doch die Bauteile bei STM oder einem namhaften Distributor gekauft? Mouser, Digikey, TME, Farnell, ... Bei Chinaware vom Ali kann man Dir alles mögliche geliefert haben, da würde ich mich über nicht funktionierende Teile nicht weiter wundern, bzw sowas erwarten.
"with output data rates from 1 Hz to 5 kHz" Das Ding ist aber ganz schön langsam. Weshalb nutzt du nicht einen BNO055 oder einen BNO080? GY-BNO055-9DOF-9-Achsen https://www.ebay.de/itm/313039453822 https://de.aliexpress.com/item/32805406886.html
Wieso sind 5000 Messungen pro Sekunde langsam? Worauf müßte man schneller reagieren? mfg
Hallo Christian, so ist es. Und wenn es 3 Messungen pro Sekunde sind ... Das Teil hatte ich bei Mouser gekauft (Link hatte ich mal beigefügt), also nicht bei "Ali". Warum nicht BNO055 oder BNO080? Abgesehen vom beachtlichen Preisunterschied (ich rede nicht vom Einzelstück. Das wäre mir egal. Jetzt lege ich fest, was ich später in tausender Größe verwende), es muss stets bei namhaften Distributoren (und nicht bei ebay) beschaffbar sein... (bis zur Abkündigung). Und dann ist eben dieses "wieder von vorn anfangen", wo ich doch schon so viel Zeit in diesen LIS3DHH investiert habe. Es ist bestimmt nur eine Kleinigkeit. So wie mit dem Display hier (was ich hier einsetze) mit Interface ST7565R. Es hat eine Weile gedauert, und es wollte kein Text erscheinen. Dann erinnerte ich mich an die DOG-Serie von elctronic assembly, wo ich mal vor Jahren eines verwendet hatte. Und electronic assembly hat ein Datenblatt dazu veröffentlicht, wo (auf deutsch) klar und verständlich anhand eines Beispiels alles Wichtige zusammengefasst aufgeschrieben ist. Welche Register müssen wie gesetzt werden - Und siehe da, mein Display hier leuchtete und "redete" mit mir! (Anhang - Seite 6 "Initialisierungsbeispiel"). Oder als ich vor Jahren das erste mal ein FT800 Grafiktreiber von FTDi benutze: Schwierig genug, aber nur durch so eine "nebenbei Bemerkung" im Forum hier von einem, der sich richtig gut auskennt, war der Knoten geplatzt (nach tagelangem Experimentieren): "Witzig ist schon, dass man beim Senden der Daten mit MSB zuerst sendet und beim Empfangen kommt LSB zuerst ..." Oder so in etwa. Das war der entscheidende Tipp. Steht sicherlich alles irgendwo im Datenblatt!!! Also, habe noch nicht weiter gemacht, bin nicht der Nachtschwärmer wie Christian, der nachts um 3:50 Uhr einen Beitrag veröffentlicht !!!:):) -Respekt! Schönes Wochenende euch allen!
Bernd Ickert schrieb: > Warum nicht BNO055 oder BNO080? Abgesehen vom beachtlichen > Preisunterschied (ich rede nicht vom Einzelstück. Das wäre mir egal. > Jetzt lege ich fest, was ich später in tausender Größe verwende), es > muss stets bei namhaften Distributoren Bei Mouser ist der BNO055 ab mehr als 10 Stück günstiger als der LIS3DHH. Der LIS3DHH hat einen theoretisch geringeren Stromverbrauch, ist schneller, neuer. Beim BNO055 ist aber ein Cortex M0+ drin mit der "Bosch Sensortec sensor fusion Software" und im "Low Power Mode" kann man den Energieverbrauch sehr stark senken. Im Moment würde ich nur den Sensor von Bosch verbauen, dann brauche ich die Berechnungen nicht in meinem Controller zu machen. Ich schaue aber natürlich auch was es so auf dem Markt gibt. Hast du irgend einen speziellen Anwendungsfall wo du die hohe Sample-zahl benötigst oder hat der Sensor gute Eigenschaften die ich übersehen habe?
Christian S. schrieb: > Wieso sind 5000 Messungen pro Sekunde langsam? Worauf müßte man > schneller reagieren? Eigentlich frage ich mich was ihn bewogen hat genau den Chip zu nutzen, wahrscheinlich wegen der hohen Sample-Rate. Wir hatten auch gesucht welcher Sensoren am besten nutzbar ist und sind letztendlich bei dem Sensor von Bosch hängen geblieben. Wenn es etwas besseres geben sollte, dann bin ich aber natürlich dafür offen. Bernd Ickert schrieb: > Ich benötige lediglich Werte, die mir sagen, dass sich das Gerät bewegt > hat (wie beim Handy z.B.), um es zu aktivieren. Das könnte die Aktivierung der GPS-Ortung sein, quasi in einem Diebstahlschutz um den Energieverbrauch zu minimieren damit das GPS nicht permanent läuft. Beim BNO055 kann man einstellen dass er in den Low-Power-Mode fällt wenn keine Bewegung durch den Beschleunigungssensor erkannt wurde. Nur der Beschleunigungssensor ist in der Zeit aktiv und wenn Bewegung erkannt wurde (Schwelle und Dauer einstellbar), dann wacht er wieder auf.
Hallo Ihr Lieben, vielen herzlichen Dank für die rege Teilnahme an dieser Diskussion. Vielleicht hat es ja auch Diesem oder Jenem etwas für sich selbst gebracht. Mir hat es soviel gebracht: Ich kündige dem LIS3DHH meine Freundschaft... Ihr habt Euch einen großen Kopf gemacht, warum diesen und nicht einen andern usw. Wie schon erwähnt: Ich brauche lediglich eine Erschütterungserkennung. Vor Wochen schon stand ein Vibrationssensor zur Debatte ("Röhrchen" mit Kontakt, z.B. Conrad: 1606627 - VQ). Der erschien mir zu unzuverlässig. In Frage käme auch ein Piezo-Vibrationssensor. Ist teurer, aber auch nicht mehr als z.B. so ein LIS... Also hatte ich mich ZUNÄCHST auf diesen verschworen, in der Annahme - und das zeigte mir das Datenblatt - dass der einfach beherrschbar ist und sich hier keine beweglichen Teile darin befinden, wie beim "Röhrchen". Das ist der ganz banale Hintergrund. Ich bin Entwickler und entwickle für meine Kundschaft ihre maßgeschneiderten Produkte und später werden sie in den gewünschten Stückzahlen von uns produziert. Also muss ich, wie schon erwähnt, in der Entwicklungsphase die richtigen Bauteile einfach nur aussuchen. Das tue ich jetzt mit oben genannten Sensor. Und das Experimentieren geht weiter ... Ein bisschen Werbung muss sein: Nicht für meine Dienstleistungen!!! ICH SUCHE EINEN NACHFOLGER!!! Das muss so ein Elektronik-Freak sein, der "Nachts um 4:00 Uhr noch bastelt" und natürlich ein bisschen Ambitionen hat, unternehmerisch tätig zu werden... Also selbst, oder kennt jemand jemanden, der jemanden kennt ....? Liebe Grüße und schönen Sonntag noch, Bernd
Irgendwie ist dieser Thread komisch. Zig Leute mit verschiedenen Namen, die auch der TO sein könnten?! Dann: Du bist Entwickler und änderst jetzt die Technologie deines Sensors, weil du mit dem aktuellen nicht kommunizieren kannst? Wir haben viele unterschiedliche MEMS von ST im Einsatz, LSM6DSL, IIS3DHHC, L3DG20(H) usw, alle über SPI, keine Probleme. Man muss halt zumindest mal das Datenblatt lesen. Damit der Post auch noch etwas Konstruktives beinhaltet: ST hat zig Beispiele und Libraries für all seine Sensoren hier veröffentlicht: https://github.com/STMicroelectronics/STMems_Standard_C_drivers
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.