Webcervices. Con la tecnología de Blogger.
RSS

Unete a nuestro grupo de facebook

Unete a nuestro grupo de facebook
Hola que tal lectores de esta pagina tan maravillosa que es arduino Tec ...Los invito a que amplíen mas sus conocimientos en Arduino y Raspberry Pi Uniéndose a mi grupo Arduino Tec

4 - AMPLIANDO LOS PINES ANALOGICOS DE ARDUINO

4 - AMPLIANDO LOS PINES ANALOGICOS DE ARDUINO (DOS POTENCIOMETROS A TRAVES DE UN MULTIPLEXOR 4051 CON 8 ENTRADAS)

Ufff, ya está listo el tutorial del multiplexor.

NOSOTROS VAMOS A UTILIZAR EN PRINCIPIO UN MULTIPLEXOR 4051 PARA CONVERTIR EL PIN 0 ANALOGICO EN 8 PINES. ESTE NO ES EL LIMITE, EN PRINCIPIO VAMOS A EMPEZAR POR ESTO, UTILIZANDO SOLO 2 ENTRADAS, PERO SI LEES BIEN EL TUTORIAL SABRAS QUE ES MUY SENCILLO CONECTAR 8 POTENCIOMETROS EN UN SOLO PIN. MAS ADELANTE UTILIZAREMOS DE NUEVO 2 POTENCIOMETROS PERO UTILIZANDO 3 MULTIPLEXORES, DE MODO QUE A TRAVES DE 6 BITS PODEMOS CONTROLAR PERFECTAMENTE 64 POTENCIOMETROS. Y POR ULTIMO TERMINANDO CON ESTE TEMA UTILIZAREMOS MULTIPLEXORES DE 16 ENTRADAS Y 4 BITS DE CONTROL CADA UNO PARA LOGRAR LOS 132 PINES QUE YO NECESITO PARA MI MESA DE MEZCLAS MIDI.

POR EL MOMENTO TENEMOS QUE IR POCO A POCO. HOY VOY A SUBIR EL TUTORIAL PARA CONECTAR DOS POTENCIOMETROS A TRAVES DE UN MULTIPLEXOR A UN SOLO PIN ANALOGICO DE ARDUINO. YO CREO QUE NO ES MUY DIFICIL SABER COMO CONECTAR EL RESTO DE POTENCIOMETROS, PERO DE TODOS MODOS, PROXIMAMENTE PONDRE EL CIRCUITO Y CODIGO DE 8 POTENCIOMETROS.

Comenzamos por definir un multiplexor:

Un multiplexor es un circuito integrado (una pastilla con patas) que nos permite utilizar múltiples entradas, seleccionando cada una de ellas a través de unos pines que, en este caso son 3: A, B y C; con los que indicamos cual es la entrada de datos que queremos utilizar.

En este primer caso vamos a utilizar un solo multiplexor para entender su funcionamiento. Tengo que confesar que he tenido que hacer muchas pruebas, aun conociendo este componente mas que de sobra, porque yo en vez de montarlos en una placa utilizo "Multisim", un programa de simulación de circuitos reconocido internacionalmente como uno de los mejores. El caso es que muchas veces lo que montaba no funcionaba bien y después se me metió en la cabeza que teniendo 3 cables para seleccionar las entradas, lo mas que podría hacer es poner 4 multiplexores, con lo que tendría 8x4=32 entradas. Después leí por la red algo de conectar multiplexores en cascada y no conseguía entender como se hace. Estaba hechandome para atrás, porque yo necesito 132 entradas analógicas para potenciometros y pulsadores. De buenas a primera, cuando volví de jugar unas partidas al billar de carambolas para relajarme, se me vino a la cabeza el circuito necesario para poder manejar 9 o mas multiplexores de 16 entradas, con lo que consigo las que necesito e incluso me sobran. Pero eso lo veremos en el siguiente ejercicio, que desde luego, no va a tardar tanto como este. Tenéis que disculparme un poco porque estoy saturado de trabajo y apenas tengo un rato libre. Vamos al lío.


El multiplexor que vamos a utilizar es el HEF4051BP, que proporciona 8 entradas.
Podéis descargar el datasheet en pdf desde aquí: http://pdf1.alldatasheet.com/datasheet-pdf/view/173652/UTC/4051/++043WWFuPPzZ-Jt-++/datasheet.pdf

Está en ingles y en ese documento está toda la información del integrado, aunque quizás no entiendas muchas cosas en el.

