Potenciómetro digital: El circuito integrado X9C103P

19
17512

En esta ocasión escribiré acerca de un circuito integrado con características muy especiales, un potenciómetro digital. En pocas palabras, es un circuito integrado que tiene la capacidad de variar su resistividad a través de una señal digital.

El circuito integrado X9C103P, un potenciómetro digital capaz de variar la resistividad de un circuito desde un entorno digital. En este post se explicará como utilizar este circuito, utilizando como controlador un Arduino Leonardo

Hasta ahora hemos utilizado algunos potenciómetros como resistencias variables el algunos proyectos.

Potenciómetro tipo «trimmer»
220px-Potentiometer
Potenciómetro de perilla

Como sabemos, al mover la perilla variamos la resistencias entre las patas del potenciómetro. Un potenciómetro digital tiene un funcionamiento similar, pero por ser digital no tenemos que mover una perilla ,sino excitar una entrada del circuito para obtener diferentes resultados.

Potenciómetros digitales

El circuito integrado X9C103P forma parte de una familia de circuitos integrados que tienen la función de un potenciómetro. Entre la «C» y la «P» se coloca una numeración. En este caso es 103, lo que significa 10×10^3. Eso equivale a 10000 Ohm, es decir, 10KOhm por lo que el circuito X9C103P solamente podrá alcanzar un valor máximo de 10K.

Existen los modelos 102 (1K), 104(100 K) y 503(50K). Cada uno es un arreglo de 100 resistencias. En el modelo de 10K cada resistencia es de 100 Ohm. En el modelo de 1 K son 100 resistencias de 10 Ohm; en el modelo de 50K son 100 resistencias de 500 Ohm; en el modelo de 100K son 100 resistencias de 1 K cada una.

Estos potenciómetros pueden ser adquiridos desde Mouser, Jameco, Ebay, Amazon, etc. El precio es bastante accesible, lo cual permite considerar este tipo de circuito como una opción viable para los proyectos en los que sea necesario emplearlos

Características del circuito integrado

El esquemático de esta familia de circuitos integrados es el siguiente:

qRMXa

Pin No.

Nombre del Pin

Descripción

1

INC

Incremento. Cuando se le aplica una señal de onda cuadrada en esta pata el circuito aumenta o reduce el valor de su resistividad dependiendo del estado en que se encuentre la pata U/D

2

U/D

Up/Down. Dependiendo del estado de esta pata cuando se aplique una onda cuadrada en el INC el valor de la resistencia subirá o bajará.

3

VH/RH

Este es el equivalente de una de las patas del potenciómetro, específicamente una de las 2 patas situadas en los extremos.

4

VSS

Voltaje de salida (GND) del circuito. Se conecta a tierra.

5

VW/RW

Este es el equivalente una de las tres patas del potenciómetro, específicamente la pata del centro. Se le llama “wiper”

6

VL/RL

Este es el equivalente de una de las patas del potenciómetro, específicamente una de las 2 patas situadas en los extremos.

7

CS

Esta pata es prácticamente el activador/desactivador del dispositivo. Cuando está en estado LOW es posible cambiar la resistividad del potenciómetro. Una vez pase a un estado HIGH el circuito guardará la resistencia en dicho instante en una memoria no volátil que es capaz de mantener dicho valor por un periodo muy extenso, siendo posible guardar una configuración por un tiempo de hasta 100 años.

8

VCC

Voltaje de entrada (V+) del circuito. Se conecta al voltaje de alimentación.

 

Para configurar este circuito integrado necesitamos una serie de combinaciones de estados HIGH/LOW, lo que hace un poco complicado utilizarlo de forma manual. Sin embargo utilizando un micro controlador como Arduino se hace muy fácil aumentar, reducir y guardar la resistividad en este circuito.

Utilizando el potenciómetro con Arduino

Ahora vamos a armar un sencillo diagrama con el que nos será posible manipular el estado del circuito con Arduino.

X9C103P

Como vemos es muy fácil de usar.

  • Conectamos la pata 1 al pin 2 de Arduino, la pata 2 al pin 3, la pata 7 al pin 4.
  • La pata 4 va a GND y la pata 8 va a V+.
  • Entre las patas 3 y 5, o bien, 5 y 6 es donde medimos la resistencia. Recordemos que en los potenciómetros mecánicos tenemos 2 opciones, medir la resistencia entre la pata 1 y 2 y entre la pata 2 y 3.
  • Acá es lo mismo, solo usaremos la  5 y 6 o la 3 y la 5.

La programación de Arduino se hace completamente sencilla a través del uso de una librería escrita por Timo Fager. Se llama DigiPotX9Cxxx y la podemos encontrar en el siguiente enlace:

