Hallo
Ich versuche gerade einen funktionierenden Code zu schreiben, welcher
mir dem Daten vom LIS3DH ausgibt. Ich habe den Code mit diversen
libaries probiert jedoch sind die zum Teil fehlerhaft oder es fehlen
einstellungsmöglichkeiten. Ich würde gerne den High Res mode mit
1,344kHz mit 2g verwenden.
Dafür setzte ich das CTRL_REG1 (151) und CTRL_REG4 (16).
Das funktionier so weit auch. Nun möchte ich aber die Daten auslesen.
Und da ergibt sich mir das Problem. Wenn ich versuche me
hrere Register auf einmal auszulesen das kommt da nix vernünftiges raus.
Hier der Code:
#include <Wire.h>
int LIS3DH = 0x18;
float CTRL_REG1;
float CTRL_REG4;
float X_OUT, Y_OUT, Z_OUT;
uint8_t OUT_X_L, OUT_X_H, OUT_Y_L, OUT_Y_H, OUT_Z_L, OUT_Z_H;
uint16_t OUT_X, OUT_Y, OUT_Z;
1 | void setup(void) {
|
2 | Serial.begin(115200);
|
3 | Wire.begin();
|
4 |
|
5 | // --- Set Configuration ---
|
6 | //CTRL_REG1 0x20: Data rate, Mode, Enable Axis
|
7 | Wire.beginTransmission(LIS3DH);
|
8 | Wire.write(0x20);
|
9 | Wire.write(151); //10010111
|
10 | Wire.endTransmission();
|
11 |
|
12 | //CTRL_REG4 0x23: Full-scale selection, High-resolution output mode
|
13 | Wire.beginTransmission(LIS3DH);
|
14 | Wire.write(0x23);
|
15 | Wire.write(8); //00001000
|
16 | Wire.endTransmission();
|
17 |
|
18 | delay(100);
|
19 | Wire.requestFrom(LIS3DH, 1);
|
20 | CTRL_REG4 = Wire.read();
|
21 | Serial.println(CTRL_REG4);
|
22 |
|
23 | }
|
24 |
|
25 | void loop() {
|
26 |
|
27 | //Set Pointer to beginn of data
|
28 | Wire.beginTransmission(LIS3DH);
|
29 | Wire.write(0x2C);
|
30 | Wire.endTransmission();
|
31 |
|
32 | //read Data
|
33 | Wire.requestFrom(LIS3DH, 2, true);
|
34 | OUT_Z_L = Wire.read();
|
35 | OUT_Z_H = Wire.read();
|
36 |
|
37 | Serial.println(OUT_Z_H);
|
38 |
|
39 | delay(1000);
|
40 |
|
41 | }
|
Ich möchte mal nur den Z Wert auslesen. Daher lese ich OUT_Z_L und
OUT_Z_H aus. Wenn ich die aber gemeinsam auslese dann bekomme ich für
OUT_Z_H ganz andere Werte als wenn ich nur OUT_Z_H alleine auslese. Wie
kann das sein?
Hat da jemand eine Idee?
Danke
Edit:
Um das nochmals klar zu stellen. Wenn ich veruche das OUT_Z_H register
auszulesen bekomme ich was anders für :
1 | //Set Pointer to beginn of data
|
2 | Wire.beginTransmission(LIS3DH);
|
3 | Wire.write(0x2C);
|
4 | Wire.endTransmission();
|
5 |
|
6 | //read Data
|
7 | Wire.requestFrom(LIS3DH, 2, true);
|
8 | OUT_Z_L = Wire.read();
|
9 | OUT_Z_H = Wire.read();
|
als ich bei
1 | Wire.beginTransmission(LIS3DH);
|
2 | Wire.write(0x2D);
|
3 | Wire.endTransmission();
|
4 |
|
5 | //read Data
|
6 | Wire.requestFrom(LIS3DH, 1, true);
|
7 | OUT_Z_H = Wire.read();
|
bekomm. Obwohl meiner meinung nach das zweitere das richtige liefter