Como Hacer Una Matriz de Led 8x8

COMO HACER UNA MATRIZ DE LED 8x8 En principio el lenguaje utilizado es BASIC y el programa picsimulator ide, el pic16f62

Views 109 Downloads 7 File size 335KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

  • Author / Uploaded
  • Jo El
Citation preview

COMO HACER UNA MATRIZ DE LED 8x8 En principio el lenguaje utilizado es BASIC y el programa picsimulator ide, el pic16f628a con cristal interno, las bases para entender la programación se encuentran en mi primer post: http://www.taringa.net/posts/ciencia-educacion/5817733/programacion-de-microcontroladorespic-en-basic-y-simulacion.html Empezamos primero con el circuito de la matriz de led 8x8, primero la matriz: (con todo el respeto a los de neoteo, utilizo sus imágenes)

Observando la imagen los ánodos (positivos) se conectan horizontalmente formando las filas y los cátodos (negativos) se conectan verticalmente formando las columnas teniendo 8 filas y 8 columnas. Para encender un led hay que alimentar con positivo en la fila y negativo en la columna (explicado abajo). La matriz en el proteus, como la utilizaremos y como encender un led es la siguiente:

Como mencionamos arriba se alimenta con positivo a las filas y negativo a las columnas. El circuito de toda la matriz es el siguiente:

Este es el circuito de simulación que lo usaremos para todas las explicaciones (se puede observar una resistencia de 10k conectada a ra4 ya que esta NO es una salida cmos necesita la resistencia, sin esta ra4 no funciona como salida, las resistencias conectadas a los colectores de los transistores son solo por simulación ya que el bc548 a mi no me trabaja sin ellas y todo el tiempo bota negativo pero en el pcb no se utilizan) y ahora el pcb, realizado en pcbwizard.

Aquí presento el diagrama de conexión:

El PIC utilizado en esta ocación es el PIC16F88 por ser muy fácil de implementar y contar con oscilador interno. La línea Load se conecta al pin B0 del PIC, Clk al B1, dClm a B2 y dLin a B3. La lista de componentes es mas cuantiosa que variada pues esta compuesta por: R1-R8 R9-R16

8 x Resistencias de 220Ω 8 x Resistencias de 3,9KΩ

Q1-Q8

8 x Transistores BC547

o similar

2 x 74HC595 64 x LED rojo de 5mm brillo standard

El código, escrito en CCS C, para probar el hardware es el que sigue a continuación, solo he dejado las letras pertinentes a PICROBOT, ya que sino se hace muy largo y repetitivo para mostrarlo como ejemplo, pero desde este link te puedes descargar el código completo con las letras en mayúsculas A-Z, el .HEX, el .COF para simularlo en el ISIS de Proteus y el .DSN con el diseño. Hay dos versiones del código en este paquete, matriz8x8Q y matriz8x8. La primera es para cuando se usen los transistores a los cátodos de los LED y la segunda si los cátodos van directamente a las salidas del registro de desplazamiento encargado de controlar las columnas. La única diferencia entre las dos versiones es que la primer versión (Q) no invierte y la segunda si lo hace, las salidas del registro encargado de controlar las filas. Se podría haber solucionado el problema declarando o no una macro instrucción dirán algunos, después de todo lo único que varía es un caracter de una versión a otra, pero para no confundir, y como este es un ejemplo sencillo, decidí hacerlo así. En un futuro ejemplo de la implementación tal vez incluya una macro instrucción. /********************************************************************* **** ** **

** Ejemplo básico para controlar una matriz de 8x8 LEDs con PIC. ** ** ** ** (c) 2010 Gerardo Ariel Ramírez ** ** [email protected] ** ** http://picrobot.blogspot.com/ ** ** ** ********************************************************************** **** ** ** ** Microcontrolador: PIC16F88 Oscilador: Interno - 8 MHz ** ** Lenguaje: CCS C ** ** ** ********************************************************************** ***/ #include #fuses INTRC_IO,MCLR #fuses NOPUT,NOBROWNOUT #use fast_io(all) hace al principio. #use delay(clock=8M)

// // // //

#define #define #define #define

// // // //

char char

Load Clk dClm dLin

PIN_B0 PIN_B1 PIN_B2 PIN_B3

Memoria[96]; Visor[8];

int1 flag; int1 flag2; int indx; columnas. int line; int time; int ptime; int t;

Tipo de microcontrolador Oscilador interno, MCLR activo Sin Brownout reset ni Power up timer La configuración de los puertos solo se

// Velocidad del oscilador interno 8 MHz Load (STCP ambos integrados) B0 Clock (SHCP ambos integrados) B1 Data para las columnas (DS integrado 1) BC2 Data para las lineas (DS integrado 2) B3

// 96 Bytes para la memoria (0 - 95) // 8 para el visor (8 columnas) // Flags de control // Indice donde almacenará las nuevas // // // //

Linea que a mostrar. Variables para el control de la velocidad de desplazamiento. Variable auxiliar.

void CargaMem(char Ascii); void GuardaClm(char c); #int_rtcc void isr(){ int Mul=128; if(++line>7)Line=0; de 7 vuelve a 0. if(++ptime>5){ ptime=0; if(++time>200){

// Cada vez que ocurre la interrupcion // selecciona la siguiente linea, si se pasa // Suma 1 a ptime. Si se pasa de 20 // lo pone en 0 y suma 1 a time. // Si se pasa de 200

time=0; Flag=true;

// lo pone en 0 // y activa el flag.

} } for(t=0;t>=1; // Divide la mascara que compara con Visor[] (128,64,32...) } output_low(Load); output_high(Load);// El contenido interno del integrado pasa a las salidas. } void main(){ int k; set_tris_a(0x00); set_tris_b(0x00); for (k=0;k