Nosotros vamos a seguir con lo nuestro. A la hora de conectar el circuito integrado debemos tener en cuenta que tiene una mueca en uno de los extremos. Esa mueca se utiliza para saber cual es el pin numero 1 del circuito integrado (en adelante solo diré integrado). Podéis ver la numeración de las patillas en el siguiente dibujo:


En el dibujo podemos ver que es cada patilla. Podemos ver que tenemos en la patilla 1 -> X4. Esto significa que esa es la entrada numero 4, de modo que tenemos la siguiente estructura:

Patilla Entrada
13 x0
14 x1
15 x2
12 x3
1 x4
5 x5
2 x6
4 x7

Después tenemos en la patilla 16 -> VDD. Esta patilla tiene que ir siempre a 5 Voltios, porque es la que alimenta al integrado.

Las patillas 6 -> INH, 7 -> VEE, 8 -> VSS serán conectadas a GND o masa.

La patilla 3 -> X es la patilla donde obtenemos el valor dependiendo de la selección que tengamos hecha.

Por ultimo, las patillas 11 -> A, 10, -> B, 9 -> C son las que se utilizan para seleccionar la entrada.

Situarse del siguiente modo: En cada patilla de entrada X0...X7, conectamos el cursor de un potenciometro, es decir, la patilla central. En un extremo conectamos 5V y el otro extremo lo conectamos a masa. Cada potenciometro enviá un valor a una de las 8 entradas y, con A,B,C, que son como interruptores, seleccionamos la entrada que vamos a usar, colocando cada una de estas letras en tensión alta (5V) o tensión baja (Gnd).

Voy a poneros la tabla de verdad a continuación y después os comento lo que significa cada cosa, aunque estoy seguro de que tu mismo puedes entenderlo sin que te lo explique:

|A| |B| |C| |X|

|0| |0| |0| |0|

|0| |0| |1| |4|

|0| |1| |0| |2|

|0| |1| |1| |6|

|1| |0| |0| |1|

|1| |0| |1| |5|

|1| |1| |0| |3|

|1| |1| |1| |7|

A, B y C pueden tener dos estados: 0 y 1. El primero es cuando lo conectamos a GND o masa. Valdrá 1 cuando lo conectemos a 5 Voltios, ¿sencillo no?. Ahora fijate otra vez en la tabla. Si coloco A, B y C a GND o masa le estaría indicando al multiplexor que la entrada que voy a utilizar es la entrada x0.

Ahora tu solo, piensa que combinación seria necesaria para utilizar la entrada x1.

Efectivamente, tendríamos que poner A -> 5V, B -> GND, C -> GND. ¿Lo habrás hecho bien no?, es muy importante que comprendas esto.

En este tutorial vamos a utilizar solamente las entradas X0 y X1. Por esto, voy a poner el circuito final, pero solo con dos entradas, para evitar tener que poner tantos cables que no vamos a utilizar y cargar el dibujo de lineas que acabarían por ser medio incomprensibles. El resto de patillas no las he conectado a ningún sitio, las he dejado sin conectar. Si alguien cree que esto es un error que comente y lo cambio, pero a mi así me va perfecto.


Recordar que cuando un cable pasa por encima de otro se puede observar que hay un arco. De todos modos ningún cable está cruzado con ninguno.

Después tenemos que subir el siguiente código a la placa de arduino:

int bitA = 2;
int bitB = 3;
int bitC = 4;
int analogPin = 0;

int midiChannel0 = 1;
int lastAnalog0 = 0;
int analogSmooth0 = 6;

int midiChannel1 = 1;
int lastAnalog1 = 0;
int analogSmooth1 = 6;

void setup()
{
Serial.begin(115200);
pinMode(bitA,OUTPUT);
pinMode(bitB,OUTPUT);
pinMode(bitC,OUTPUT);
}

void loop()
{
/* CODIGO PARA ENTRADA 0 */
digitalWrite(bitA,LOW);
digitalWrite(bitB,LOW);
digitalWrite(bitC,LOW);

int reading0 = 0;
reading0 = analogRead(analogPin)/8;
if (abs(reading0-lastAnalog0) > analogSmooth0)
{
lastAnalog0 = reading0;
controlChange(midiChannel0,10,reading0);
}

/* CODIGO PARA ENTRADA 1 */
digitalWrite(bitA,HIGH);
digitalWrite(bitB,LOW);
digitalWrite(bitC,LOW);

int reading1 = 0;
reading1 = analogRead(analogPin)/8;
if (abs(reading1-lastAnalog1) > analogSmooth1)
{
lastAnalog1 = reading1;
controlChange(midiChannel1,127,reading1);
}
}

void controlChange(byte channel, byte controller, byte value)
{
midiMsg(channel+0xB0, controller, value);
}

