diff --git a/src/shared/sensors/LIS3DSH-ettore/LIS3DSH.cpp b/src/shared/sensors/LIS3DSH-ettore/LIS3DSH.cpp
index 77eb9e744576a2c132f838b8cd19301ea328f596..a0b041da8584d798353303e7413382d1f3e9b457 100644
--- a/src/shared/sensors/LIS3DSH-ettore/LIS3DSH.cpp
+++ b/src/shared/sensors/LIS3DSH-ettore/LIS3DSH.cpp
@@ -1,8 +1,8 @@
 #include "LIS3DSH.h"
 namespace Boardcore {
 
-LIS3DSHettore::LIS3DSHettore(uint8_t odr, uint8_t bdu)
-    : odr(odr), bdu(bdu)
+LIS3DSHettore::LIS3DSHettore(uint8_t odr, uint8_t bdu, uint8_t fullScale)
+    : odr(odr), bdu(bdu), fullScale(fullScale)
 {
 }
 
@@ -19,6 +19,8 @@ bool LIS3DSHettore::checkWhoAmI()
 bool LIS3DSHettore::init()
 {
     spi_driver.config();    
+    printf("LIS3DSH: init \n");
+    printf("Sensitive: %f\n", sensitivity);
     if (!checkWhoAmI()) // wrong who_am_i value
     {
         printf("LIS3DSH: wrong who_am_i value \n");
@@ -27,9 +29,47 @@ bool LIS3DSHettore::init()
     // set the output data rate and the BDU in CTRL_REG4
     uint8_t ctrl_reg4_value = (odr << 4) | (bdu << 3) | (7 << 0);
     spi_driver.write(CTRL_REG4, ctrl_reg4_value);
+
+    // set the full scale in CTRL_REG5
+    uint8_t ctrl_reg5_value = (fullScale << 3);
+    spi_driver.write(CTRL_REG5, ctrl_reg5_value);
+
+    sensitivity = 0.06;
+    
     return true;  // correctly initialized
 }
 
+void LIS3DSHettore::setFullScale(uint8_t fullScale)
+{
+    //LIS3DSH
+    //CTRL_REG5 = 0x24
+    //set full scale
+    uint8_t ctrlReg5Value = (fullScale << 3);
+    spi_driver.write(CTRL_REG5, ctrlReg5Value);
+    switch (fullScale)
+    {
+    case FULL_SCALE_2G:
+        sensitivity = sensitivityValues[0];
+        break;
+    case FULL_SCALE_4G:
+        sensitivity = sensitivityValues[1];
+        break;
+    case FULL_SCALE_6G:
+        sensitivity = sensitivityValues[2];
+        break;
+    case FULL_SCALE_8G:
+        sensitivity = sensitivityValues[3];
+        break;
+    case FULL_SCALE_16G:
+        sensitivity = sensitivityValues[4];
+        break;
+    default:
+        break;
+    }
+    printf("LIS3DSH: set full scale \n");
+    printf("Sensitive: %f\n", sensitivity);
+}
+
 int8_t LIS3DSHettore::getTemperature()
 {
     // the temperature is given as a 8-bits integer (in 2-complement)
@@ -56,7 +96,7 @@ bool LIS3DSHettore::selfTest()
     float AVG_ST[3]    = {0};  // one element per axis
     float AVG_NO_ST[3] = {0};  // one element per axis
     spi_driver.write(CTRL_REG4, ctrlReg4Value);
-    uint8_t ctrlReg5Value = (FullScale::FULL_SCALE_2G << 3) | (1 << 1);
+    uint8_t ctrlReg5Value = (FullScale::FULL_SCALE_2G << 3)     ;
     spi_driver.write(CTRL_REG5, ctrlReg5Value);
     for (uint8_t i = 0; i < samples; i++) {
         //read using function 
@@ -71,8 +111,7 @@ bool LIS3DSHettore::selfTest()
         miosix::Thread::sleep(10);
     }
     //reset the registers
-    ctrlReg5Value &= ~(3 << 1);
-    ctrlReg5Value |= (FULL_SCALE_2G << 3);
+    ctrlReg5Value = (fullScale << 3);
     spi_driver.write(CTRL_REG5, ctrlReg5Value);
     for (uint8_t i = 0; i < samples; i++) {
         //read using function 
@@ -118,6 +157,13 @@ bool LIS3DSHettore::selfTest()
     return true;
 }
 
+uint64_t LIS3DSHettore::getAccelerationTimestamp()
+{
+    return TimestampTimer::getTimestamp();
+}
+
+int16_t combine(uint8_t msb, uint8_t lsb) { return (msb << 8) | lsb; }
+
 float LIS3DSHettore::getAccX()
 {
     //LIS3DSH
@@ -125,7 +171,7 @@ float LIS3DSHettore::getAccX()
     //OUT_X_H = 0x29
     int8_t accelL = spi_driver.read(OUT_X_L);
     int8_t accelH = spi_driver.read(OUT_X_H);
-    return static_cast<float>(accelH << 8 | accelL);
+    return static_cast<float>(combine(accelH, accelL)) * sensitivity;
 }
 
 float LIS3DSHettore::getAccY()
@@ -135,7 +181,7 @@ float LIS3DSHettore::getAccY()
     //OUT_Y_H = 0x2B
     int8_t accelL = spi_driver.read(OUT_Y_L);
     int8_t accelH = spi_driver.read(OUT_Y_H);
-    return static_cast<float>(accelH << 8 | accelL);
+    return static_cast<float>(combine(accelH, accelL)) * sensitivity;
 }
 
 float LIS3DSHettore::getAccZ()
@@ -145,7 +191,7 @@ float LIS3DSHettore::getAccZ()
     //OUT_Z_H = 0x2D
     int8_t accelL = spi_driver.read(OUT_Z_L);
     int8_t accelH = spi_driver.read(OUT_Z_H);
-    return static_cast<float>(accelH << 8 | accelL);
+    return static_cast<float>(combine(accelH, accelL)) * sensitivity;
 }
 
 }
