slogic32u3-adc-analog-capture.py

Sipeed SLogic32U3: 32-Channel USB 3.2 Gen2 Logic Analyzer · File : slogic32u3-adc-analog-capture.py · Language : python · Use case : Acquérir des données analogiques via le module ADC optionnel et les convertir en tension.

Example of analog data acquisition via the optional ADC module, with digital-to-voltage conversion.

This code assumes the optional ADC module is recognized by the libsigrok driver as analog channels. It configures sampling at 100 MSa/s and reads raw data. Voltage conversion uses a 3.3V reference over 8 bits, to be adjusted according to the actual module specification.

slogic32u3-adc-analog-capture.py

import libsigrok
import numpy as np

# Hypothèse : Le module ADC est exposé comme des canaux analogiques supplémentaires
# ou via un pilote spécifique. Les canaux analogiques sont souvent indexés après les logiques.
# Exemple : Canaux 32-35 pour les 4 entrées analogiques.

def read_analog_channels():
    ctx = libsigrok.Context()
    drivers = ctx.driver_list()
    driver = next((d for d in drivers if 'slogic' in d.name.lower()), None)
    dev = driver.scan()[0]
    dev.open()
    
    # Activer les canaux analogiques (ex: 4 canaux)
    # Note : La configuration exacte des canaux analogiques dépend du pilote
    dev.config_set(libsigrok.CONF_NUM_ANALOG_CHANNELS, 4)
    dev.config_set(libsigrok.CONF_SAMPLE_RATE, 100000000) # 100 MSa/s
    
    dev.start()
    
    samples = []
    try:
        # Lire quelques paquets
        for _ in range(10):
            packet = dev.receive()
            if packet:
                samples.extend(packet)
    finally:
        dev.stop()
        dev.close()
        
    # Conversion en tension
    # ADC 8 bits, plage 0-3.3V (à vérifier selon le schéma du module ADC)
    # Si les données sont brutes (0-255) :
    data = np.array(samples)
    # Supposons que les données sont entiers 8-bit
    voltages = (data / 255.0) * 3.3
    
    print(f"Tension moyenne Canal 0 : {np.mean(voltages[:len(voltages)//4]):.2f} V")

if __name__ == "__main__":
    read_analog_channels()

← Back to the board