void midiMsg(byte cmd, byte data1, byte data2)
{
Serial.print(cmd, BYTE);
Serial.print(data1, BYTE);
Serial.print(data2, BYTE);
}


RECUERDA, EN EL S2MIDI HAY QUE INDICARLE LA VELOCIDAD EN BAUDIOS, QUE EN ESTE EJEMPLO ESTAMOS PONIENDOLA A 115200.


¿Quillo ke has hesho aki?

Tranquilo, no es complicado.

En las primeras cuatro lineas declaro 3 variables para indicarle a la placa cuales son los pines de A, B y C, que son 2, 3 y 4 (digitales) respectivamente. Después declaro otra variable donde le diré a la placa que el pin 0 (analógico) es donde vamos a colocar el valor de cada potenciometro.

Después vienen otras 6 variables, que ya deberías conocer de anteriores códigos. midiChannel0 para indicar el canal midi donde trabaja el potenciometro 0 (canal 1), lastAnalog0 que almacena el ultimo valor que daba el potenciometro 0 y después analogSmooth0 que es el que usamos para comprobar la diferencia del valor anterior con el valor nuevo y detectar el cambio. Esto mismo lo aplicamos a midiChannel1, lastAnalog1 y analogSmooth1.

Después viene la función setup() en la que indicamos la velocidad de envío de los datos al puerto usb e indicamos a la placa arduino que ponga los pines bitA, bitB y bitC como salida, porque poniéndolos como HIGH o LOW indicaremos si se trata de un 1 o un 0.

Llegamos al loop() y aquí viene lo complicado, aunque no es muy difícil de comprender. las 3 primeras ordenes ponen el pin A, B y C a LOW, o lo que es lo mismo, pone A = 0, B = 0 y C = 0. A continuación tenemos el trozo de código que coge el valor que hay en la variable analogPin (pin analógico 0) y comprueba si ha variado en 6 unidades (según analogSmooth0). Si varia entra dentro de la condición if para poner el nuevo valor a la variable lastAnalog0 y enviar los datos a través de la función controlChange al ordenador.

Si no hubiera una diferencia de 6 unidades se saltaría el if y seguiría con la segunda parte, que no la voy a explicar porque es igual que la primera parte del loop() solo que los nombres de las variables cambian de terminar en 0 a terminar en uno.

Solo diré que en a partir de donde pone /* CODIGO PARA ENTRADA 1 */, en las 3 primeras lineas indicamos a la placa de arduino que ponga A = 1, B = 0 y C = 0, con lo que estaríamos indicando al multiplexor que ahora debe leer la entrada 1, que es donde tenemos conectado el otro potenciometro.

Una vez terminado de hacer todo esto, como siempre, el loop() se repetiría hasta que quitáramos la placa del puerto usb.

Nada mas. Siento haber tardado tantísimo en actualizar. He estado trabajando un tiempo y apenas he tenido un rato para hacer pruebas. El siguiente tutorial no tardara en venir. En el vamos a utilizar 3 multiplexores 4051 de modo que tengamos 64 entradas analógicas. Para ello conectaremos las salidas de 2 de ellos a 2 entradas del tercer multiplexor y utilizaremos 6 opciones para seleccionar la entrada que queramos.

Como siempre os ruego que si hay algún error podéis comentarlo y se corregirá. Ademas, como siempre digo, me vienen bien los comentarios para saber que hay alguien en el otro extremo de mi conexión. Saludos.

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

0 comentarios:

Publicar un comentario

Objetivo Y Reclamaciones

Este blog es un portal en el cual se publican contenidos de diferentes blogs.En los cuales se les anexa al pie de pagina un enlace a su pagina original aquí encontraran toda clase de proyectos de arduino y linux
Espero tengan una gran experiencia en este blog un Gran Saludo
de parte de la organización WebCervices..
objetivo
O del grupo ArduinoTec De arduino
Cualquier reclamación o petición comunicar al Administrador principal o hacer un comentario en la publicación que se sientan inconformes en los correos
electriarias@gmail.com
y para temas de suma importancia mi correo personal
pabioarias@hotmail.com

Siguenos en Twitter

Like

Unete a nuestro grupo de facebook

Hola que tal lectores de esta pagina tan maravillosa que es arduino Tec ...Los invito a que amplíen mas sus conocimientos en Arduino y Raspberry Pi Uniéndose a La mi grupo Arduino Tec

Unete Al Grupo De facebook

Unete Al Grupo De facebook
Amplia tus conocimientos debatiendo temas de Arduino y Raspberry pi