diff --git a/src/shared/sensors/LIS3DSH-ettore/LIS3DSH.h b/src/shared/sensors/LIS3DSH-ettore/LIS3DSH.h
index 85c2d0732046a45a1116f29eae4517195d52482c..8d890b313e48a769c75944f8054a9b24cb6873d9 100644
--- a/src/shared/sensors/LIS3DSH-ettore/LIS3DSH.h
+++ b/src/shared/sensors/LIS3DSH-ettore/LIS3DSH.h
@@ -3,6 +3,7 @@
 #pragma once
 
 #include "drivers/ettore/SPIDriver.h"
+#include <drivers/timer/TimestampTimer.h>
 #include <math.h>
 
 using namespace miosix;
@@ -14,7 +15,8 @@ class LIS3DSHettore
 {
 
 public:
-    LIS3DSHettore(uint8_t odr, uint8_t bdu);
+    LIS3DSHettore(uint8_t odr, uint8_t bdu, 
+                uint8_t fullScale = FullScale::FULL_SCALE_2G);
 
     bool init();
 
@@ -22,11 +24,17 @@ public:
 
     int8_t getTemperature();
 
+    void setFullScale(uint8_t fullScale);
+
+    uint64_t getAccelerationTimestamp();
+
     float getAccX();
     float getAccY();
     float getAccZ();
 
 
+
+
     bool selfTest();
 
         enum OutputDataRate : uint8_t
@@ -73,11 +81,19 @@ public:
     };
 
 
+
+
+
 private:
 
     SpiDriver spi_driver;
     uint8_t odr;
     uint8_t bdu;
+    uint8_t fullScale;  // full scale value, default +/- 2g
+
+    const float sensitivityValues[5] = {0.06, 0.12, 0.18, 0.24, 0.73};
+    float sensitivity = 0.06;
+
 
     const uint8_t WHO_AM_I_VALUE   = 63;
     const uint8_t TEMPERATURE_REF = 25;
diff --git a/src/tests/sensors/test-ettore.cpp b/src/tests/sensors/test-ettore.cpp
index a5f45897f169f6cc1a505974d6b732a802a1c358..a33eb5c56267e84e6b828561b824e0260f4d1145 100644
--- a/src/tests/sensors/test-ettore.cpp
+++ b/src/tests/sensors/test-ettore.cpp
@@ -8,7 +8,8 @@ using namespace Boardcore;
 int main()
 {
     LIS3DSHettore driver(LIS3DSHettore::OutputDataRate::ODR_100_HZ,
-                           LIS3DSHettore::BlockDataUpdate::UPDATE_AFTER_READ_MODE);
+                           LIS3DSHettore::BlockDataUpdate::CONTINUOUS_UPDATE_MODE,
+                           LIS3DSHettore::FullScale::FULL_SCALE_2G);
 
     
     printf("Ciao\n");
@@ -24,14 +25,23 @@ int main()
                 Thread::sleep(2000);
             }
         }
+
+        driver.setFullScale(LIS3DSHettore::FullScale::FULL_SCALE_4G);
         
         while (true)
         {
             TRACE("Temp : %d °C \n", driver.getTemperature());
-            TRACE("AccX : %f g \n", driver.getAccX());
+            TRACE("Timestamp : %llu \n", driver.getAccelerationTimestamp());
+            float accX = driver.getAccX();
+            float accY = driver.getAccY();
+            float accZ = driver.getAccZ();
+            TRACE("AccX RAW : %f\n", accX );
+            TRACE("AccY RAW: %f\n", accY);
+            TRACE("AccZ RAW: %f\n", accZ);
+
 
 
-            Thread::sleep(5000);
+            Thread::sleep(200);
         }
     } else {
                 while (true)