martes, 29 de octubre de 2013

LABORATORIO NUMERO 12

En este laboratorio se usara una matriz de 8x8 de cátodo común para reemplazar la que se usaría en este laboratorio, la cual era una matriz de 8x5 de cátodo común. para controlar esta  matrix de LEDs de 8x8 se cableara a través de un IC Maxim MAX7219, para mostrar un mensaje letra por letra, desplazándose de derecha a izquierda, y así poder ahorra puertos de salida en en sistema embebido arduino.





Matriz de leds mono color (esquema).

MATRIZ DE LEDS BICOLOR (esquema).


este es un ejempo de muestreo de desplazamiento de leds encendido en secuencia para mostrar la letra W.


MAX 7219


 (esquema)



Es un multiplexor el cual utilizaremos para controlar la matriz de leds la cual recibirá la señales multiplezadas desde el IC, señal proveniente desde el arduino que estará conectado al computador, el cual trasmitira el texto a mostrar.

El MAX7219 impulsa ocho LEDs a la vez, y por los bancos con rapidez de conmutación de ocho ojos no ven los cambios. Cableado de una matriz es muy simple - si tiene una matriz común con el siguiente esquema:

conectar los pines con la etiqueta MAX7219 DP, A F ~ a los pines de las columnas que serán los cátodos de la matriz, respectivamente, y los MAX7219 pines etiquetados DIG0 ~ 7 para los ánodos de las columnas, respectivamente.

El circuito es muy sencillo, excepto que tenemos una resistencia entre 5V y MAX7219 pin 18. El MAX7219 es un controlador de LED de corriente constante, y el valor de la resistencia se utiliza para establecer el flujo de corriente a los LEDs.

MATERIALES
  1. 1 arduino mega adk
  2. matriz de leds 8x8 catodo comun
  3. computador
  4.  MAX7219
DIAGRAMA DE MONTAJE EN PROTOBOARD


DIAGRAMA ESQUEMÁTICO


 DIAGRAMA PARA MONTAJE EN TARJETA PERFORADA


 
FOTOS

foto 1


foto 2

foto 3

foto 4

 foto 5

 foto 6

 foto 7

foto 8


foto 9

CÓDIGO ARDUINO

#include <Sprite.h>  
#include <Matrix.h>
 
int count = 0;
 
int x = 8;
int letra1 = 0;
int letra2 = 0;
 
int tiempoEspera = 0;
 
const int numChips = 1;
int DIN  = 6;
int CLK  = 7;
int LOAD = 8;
                     //DIN, CLK, LOAD, #chips
Matrix matrix = Matrix(DIN, CLK, LOAD, numChips);
 
void setup() {
  pinMode(6,OUTPUT);
  pinMode(7,OUTPUT);
  pinMode(8,OUTPUT);
  tiempoEspera = 150;
  Serial.begin(9600);
}
 
void loop() {
  if(Serial.available() > 0){
     byte dato = Serial.read();
     //si el dato esta entre A-Z o a-z
     if((64 < dato && dato < 91) || (96 < dato && dato < 123)){
        //pasamos a mayuscula el caracter
        byte caracterMayuscula = toUpperCase(dato);  
        letra1 = caracterMayuscula-65;
        mover();      
     }else {
       //si hay espacio
       if(dato == 32){
         letra1 = 26;
         mover();
        }        
     }
  }else{    
    letra1 = 26;
    mover();
  }    
}
 
void mover(){
  do{
    delay(tiempoEspera);    
    count--;
    x--;
    pintar();
  }while(x >= 0);
  x = 8;
  count = 6;
  letra2 = letra1;  
}
 
