🛠 Lire un potentiomètre avec l'ADC 12 bits
Objetivos
Utilizar el convertidor analógico-digital de la Pico: un SAR de 12 bits, 4 canales a 500 ksps (GP26 = ADC0, GP27 = ADC1, GP28 = ADC2; ADC3 = VSYS/3 y ADC4 = sonda de temperatura interna). Leerás un potenciómetro y mostrarás los valores en la consola serie USB. Atención: la Pico no tiene DAC — el ADC es la única vía analógica, solo de lectura.
Material
- 1 × Raspberry Pi Pico
- 1 × potenciómetro (por ejemplo, 10 kΩ)
- Cables: un extremo del potenciómetro a 3V3, el otro a GND, el cursor (patilla central) a GP26
- Consola serie 115200 baudios (PuTTY,
picocom, etc.) en el puerto USB de la Pico
Código completo
// adc_pot.c — ADC0 (GP26), moyenne sur 16 échantillons
#include <stdio.h>
#include "pico/stdlib.h"
#include "hardware/adc.h"
int main(void) {
stdio_init_all; // console sur USB (stdio_usb)
adc_init;
adc_gpio_init(26); // GP26 en mode ADC
adc_select_input(0); // canal ADC0
while (true) {
uint32_t sum = 0;
for (int i = 0; i < 16; i++) sum += adc_read;
uint16_t raw = sum / 16;
float mv = raw * 3300.0f / 4095.0f;
printf("raw=%u ~%.0f mV\n", raw, mv);
sleep_ms(200);
}
}
Verificación esperada
Al girar el potenciómetro, los valores varían de ~0 a ~4095 (12 bits) y el voltaje calculado sigue 0 → 3,3 V. Los valores pueden tener algo de ruido: es normal, el ADC de la Pico utiliza su propia alimentación de 3,3 V filtrada como referencia, con un offset inherente de aproximadamente 30 mV documentado en la hoja de datos.
Errores frecuentes
- Olvidar
adc_gpio_init(26): la patilla permanece en modo GPIO, la lectura es incorrecta o nula. - Canal incorrecto:
adc_select_input(3)lee VSYS/3,4la temperatura — ¡no tu potenciómetro! - Medir más de 3,3 V: el ADC no soporta más que su alimentación; y GP26-GP29 tienen un diodo hacia IOVDD (por encima de ~3,6 V conduce, y alimentar una patilla con la tarjeta apagada alimenta todo el riel 3V3).
- Esperar precisión: para el ruido, promedia varias muestras; para la exactitud, resta el offset (lectura de un canal a masa) o fuerza el regulador en modo PWM (GPIO23).
stdio_init_allen UART en ejemplos antiguos: conéctate al puerto correcto (USB para stdio_usb).
Otros tutoriales para esta placa
Ejemplos de código para esta placa
clignotante.pyPythonbouton-interruption.pyPythonpwm-servo.pyPythonlecture-adc.pyPythonneopixel.pyPythonoled-i2c.pyPython