diff --git a/skyward-boardcore b/skyward-boardcore
index 1b05ea5d81d90a00a2e5cc6cae91b3329a22e264..19d8ecc6c9ebe24ac864857cbe175181a92d7b81 160000
--- a/skyward-boardcore
+++ b/skyward-boardcore
@@ -1 +1 @@
-Subproject commit 1b05ea5d81d90a00a2e5cc6cae91b3329a22e264
+Subproject commit 19d8ecc6c9ebe24ac864857cbe175181a92d7b81
diff --git a/src/boards/MockupMain/Configs/SensorsConfig.h b/src/boards/MockupMain/Configs/SensorsConfig.h
index 316b9fc0a6a401d18ebd0f23011f31d48c2c6775..bfedffad7e15287d2887486ee5753d4cc893da04 100644
--- a/src/boards/MockupMain/Configs/SensorsConfig.h
+++ b/src/boards/MockupMain/Configs/SensorsConfig.h
@@ -1,6 +1,5 @@
-/* Copyright (c) 2023 Skyward Experimental Rocketry
- * Author: Matteo Pignataro
- *
+/* Copyright (c) 2024 Skyward Experimental Rocketry
+ * Author: Angelo Prete
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to deal
  * in the Software without restriction, including without limitation the rights
@@ -29,12 +28,22 @@
 #include <sensors/LIS3MDL/LIS3MDL.h>
 #include <sensors/LPS22DF/LPS22DF.h>
 #include <sensors/calibration/AxisOrientation.h>
+#include <units/Frequency.h>
+
+#include <chrono>
 
 namespace MockupMain
 {
 namespace SensorsConfig
 {
-constexpr unsigned int NUMBER_OF_SENSORS  = 10;
+
+// clang-format off
+// Indent to avoid the linter complaining about using namespace
+  using namespace Boardcore::Units::Frequency;
+  using namespace std::chrono_literals;
+// clang-format on
+
+constexpr unsigned int NUMBER_OF_SENSORS  = 7;
 constexpr uint32_t MAG_CALIBRATION_PERIOD = 100;  // [ms]
 
 // BMX160
@@ -43,9 +52,9 @@ constexpr Boardcore::BMX160Config::AccelerometerRange BMX160_ACC_FSR_ENUM =
     Boardcore::BMX160Config::AccelerometerRange::G_16;
 constexpr Boardcore::BMX160Config::GyroscopeRange BMX160_GYRO_FSR_ENUM =
     Boardcore::BMX160Config::GyroscopeRange::DEG_1000;
-constexpr unsigned int BMX160_ACC_GYRO_ODR = 200;
+constexpr unsigned int BMX160_ACC_GYRO_ODR = 100;
 constexpr Boardcore::BMX160Config::OutputDataRate BMX160_ACC_GYRO_ODR_ENUM =
-    Boardcore::BMX160Config::OutputDataRate::HZ_200;
+    Boardcore::BMX160Config::OutputDataRate::HZ_100;
 constexpr unsigned int BMX160_MAG_ODR = 100;
 constexpr Boardcore::BMX160Config::OutputDataRate BMX160_MAG_ODR_ENUM =
     Boardcore::BMX160Config::OutputDataRate::HZ_100;
@@ -67,26 +76,25 @@ constexpr Boardcore::H3LIS331DLDefs::BlockDataUpdate H3LIS331DL_BDU =
     Boardcore::H3LIS331DLDefs::BlockDataUpdate::BDU_CONTINUOS_UPDATE;
 constexpr Boardcore::H3LIS331DLDefs::FullScaleRange H3LIS331DL_FSR =
     Boardcore::H3LIS331DLDefs::FullScaleRange::FS_100;
-constexpr uint32_t H3LIS331DL_PERIOD = 1 * 1000;  // [ns] 1000Hz
+constexpr auto H3LIS331DL_PERIOD = 800_hz;
 
 // LPS22DF
 constexpr Boardcore::LPS22DF::AVG LPS22DF_AVG = Boardcore::LPS22DF::AVG_4;
 constexpr Boardcore::LPS22DF::ODR LPS22DF_ODR = Boardcore::LPS22DF::ODR_50;
-constexpr uint32_t LPS22DF_PERIOD             = 50 * 1000;  // [ns] 20Hz
+constexpr auto LPS22DF_PERIOD                 = 20_hz;
 
 // UBXGPS
-constexpr uint8_t UBXGPS_SAMPLE_RATE = 10;
+constexpr auto UBXGPS_SAMPLE_RATE = 5;
 // The +5 is needed because GPS data must be read faster than it is produced (to
 // not cause delays)
-constexpr uint32_t UBXGPS_PERIOD =
-    1000 / (UBXGPS_SAMPLE_RATE + 5) * 1000;  // [ns]
+constexpr auto UBXGPS_PERIOD = 10_hz;
 
 // ADS
 constexpr Boardcore::ADS131M08Defs::OversamplingRatio
     ADS131M08_OVERSAMPLING_RATIO =
         Boardcore::ADS131M08Defs::OversamplingRatio::OSR_4096;
 constexpr bool ADS131M08_GLOBAL_CHOP_MODE = true;
-constexpr uint32_t ADS131M08_PERIOD       = 1 * 1000;  // [ns] 1000Hz
+constexpr auto ADS131M08_PERIOD           = 1000_hz;
 
 // UNUSED - How many bytes go into the fifo each second
 constexpr unsigned int BMX160_FIFO_FILL_RATE =
@@ -116,15 +124,14 @@ constexpr float BATTERY_VOLTAGE_COEFF = (150 + 40.2) / 40.2;
 // BMX160_SAMPLE_PERIOD: Sample before the fifo is full, but slightly after the
 // watermark level (watermark + 30) ---> high slack due to scheduler
 // imprecision, avoid clearing the fifo before the interrupt
-constexpr unsigned int BMX160_SAMPLE_PERIOD = BMX160_FIFO_FILL_TIME *
-                                              (BMX160_FIFO_WATERMARK + 30) * 4 /
-                                              1024 * 1000;         // [ns]
-constexpr unsigned int LIS3MDL_SAMPLE_PERIOD       = 15 * 1000;    // [ns]
-constexpr unsigned int INTERNAL_ADC_SAMPLE_PERIOD  = 1000 * 1000;  // [ns]
-constexpr unsigned int INTERNAL_TEMP_SAMPLE_PERIOD = 2000 * 1000;  // [ns]
+constexpr auto BMX160_SAMPLE_PERIOD = std::chrono::milliseconds(
+    BMX160_FIFO_FILL_TIME * (BMX160_FIFO_WATERMARK + 30) * 4 / 1024);  // [ms]
+constexpr auto LIS3MDL_SAMPLE_PERIOD       = 6_hz;
+constexpr auto INTERNAL_ADC_SAMPLE_PERIOD  = 1_hz;
+constexpr auto INTERNAL_TEMP_SAMPLE_PERIOD = 2_hz;
 
 // LoadCell
-constexpr unsigned int LOAD_CELL_SAMPLE_PERIOD = 1 * 1000;  // [ns] 1000 Hz
+constexpr auto LOAD_CELL_SAMPLE_PERIOD = 1000_hz;
 constexpr Boardcore::ADS131M08Defs::Channel LOAD_CELL_ADC_CHANNEL =
     Boardcore::ADS131M08Defs::Channel::CHANNEL_0;
 // TODO set calibration
diff --git a/src/boards/MockupMain/Sensors/Sensors.cpp b/src/boards/MockupMain/Sensors/Sensors.cpp
index bf00c2cabbae50f1c9f3472a0f151025d7ebc488..66ceccf797c080befc86903b1026d8cba62806fa 100644
--- a/src/boards/MockupMain/Sensors/Sensors.cpp
+++ b/src/boards/MockupMain/Sensors/Sensors.cpp
@@ -113,12 +113,12 @@ bool Sensors::start()
     // Read the magnetometer calibration from predefined file
 
     // Init all the sensors
-    // bmx160Init();
+    bmx160Init();
     // bmx160WithCorrectionInit();
-    // lis3mdlInit();
+    lis3mdlInit();
     h3lisInit();
     lps22Init();
-    // ubxGpsInit();
+    ubxGpsInit();
     ads131Init();
     // internalADCInit();
     // batteryVoltageInit();