Dein Warenkorb ist gerade leer!
STM32 – Bibliothekensammlung
MCP3421 .c/.h (ADC)
------------------------------------------------------------------
mcp3421.h:
------------------------------------------------------------------
#ifndef MCP3421_H
#define MCP3421_H
#include "stm32h7xx_hal.h"
typedef struct {
I2C_HandleTypeDef *hi2c;
uint8_t address; // meist 0x68
} MCP3421_HandleTypeDef;
HAL_StatusTypeDef MCP3421_ReadValue(MCP3421_HandleTypeDef *hmcp, int32_t *value);
#endif // MCP3421_H
------------------------------------------------------------------
mcp3421.c:
------------------------------------------------------------------
#include "mcp3421.h"
HAL_StatusTypeDef MCP3421_ReadValue(MCP3421_HandleTypeDef *hmcp, int32_t *value) {
if (value == NULL) return HAL_ERROR;
uint8_t data[4];
HAL_StatusTypeDef ret = HAL_I2C_Master_Receive(hmcp->hi2c, hmcp->address << 1, data, 4, HAL_MAX_DELAY);
if (ret != HAL_OK) return ret;
int32_t raw = ((int32_t)data[0] << 16) | ((int32_t)data[1] << 8) | data[2];
if (raw & 0x20000) raw |= 0xFFFC0000; // sign extension
*value = raw;
return HAL_OK;
}
------------------------------------------------------------------
Anwendungsbeispiel:
------------------------------------------------------------------
...
extern I2C_HandleTypeDef hi2c1;
void Test_MCP3421(void) {
MCP3421_HandleTypeDef adc = {
.hi2c = &hi2c1,
.address = 0x68
};
int32_t raw;
if (MCP3421_ReadValue(&adc, &raw) == HAL_OK) {
float voltage = ((float)raw) * 2.048f / 131072.0f; // 18 Bit → ±131072
}
}
...
Tags:

Schreibe einen Kommentar