get mostly one directional comms working

This commit is contained in:
2025-04-27 01:43:55 +02:00
parent af4d8654de
commit 3457b76938
12 changed files with 402 additions and 97 deletions

View File

@@ -1,7 +1,5 @@
#include "ccs811.h"
#define CONFIG_FREERTOS_HZ 100
i2c_device_config_t CCS811_DEV_CFG = {
.dev_addr_length = I2C_ADDR_BIT_LEN_7,
.device_address = CCS811_ADDRESS,

View File

@@ -81,9 +81,7 @@ void ina260_printParams(uint16_t volt, uint16_t cur, uint16_t pow)
float miliVolts = volt * 1.25;
float miliAmps = cur * 1.25;
float power = pow * 10;
cur *= 125;
ESP_LOGI(TAG_INA, "Current: %.3f mA (raw %d)", miliAmps, volt);
cur *= 125;
ESP_LOGI(TAG_INA, "Voltage: %.3f mV (raw %d)", miliVolts, cur);
ESP_LOGI(TAG_INA, "Current: %.3f mA (raw %d)", miliAmps, cur);
ESP_LOGI(TAG_INA, "Voltage: %.3f mV (raw %d)", miliVolts, volt);
ESP_LOGI(TAG_INA, "Power: %.3f mW (raw %d)", power, pow);
}

View File

@@ -84,41 +84,81 @@ void mcp3550_spi_init()
// return value;
// }
// int32_t mcp3550_read(uint8_t cs_pin)
// {
// uint8_t rx_buf[4] = {0};
// uint32_t timeout_us = MCP3550_TIMEOUT_MS * 1000;
// int64_t start = esp_timer_get_time();
// // Start conversion
// mcp23018_set_pin(MCP23018_DEV_HANDLE, cs_pin, 0); // CS LOW
// // Wait until MISO/SDO goes LOW = DR ready
// while (gpio_get_level(MCP3550_MISO_GPIO)) {
// if ((esp_timer_get_time() - start) > timeout_us) {
// ESP_LOGW(TAG_MICS, "Timeout waiting for MISO=0 on CS %u", cs_pin);
// mcp23018_set_pin(MCP23018_DEV_HANDLE, cs_pin, 1); // CS HIGH
// return INT32_MIN;
// }
// esp_rom_delay_us(10); // micro delay
// }
// // Data is ready, do full SPI read
// spi_transaction_t trans = {
// .length = 25, // 25 bits
// .rx_buffer = rx_buf,
// };
// esp_err_t err = spi_device_transmit(mcp3550_handle, &trans);
// mcp23018_set_pin(MCP23018_DEV_HANDLE, cs_pin, 1); // CS HIGH to start next conversion
// if (err != ESP_OK) {
// ESP_LOGE(TAG_MICS, "SPI transmit failed");
// return INT32_MIN;
// }
// // Extract 22-bit result
// uint32_t raw = ((rx_buf[0] & 0x3F) << 16) | (rx_buf[1] << 8) | rx_buf[2];
// // Sign-extend 22-bit value
// int32_t value = raw;
// if (value & (1 << 21)) value |= 0xFFC00000;
// return value;
// }
int32_t mcp3550_read(uint8_t cs_pin)
{
uint8_t rx_buf[4] = {0};
uint32_t timeout_us = MCP3550_TIMEOUT_MS * 1000;
uint32_t data = 0;
int64_t start = esp_timer_get_time();
uint32_t timeout_us = MCP3550_TIMEOUT_MS * 1000;
// Start conversion
mcp23018_set_pin(MCP23018_DEV_HANDLE, cs_pin, 0); // CS LOW
// CS LOW
mcp23018_set_pin(MCP23018_DEV_HANDLE, cs_pin, 0);
// Wait until MISO/SDO goes LOW = DR ready
// Wait for DR (MISO LOW)
while (gpio_get_level(MCP3550_MISO_GPIO)) {
if ((esp_timer_get_time() - start) > timeout_us) {
ESP_LOGW(TAG_MICS, "Timeout waiting for MISO=0 on CS %u", cs_pin);
mcp23018_set_pin(MCP23018_DEV_HANDLE, cs_pin, 1); // CS HIGH
return INT32_MIN;
}
esp_rom_delay_us(10); // micro delay
vTaskDelay(pdMS_TO_TICKS(10)); // Wait 1 tick (e.g., 1ms)
}
// Data is ready, do full SPI read
spi_transaction_t trans = {
.length = 25, // 25 bits
.rx_buffer = rx_buf,
};
esp_err_t err = spi_device_transmit(mcp3550_handle, &trans);
mcp23018_set_pin(MCP23018_DEV_HANDLE, cs_pin, 1); // CS HIGH to start next conversion
if (err != ESP_OK) {
ESP_LOGE(TAG_MICS, "SPI transmit failed");
return INT32_MIN;
// Clock out 25 bits
for (int i = 0; i < 25; i++) {
gpio_set_level(MCP3550_SCK_GPIO, 1);
esp_rom_delay_us(5); // small delay to simulate clock high
data = (data << 1) | gpio_get_level(MCP3550_MISO_GPIO);
gpio_set_level(MCP3550_SCK_GPIO, 0);
esp_rom_delay_us(5); // small delay to simulate clock low
}
// Extract 22-bit result
uint32_t raw = ((rx_buf[0] & 0x3F) << 16) | (rx_buf[1] << 8) | rx_buf[2];
mcp23018_set_pin(MCP23018_DEV_HANDLE, cs_pin, 1); // CS HIGH
// Extract 22-bit value (bits [23:2])
uint32_t raw = (data >> 2) & 0x3FFFFF;
// Sign-extend 22-bit value
int32_t value = raw;

View File

@@ -7,8 +7,6 @@
#include "esp_log.h"
#include "buscfg.h"
#define CONFIG_FREERTOS_HZ 100
#define MCP3550_SPS 3.75f
#define MCP3550_CONVERSION_MS ((int)(1000.0f / MCP3550_SPS)) // ~267ms

View File

@@ -262,6 +262,8 @@ void LoRaConfig(uint8_t spreadingFactor, uint8_t bandwidth, uint8_t codingRate,
SX126X_IRQ_NONE //interrupts on DIO3
);
ESP_LOGI(TAG, "Almost done setting LoRa");
// Receive state no receive timeoout
SetRx(0xFFFFFF);
}