fix ade7758
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
#include "meter_ade7758.h"
|
||||
#include "spi_bus_manager.h"
|
||||
#include "ade7758.h"
|
||||
#include "meter_events.h"
|
||||
|
||||
@@ -11,16 +12,13 @@
|
||||
#include "freertos/task.h"
|
||||
#include "freertos/semphr.h"
|
||||
|
||||
#include "driver/spi_master.h"
|
||||
#include "driver/gpio.h"
|
||||
|
||||
#define TAG "meter_ade7758"
|
||||
|
||||
// === Configurações de hardware ===
|
||||
#define PIN_NUM_CLK 15
|
||||
#define PIN_NUM_MOSI 2
|
||||
#define PIN_NUM_MISO 4
|
||||
#define PIN_NUM_CS 23
|
||||
#define EEPROM_HOST HSPI_HOST
|
||||
// === Pinos ===
|
||||
#define PIN_NUM_CS 15
|
||||
#define PIN_ADUM_EN 4
|
||||
|
||||
// === Constantes de calibração ===
|
||||
#define VRMS_CAL 4732.78f
|
||||
@@ -28,13 +26,13 @@
|
||||
|
||||
#define METER_READ_INTERVAL_MS 5000
|
||||
|
||||
// === Dados internos ===
|
||||
// === Estrutura interna ===
|
||||
typedef struct {
|
||||
float vrms[3];
|
||||
float irms[3];
|
||||
int watt[3];
|
||||
int var[3]; // reservados
|
||||
int va[3]; // reservados
|
||||
int var[3]; // reservado
|
||||
int va[3]; // reservado
|
||||
} meter_ade7758_internal_data_t;
|
||||
|
||||
static meter_ade7758_internal_data_t meter_data;
|
||||
@@ -42,7 +40,8 @@ static TaskHandle_t meter_task = NULL;
|
||||
static SemaphoreHandle_t meter_mutex = NULL;
|
||||
static uint32_t meter_watchdog_counter = 0;
|
||||
|
||||
// === Utilitários internos ===
|
||||
|
||||
// === Post de evento ===
|
||||
static void meter_ade7758_post_event(const meter_ade7758_internal_data_t *data) {
|
||||
meter_event_data_t evt = {
|
||||
.frequency = 0,
|
||||
@@ -54,22 +53,23 @@ static void meter_ade7758_post_event(const meter_ade7758_internal_data_t *data)
|
||||
memcpy(evt.irms, data->irms, sizeof(evt.irms));
|
||||
memcpy(evt.watt, data->watt, sizeof(evt.watt));
|
||||
|
||||
esp_err_t err = esp_event_post(METER_EVENT, METER_EVENT_DATA_READY,
|
||||
&evt, sizeof(evt), pdMS_TO_TICKS(10));
|
||||
|
||||
esp_err_t err = esp_event_post(METER_EVENT, METER_EVENT_DATA_READY, &evt, sizeof(evt), pdMS_TO_TICKS(10));
|
||||
if (err != ESP_OK) {
|
||||
ESP_LOGW(TAG, "Falha ao emitir evento: %s", esp_err_to_name(err));
|
||||
}
|
||||
}
|
||||
|
||||
// === Task de leitura ===
|
||||
static void meter_ade7758_task_func(void *param) {
|
||||
ESP_LOGI(TAG, "Meter task started");
|
||||
ESP_LOGI(TAG, "Tarefa de medição ADE7758 iniciada");
|
||||
|
||||
meter_ade7758_internal_data_t previous = {0};
|
||||
|
||||
while (true) {
|
||||
meter_ade7758_internal_data_t meterData = {0};
|
||||
|
||||
//ESP_LOGI(TAG, "Tarefa de medição ADE7758 iniciada %d",getVersion());
|
||||
|
||||
meterData.vrms[0] = avrms() / VRMS_CAL;
|
||||
meterData.vrms[1] = bvrms() / VRMS_CAL;
|
||||
meterData.vrms[2] = cvrms() / VRMS_CAL;
|
||||
@@ -97,10 +97,9 @@ static void meter_ade7758_task_func(void *param) {
|
||||
}
|
||||
}
|
||||
|
||||
// === Interface pública: controle ===
|
||||
|
||||
// === Inicialização ===
|
||||
esp_err_t meter_ade7758_init(void) {
|
||||
ESP_LOGI(TAG, "Inicializando medidor ADE7758...");
|
||||
ESP_LOGI(TAG, "Inicializando ADE7758...");
|
||||
|
||||
if (!meter_mutex) {
|
||||
meter_mutex = xSemaphoreCreateMutex();
|
||||
@@ -110,21 +109,38 @@ esp_err_t meter_ade7758_init(void) {
|
||||
}
|
||||
}
|
||||
|
||||
esp_err_t err = Init(EEPROM_HOST, PIN_NUM_MISO, PIN_NUM_MOSI, PIN_NUM_CLK);
|
||||
if (!spi_bus_manager_is_initialized()) {
|
||||
esp_err_t err = spi_bus_manager_init(); // usa pinos padrão
|
||||
if (err != ESP_OK) {
|
||||
ESP_LOGE(TAG, "Erro ao inicializar SPI: %s", esp_err_to_name(err));
|
||||
return err;
|
||||
}
|
||||
}
|
||||
|
||||
vTaskDelay(pdMS_TO_TICKS(10)); // Delay de estabilização
|
||||
|
||||
esp_err_t err = Init(spi_bus_manager_get_host(), -1, -1, -1);
|
||||
if (err != ESP_OK) {
|
||||
ESP_LOGE(TAG, "Erro ao inicializar SPI (%d)", err);
|
||||
ESP_LOGE(TAG, "Erro Init SPI ADE7758: %s", esp_err_to_name(err));
|
||||
return err;
|
||||
}
|
||||
|
||||
err = InitSpi(PIN_NUM_CS);
|
||||
if (err != ESP_OK) {
|
||||
ESP_LOGE(TAG, "Erro ao registrar dispositivo SPI: %s", esp_err_to_name(err));
|
||||
return err;
|
||||
}
|
||||
|
||||
InitSpi(PIN_NUM_CS);
|
||||
gainSetup(INTEGRATOR_OFF, FULLSCALESELECT_0_5V, GAIN_1, GAIN_1);
|
||||
setupDivs(1, 1, 1);
|
||||
setLcycMode(0x00);
|
||||
resetStatus();
|
||||
|
||||
ESP_LOGI(TAG, "ADE7758 inicializado com sucesso.");
|
||||
return ESP_OK;
|
||||
}
|
||||
|
||||
// === Execução ===
|
||||
esp_err_t meter_ade7758_start(void) {
|
||||
if (meter_task) return ESP_ERR_INVALID_STATE;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user