in

Potenciómetros Digitales: La consola soñada

Sin dudas el polvillo y la suciedad que flotan en el ambiente son los peores enemigos de los clásicos potenciómetros mecánicos deslizantes o rotativos. Si a esta realidad le sumamos el paso del tiempo y su inevitable desgaste por rozamiento en algún momento (el menos oportuno, claro) el potenciómetro comenzará a introducir desagradables ruidos provocados por su uso y tendremos roturas irreparables en su interior. Seguramente has oído hablar de los potenciómetros digitales; ven, aprende a usarlos y olvídate de los viejos sistemas mecánicos. No más ruidos, no más fallas, solo música.

Luego de haber sufrido y padecido durante muchos años la, a veces pobre, calidad de los potenciómetros mecánicos utilizados en costosos equipos de audio, te invitamos en este artículo a conocer el modo de aprovechar las ventajas de los potenciómetros digitales que han llegado para solucionar un problema insoluble hasta hace poco tiempo: su deterioro por envejecimiento.

Catalyst Semiconductor Inc. posee entre su amplia gama de productos, una serie de circuitos integrados concebidos para ser utilizados como potenciómetros o como resistores variables sencillos y que pueden ser operados mediante el práctico y eficaz bus I2C, a través de un microcontrolador. El CAT5269 posee en su encapsulado SOIC de 24 pines, dos potenciómetros digitalmente programables (DPPs) con su control lógico y una memoria RAM no volátil (NVRAM) de 18 bytes. Cada potenciómetro consiste básicamente en una serie de elementos resistivos que poseen en sus extremos una conexión externa (RH – RL) y pueden sumar en toda su extensión valores de 50 KOhms o 100 KOhms según el modelo seleccionado. Los puntos de unión entre las unidades resistivas son conectados al virtual cursor central (wiper) mediante llaves CMOS y poseen también su correspondiente conexión al exterior (RW).

Estructura interna del CAT5269

El control de los potenciómetros se basa en la utilización apropiada de las instrucciones que se le envían a través del bus SDA – SCL y que son muy sencillas de interpretar. Cada instrucción es una “palabra” de 8 bits al igual que el identificador de dispositivo dentro del bus y los valores que almacena cada registro.

Qué, cómo y cuando.
Para comenzar a “dialogar” con el circuito integrado debes llamarlo por su nombre. Todos los que se encuentren conectados y operativos dentro del bus deben saber a quién le estarás hablando. La forma de hacerlo es con el primer BYTE luego de abrir la comunicación en el bus. La condición de START que indica el fabricante es la misma utilizada en el bus I2C y se trata del pasaje desde un estado alto a uno bajo del pin SDA, mientras la línea SCL se encuentra en estado alto. A través de un microcontrolador programado en Basic será tan sencillo como poner BSTART y ya. Una vez abierto el bus por parte del dispositivo maestro, se envía el byte que es la dirección o nombre del dispositivo dentro del bus.

Dirección del CAT5269 dentro del bus I2C

Los cuatro bits más significativos (MSB) identifican al dispositivo y son fijos. “0101” será la indicación dentro del bus que signifique que se estará “dialogando” con un potenciómetro digital CAT5269. Los cuatro bits siguientes A3-A0 serán los utilizados para identificar al circuito integrado dentro de un grupo de iguales y se definen por hardware. Dicho en cristiano significa lo siguiente: A3, A2, A1 y A0 son pines que poseen conexión al exterior del circuito integrado (pines 24, 11, 14 y 2 respectivamente). Colocando estos pines a VCC (positivo de la tensión de alimentación) o a VSS (GND) le indicarás al IC que ese pin estará a un 1 o 0 lógico y ese dato será reflejado en los últimos cuatro bits de la dirección (Slave Address Byte).

