🛠 Lire l'ADC 12 bits sans griller le SoC : la règle des 1,8 V

BeagleBone Black (TI Sitara AM3358) · intermediaire · Schéma : IMG-beaglebone-black-intermediaire-1-adc-1-8v-lecture-iio.svg — pont diviseur de résistance sur la BeagleBone Black : signal 3,3 V entrant, deux résistances, point milieu vers P9_33 (AIN4), P9_32 VDD_ADC 1,8 V et P9_34 AGND repérés, badge « 1,8 V MAX ».

Objectifs

Utiliser l'ADC 8 canaux 12 bits de l'AM335x via le sous-système IIO de mainline, et surtout intégrer le piège n°1 de la BeagleBone Black côté analogique : les entrées AIN acceptent 1,8 V AU PLUS (alimentation analogique VDD_ADC = 1,8 V sur P9_32), alors que tout le reste de la carte est en 3,3 V. Au-delà de 1,8 V, on abîme le SoC.

Matériel

Code complet

# Repérer le device IIO et les canaux activés
ls /sys/bus/iio/devices/iio:device0/
cat /sys/bus/iio/devices/iio:device0/in_voltage0_label   # vérifier quel AIN
#!/usr/bin/env python3
"""Lit AIN4 (P9_33) sur une BBB mainline. Entrée MAX : 1,8 V !"""
import glob, time

dev = glob.glob("/sys/bus/iio/devices/iio:device*")[0]  # "ti_am335x_adc"
# L'index N dépend des canaux activés dans le DT : vérifier les labels !
CHAN = "in_voltage0_raw"

while True:
    raw = int(open(f"{dev}/{CHAN}").read)     # code 12 bits : 0..4095
    mv  = raw * 1800 / 4095                       # référence pleine échelle 1,8 V
    print(f"raw={raw}  {mv:.0f} mV (entrée directe ; diviseur ?)")
    time.sleep(0.2)

Vérification attendue

Avec le curseur du potentiomètre entre P9_32 (1,8 V) et P9_34 (AGND) vers AIN4, la valeur brute suit 0 à 4095 et les millivolts calculés suivent 0 à 1800. Doigt sur la broche : la valeur dérive (entrée flottante) — preuve que la mesure est vivante.

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels