domingo, 2 de marzo de 2014

Serie a Paralelo con un 74HC595, empleo de la librería SIP



Ampliar los pines de salida digital con los que se dispone en una placa programable ó microcontrolador, es uno de los problemas con los que en algún momento nos encontraremos, para ello existen múltiples IC's, en general todos basados en flip-flop tipo D y varias configuraciones de ellos.

>>Leer mas...

jueves, 7 de junio de 2012

Simulación y manejo de teclados con Micro.


En el uso de microcontroladores una de las aplicaciones mas usadas es la interacción humana con el dispositivo, ya sea bien para modificar valores, configuración o cualquier otra, por ello es necesario contar con dispositivos adecuados para ello como botones o sensores, en cuaquier caso es necesario controlar la interfaz con estos dispositivos, en este pequeño tutorial mostraremos como utilizar un teclado de varias teclas y su interacción con un microcontrolador, arduino.
>> Leer mas...

lunes, 28 de mayo de 2012

Simulación de arduino en proteus.



Simular un pequeño segmento de código, generalmente, es mas practico que realizar el montaje, por lo tanto es bastante útil saber como simular un sistema de prototipado rápido como lo es arduino. 
Los pasos a seguir son sencillos...

jueves, 24 de mayo de 2012

Reloj Charlieplexing PIC 16F84A.



Para la puesta en practica de la técnica charlieplexing utilizamos un inusual reloj propuesto por alexchin, que muestra la hora en 26 LEDs.
Leer mas>>

viernes, 18 de mayo de 2012

Técnica Charlieplexing para controlar Múltiples LEDs con pocos pines.

¿Que es Charlieplexing?

Charlieplexing es una técnica propuesta a principios de 1995 por Charlie Allen de Maxim Integrated Products, para el control de una pantalla multiplexada en la que los pines de I/O, son relativamente escasos. Un microcontrolador se utiliza para accionar una serie de LEDs. El método utiliza las capacidades de lógica tri-estado de microcontroladores con el fin de ganar eficiencia sobre multiplexación tradicional. A pesar de que es más eficiente en el uso de I/O, hay cuestiones que hacen que sea más complicado para diseñar y hacer que sea imposible su implantación para pantallas muy grandes. debido a el actual ciclo de trabajo y las tensiones directas de los LEDs.

Multiplexación tradicional.

La multiplexación de leds es muy diferente de multiplexación utilizada en la transmisión de datos, aunque tiene los mismos principios básicos. En multiplexación de display, las líneas de datos de las pantallas están conectadas entre sí en paralelo a un bus común en el microcontrolador. Luego, las pantallas se encienden y se dirigen de forma individual. Esto le permite usar un menor número de pines I/O de los que normalmente se utilizarían para controlar el mismo número de display directamente.



Cuando se utiliza charlieplexing, $n$ pines de control puede manejar $n$ dígitos con $n-1$ segmentos. Cuando se simplifica, $n$ pines pueden controlar $n^2-n$ segmentos o LEDs. La multiplexación tradicional necesita muchos más pines para controlar el mismo número de LEDs; $2n$ pines debe ser utilizados para manejar $n^2$ LEDs (aunque se puede usar un chip decodificador de 1 en $m$ para reducir el número de pines I/O del microcontrolador $ n+log_2 n$).

Si el número de LEDs es conocido, entonces la ecuación anterior se puede trabajar hacia atrás para determinar el número de pines requeridos, es decir, los $L$ LEDs puede ser manejados por $n$ pines. 
$$Pines = \frac{1+\sqrt{1+4L}}{2}$$
Si en un numero no entero se utilizara el entero superior mas cercano.
LEDs02612203042567290$n^2-n$
PINES12345678910$n$


Control por complemento

Charlieplexing, en su forma más simple, funciona con una matriz de pares complementarios de los LEDs. La matriz charlieplexed más simple posible sería el siguiente:



Mediante la aplicación de una carga positiva al pin 1 y puesta a tierra el pin 2, el LED 1 se encenderá. Como la corriente no puede fluir a través de LEDs en polarización inversa, 2 LED permanecerá apagado. Si las cargas en los polos 1 y 2 se invierten, el LED 2 se enciende y el LED 1 se apagará.