Por ejemplo, si colocas los cuatro pines a GND el byte resultaría ser “0101000”. Los cuatro primeros son fijos y los cuatro últimos se “programan” por hardware, es decir, los colocas tú a GND o a VCC al diseñar la placa de circuito impreso. Si en cambio pusiéras A3 a VCC, A2 y A1 a GND y A0 a VCC el byte te quedaría “01011001”. En lenguaje de programación BASIC para microcontroladores, sólo es necesario que escribas  BUSOUT %01011001 y se enviará al bus la dirección del IC que estamos solicitando. Con cuatro bits puedes manejar hasta 16 circuitos integrados conectados todos al mismo bus de dos cables, comandados por un sencillo microcontrolador. 16 potenciómetros estéreo que no se romperán ni harán ruido jamás.

Luego del byte de dirección (Address) viene la instrucción que le darás al potenciómetro. Es decir, el trabajo que quieras que él haga. Las instrucciones son nueve, se encuentran detalladas en la tabla número 3 del datasheet del producto y las cuatro primeras a destacar son las siguientes:

  • Read Wiper Control Register – Esta instrucción le indicará al IC que leerás el valor que posee el registro de control del wiper (cursor).
  • Write Wiper Control Register  – Con esta le indicarás que cambiará la posición actual del wiper del potenciómetro seleccionado
  • Read Data Register – Sólo leerás el contenido de un dato dentro de los registros
  • Write Data Register – Escribirás un valor dentro de un registro seleccionado.

Los primeros dos registros mencionados no se cargan en la NVRAM y son volátiles, es decir, se pierden al quitar la energía al IC. Este dato es muy importante a tener en cuenta ya que al energizar un sistema, los datos de estos registros pueden adquirir cualquier valor, siendo esta una situación que debe contemplarse en el firmware del microcontrolador que operará los potenciómetros.
Al igual que con el direccionamiento la instrucción posee 8 bits y los enviarás con otra instrucción BUSOUT. La estructura del byte se puede desglosar entre los cuatro bits más significativos que indicarán  la operación que deseamos que el potenciómetro realice (Instruction Opcode) y los cuatro menos significativos que apuntarán a cuál de los dos potenciómetros te referirás en dicha instrucción. Por último y completando la secuencia llega un tercer byte. En éste vendrá  contenido el dato respectivo a la instrucción que hayas indicado al IC. Por ejemplo le enviarás el nuevo punto de posición del cursor del potenciómetro R0 que se escribirá con la instrucción Write Wiper Control Register.

Recuerda que hay dos potenciómetros individuales a manejar en un encapsulado: R0 y R1, por lo tanto si ambos constituyen un control conjunto de una señal de audio estéreo, las instrucciones enunciadas hasta aquí se deberán repetir para cada potenciómetro a fin de lograr una actuación conjunta. Si en cambio son controles individuales de señales monoaurales, bastará con instrucciones independientes para cada potenciómetro. Por último se cierra el bus con BSTOP, lo que equivaldría a pasar la línea SDA de un estado bajo a uno alto, mientras la línea SCL se encuentre en estado alto.

Todos potenciómetros mecánicos, todos propensos a fallar tarde o temprano

Luego existen otras cuatro instrucciones que relacionan el uso de los datos almacenados en los registros (que habéis escrito con la cuarta instrucción detallada antes) y cómo los mismos son enviados desde o hacia el control del cursor central o wiper. Las instrucciones se dividen en XFR para operar de forma individual en cada potenciómetro y las instrucciones GANG XFR que son para actuar en ambos potenciómetros a la vez, es decir, ideales para trabajos en audio estéreo.

Por último te encontrarás con una novena instrucción que servirá para incrementar o decrementar el valor del registro que gobierna la posición del cursor de a una unidad por vez. El incremento se efectiviza colocando en estado alto (VCC) la línea SDA y el decremento colocándola en estado bajo (GND). Recuerda que cada potenciómetro está formado por 256 resistencias conectadas en serie y que el wiper irá recorriendo, en éste modo, una a una, mientras que en las instrucciones anteriores se permitía el salto directo a un nuevo valor. Siempre ten en cuenta que cualquier duda estará respondida en el datasheet que el fabricante provee del dispositivo. Es aconsejable tenerlo siempre a mano cuando se desarrollan aplicaciones con estos circuitos integrados.

