I2C …

I2C-Scan Beispiel

------------------------------------------------------------------
I2C Bus Scan:
------------------------------------------------------------------
#include "stm32h7xx_hal.h"
#include <stdio.h>

extern I2C_HandleTypeDef hi2c2;

void I2C_BusScan(I2C_HandleTypeDef *hi2c) {
    printf("I2C-Scan gestartet (Bus: %s)...\r\n", (hi2c == &hi2c1) ? "I2C1" :
                                                  (hi2c == &hi2c2) ? "I2C2" : "Unbekannt");

    for (uint8_t addr = 1; addr < 128; addr++) {
        if (HAL_I2C_IsDeviceReady(hi2c, addr << 1, 2, 10) == HAL_OK) {
            printf(" - Gerät gefunden bei 0x%02X (7bit)\r\n", addr);
        }
    }

    printf("I2C-Scan abgeschlossen.\r\n");
}
------------------------------------------------------------------
Anwendungsbeispiel:
------------------------------------------------------------------
...
void StartDefaultTask(void *argument) {
    HAL_Delay(500); // Warten bis alles hochgefahren

    I2C_BusScan(&hi2c2); // Oder &hi2c1, je nach Bus

    for (;;) {
        osDelay(1000);
    }
}
...
------------------------------------------------------------------
I2C MUX Scan:
------------------------------------------------------------------
#include "pca9545.h"
#include "stm32h7xx_hal.h"
#include <stdio.h>

extern I2C_HandleTypeDef hi2c2;

void I2C_Scan_MuxChannel(PCA9545_HandleTypeDef *mux, uint8_t channel) {
    if (channel > 3) {
        printf("Ungültiger Kanal: %d\r\n", channel);
        return;
    }

    // Aktiviere nur diesen einen Kanal
    if (PCA9545_SelectChannel(mux, channel) != HAL_OK) {
        printf("Fehler beim Aktivieren von Kanal %d\r\n", channel);
        return;
    }

    HAL_Delay(2); // kleine Pause nach Umschaltung

    printf("🔍 Scan auf PCA9545-Kanal %d gestartet...\r\n", channel);

    for (uint8_t addr = 1; addr < 128; addr++) {
        if (HAL_I2C_IsDeviceReady(mux->hi2c, addr << 1, 2, 10) == HAL_OK) {
            printf(" - Gerät gefunden bei 0x%02X\r\n", addr);
        }
    }

    printf("✅ Scan auf Kanal %d abgeschlossen.\r\n", channel);
}
------------------------------------------------------------------
Anwendungsbeispiel:
------------------------------------------------------------------
...
void StartDefaultTask(void *argument) {
    PCA9545_HandleTypeDef mux = {
        .hi2c = &hi2c2,
        .address = 0x70 // Je nach Verdrahtung A0-A2
    };

    HAL_Delay(500);

    for (uint8_t ch = 0; ch < 4; ch++) {
        I2C_Scan_MuxChannel(&mux, ch);
        HAL_Delay(100);
    }

    while (1) {
        osDelay(1000);
    }
}
...

Tags:

Comments

Schreibe einen Kommentar

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

Search


Categories


Recent Posts


Tags