🛠 Lire un potentiomètre avec l'ADC 12 bits
Objectifs
Lire un potentiomètre sur une vraie entrée ADC (GP26-GP28 uniquement, GP29 étant détournée vers le moniteur VSYS/3 de la radio), convertir la valeur brute en pourcentage, et comprendre l'offset d'environ 30 mV inhérent à l'alimentation ADC filtrée de la carte.
Matériel
- Pico 2 W
- Potentiomètre 10 kOhm
- Breadboard et cables
- MicroPython >= v1.25.0 (firmware RPI_PICO2_W) ou pico-sdk
Code complet
# main.py - MicroPython, potentiomètre sur GP26 (ADC0)
import machine, time
pot = machine.ADC(26)
def lire_pct:
brut = pot.read_u16 >> 4 # 12 bits
# offset ~30 mV du a la filtre d'alim ADC (datasheet paragraphe 3.3)
offset = int(30.0 / 3300.0 * 4095)
if brut > offset:
brut -= offset
return brut * 100 // (4095 - offset)
while True:
print("Potentiometre :", lire_pct, "%")
time.sleep_ms(500)
En C, même principe avec adc_init, adc_gpio_init(26), adc_select_input(0) et adc_read.
Vérification attendue
En tournant le potentiomètre à fond, la valeur affichée balaye 0 % à 100 % de façon continue. Au repos, la lecture est stable à quelques unités près ; le canal masse renvoie une valeur proche de zéro après soustraction de l'offset.
Erreurs fréquentes
- Utiliser GP29 comme entrée libre : sur la Pico 2 W, ADC3/GP29 est partage avec l'horloge SPI du CYW43 et ne lit que le VSYS, uniquement quand la radio est inactive.
- Depasser 3,3 V (voire ~3,6 V max) sur GP26-GP28 : diode de protection vers IOVDD qui peut realimenter une carte eteinte.
- Ignorer l'offset d'environ 30 mV : le 0 % remonte a 30-40 unités.
- Ne pas decaler read_u16 de 4 bits : on croit lire du 16 bits alors que la resolution reelle est 12 bits.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
clignotante.pyPythonbouton-interruption.pyPythonpwm-servo.pyPythonlecture-adc.pyPythonneopixel.pyPythonoled-i2c.pyPython