🛠 Lire un potentiomètre avec l'ADC 12 bits
Objetivos
Leer un potenciómetro en una entrada ADC real (solo GP26-GP28, ya que GP29 está desviado al monitor VSYS/3 de la radio), convertir el valor bruto en porcentaje y comprender el offset de aproximadamente 30 mV inherente a la alimentación ADC filtrada de la placa.
Material
- Pico 2 W
- Potenciómetro de 10 kOhm
- Placa de pruebas (breadboard) y cables
- MicroPython >= v1.25.0 (firmware RPI_PICO2_W) o pico-sdk
Código completo
# main.py - MicroPython, potentiometre 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, el mismo principio con adc_init, adc_gpio_init(26), adc_select_input(0) y adc_read.
Verificación esperada
Al girar el potenciómetro a fondo, el valor mostrado recorre continuamente del 0 % al 100 %. En reposo, la lectura es estable con una desviación de algunas unidades; el canal conectado a masa devuelve un valor cercano a cero tras restar el offset.
Errores frecuentes
- Usar GP29 como entrada libre: en la Pico 2 W, ADC3/GP29 está compartido con el reloj SPI del CYW43 y solo lee el VSYS, únicamente cuando la radio está inactiva.
- Superar los 3,3 V (o ~3,6 V máx.) en GP26-GP28: diodo de protección hacia IOVDD que puede realimentar una placa apagada.
- Ignorar el offset de aproximadamente 30 mV: el 0 % sube a 30-40 unidades.
- No desplazar read_u16 4 bits: se cree leer 16 bits cuando la resolución real es de 12 bits.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
clignotante.pyPythonbouton-interruption.pyPythonpwm-servo.pyPythonlecture-adc.pyPythonneopixel.pyPythonoled-i2c.pyPython