Max Hernandez

Laberinto - Ejemplo de Canvas en HTML5

martes, 22 de mayo de 2012

Matrices de leds y probando el cubo de leds

Para llevar a cabo del proyecto de PIC, en algún momento tuve que armar y probar el cubo, antes de poder utilizar el algoritmo de el juego de la vida, aquí quiero compartir un poco de la información que adquirí y mi como probé el funcionamiento del cubo.

Matriz de leds


[imagen obtenida de: http://pcbheaven.com/wikipages/images/howkeymatricesworks_1277658667.png]

Una matriz de leds es un grupo de estos componentes conectado en forma de matriz de tal forma que se puede encender solo un led o la cantidad deseada jugando con los cátodos y ánodos de los mismos.
Las matrices de leds son bastante utilizadas, podemos verlas en todos lados algunos ejemplos de esto son:
  • En anuncios panorámicos, en mi caso en las avenidas
  • En relojes
  • En obras de arte.
  • En carteles

¿Como funciona?


En esta imagen de abajo se muestra como son las conexiones de una matriz de leds donde las columnas corresponden las conexiones a tierra y las filas corresponden a las conexiones a corriente. Al producir corriente a una fila, esta corriente es capaz de pasar por toda la fila y al conectar a tierra una columna toda la columna puede conducir la corriente que pase por esta. Así produciendo corriente en una fila y conectando a tierra la columna cerramos el circuito y hacemos que un led en especifico se encienda. Controlando esto con un microcontrolador podemos crear diferentes figuras o números, en realidad esta funciona de forma muy parecida a un display común y corriente.

[imagen obtenida de:http://galaxi0.files.wordpress.com/2009/06/diagrama-de-pines-catados-en-columna.png?w=500]

Cubo de leds


Un cubo de leds es una estructura bastante similar a la matriz, con la diferencia que los cátodos se mapean como una matriz de cero a nueve, por lo cual necesitamos nueve pines y un ánodo para cada nivel. Lo cual quiere decir que podemos controlar el encendido controlando cada columna y su nivel. Para construirla me base en el siguiente blog: http://roberto-mtz.blogspot.mx/2012/04/cubo-leds-3x3x3-arduino-bt.html el cual tiene publicaciones muy interesantes y me parece muy bueno.

Probando el cubo de leds
Una vez armado me dí a la tarea de generar un código para probarlo, el controlador lo que hace es encender fila por fila para revisar que las conexiones y el soldado esten correctos, despues al final enciende todos los leds al mismo tiempo para verificar que tengan el voltaje necesario.

Materiales:

  •     27 Leds
  •     9 resistencias de 220 Ohms
  •     3 resistencias de 330 Ohms
  •     3 transistores 2N2222
  •     PIC16F628A
  •     7805-CT Regulador Tension 5V

Diagrama de conexiones:

Este diagrama de conexiones lo encontre en una pagina donde querian lograr algo parecido, las conexiones son las mismas, solo que en el PIC cambio los pines de salida RB0-RB7 y RA0 son los catodos y RA1 a RA3.

[Imagen obtenida de: http://www.instructables.com/files/deriv/FGC/TB26/GIYWWDPB/FGCTB26GIYWWDPB.MEDIUM.jpg]

Código:
#include "pic16f628a.h"
#define __16f628a


unsigned int __at 0x2007 __CONFIG = _INTOSC_OSC_CLKOUT &// Internal 
  _WDT_OFF&
  _LVP_OFF&
  _DATA_CP_OFF&                                                                                                                              
  _PWRTE_ON;

unsigned short int i;//variable contador

int main(void){

  TRISB = 0x00;//Configura los pines de PORTA como salidas
  TRISA = 0x00;//Configura los pines de PORTA como salidas
  while(1){
 PORTA = 0b00001110;// Todos los niveles siempre estan encendidos

 PORTB = 0b00000001; // Estado inicial
 for( i = 0; i < 50000; i++);

 PORTB = 0b00000010; //Enciende la segunda columna y espera
 for( i = 0; i < 50000; i++);

 PORTB = 0b00000100;
 for( i = 0; i < 50000; i++);

 PORTB = 0b00001000;
 for( i = 0; i < 50000; i++);

 PORTB = 0b00010000;
 for( i = 0; i < 50000; i++);

 PORTB = 0b00100000;
 for( i = 0; i < 50000; i++);

 PORTB = 0b01000000;
 for( i = 0; i < 50000; i++);

 PORTB = 0b10000000;
 for( i = 0; i < 50000; i++);

 PORTB = 0x00;
 PORTA = 0b00001111;
 for( i = 0; i < 50000; i++);

 PORTB = 0b11111111; // Enciende todos los leds
 PORTA = 0b00001111;
 for( i = 0; i < 50000; i++);

  }

  return 0;

}


 
Ahora uno de los problemas a los que me enfrente en este punto es que todos los leds de un nivel comparten conexión, por tanto si trato de implementar algunas secuencias se encienden leds que no deberían, para resolver este problema utilice una técnica de conexión llamada multiplexado de la cual hablare en la próxima publicación.

Referencias:
http://pcbheaven.com/wikipages/How_Key_Matrices_Works/
http://galaxi0.wordpress.com/about/salidas-y-entradas-digitales/matriz-de-leds/
http://pcbheaven.com/wikipages/How_Key_Matrices_Works/

2 comentarios: