Potenciómetro digital

Potenciómetro digital

13 de marzo de 2022

Potenciómetro digital 41010

Quería hacer un control de volumen digital así que me decidí por el 41010. Vamos a ver lo sencillo que es usarlo.

Características principales

  • Resistencia 10k
  • 256 pasos
  • corriente del cursor 1mA
  • Vdd 2.7 - 5.5V
  • Interfaz SPI

Para lo que yo lo quiero, que es controlar el volumen digitalmente, es más que de sobra.

Parte física

Lista de materiales

  • Arduino UNO
  • Potenciómetro digital 41010
  • Amplificador de audio 8403
  • Altavoz 3W / 4ohms

El esquemático de la conexión es el siguiente

Potenciómetro digital 41010

Potenciómetro digital 41010

Fíjate bien en la parte de la conexión del 41010 porque es IMPORTANTE para la parte de programación.

Bajo a la dcha. he dejado como referencia un circuito “equivalente” a lo que estamos haciendo para controlar el volumen.

Parte lógica

Para utilizar este integrado solo tenemos que leer su datasheet y en la sección 5.0 Serial Interface vemos en detalle cómo comunicarnos con él y en la figura 5.1 y 5.2 lo vemos resumido.

El esquema de funcionamiento es el siguiente

  • CS a nivel bajo (preparar para recibir datos)
  • escribir comando
  • escribir valor (0-255)
  • CS a nivel alto (preparar para ejecutar)

El comando es 0x11 puesto que queremos escribir datos para el potenciómetro P0. La traducción es directa y super simple:

/**
MCP41XXX como control de volumen

SDK  ->  13
SI   ->  11
/CS  ->  10
*/

#include <SPI.h>

static const int CS = 10;

// Vamos a usar un solo comando (5.0 Serial Interface)
static const int CMD_WRITE_DATA = 0x11;

/**
@brief  Modificar el volumen en %
@param IN: % del volumen
*/
void volume(int vol)
{
  int val = ((100 - vol) * 255)/ 100;
  
  digitalWrite(CS, LOW);
  SPI.transfer(CMD_WRITE_DATA);
  SPI.transfer(val);
  digitalWrite(CS, HIGH);
}

void setup()
{
  SPI.begin();
  delay(100);
  pinMode(CS, OUTPUT);
  delay(100);
  digitalWrite(CS, HIGH);
}

void loop()
{
  volume(0);
  delay(2000);
  volume(50);
  delay(2000);
  volume(100);
  delay(2000);
}

Como ves, para hacernos la vida más fácil, simplemente vamos a lidiar con valores en % para manejar nuestro potenciómetro. Y justo aquí vemos algo poco intuitivo, y es la forma de obtener el valor que enviamos al potenciómetro. ¿Por qué restamos 100? Fíjate cómo está realizada la conexión física. Te animo a que modifiques la conexión para que la programación sea más intuitiva.

Conclusión

El uso de este potenciómetro digital para el control de volumen ha sido extremadamente sencilla (incluso si te fijas hemos obviado ciertas recomendaciones del fabricante sobre condesadores de bypass y la aplicación “funciona” bien), y el circuito realiza la función que tiene encomendada. Como siempre, nuestra imaginación es el límite. A mi se me ocurre usarlo en un altavoz bluetooth casero controlado mediante Android o conectarlo a la WiFi de casa y controlarlo mediante una página web, o en mi caso usarlo para controlar el volumen de una radio casera hecha con el TEA5767…

Hemos aprendido a utilizar el protocolo SPI y que la forma de realizar las conexiones tiene implicaciones a la hora de programar pudiendo facilitar o hacer más intuitiva la programación desde el mundo físico.