/* * ADXL345_I2C.c * * Created: 12/26/2021 11:56:58 AM * Author: hamza */ #include "ADXL345_I2C.h" void i2c_init() { SDAPORT&= (1<>i); } SOFT_I2C_SCL_LOW; Q_DEL; //Soft_I2C_Put_Ack if(ack) { // ACK SOFT_I2C_SDA_LOW; } else { SOFT_I2C_SDA_HIGH; // NACK = Ende } H_DEL; SOFT_I2C_SCL_HIGH; H_DEL; SOFT_I2C_SCL_LOW; H_DEL; SOFT_I2C_SDA_HIGH; // was missing!! return data; } void init_ADXL() // Initialize the ADXL345 register { //TRESH_ACT ADXL_Write(0x24, 0b00000011); // Set threshold value for detecting activity; 0,1g * 0,0625g/LSB =~ 2 //TRESH_INACT ADXL_Write(0x25, 0b00000010); // Set threshold value for detecting inactivity; 0,1g * 0,0625g/LSB =~ 2 //TIME_INACT ADXL_Write(0x26, 0b00001010); // Set inactivity time to 10s (1s/LSB) //ACT_INACT_CTL ADXL_Write(0x27, 0b11101110); // Set Activity-Detection to AC-coupled, Use X and Y Axis to detect activity; Set Inactivity-Detection to AC-coupled, Use X and Y Axis to detect inactivity //DATA_FORMAT ADXL_Write(0x31, 0b00101000); // Full Res, right justified MSB, +/-2g //FIFO_CTL ADXL_Write(0x38, 0b10000001); // Stream-Mode, Water marker to 1 //Power_CTL ADXL_Write(0x2D, 0b00001011); // Activity/Inactivity on, Auto-Sleep on, measure mode on, 1Hz Sampling Frequency in Sleep Mode //BW_RATE ADXL_Write(0x2C, 0b00001011); // BW = 100Hz, Sampling frequency = 200Hz //INT_Enable ADXL_Write(0x2E, 0b00011000); // Set interrupt generation on Activity / Inactivity -Event ADXL_Write(0x2F, 0b11100111); // Connect interrupts to INT1 pin } void ADXL_Write(int reg, int daten) { uint8_t ack; i2c_start(); ack = i2c_write(reg); _delay_us(10); ack = i2c_write(daten); _delay_us(10); i2c_stop(); } unsigned short ADXL_Read_Single(int reg) { int ack; uint8_t LSB = 0x00; reg = reg + 0b10000000; i2c_start(); ack = i2c_write(reg); _delay_us(10); i2c_stop(); LSB = i2c_read(ack); return LSB; } unsigned short ADXL_Read_Double(int reg) { int ack; uint8_t LSB = 0x00; uint8_t MSB = 0x00; reg = reg + 0b11000000; i2c_start(); ack = i2c_write(reg); _delay_us(10); i2c_stop(); LSB = i2c_read(ack); MSB = i2c_read(ack); return LSB+256*MSB; }