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:

Comments

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Search


Categories


Recent Posts


Tags