La técnica Charlieplexing en realidad se utiliza en una matriz más grande que sólo con dos pines, debido a que dos LEDs pueden ser manejados por dos pines sin ningún tipo de conexiones en forma de matriz, y sin siquiera usar el modo de tri-estado. Sin embargo, el circuito de 2 pines sirve como un ejemplo simple para mostrar los conceptos básicos antes de pasar a los grandes circuitos donde, charlieplexing en realidad, muestra una ventaja evidente.

Ampliación: tri-estado lógico

Si tuviéramos que ampliar la cantidad para dar cabida a este circuito de 3 pines y 6 LEDs, se vería así:



Esto presenta un problema, sin embargo. Para que este circuito funcione como el anterior, debemos desconectar uno de los pines antes de aplicar la carga a los dos restantes. Esto se puede resolver mediante la utilización de las propiedades lógicas, la de tres estados de pines del microcontrolador. Los pines del microcontrolador por lo general tienen tres estados, 5V, 0V y entrada. El modo de entrada pone el pin en un estado de alta impedancia que, eléctricamente hablando, "desconecta" que el pin del circuito de multiplexado, es decir, poco o ningúna corriente fluirá a través de él. Esto permite a el circuito seleccionar cualquier número de pines conectados en cualquier momento, simplemente cambiando el estado de la patilla. Con el fin de controlar la matriz de 6 LEDs mostrada, los dos pines correspondientes al LED deseamos activar deben estar conectadas a 5V y 0V respectivamente, mientras que el tercer pin se encuentra en su estado de entrada (alta impedancia). Al hacerlo así, evita la fuga de corriente fuera del tercer pin, asegurando que el LED se desea a la encender es el único iluminado.

Mediante el uso del tri-estado lógico, la matriz teóricamente puede ampliarse a cualquier tamaño, siempre que los pins están disponibles. Para $n$ pines, se puede tener hasta $n(n-1)$ LEDs en la matriz. Cualquier LED se puede encender mediante la aplicación de 5V y 0V a los pines correspondientes y el establecimiento de todos los otros pines conectados a la matriz a modo de entrada.

Aquí un vídeo simulando la aplicación de esta técnica.



En la próxima entrada pondremos en practica esta técnica para hacer un reloj muy simpatico con solo un microcontroldador y pocos pines.

Hasta la proxima...

domingo, 13 de mayo de 2012

Historia Arduino

Naufragando por la web me tope con dos vídeos en el que hablan de los creadores del arduino y como se convirtió en lo que es. También aparecen los patrocinantes y otros emprendedores que apoyaron y crecieron junto a este dispositivo. Sin mas los vídeos.



y la segunda parte.



Espero les guste...

miércoles, 9 de mayo de 2012

Arduino PWM y comunicación serial.

En esta entrada hablaremos de la modulación por ancho de pulso (PWM) y de comunicación serial. si bien el arduino dice tener salidas analógicas estas no son mas que salidas de PWM que se pueden convertir en valores de voltaje estático con un circuito extra, PERO NO LO SON. sin embargo es muy practico utilizar estas salidas para controlar el brillo de un led, la velocidad de un motor, o la temperatura de un generador de calor eléctrico. 

El circuito propuesto para esta experiencia es el siguiente.

Con capturaremos el valor analógico del potenciometro este sera de 10 bits (0-1023) como lo hicimos en el montaje anterior, y lo manejaremos matemáticamente para adaptarlo a los valores de pwm que van desde 0 a 255 y observaremos ambos valores a través del puerto serial. también variaremos el brillo de un led y controlaremos la velocidad de un pequeño motor DC.

el software que estaremos utilizando es el siguiente.

/*
 lectura analogica serial
 lee un valor por la entrada analogia A0 y la envia de forma serial
 para ser visualizada por el monitor serial
 
 */

void setup() {
  Serial.begin(115200); // configura la velocidad del puerto serial
}

void loop() {
  int sensorValue = analogRead(A0); // guarda el valor de la lectura del puerto analógico en sensorValue
  analogWrite(9,sensorValue/4); // divide el valor analogico el PWM es de solo hasta 255
  Serial.print("sensor "); // envia el string sensor a el puerto serial
  Serial.print(sensorValue); // envia el valor del sensorValue a el puerto serial
  Serial.print(" PWM "); // envia el string PWM a el puerto serial
  Serial.println(1024-sensorValue); // envia el valor del PWM a el puerto serial y salta una linea
 
}

y el vídeo del montaje a continuación.


hasta la próxima...