Sprite letras(int valor){
  //creamos los sprite con 5 pixeles de ancho y 5 pixelex de alto  
  int _width = 5;
  int _height = 5;
  switch(valor){
    case 0:
       //A
       return Sprite(_width, _height,
        B10001, B10001, B11111, B10001, B11111
      );
      break;
    case 1:
      //B
      return Sprite(5, 5,
        B11110, B10001, B11110, B10001, B11110
      );
      break;
    case 2:
      //C
      return Sprite(5, 5,
        B11111, B10000, B10000, B10000, B11111
      );
      break;
    case 3:
      //D
      return Sprite(5, 5,
        B11110, B10001, B10001, B10001, B11110
      );
      break;
    case 4:
      //E
      return Sprite(5, 5,
        B11111, B10000, B11111, B10000, B11111
      );
      break;
    case 5:
      //F
      return Sprite(5, 5,
        B10000, B10000, B11110, B10000, B11110
      );
      break;
    case 6:
      //G
      return Sprite(5, 5,
        B11111, B10001, B11111, B10000, B11111
      );
      break;  
    case 7:
      //H
      return Sprite(5, 5,
        B10001, B10001, B11111, B10001, B10001
      );
      break;
    case 8:
      //I
      return Sprite(5, 5,
        B11111, B00100, B00100, B00100, B11111
      );
      break;
    case 9:
      //J
      return Sprite(5, 5,
        B11100, B00100, B00100, B00100, B11111
      );
      break;
    case 10:
      //K
      return Sprite(5, 5,
        B10001, B10010, B11100, B10010, B10001
      );
      break;
    case 11:
      //L
      return Sprite(5, 5,
        B11111, B10000, B10000, B10000, B10000
      );
      break;
    case 12:
      //M
      return Sprite(5, 5,
        B10001, B10001, B10001, B10101, B11011
      );
      break;  
    case 13:
      //N
      return Sprite(5, 5,
        B10001, B10011, B10101, B11001, B10001
      );
      break;
    case 14:
      //O
      return Sprite(5, 5,
        B11111, B10001, B10001, B10001, B11111
      );
      break;
    case 15:
      //P
      return Sprite(5, 5,
        B10000, B10000, B11110, B10001, B11110
      );
      break;    
     case 16:
      //Q
      return Sprite(5, 5,
        B11111, B10011, B10001, B10001, B11111
      );
      break;
    case 17:
      //R
      return Sprite(5, 5,
        B10001, B10010, B11110, B10001, B11110
      );
      break;
    case 18:
      //S
      return Sprite(5, 5,
        B11110, B00001, B01110, B10000,B01110
      );
      break;
    case 19:
      //T
      return Sprite(5, 5,
        B00100, B00100, B00100, B00100, B11111
      );
      break;
    case 20:
      //U
      return Sprite(5, 5,
        B11111, B10001, B10001, B10001, B10001
      );
      break;
    case 21:
      //V
      return Sprite(5, 5,
        B00100, B01010, B10001, B10001, B10001
      );
      break;  
    case 22:
      //W
      return Sprite(5, 5,
        B10001, B11011, B10101, B10001, B10001
      );
      break;  
    case 23:
      //X
      return Sprite(5, 5,
        B10001, B01010, B00100, B01010, B10001
      );
      break;
    case 24:
      //Y
      return Sprite(5, 5,
        B00100, B00100, B01110, B10001, B10001
      );
      break;
    case 25:
      //Z
      return Sprite(5, 5,
        B11111, B01000, B00100, B00010, B11111
      );
      break;
    case 26:
      //Blanco
      return Sprite(5, 5,
        B00000, B00000, B00000, B00000, B00000
      );
      break;    
  }
}
 
void pintar(){  
  matrix.clear();
  //se coloca el Sprite en pantalla
  matrix.write(x, 0, letras(letra1));
  if(count >= 0){
    matrix.write(x - 8, 0, letras(letra2));
  }
}

CÓDIGO PROCESSING

//se carga la libreria ControlP5
import controlP5.*;
//se carga la libreria Serial
import processing.serial.*;
// definir la variable cp5 del tipo ControlP5
ControlP5 cp5;
// definir la variable puerto del tipo Serial
Serial puerto;
// definir la variable text del tipo Textfield
Textfield text;
 
void setup(){
  //tamaño de la ventana
   size(250,160);
 
   //se crea el objeto controlP5
   cp5 = new ControlP5(this);
 
   text = cp5.addTextfield("text")
             .setPosition(20,30)
             .setSize(200,40)
             .setFont(createFont("arial",20))
             .setAutoClear(false);
 
          cp5.addButton("Enviar")
              .setValue(1)
              .setPosition(20,100)
              .setSize(40,30)
              .setId(2);
           
   String COM = Serial.list()[0];
   //comunicacion serial a 9600bps
   puerto = new Serial(this, COM, 9600);
}
 
void draw(){
   background(#000000);
}
 
void controlEvent(ControlEvent theEvent){  
  if(theEvent.isAssignableFrom(Button.class)){  
   //se envia cada caracter de la cadena
    for(int i = 0; i < text.getText().length(); i++){  
       char dato = text.getText().charAt(i);    
       puerto.write(dato);
    }
  }
}




2 comentarios:

  1. It is an interesting project. Can you send us all schematic diagrams files. Your image is not clear enough to see. Any way thank you for your inspiring project

    ResponderEliminar