#include const int CS_PIN = 10; void setup() { Serial.begin(115200); pinMode(CS_PIN, OUTPUT); digitalWrite(CS_PIN, HIGH); // CS auf High, wenn nicht aktiv SPI.begin(6, 2, 7); // SCK, MISO, MOSI SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE0)); // Max. 1 MHz wie empfohlen //Soft-Reset writeRegister(0x2A, 0b00000010); uint16_t softReset = readRegister(0x26); Serial.print("Soft-Reset: "); Serial.println(softReset); //Modus-Wahl writeRegister(0x26, 0b00000000); //Standby-Mode uint16_t mode1 = readRegister(0x26); Serial.print("Mode_1: "); Serial.println(mode1); writeRegister(0x27, 0b11100000); //0x27 = DIGITAL ENABLE Reg / -> x-, y-, z-Achse und Temperatur aktivieren = 1111, FIFO = 0, Double Speed = 0, INT01_EVENT = 0, PARITY_EN = uint16_t dig_En = readRegister(0x27); Serial.print("Dig_En: "); Serial.println(dig_En); writeRegister(0x26, 0b00001100); //0x26 = OP_Mode-Reg. / -> 4G == 00 , PDM = 0, Audio = 0, High Performance Mode = 1100 uint16_t mode2 = readRegister(0x26); Serial.print("Mode_2: "); Serial.println(mode2); //Status uint16_t status0 = readRegister(0x11); uint16_t status1 = readRegister(0x12); uint16_t status2 = readRegister(0x13); uint16_t status3 = readRegister(0x14); //Status Serial.print("Status0: "); Serial.println(status0); Serial.print("Status1: "); Serial.println(status1); Serial.print("Status2: "); Serial.println(status2); Serial.print("Status3: "); Serial.println(status3); } void loop() { //x-Achse lesen uint16_t ID = readRegister(0x00); uint16_t xH_Data = readRegister(0x15); uint16_t xL_Data = readRegister(0x16); uint16_t h_Temp = readRegister(0x1B); uint16_t l_Temp = readRegister(0x1C); //uint16_t xH_Data1 = readRegister1(0x15); //uint16_t xL_Data1 = readRegister1(0x16); int x_Achse = axis(xL_Data, xH_Data); //Device ID ausgeben test_ID(); //Ausgabe Serial.print("ID: "); Serial.println(ID,HEX); Serial.print("X-Achse: "); Serial.println(x_Achse, HEX); //Ausgabe mit einfachem transfer Serial.print("xL_Data: "); Serial.println(xL_Data); Serial.print("xH_Data: "); Serial.println(xH_Data); /* Serial.print("H_Temperatur: "); Serial.println(h_Temp); Serial.print("L_Temperatur: "); Serial.println(l_Temp); */ /* //Ausgabe mit zusätzlichem transfer Serial.print("xL_Data1: "); Serial.println(xL_Data1); Serial.print("xH_Data1: "); Serial.println(xH_Data1); */ delay(400); } //Register schreiben void writeRegister(uint8_t registerAddress, uint8_t value) { uint16_t command = ((registerAddress << 9) | value); // R/W-Bit = 0 digitalWrite(CS_PIN, LOW); SPI.transfer16(command); digitalWrite(CS_PIN, HIGH); } /////////////////////////////////////////////////////////////////////////////////// //Register lesen uint16_t readRegister(uint8_t registerAddress){ digitalWrite(CS_PIN, LOW); uint16_t data = SPI.transfer16((registerAddress<<9) | (0x01<<8)); digitalWrite(CS_PIN, HIGH); return data; } /* uint16_t readRegister1(uint8_t registerAddress){ digitalWrite(CS_PIN, LOW); SPI.transfer16((registerAddress<<9) | (0x01<<8)); uint16_t result = SPI.transfer16(0x0000); digitalWrite(CS_PIN, HIGH); return result; } */ /////////////////////////////////////////////////////////////////////////////////// //Oberes und unteres Byte der Achsen zusammenführen int axis (uint16_t data_L, uint16_t data_H){ int data =0; data_L = data_L & 0b0000000011111111; data_H = data_H & 0b0000000011111111; data = (data_H<<8) | data_L; return data; } //Als Referenz, ob die Verbindung zum ADXL380 noch besteht void test_ID(){ digitalWrite(CS_PIN, LOW); uint8_t highByte = SPI.transfer((0x00<<1) | 0x01); // MSB uint8_t lowByte = SPI.transfer(0x00); // LSB digitalWrite(CS_PIN, HIGH); // Ausgabe der Device ID Serial.print("Device ID: 0x"); Serial.println(lowByte, HEX); // nur das zweite Byte enthält Daten }