58 lines
1.4 KiB
C++
58 lines
1.4 KiB
C++
#pragma once
|
|
|
|
// Library defines
|
|
#define ADS1256_SPI_ALREADY_STARTED
|
|
|
|
// System Includes
|
|
#include <memory>
|
|
|
|
// Device Libraries
|
|
#include <ADS1256.h>
|
|
#include <AD5292.h>
|
|
#include <PCA95x5.h>
|
|
|
|
// ADC Channel mapping
|
|
#define ADC_CH_PEAK_12P_IN SING_0
|
|
#define ADC_CH_PEAK_12N_IN SING_1
|
|
#define ADC_CH_PEAK_34P_IN SING_2
|
|
#define ADC_CH_PEAK_34N_IN SING_3
|
|
#define ADC_CH_PEAK_12P_OUT SING_4
|
|
#define ADC_CH_PEAK_12N_OUT SING_5
|
|
#define ADC_CH_PEAK_34P_OUT SING_6
|
|
#define ADC_CH_PEAK_34N_OUT SING_7
|
|
|
|
// Device Pointer structs for tasks
|
|
struct Devices
|
|
{
|
|
std::unique_ptr<SPIClass> m_spi_a = nullptr;
|
|
std::unique_ptr<SPIClass> m_spi_b = nullptr;
|
|
|
|
std::unique_ptr<AD5292> m_pot_a = nullptr;
|
|
std::unique_ptr<AD5292> m_pot_b = nullptr;
|
|
|
|
std::unique_ptr<ADS1256> m_adc_a = nullptr;
|
|
std::unique_ptr<ADS1256> m_adc_b = nullptr;
|
|
|
|
std::unique_ptr<PCA9555> m_expander_a = nullptr;
|
|
std::unique_ptr<PCA9555> m_expander_b = nullptr;
|
|
std::unique_ptr<PCA9555> m_expander_inputs_ab = nullptr;
|
|
|
|
std::mutex m_spi_a_mutex;
|
|
std::mutex m_spi_b_mutex;
|
|
|
|
std::mutex m_i2c_mutex;
|
|
};
|
|
|
|
// Adc read channel wrapper to selet mux before reading
|
|
inline float adcReadChannel(ADS1256 *adc, const uint8_t ch)
|
|
{
|
|
adc->setMUX(ch);
|
|
// scarta 3 conversioni
|
|
for (int i = 0; i < 3; i++)
|
|
{
|
|
adc->readSingle();
|
|
}
|
|
// ora lettura valida a 30kSPS → ~100 µs di settling
|
|
return adc->convertToVoltage(adc->readSingle());
|
|
}
|