Manos a la obra
El primer paso será diseñar un circuito impreso donde instalar y soldar el IC de encapsulado SOIC (W), con la posibilidad de tener una distribución de pines en forma fácilmente accesible. Es decir, que puedas instalar la placa desarrollada cómodamente en un protoboard y allí experimentar su desempeño con un microcontrolador.

Deberás tener precaución al realizar la placa de circuito impreso de comprender que trabajarás siempre del lado componentes. Eso te obligará a realizar los puentes con alambre forrado para evitar cortocircuitar otras vías. Puedes ver que la placa es muy sencilla donde se destaca al centro de la imagen el IC, a su izquierda un capacitor de 100nF de desacoplo y en la parte superior los cuatro jumpers, con opción de conexión a VCC o GND, para A3 – A0 que determinarán la dirección del dispositivo dentro del bus. En la parte inferior la distribución de los terminales está hecha de modo de separar los dos potenciómetros a los extremos de la placa quedando al centro el resto de las conexiones de control.

Si decides colocar la dirección 0000 (A3-A0) en la configuración de la dirección, llevar el potenciómetro a uno de sus extremos quedaría de la siguiente forma en el firmware del microcontrolador:

Cadena de tres bytes que se envían mediante la instrucción BUSOUT

  • Recibir datos desde el ordenador
  • Abrir Bus
  • Enviar Dirección del potenciómetro a manejar
  • Enviar Instrucción que deseamos que dicho potenciómetro ejecute
  • Cerrar Bus
  • Reiniciar el ciclo 

Uno de los microcontroladores que puedes emplear es el PIC 16F628A, sin cristal, utilizando su oscilador interno de 4 Mhz. Los pines RB1 (Rx) y RB2 (Tx) puedes reservarlos para un eventual y futuro uso del sistema dentro de una red RS485 que pueda controlar grandes cantidades de potenciómetros desde alguna aplicación en el ordenador. Recuerda que un solo bus I2C puede controlar hasta 16 potenciómetros estéreo y si a eso le agregamos la posibilidad de trabajar dentro de una red RS485, la cantidad de potenciómetros y canales de audio disponibles se eleva a cantidades muy difíciles de concebir en una sola consola de audio.
Para el uso del bus I2C en el programa de ejemplo se han reservado RA2 para SDA y RA3 para SCL.

La siguiente sería una forma muy sencilla de manejar los valores de los registros de datos almacenándolos en una variable (D) al ser recepcionados desde el ordenador (HSERIN) y provenientes de una sencilla aplicación realizada en Visual Basic o cualquier otro lenguaje que te permita crear la interfaz gráfica necesaria para posicionar los potenciómetros en pantalla y actuar sobre ellos.  

‘******************************************************
‘*  Nombre: POTENCIÓMETROS DIGITALES.BAS               *
‘*  Autor   : Mario G. Sacco                                                           *
‘*             : Copyright (c) 2009 -NeoTeo                                      *
‘*  Fecha   : 02/05/2009                                                               *
‘*  Versión: 1.0                                                                                 *
‘*  Notas   : EJEMPLO DE CONTROL DEL DPP CAT5269      *
‘******************************************************
DEVICE = 16F628A                     ‘DEFINO EL DISPOSITIVO A USAR
CMCON = 7                                   ‘ANULAMOS LOS COMPARADORES DEL 16F628AALL_DIGITAL = TRUE             ‘TODAS LAS I/O DIGITALES‘DEFINO EL BUS I2C PARA COMUNICAR EL PIC CON EL POTENCIÓMETRO                    DECLARE SDA_PIN PORTA.2    ‘DECLARO CUALES PINES DEL PIC VANDECLARE SCL_PIN PORTA.3     ‘A SER SDA Y SCL
 ‘PALABRAS DE CONTROL QUE NO CAMBIAN DURANTE EL PROGRAMA, SÓLO SE UTILIZANSYMBOL SOYPOTE %01010000    ‘DIRECCIÓN DEL CIRCUITO INTEGRADO EN EL BUSSYMBOL VOLUMEN1 %10100000   ‘INSTRUCCIÓN DE POSICIÓN AL             CURSOR DEL POTE1SYMBOL VOLUMEN2 %10100001   ‘INSTRUCCIÓN DE POSICIÓN AL CURSOR DEL POTE2                           ‘DEFINO LA VARIABLE QUE SERÁ EL CURSOR CENTRAL DE LOS POTENCIÓMETROS
