This commit is contained in:
2026-04-14 14:16:11 +02:00
parent 899c8cffbc
commit 8171cab9cb
5 changed files with 14 additions and 30 deletions

View File

@@ -47,7 +47,6 @@ ADS1256::ADS1256(const int8_t DRDY_pin, const int8_t RESET_pin, const int8_t SYN
// Initialization
void ADS1256::InitializeADC()
{
LOG_DEBUG("Initialize ADC");
// Chip select LOW
CS_LOW();
@@ -77,27 +76,22 @@ void ADS1256::InitializeADC()
_STATUS = 0b00110110; // BUFEN and ACAL enabled, Order is MSB, rest is read only
writeRegister(STATUS_REG, _STATUS);
delay(200);
LOG_DEBUG("Status REG OK");
_MUX = 0b00000001; // MUX AIN0+AIN1
writeRegister(MUX_REG, _MUX);
delay(200);
LOG_DEBUG("Mux REG OK");
_ADCON = 0b00000000; // ADCON - CLK: OFF, SDCS: OFF, PGA = 0 (+/- 5 V)
writeRegister(ADCON_REG, _ADCON);
delay(200);
LOG_DEBUG("Adcon REG OK");
updateConversionParameter();
_DRATE = 0b10000010; // 100SPS
writeRegister(DRATE_REG, _DRATE);
delay(200);
LOG_DEBUG("Drate REG OK");
sendDirectCommand(0b11110000); // Offset and self-gain calibration
LOG_DEBUG("Direct Command OK");
delay(200);
_isAcquisitionRunning = false; // MCU will be waiting to start a continuous acquisition
@@ -131,7 +125,6 @@ void ADS1256::stopConversion() // Sending SDATAC to stop the continuous conversi
void ADS1256::setDRATE(uint8_t drate) // Setting DRATE (sampling frequency)
{
LOG_DEBUG("SetDrate ADC");
writeRegister(DRATE_REG, drate);
_DRATE = drate;
delayMicroseconds(500);
@@ -139,7 +132,6 @@ void ADS1256::setDRATE(uint8_t drate) // Setting DRATE (sampling frequency)
void ADS1256::setMUX(uint8_t mux) // Setting MUX (input channel)
{
LOG_DEBUG("SetMux ADC");
writeRegister(MUX_REG, mux);
_MUX = mux;
// delayMicroseconds(500);
@@ -147,7 +139,6 @@ void ADS1256::setMUX(uint8_t mux) // Setting MUX (input channel)
void ADS1256::setPGA(uint8_t pga) // Setting PGA (input voltage range)
{
LOG_DEBUG("SetPga ADC");
_PGA = pga;
_ADCON = readRegister(ADCON_REG); // Read the most recent value of the register

View File

@@ -51,7 +51,7 @@ inline float adcReadChannel(ADS1256 *adc, const uint8_t ch)
{
adc->setMUX(ch);
// scarta 3 conversioni
for (int i = 0; i < 3; i++)
for (int i = 0; i < 5; i++)
{
adc->readSingle();
}

View File

@@ -17,7 +17,7 @@
#include <led.h>
// Defines to enable channel B
#define CH_B_ENABLE
// #define CH_B_ENABLE
// Debug Defines
#define WIFI_SSID "AstroRotaxMonitor"
@@ -32,7 +32,7 @@ void setup()
// Setup Logger
LOG_ATTACH_SERIAL(Serial);
LOG_SET_LEVEL(DebugLogLevel::LVL_DEBUG);
LOG_SET_LEVEL(DebugLogLevel::LVL_INFO);
// Print Processor Info
LOG_DEBUG("ESP32 Chip:", ESP.getChipModel());
@@ -108,37 +108,33 @@ void loop()
{
LOG_ERROR("Unable to Initialize SPI Busses");
LOG_ERROR("5 seconds to restart...");
//vTaskDelay(pdMS_TO_TICKS(5000));
//esp_restart();
vTaskDelay(pdMS_TO_TICKS(5000));
esp_restart();
}
//dev->m_spi_a = std::make_unique<SPIClass*>(&SPI_A);
dev->m_spi_a.reset(&SPI_A);
#ifdef CH_B_ENABLE
//dev->m_spi_b = std::make_unique<SPIClass*>(&SPI_B);
dev->m_spi_b.reset(&SPI_B);
#endif
// Init ADCs
dev->m_adc_a = std::make_unique<ADS1256>(ADC_A_DRDY, ADS1256::PIN_UNUSED, ADS1256::PIN_UNUSED, ADC_A_CS, 2.5, &SPI_A);
LOG_DEBUG("Init ADC A pointer ok");
#ifdef CH_B_ENABLE
dev->m_adc_b = std::make_unique<ADS1256>(ADC_B_DRDY, ADS1256::PIN_UNUSED, ADS1256::PIN_UNUSED, ADC_B_CS, 2.5, &SPI_B);
LOG_DEBUG("Init ADC B pointer ok");
#endif
// Configure ADCs
dev->m_adc_a->InitializeADC();
dev->m_adc_a->setPGA(PGA_1);
dev->m_adc_a->setDRATE(DRATE_7500SPS);
LOG_DEBUG("Init ADC A params ok");
#ifdef CH_B_ENABLE
dev->m_adc_b->InitializeADC();
dev->m_adc_b->setPGA(PGA_1);
dev->m_adc_b->setDRATE(DRATE_7500SPS);
LOG_DEBUG("Init ADC B params ok");
#endif
LOG_DEBUG("Init SPI OK");
//////// INIT I2C INTERFACES ////////
LOG_DEBUG("Init I2C Interfaces");
bool i2c_ok = true;
i2c_ok = Wire.begin();
i2c_ok = Wire.begin(SDA, SCL, 100000);
if (!i2c_ok)
{
LOG_ERROR("Unable to Initialize I2C Bus");
@@ -148,7 +144,7 @@ void loop()
}
// Init IO Expanders
dev->m_ext_io = std::make_unique<ExternalIO>(Wire, dev->m_i2c_mutex, EXPANDER_ALL_INTERRUPT);
// dev->m_ext_io = std::make_unique<ExternalIO>(Wire, dev->m_i2c_mutex, EXPANDER_ALL_INTERRUPT);
//////// INIT REALTIME TASKS PARAMETERS ////////
const rtIgnitionTask::rtTaskParams taskA_params{

View File

@@ -53,12 +53,6 @@
#define ADC_B_CS 21
#define ADC_B_DRDY 47
// =====================
// DIGITAL POT
// =====================
#define POT_A_CS 18
#define POT_B_CS 35
// =====================
// TRIGGER INPUT INTERRUPTS
// =====================

View File

@@ -1,6 +1,7 @@
#include "tasks.h"
#include <esp_timer.h>
#include <datasave.h>
#include <mutex>
//// GLOBAL STATIC FUNCTIONS
@@ -38,7 +39,8 @@ void rtIgnitionTask::rtIgnitionTask_realtime(void *pvParameters)
const rtTaskIOParams rt_rst = params->rt_io; // copy to avoid external override
QueueHandle_t rt_queue = params->rt_queue;
Devices *dev = params->dev.get();
ADS1256 *adc = dev->m_adc_a.get();
ADS1256 *adc = params->name == "rtIgnTask_A" ? dev->m_adc_a.get() : dev->m_adc_b.get();
std::mutex& spi_mutex = params->name == "rtIgnTask_A" ? dev->m_spi_a_mutex : dev->m_spi_b_mutex;
ExternalIO* io = dev->m_ext_io.get();
TaskStatus_t rt_task_info;
@@ -234,6 +236,7 @@ void rtIgnitionTask::rtIgnitionTask_realtime(void *pvParameters)
// read adc channels: pickup12, out12 [ pos + neg ]
if (adc) // read only if adc initialized
{
std::lock_guard<std::mutex> lock (spi_mutex);
uint32_t start_adc_read = esp_timer_get_time();
// from peak detector circuits
ign_box_sts.coils12.peak_p_in = adcReadChannel(adc, ADC_CH_PEAK_12P_IN);
@@ -256,7 +259,7 @@ void rtIgnitionTask::rtIgnitionTask_realtime(void *pvParameters)
// [TODO] code to reset sample and hold and arm trigger level detectors
}
else
vTaskDelay(pdMS_TO_TICKS(1));
vTaskDelay(pdMS_TO_TICKS(2));
// send essage to main loop with ignition info, by copy so local static variable is ok
if (rt_queue)