http://sites.google.com/site/tfagerscode/home/digipotx9cxxx

Recuerden que hay que copiar el contenido de la carpeta que descargamos en la carpeta libraries en la raíz de Arduino, es decir, la carpeta donde tenemos instalado Arduino IDE.

El código a usar es el siguiente:

Subiendo este código a Arduino, abrimos el Monitor Serial. Con enviar un «1» aumentaremos la resistencia la cantidad de veces que enviemos el uno. Con un «0» o cualquier otro carácter reduciremos la resistencia.

El valor mínimo será cercano a 0 y el valor máximo será próximo a 10K. He aquí un video donde les presento el armado del circuito y el funcionamiento del mismo.

Cualquier duda me la pueden expresar a través de sus comentarios. Saludos.

19 Comentarios

  1. Hola. Gracias por el aporte. Estoy creando una fuente y deseo regular el voltaje con digipot y pulsadores. La cuestión funciona a medias.
    1- Usando la librería. Estas obligado a llamar al método reset() de ella, antes de empezar. En caso contrario, el digipot se inicia con valor de 255 y de ahí no se mueve.
    2- Lo mas importante para mi, es mantener el ultimo valor.(Si ese que dice almacenar 100 años). pero es imposible. Al apagar tiene el problema de que, si no haces reset, vuelve con el valor de 255, y si lo hace, valor 0…..
    3- He intentado pasar de la librería y usarlo a pecho, definiendo las conexiones una a una, y aplicando los cambio por patilla, no hace caso ninguno a ningún cambio.

    Os pongo el programa mezclado. usando la librería y en forma directa. Si podéis arrojar algo de luz al tema, quedaría agradecido. Objetivo principal es que arranque con el ultimo valor……

    #include

    DigiPot potAmp(2,3,4);

    int botonLAmp = A0;
    int botonRAmp = A1;
    int pot = 0;

    int inc = 2;
    int u_d = 3;
    int cs = 4;

    void setup() {
    pinMode( botonLAmp , INPUT) ; //botón Izquierdo Amperios
    pinMode( botonRAmp , INPUT) ; //botón Derecho Amperios

    pinMode( inc , OUTPUT) ;
    pinMode( u_d , OUTPUT) ;
    pinMode( cs , OUTPUT) ;

    Serial.begin(9600);
    // potAmp.reset();
    // potAmp.set(50);
    }

    void loop() {
    int ampL = digitalRead(botonLAmp) ; // leemos el valor de boton Izq Amp
    int ampR = digitalRead(botonRAmp) ; // leemos el valor de boton Der Amp

    if (!ampR){
    digitalWrite(cs ,LOW);

    potAmp.increase(1);

    digitalWrite(inc,HIGH);
    digitalWrite(u_d,HIGH);
    digitalWrite(cs ,HIGH);

    Serial.print(«Derecha = «);
    Serial.println(ampR);
    pot = potAmp.get();
    Serial.print(«Pot = «);
    Serial.println(pot);
    delay(200);
    }
    if (!ampL){
    digitalWrite(cs ,LOW);

    potAmp.decrease(1);

    digitalWrite(inc,HIGH);
    digitalWrite(u_d,LOW);
    digitalWrite(cs ,HIGH);

    Serial.print(«Izquierda = «);
    Serial.println(ampL);
    pot = potAmp.get();
    Serial.print(«Pot = «);
    Serial.println(pot);
    delay(200);
    }
    }

  2. Hola Antonio

    Gracias por su sensacional trabajo. He realizado el circuito descrito, pero no me funciona. Lo he probado con un Arduino Uno, Nano y un Mega2560, y con ninguno de ellos me ha llegado a funcionar. Los X9C103P los he adquirido en China.. podria ser ese el problema?. Gracias y saludos

  3. amigo es lo que me referia, que si puedo poner mas potenciometros por ejemplo 6 para el control de 6 luminarias con un solo arduino, o necesito implementar mas arduinos?

    • Recuerda que estos circuitos solamente trabajan en base a 5 volts y 10 mA. Tienes que pensar muy bien si vas a usarlos para controlar luminarias

  4. Hola
    Muchas gracias por el tutorial.
    Con un potenciometro funciona perfectamente. Pero quiero poner tres n el mismo programa y qe se activen independientemente.
    Sería posible?

  5. Hola, estoy pensando en montar este circuito en una Raspberry Pi pero desconozco a que pin de GPIO debo connectar la pata 1, la 2 y la 7. Sabrías indicar cuales son las salidas de RPI adecuadas. Cualquira valdria o deben ser SPI, I2C u otras siglas que desconozco?

    Muchas gracias y muy buen trabajo!

Dejar respuesta

Please enter your comment!
Please enter your name here