DIM D AS WORD       ‘VARIABLE DONDE SE CARGA EL DATO                                       ‘DE POSICIÓN DE LOS POTENCIÓMETROSD = %00000000        ‘INICIO EL SISTEMA CON VOLUMEN A CERO (MUTE)                                      ‘DATO A CARGAR EN EL REGISTRO DEL WIPERINICIO:                       ‘INICIO PROGRAMA PRINCIPALHSERIN 500, INICIO, [DEC D]  ‘ESPERO RECIBIR POR LA USART LA                                                            INSTRUCCIÓN Y LA PONGO EN LA                                                         VARIABLE "D"; SI NO LLEGA EN 1/2 SEGUNDO,                                                          ‘SALTO Y SIGO CON EL CICLO                                           BSTART                              ‘INICIO CONTACTO I2CBUSOUT SOYPOTE        ‘ME VOY A COMUNICAR CON EL POTENCIÓMETRO BUSOUT VOLUMEN1      ‘LE INDICO QUE VOY A MOVER SU CURSOR BUSOUT D                          ‘ESCRIBO EN EL REGISTRO EL VALOR                                               ‘ALMACENADO EN LA VARIABLEDELAYMS 5                        ‘ESPERO 5 MILISEGUNDOS HASTA ENVIAR                                               ‘LA SIGUIENTE ORDEN
BUSOUT SOYPOTE          ‘ME VOY A COMUNICAR CON EL POTENCIÓMETRO BUSOUT VOLUMEN2      ‘LE INDICO QUE VOY A MOVER SU CURSOR BUSOUT D                          ‘ESCRIBO EN EL REGISTRO EL VALOR                                               ‘ALMACENADO EN LA VARIABLEBSTOP                                 ‘TERMINO EL CONTACTO I2CDELAYMS 5                  ‘ESPERO 5 MILISEGUNDOS HASTA                                          ‘ENVIAR LA SIGUIENTE ORDENGOTO INICIO               ‘REINICIO EL CICLO Y VUELVO A LA                                          ‘ESCUCHA DEL PUERTO SERIE
END                                 ‘FIN DE PROGRAMA

Los textos seguidos de apóstrofos (‘) son comentarios para ayudarte a comprender el significado de cada línea de comandos.

Reportar

¿Qué te pareció?

Escrito por Mario

5 Comments

Leave a Reply
  1. o.0 estaba perdido al principio pero entendí, yo trabaje algo parecido con una resistencia que variaba con la frecuencia, muy difícil de manejar, pero esto es mas sencillo manejar.
    También se puede manejar a varios gracias al IC²
    Interesante me recuerda la revista de mecánica popular que leía en la biblioteca en la secundaria ^_^
    El chip de tu articulo anterior de sensor de temperatura no lo pude conseguir en la electrónicas T-T ni similares.

  2. hOla, que tal, gracias por tu aporte
    Tenia una duda acerca de como se sabe con cual de los dos potenciometros se comunica el micro si ambos tienen la misma dirección segun observo en tu código. GRACIAS

    SYMBOL SOYPOTE1 %01010000 ‘DIRECCIÓN DEL POTENCIÓMETRO 1
    SYMBOL SOYPOTE2 %01010000 ‘DIRECCIÓN DEL POTENCIÓMETRO 2

  3. Hola Mario, que buen artículo! Un poco fuera de fecha mis comentarios, pero es que vengo leyendo todas tus publicaciones en NeoTeo.

    Voy a ver si consigo el CAT5269, pero también estuve viendo algunos de Texas Instruments:

    TPL0401 – 10 KOhms (128 TAPS Single Channel Digital Potentiometer with I2C Interface)

    Voy a armarme una fuente digital simple con un LM317, así que tu artículo me fue de mucha utilidad.

    Saludos!

    Argentina, Córdoba (5000)

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Sistema táctil de visión ultrasónica (Daredevil)

Rainlendar: Super Calendario para tu escritorio