adc ok
This commit is contained in:
@@ -47,7 +47,6 @@ ADS1256::ADS1256(const int8_t DRDY_pin, const int8_t RESET_pin, const int8_t SYN
|
|||||||
// Initialization
|
// Initialization
|
||||||
void ADS1256::InitializeADC()
|
void ADS1256::InitializeADC()
|
||||||
{
|
{
|
||||||
LOG_DEBUG("Initialize ADC");
|
|
||||||
// Chip select LOW
|
// Chip select LOW
|
||||||
CS_LOW();
|
CS_LOW();
|
||||||
|
|
||||||
@@ -77,27 +76,22 @@ void ADS1256::InitializeADC()
|
|||||||
_STATUS = 0b00110110; // BUFEN and ACAL enabled, Order is MSB, rest is read only
|
_STATUS = 0b00110110; // BUFEN and ACAL enabled, Order is MSB, rest is read only
|
||||||
writeRegister(STATUS_REG, _STATUS);
|
writeRegister(STATUS_REG, _STATUS);
|
||||||
delay(200);
|
delay(200);
|
||||||
LOG_DEBUG("Status REG OK");
|
|
||||||
|
|
||||||
_MUX = 0b00000001; // MUX AIN0+AIN1
|
_MUX = 0b00000001; // MUX AIN0+AIN1
|
||||||
writeRegister(MUX_REG, _MUX);
|
writeRegister(MUX_REG, _MUX);
|
||||||
delay(200);
|
delay(200);
|
||||||
LOG_DEBUG("Mux REG OK");
|
|
||||||
|
|
||||||
_ADCON = 0b00000000; // ADCON - CLK: OFF, SDCS: OFF, PGA = 0 (+/- 5 V)
|
_ADCON = 0b00000000; // ADCON - CLK: OFF, SDCS: OFF, PGA = 0 (+/- 5 V)
|
||||||
writeRegister(ADCON_REG, _ADCON);
|
writeRegister(ADCON_REG, _ADCON);
|
||||||
delay(200);
|
delay(200);
|
||||||
LOG_DEBUG("Adcon REG OK");
|
|
||||||
|
|
||||||
updateConversionParameter();
|
updateConversionParameter();
|
||||||
|
|
||||||
_DRATE = 0b10000010; // 100SPS
|
_DRATE = 0b10000010; // 100SPS
|
||||||
writeRegister(DRATE_REG, _DRATE);
|
writeRegister(DRATE_REG, _DRATE);
|
||||||
delay(200);
|
delay(200);
|
||||||
LOG_DEBUG("Drate REG OK");
|
|
||||||
|
|
||||||
sendDirectCommand(0b11110000); // Offset and self-gain calibration
|
sendDirectCommand(0b11110000); // Offset and self-gain calibration
|
||||||
LOG_DEBUG("Direct Command OK");
|
|
||||||
delay(200);
|
delay(200);
|
||||||
|
|
||||||
_isAcquisitionRunning = false; // MCU will be waiting to start a continuous acquisition
|
_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)
|
void ADS1256::setDRATE(uint8_t drate) // Setting DRATE (sampling frequency)
|
||||||
{
|
{
|
||||||
LOG_DEBUG("SetDrate ADC");
|
|
||||||
writeRegister(DRATE_REG, drate);
|
writeRegister(DRATE_REG, drate);
|
||||||
_DRATE = drate;
|
_DRATE = drate;
|
||||||
delayMicroseconds(500);
|
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)
|
void ADS1256::setMUX(uint8_t mux) // Setting MUX (input channel)
|
||||||
{
|
{
|
||||||
LOG_DEBUG("SetMux ADC");
|
|
||||||
writeRegister(MUX_REG, mux);
|
writeRegister(MUX_REG, mux);
|
||||||
_MUX = mux;
|
_MUX = mux;
|
||||||
// delayMicroseconds(500);
|
// 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)
|
void ADS1256::setPGA(uint8_t pga) // Setting PGA (input voltage range)
|
||||||
{
|
{
|
||||||
LOG_DEBUG("SetPga ADC");
|
|
||||||
_PGA = pga;
|
_PGA = pga;
|
||||||
_ADCON = readRegister(ADCON_REG); // Read the most recent value of the register
|
_ADCON = readRegister(ADCON_REG); // Read the most recent value of the register
|
||||||
|
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ inline float adcReadChannel(ADS1256 *adc, const uint8_t ch)
|
|||||||
{
|
{
|
||||||
adc->setMUX(ch);
|
adc->setMUX(ch);
|
||||||
// scarta 3 conversioni
|
// scarta 3 conversioni
|
||||||
for (int i = 0; i < 3; i++)
|
for (int i = 0; i < 5; i++)
|
||||||
{
|
{
|
||||||
adc->readSingle();
|
adc->readSingle();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
#include <led.h>
|
#include <led.h>
|
||||||
|
|
||||||
// Defines to enable channel B
|
// Defines to enable channel B
|
||||||
#define CH_B_ENABLE
|
// #define CH_B_ENABLE
|
||||||
|
|
||||||
// Debug Defines
|
// Debug Defines
|
||||||
#define WIFI_SSID "AstroRotaxMonitor"
|
#define WIFI_SSID "AstroRotaxMonitor"
|
||||||
@@ -32,7 +32,7 @@ void setup()
|
|||||||
|
|
||||||
// Setup Logger
|
// Setup Logger
|
||||||
LOG_ATTACH_SERIAL(Serial);
|
LOG_ATTACH_SERIAL(Serial);
|
||||||
LOG_SET_LEVEL(DebugLogLevel::LVL_DEBUG);
|
LOG_SET_LEVEL(DebugLogLevel::LVL_INFO);
|
||||||
|
|
||||||
// Print Processor Info
|
// Print Processor Info
|
||||||
LOG_DEBUG("ESP32 Chip:", ESP.getChipModel());
|
LOG_DEBUG("ESP32 Chip:", ESP.getChipModel());
|
||||||
@@ -108,37 +108,33 @@ void loop()
|
|||||||
{
|
{
|
||||||
LOG_ERROR("Unable to Initialize SPI Busses");
|
LOG_ERROR("Unable to Initialize SPI Busses");
|
||||||
LOG_ERROR("5 seconds to restart...");
|
LOG_ERROR("5 seconds to restart...");
|
||||||
//vTaskDelay(pdMS_TO_TICKS(5000));
|
vTaskDelay(pdMS_TO_TICKS(5000));
|
||||||
//esp_restart();
|
esp_restart();
|
||||||
}
|
}
|
||||||
//dev->m_spi_a = std::make_unique<SPIClass*>(&SPI_A);
|
dev->m_spi_a.reset(&SPI_A);
|
||||||
#ifdef CH_B_ENABLE
|
#ifdef CH_B_ENABLE
|
||||||
//dev->m_spi_b = std::make_unique<SPIClass*>(&SPI_B);
|
dev->m_spi_b.reset(&SPI_B);
|
||||||
#endif
|
#endif
|
||||||
// Init ADCs
|
// 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);
|
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
|
#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);
|
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
|
#endif
|
||||||
// Configure ADCs
|
// Configure ADCs
|
||||||
dev->m_adc_a->InitializeADC();
|
dev->m_adc_a->InitializeADC();
|
||||||
dev->m_adc_a->setPGA(PGA_1);
|
dev->m_adc_a->setPGA(PGA_1);
|
||||||
dev->m_adc_a->setDRATE(DRATE_7500SPS);
|
dev->m_adc_a->setDRATE(DRATE_7500SPS);
|
||||||
LOG_DEBUG("Init ADC A params ok");
|
|
||||||
#ifdef CH_B_ENABLE
|
#ifdef CH_B_ENABLE
|
||||||
dev->m_adc_b->InitializeADC();
|
dev->m_adc_b->InitializeADC();
|
||||||
dev->m_adc_b->setPGA(PGA_1);
|
dev->m_adc_b->setPGA(PGA_1);
|
||||||
dev->m_adc_b->setDRATE(DRATE_7500SPS);
|
dev->m_adc_b->setDRATE(DRATE_7500SPS);
|
||||||
LOG_DEBUG("Init ADC B params ok");
|
|
||||||
#endif
|
#endif
|
||||||
LOG_DEBUG("Init SPI OK");
|
LOG_DEBUG("Init SPI OK");
|
||||||
|
|
||||||
//////// INIT I2C INTERFACES ////////
|
//////// INIT I2C INTERFACES ////////
|
||||||
LOG_DEBUG("Init I2C Interfaces");
|
LOG_DEBUG("Init I2C Interfaces");
|
||||||
bool i2c_ok = true;
|
bool i2c_ok = true;
|
||||||
i2c_ok = Wire.begin();
|
i2c_ok = Wire.begin(SDA, SCL, 100000);
|
||||||
if (!i2c_ok)
|
if (!i2c_ok)
|
||||||
{
|
{
|
||||||
LOG_ERROR("Unable to Initialize I2C Bus");
|
LOG_ERROR("Unable to Initialize I2C Bus");
|
||||||
@@ -148,7 +144,7 @@ void loop()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Init IO Expanders
|
// 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 ////////
|
//////// INIT REALTIME TASKS PARAMETERS ////////
|
||||||
const rtIgnitionTask::rtTaskParams taskA_params{
|
const rtIgnitionTask::rtTaskParams taskA_params{
|
||||||
|
|||||||
@@ -53,12 +53,6 @@
|
|||||||
#define ADC_B_CS 21
|
#define ADC_B_CS 21
|
||||||
#define ADC_B_DRDY 47
|
#define ADC_B_DRDY 47
|
||||||
|
|
||||||
// =====================
|
|
||||||
// DIGITAL POT
|
|
||||||
// =====================
|
|
||||||
#define POT_A_CS 18
|
|
||||||
#define POT_B_CS 35
|
|
||||||
|
|
||||||
// =====================
|
// =====================
|
||||||
// TRIGGER INPUT INTERRUPTS
|
// TRIGGER INPUT INTERRUPTS
|
||||||
// =====================
|
// =====================
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
#include "tasks.h"
|
#include "tasks.h"
|
||||||
#include <esp_timer.h>
|
#include <esp_timer.h>
|
||||||
#include <datasave.h>
|
#include <datasave.h>
|
||||||
|
#include <mutex>
|
||||||
|
|
||||||
//// GLOBAL STATIC FUNCTIONS
|
//// 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
|
const rtTaskIOParams rt_rst = params->rt_io; // copy to avoid external override
|
||||||
QueueHandle_t rt_queue = params->rt_queue;
|
QueueHandle_t rt_queue = params->rt_queue;
|
||||||
Devices *dev = params->dev.get();
|
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();
|
ExternalIO* io = dev->m_ext_io.get();
|
||||||
|
|
||||||
TaskStatus_t rt_task_info;
|
TaskStatus_t rt_task_info;
|
||||||
@@ -234,6 +236,7 @@ void rtIgnitionTask::rtIgnitionTask_realtime(void *pvParameters)
|
|||||||
// read adc channels: pickup12, out12 [ pos + neg ]
|
// read adc channels: pickup12, out12 [ pos + neg ]
|
||||||
if (adc) // read only if adc initialized
|
if (adc) // read only if adc initialized
|
||||||
{
|
{
|
||||||
|
std::lock_guard<std::mutex> lock (spi_mutex);
|
||||||
uint32_t start_adc_read = esp_timer_get_time();
|
uint32_t start_adc_read = esp_timer_get_time();
|
||||||
// from peak detector circuits
|
// from peak detector circuits
|
||||||
ign_box_sts.coils12.peak_p_in = adcReadChannel(adc, ADC_CH_PEAK_12P_IN);
|
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
|
// [TODO] code to reset sample and hold and arm trigger level detectors
|
||||||
}
|
}
|
||||||
else
|
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
|
// send essage to main loop with ignition info, by copy so local static variable is ok
|
||||||
if (rt_queue)
|
if (rt_queue)
|
||||||
|
|||||||
Reference in New Issue
Block a user