uControl
Julio 24, 2014, 06:40:22 *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.
¿Perdiste tu email de activación?

Ingresar con nombre de usuario, contraseña y duración de la sesión
 
   Inicio   Ayuda Buscar Ingresar Registrarse  

La gente de Niple nos ofrece un descuento especial para usuarios de uControl.
Entérate de como puedes aprovechar esta oferta haciendo click aqui.

Súmate, y ayuda a uControl con tu participación en esta interesante oportunidad que nos oferece Niple.

Páginas: [1] 2 3 4 5 6 ... 9   Ir Abajo
  Imprimir  
Autor Tema: Matriz de LEDS de 8x8  (Leído 56561 veces)
0 Usuarios y 1 Visitante están viendo este tema.
Ariel
Global Moderator
dsPIC
****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 10607



WWW
« : Enero 22, 2010, 04:14:09 »



Introducción
En este proyecto veremos como diseñar y construir un display de diodos leds en forma de matriz de 8 filas por 8 columnas. El circuito incluye una memoria EEPROM externa del tipo 24C256 en la que podremos almacenar bloques de pixeles que luego seran representados por la pantalla.


Descripción del proyecto
El proyecto que desarrollaremos es una buena herramienta para el aprendizaje. El microcontrolador empleado es de los más pequeños, un PIC16F628A con 2 KBytes de memoria FLASH. Sin embargo, se puede utilizar un PIC16F627A (que tiene la mitad de memoria) o bien un PIC16F648A (que tiene el doble).

Este microcontrolador puede parecer pequeño, pero es más que suficiente para poder manejar los componentes y funciones del proyecto.

Una memoria EEPROM 24C256 de 32 KBytes , a la que se accede vía I2C puede utilizarse para almacenar el contenido de 4096 pantallas, que el microcontrolador podria representar una a cotinuación de otra, a modo de video de baja resolución.

Las columnas de la matriz se seleccionan mediante un registro de desplazamiento de 8 bits de longitud, implementado a partir de un 74HC164N.


El circuito
El circuito eléctrico de este proyecto es muy sencillo. El corazón del mismo es el microcontrolador PIC16F628A.

El oscilador del PIC esta basado en un cristal de 4 MHz y dos condensadores de 22 picofaradios.

La pantalla esta construida mediante una matriz basada en 8 filas por 8 columnas de diodos LEDs, con sus ánodos controlados desde los pines del PORTB del microcontrolador, mediante un transistor 2N3906 que se encarga de proporcionar la corriente suficiente para encender los 8 LEDs de la fila.

La fila inferior corresponde al pin B0, la siguiente al B1 y asi, hasta la fila superior, que esta conectada al pin B7. Cuando querramos programar el microcontrolador, deberemos configurar todo el puerto B como salidas.

El puerto A tiene a su cargo el control del 74HC164N, que a su vez se encarga de seleccionar las columnas activas en cada momento. Entre cada salida del 74HC164N y los LEDs hemos colocado un resistor para limitar la corriente que circula por ellos. Si el brillo de los LEDs es muy bajo, puede probarse con valores mas pequeños para estos resistores. El pin DATA del 74HC164N es controlado desde A1 y los pulsos de CLOCK los proporciona el pin A0.

La memoria EEPROM tambien depende del puerto A, con la línea SCL conectada al pin A2 y la línea SDA conectada al pin A3. Ambas lineas estan puestas a +V mediante resistores de 10K.

La alimentacion se ha resuelto mediante un regulador de voltaje tipo LM7805 y sus componentes asociados. Un diodo se encarga de proteger el circuito por si involuntariamente conectamos la alimentación con la polaridad invertida. La bornera es la encargada de vincular la fuente de corriente continua de entre 9V y 12V encargada de alimentar la placa.

Un pulsador, junto a una resistencia de 10K forman un circuito de reset, que tiene la capacidad de volver el circuito a su estado inicial en cualquier momento.


(Descarga la imagen para verla con más detalle)


NOTA IMPORTANTE:
En el esquema no figura la conexión del PIN 9 (RESET) del 74HC164N a +V, aunque si está contemplado en el diseño del PCB. Ese pin DEBE estar a +V para que el circuito funcione.

Lista de componentes
La lista de componentes es más bien pequeña:

    * 1 microcontrolador PIC16F628A, con su zócalo.
    * 1 memoria EEPROM 24C256, con su zócalo.
    * 1 circuito integrado 74HC164N, con su zócalo.
    * 1 regulador de voltaje LM7805
    * 4 condensadores cerámicos de 0.1 uF.
    * 2 condensadores cerámicos de 22 pF.
    * 1 xtal de 4 MHz.
    * 1 condensador electrolitico de 220uF/16V.
    * 1 diodo 1N4007.
    * 8 transistores 2N3906.
    * 8 resistores de 100 ohms.
    * 1 resistor de 10K.
    * 8 resistores de 1.5K.
    * 1 bornera de dos tornillos.
    * 64 diodos LED de 5mm, color rojo.

PCB
El circuito impreso necesario es de 80x95 milimetros, de una sola cara. Esto ha obligado a realizar una buena cantidad de puentes en el lado trasero de la placa, pero es mucho mas sencillo construir una PCB de simple cara en casa. Si no sabes como hacerlo, puedes aprender con el tutorial que existe en este mismo foro.


Puedes descargar el PCB en formato PDF, listo para imprimir, desde este link. Solo debes imprimirlo a escala 1:1 con una impresora láser, y seguir los pasos del tutorial.

Montaje
El montaje no requiere de ninguna técnica en especial. Una vez que tengamos el PCB listo y agujereado, procedemos a soldar los componentes. Podemos comenzar por los resistores y los LEDs. Al hacerlo, hay que tener en cuenta que los LEDs deben tener la muesca que indica el cátodo hacia el lado de los circuitos integrados. Si no lo hacemos asi, el proyecto no funcionará.

Más tarde soldaremos los zócalos, el pulsador de reset, los condensadores , el diodo 1N4007 (cuidando su orientación) y el LM7805. Por ultimo, soldaremos el cristal y pasaremos al otro lado del PCB.

Aqui es donde este montaje puede diferir un poco de otros que hayas realizado. Sin embargo, tampoco es tan complicado lo que resta por hacer.

Lo primero es soldar las los dos resistores pull-up que requiere el bus I2C para funcionar. La imagen siguiente muestra donde van soldados:


Una vez hecho esto, debemos realizar una serie de puentes para unir los ánodos de cada fila de LEDs al colector del transistor correspondiente. Deberia quedar como se ve en la foto siguiente:


Programación en CCS
Aprovecharemos este montaje para aprender más sobre el compilador CCS. A continuación, algunos ejemplos de lo que puede hacerse con esta matriz de LEDs.

Ejemplo 1: TEST LED
El primer ejemplo simplemente se encarga de mostrar encendidas las filas desde la 0 a la 7, y luego enciende rectangulos de LEDs cada vez mas grandes, comenzando desde la esquina superior derecha. El primer video de la sección correspondiente muestra el efecto.

Como el dato se ingresa dentro del registro de desplazamiento cuando el pulso de clock pasa de estao bajo a alto, hemos escrito dis funciones que se encargan de enviar un cero o un uno al registro. La siguiente envia el "0":

Código:
//--------------------------------------------------
//---Envia un 0 al registro de desplazamiento:
//--------------------------------------------------
void fRDD_send_data0(void){
  output_low(RDD_DATA);
  delay_us(2);
  output_low(RDD_CLOCK);
  delay_us(2);
  output_high(RDD_CLOCK);
}
y esta otra envia un "1":

Código:
//--------------------------------------------------
//---Envia un 1 al registro de desplazamiento:
//--------------------------------------------------
void fRDD_send_data1(void){
  output_high(RDD_DATA);
  delay_us(2);
  output_low(RDD_CLOCK);
  delay_us(2);
  output_high(RDD_CLOCK);
}


Este es el codigo completo del ejemplo 1:
Código:
//Device/Fuses/Etc.---------------------------------
#INCLUDE <16F628A.H>
#INCLUDE <MATH.H>
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES XT                      
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#use delay(clock=4000000)
//Defines------------------------------------------
#BYTE PORTA = 0x05
#BYTE PORTB = 0x06
#BYTE PORTA_TRIS = 0x85
#BYTE PORTB_TRIS = 0x86
#DEFINE RDD_DATA  PIN_A1
#DEFINE RDD_CLOCK PIN_A0
#DEFINE EEPROM_SCL PIN_A2
#DEFINE EEPROM_SDA PIN_A3
//
void fConfigurar_puertos(void);
void fRDD_send_data0(void);
void fRDD_send_data1(void);
//--------------------------------------------------
//Main----------------------------------------------
//--------------------------------------------------
void main(){
  int8 i,j;
  fConfigurar_puertos();
  output_low(RDD_CLOCK); //RELOJ = Bajo
  output_low(RDD_DATA);
//
//------Dibujo las filas una a una -----  
//
  while (TRUE){
     PORTB = 0b11111110; //Filas 1 encendida, las demas apagadas.
     for (i=0;i<8;i++) {
        for (j=0;j<8;j++) {
            fRDD_send_data0();
           }
        delay_ms(200);
        PORTB = (PORTB <<1) +1;
     }
//
//------Dibujo rectangulos... -----  
//    
     PORTB = 0b11111111; //Filas  apagadas.
     for (i=0;i<8;i++) {fRDD_send_data1();}
     for (i=0;i<8;i++) {
        fRDD_send_data0();
        PORTB = PORTB /2 ;
            delay_ms(200);
         }
  }//Fin while
}//Fin main
//--------------------------------------------------
//- FUNCIONES-
//--------------------------------------------------
void fConfigurar_puertos(void){
  PORTA_TRIS = 0b11000000; //1=ENTRADA, 0=SALIDA
  PORTB_TRIS = 0b00000000; //1=ENTRADA, 0=SALIDA
  setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
  setup_timer_1(T1_DISABLED);
  setup_timer_2(T2_DISABLED,0,1);
  setup_comparator(NC_NC_NC_NC);
  setup_vref(FALSE);
}
//--------------------------------------------------
//---Envia un 0 al registro de desplazamiento:
//--------------------------------------------------
void fRDD_send_data0(void){
  output_low(RDD_DATA);
  delay_us(2);
  output_low(RDD_CLOCK);
  delay_us(2);
  output_high(RDD_CLOCK);
}
//--------------------------------------------------
//---Envia un 1 al registro de desplazamiento:
//--------------------------------------------------
void fRDD_send_data1(void){
  output_high(RDD_DATA);
  delay_us(2);
  output_low(RDD_CLOCK);
  delay_us(2);
  output_high(RDD_CLOCK);
}

Ejemplo 2: Recorriendo la matriz
Este ejemplo es un poco mas elaborado, pero no por ello más complicado que el anterior. Simplemente, se van encendiendo uno a uno los LEDs desde el que esta en la fila y columna cero hasta llegar al de la fila y columna 7. Luego, se repite una y otra vez. Se emplean las mismas funciones que en el ejemplo anterior.


Este es el código:

Código:
//Device/Fuses/Etc.---------------------------------
#INCLUDE <16F628A.H>
#INCLUDE <MATH.H>
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES XT                      
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#use delay(clock=4000000)
//Defines------------------------------------------
#BYTE PORTA = 0x05
#BYTE PORTB = 0x06
#BYTE PORTA_TRIS = 0x85
#BYTE PORTB_TRIS = 0x86
#DEFINE RDD_DATA  PIN_A1
#DEFINE RDD_CLOCK PIN_A0
#DEFINE EEPROM_SCL PIN_A2
#DEFINE EEPROM_SDA PIN_A3
//
void fConfigurar_puertos(void);
void fRDD_send_data0(void);
void fRDD_send_data1(void);
//--------------------------------------------------
//Main----------------------------------------------
//--------------------------------------------------
void main(){
  int8 i,j;
  fConfigurar_puertos();
  output_low(RDD_CLOCK); //RELOJ = Bajo
  output_low(RDD_DATA);
  //
  while (TRUE){
     PORTB = 0b11111110; //Filas apagadas.  
     for (i=0;i<8;i++) {
        //Limpio columnas
        for (j=0;j<8;j++) {fRDD_send_data1();}
        //
        fRDD_send_data0(); //Enciendo la columna 0
        for (j=0;j<8;j++) {
           delay_ms(1);
           fRDD_send_data1();
        }
        //
        PORTB = (PORTB << 1 )+1 ; //Enciendo las columnas
        delay_ms(1);
        }
  }//Fin while
}//Fin main
//--------------------------------------------------
//- FUNCIONES-
//--------------------------------------------------
void fConfigurar_puertos(void){
  PORTA_TRIS = 0b11000000; //1=ENTRADA, 0=SALIDA
  PORTB_TRIS = 0b00000000; //1=ENTRADA, 0=SALIDA
  setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
  setup_timer_1(T1_DISABLED);
  setup_timer_2(T2_DISABLED,0,1);
  setup_comparator(NC_NC_NC_NC);
  setup_vref(FALSE);
}
//--------------------------------------------------
//---Envia un 0 al registro de desplazamiento:
//--------------------------------------------------
void fRDD_send_data0(void){
  output_low(RDD_DATA);
  delay_us(2);
  output_low(RDD_CLOCK);
  delay_us(2);
  output_high(RDD_CLOCK);
}
//--------------------------------------------------
//---Envia un 1 al registro de desplazamiento:
//--------------------------------------------------
void fRDD_send_data1(void){
  output_high(RDD_DATA);
  delay_us(2);
  output_low(RDD_CLOCK);
  delay_us(2);
  output_high(RDD_CLOCK);
}


Videos
Algunos videos de la matriz funcionando:

Video correspondiente al Ejemplo1:
http://www.youtube.com/watch?v=Kp2LvbqODHk

Video correspondiente al Ejemplo2:
http://www.youtube.com/watch?v=43yy1rZ8QY8


Otro video mostrando las posibilidades del display:
<a href="http://www.youtube.com/watch?v=UUsd4jOsBe0" target="_blank">http://www.youtube.com/watch?v=UUsd4jOsBe0</a>


Autor: Ariel

* MATRIZ8x8-002.jpg (65.06 KB - descargado 63613 veces.)
* MATRIZ8x8-004.gif (73.6 KB - descargado 52932 veces.)
* MATRIZ8x8-005.gif (10.35 KB - descargado 43332 veces.)
* MATRIZ8x8-006.jpg (61.79 KB - descargado 46263 veces.)
* 300px-MATRIZ8x8-003.gif (32.4 KB - descargado 45895 veces.)
* 628px-MATRIZ8x8-001.jpg (102.66 KB - descargado 47377 veces.)
* 8x8_001.pdf (107.65 KB - descargado 1492 veces.)
« Última modificación: Enero 22, 2010, 04:30:44 por Ariel » En línea

Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert
Ascheriit
PIC10F
*
Desconectado Desconectado

Mensajes: 2


« Respuesta #1 : Abril 11, 2010, 06:39:31 »

Muchas gracias a Ariel por este aporte!!!  bang

Yo tengo una matriz de 8x8 ánodo común, y ya que este circuito está controlado por los ánodos, tengo dudas de cómo lo puedo implementar para utilizar mi matriz??? Es necesario hacer modificaciones??? Cuáles son???  me voy a pique

Se agradece mucho la ayuda ya que es un proyecto que tendré que desarrollar en las próximas 2 semanas Grin
En línea
Ariel
Global Moderator
dsPIC
****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 10607



WWW
« Respuesta #2 : Abril 11, 2010, 07:00:00 »

Muchas gracias a Ariel por este aporte!!!  bang

Yo tengo una matriz de 8x8 ánodo común, y ya que este circuito está controlado por los ánodos, tengo dudas de cómo lo puedo implementar para utilizar mi matriz??? Es necesario hacer modificaciones??? Cuáles son???  me voy a pique

Se agradece mucho la ayuda ya que es un proyecto que tendré que desarrollar en las próximas 2 semanas Grin

La verdad es que no entiendo lo de "anodo comun" o "catodo comun" en una matriz... Huh?

¿No podrias usar cualquiera de las dos, simplemente girandola "electricamente" 90 grados?

Yo use LEDs sueltos... Grin
En línea

Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert
Suky
**----- ^^ ------**
Moderador
dsPIC
******
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5429


Con Qt...


WWW
« Respuesta #3 : Abril 11, 2010, 07:26:09 »

Cátodo común: Todos los cátodos (terminal negativo/gnd) unidos en un solo pin por ejemplo para una misma columna. Para encender el led de una determinada fila se debe enviar un pulso positivo (+V) al pin.

En cambio los de ánodo común (terminal positivo) los pines están unidos en un solo pin. Para encender el led de una determinada fila se debe enviar un pulso negativo (GND) al pin.



Saludos!
En línea

Ariel
Global Moderator
dsPIC
****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 10607



WWW
« Respuesta #4 : Abril 12, 2010, 07:26:59 »

Cátodo común: Todos los cátodos (terminal negativo/gnd) unidos en un solo pin por ejemplo para una misma columna. Para encender el led de una determinada fila se debe enviar un pulso positivo (+V) al pin.

En cambio los de ánodo común (terminal positivo) los pines están unidos en un solo pin. Para encender el led de una determinada fila se debe enviar un pulso negativo (GND) al pin.



Saludos!

Ahh, ok! Por columnas es la cosa! Grin
En línea

Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert
Suky
**----- ^^ ------**
Moderador
dsPIC
******
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5429


Con Qt...


WWW
« Respuesta #5 : Abril 12, 2010, 10:27:44 »

No se, hay que ver el datasheet  rolleyes
En línea

Ascheriit
PIC10F
*
Desconectado Desconectado

Mensajes: 2


« Respuesta #6 : Abril 14, 2010, 12:47:22 »

Hm... si va por ahí, entonces bastaria invertir la lógica en el programa? Cuándo queremos que un led se encienda enviamos un 0 vía software y no es necesario cambiar el circuito que usamos?  duda
En línea
pett
PIC12F
**
Desconectado Desconectado

Mensajes: 341


« Respuesta #7 : Mayo 02, 2010, 07:21:34 »

como lo programaria para que saliera el mensaje y no hay problema si anexo mas columnas
En línea
Emiliano
Moderador
PIC16F
******
Desconectado Desconectado

Sexo: Masculino
Mensajes: 877


'67 Caprice


« Respuesta #8 : Mayo 02, 2010, 08:18:55 »

Hola  pett.

Cuentanos en que lenguaje programas y vemos como ayudarte,
segun donde lleguen tus conocimientos de programacion.
En línea
pett
PIC12F
**
Desconectado Desconectado

Mensajes: 341


« Respuesta #9 : Mayo 03, 2010, 07:51:21 »

bueno si no me equivoco se puede programar en c y basic se un poco de ambos lo basico pero me gustaria hacerlo un poco mas grande 8x16 y si se puede que tenga 2 modos el ´primer modo el modo de mensaje y el segundo modo un reloj sera que se le puede poner el rts
En línea
dennis835
PIC10F
*
Desconectado Desconectado

Mensajes: 3


« Respuesta #10 : Julio 11, 2010, 05:05:11 »

hola ariel mucho gusto sabes yo hice mi matrix de 8*8 pero el problema que tengo es que no me funciona sabes la programacion lo hice en basic  lo simule con el proteus y me funciono bien pero cuando fui a grabar mi pic nada  no funciona en la matrix, te mando mi codigo esta en pbp o esque estoy usando mal el winpic800 :

 me voy a pique

AllDigital

Symbol fila1 = PORTB.0
Symbol fila2 = PORTB.1
Symbol fila3 = PORTB.2
Symbol fila4 = PORTB.3
Symbol fila5 = PORTB.4
Symbol fila6 = PORTB.5
Symbol fila7 = PORTB.6
Symbol fila8 = PORTB.7
Symbol clock = PORTA.1
Symbol data_reg = PORTA.0


'Declaración de variables
a       var Byte
col     var Byte
aux     var Byte
a1      var Byte
a2      var Byte
a3      var Byte
a4      var Byte
tiempo  var Byte  'cantidad de exploraciones por desplazamiento (determina el tiempo entre cada paso del desplazamiento)
dato    var Byte[64]

'Mensaje a mostrar en el panel
dato(63) = %01111111
dato(62) = %01001001
dato(61) = %01001001
dato(60) = %01001001
dato(59) = %00110110
dato(58) = %00000000
dato(57) = %01111111
dato(56) = %01001001
dato(55) = %01001001
dato(54) = %01000001
dato(53) = %01000001
dato(52) = %00000000
dato(51) = %01111111
dato(50) = %00001001
dato(49) = %00011001
dato(48) = %00101001
dato(47) = %01000110
dato(46) = %00000000
dato(45) = %00000001
dato(44) = %00000001
dato(43) = %01111111
dato(42) = %00000001
dato(41) = %00000001
dato(40) = %00000000
dato(39) = %01111111
dato(38) = %00001000
dato(37) = %00001000
dato(36) = %00001000
dato(35) = %01111111
dato(34) = %00000000
dato(33) = %01111110
dato(32) = %00010001
dato(31) = %00010001
dato(30) = %00010001
dato(29) = %01111110
dato(28) = %00000000
dato(27) = %00000000
dato(26) = %01111111
dato(25) = %01000000
dato(24) = %01000000
dato(23) = %01000000
dato(22) = %01000000
dato(21) = %00000000
dato(20) = %00111110
dato(19) = %01000001
dato(18) = %01000001
dato(17) = %01000001
dato(16) = %00111110
dato(15) = %00000000
dato(14) = %00011111
dato(13) = %00100000
dato(12) = %01000000
dato(11) = %00100000
dato(10) = %00010000
dato(9) =  %00001111
dato(Cool =  %00000000
dato(7) =  %01111111
dato(6) =  %01001001
dato(5) =  %01001001
dato(4) =  %01000001
dato(3) =  %01000001
dato(2) =  %00000000
dato(1) =  %10000000
dato(0) =  %00000000
'Pograma prncipal

PORTB = 255  'inicia en 11111111 para apagar todas las filas

TRISB = 0  'puerto b como salida
TRISA = 0  'puerto d como salida

inicio:

'explorar el array

'-------------------------------
'para Fila 1
 For a = 0 To 63  'for para explorar los 32 bits que se van a cargar en el registro 74ls164
  aux = dato(a)  'pasamos el dato apuntado por el indice (a) a la variable aux
  If aux.7 = 1 Then  'preguntamos si el bit 7 es 1 o 0
   data_reg = 1  'si es 1 entonces cargara un 1 en el registro
   clock = 0  'pulso de clock para el registro
   clock = 1
  Else
   data_reg = 0  'si es 0 entonces cargara un 0 en el registro
   clock = 0
   clock = 1
  Endif
 Next a
 fila1 = 0  'una ves cargada la informacion seleccionamos la fila para mostrar la informacion
pause 5  'tiempo en que se va mostrar la fila1
 fila1 = 1  'apagamos la fila para continuar con la siguiente
'-------------------------------
'para Fila 2
  a = 0
 For a = 0 To 63
  aux = dato(a)
  If aux.6 = 1 Then
   data_reg = 1
   clock = 0
   clock = 1
  Else
   data_reg = 0
   clock = 0
   clock = 1
  Endif
 Next a
 fila2 = 0
pause 5
 fila2 = 1
'-------------------------------
'para Fila 3
  a = 0
 For a = 0 To 63
  aux = dato(a)
  If aux.5 = 1 Then
   data_reg = 1
   clock = 0
   clock = 1
  Else
   data_reg = 0
   clock = 0
   clock = 1
  Endif
 Next a
 fila3 = 0
pause 5
 fila3 = 1
'-------------------------------
'para Fila 4
 a = 0
 For a = 0 To 63
  aux = dato(a)
  If aux.4 = 1 Then
   data_reg = 1
   clock = 0
   clock = 1
  Else
   data_reg = 0
   clock = 0
   clock = 1
  Endif
 Next a
 fila4 = 0
pause 5
 fila4 = 1
'-------------------------------
'para Fila 5
 a = 0
 For a = 0 To 63
  aux = dato(a)
  If aux.3 = 1 Then
   data_reg = 1
   clock = 0
   clock = 1
  Else
   data_reg = 0
   clock = 0
   clock = 1
  Endif
 Next a
 fila5 = 0
pause 5
 fila5 = 1
'-------------------------------
'para Fila 6
 a = 0
 For a = 0 To 63
  aux = dato(a)
  If aux.2 = 1 Then
   data_reg = 1
   clock = 0
   clock = 1
  Else
   data_reg = 0
   clock = 0
   clock = 1
  Endif
 Next a
 fila6 = 0
pause 5
 fila6 = 1
'-------------------------------
'para Fila 7
 a = 0
 For a = 0 To 63
  aux = dato(a)
  If aux.1 = 1 Then
   data_reg = 1
   clock = 0
   clock = 1
  Else
   data_reg = 0
   clock = 0
   clock = 1
  Endif
 Next a
 fila7 = 0
pause 5
 fila7 = 1
'-------------------------------
'para Fila 8
 a = 0
 For a = 0 To 63
  aux = dato(a)
  If aux.0 = 1 Then
   data_reg = 1
   clock = 0
   clock = 1
  Else
   data_reg = 0
   clock = 0
   clock = 1
  Endif
 Next a
 fila8 = 0
 pause 5
 fila8 = 1
 tiempo = tiempo + 1  'tiempo determina cuantas exploraciones se van a realizar por cada deplazamiento
'--------------------------------
'moviendo el mensaje
If tiempo = 5 Then  'determinamos 5 exploraciones por cada desplazamiento del mensaje
'creo que esta claro no? se mueven todos los datos del array
dato(0) = dato(63)  'el detalle, con esta fila se hace un bucle infinito, el mensaje estara rotando en el array de 32byte
dato(63) = dato(62)
dato(62) = dato(61)
dato(61) = dato(60)
dato(60) = dato(59)
dato(59) = dato(58)
dato(58) = dato(57)
dato(57) = dato(56)
dato(56) = dato(55)
dato(55) = dato(54)
dato(54) = dato(53)
dato(53) = dato(52)
dato(52) = dato(51)
dato(51) = dato(50)
dato(50) = dato(49)
dato(49) = dato(48)
dato(48) = dato(47)
dato(47) = dato(46)
dato(46) = dato(45)
dato(45) = dato(44)
dato(44) = dato(43)
dato(43) = dato(42)
dato(42) = dato(41)
dato(41) = dato(40)
dato(40) = dato(39)
dato(39) = dato(38)
dato(38) = dato(37)
dato(37) = dato(36)
dato(36) = dato(35)
dato(35) = dato(34)
dato(34) = dato(33)
dato(33) = dato(32)
dato(32) = dato(31)
dato(31) = dato(30)
dato(30) = dato(29)
dato(29) = dato(28)
dato(28) = dato(27)
dato(27) = dato(26)
dato(26) = dato(25)
dato(25) = dato(24)
dato(24) = dato(23)
dato(23) = dato(22)
dato(22) = dato(21)
dato(21) = dato(20)
dato(20) = dato(19)
dato(19) = dato(18)
dato(18) = dato(17)
dato(17) = dato(16)
dato(16) = dato(15)
dato(15) = dato(14)
dato(14) = dato(13)
dato(13) = dato(12)
dato(12) = dato(11)
dato(11) = dato(10)
dato(10) = dato(9)
dato(9) = dato(Cool
dato(Cool = dato(7)
dato(7) = dato(6)
dato(6) = dato(5)
dato(5) = dato(4)
dato(4) = dato(3)
dato(3) = dato(2)
dato(2) = dato(1)
dato(1) = dato(0)
tiempo = 0
Else
Endif

  Goto inicio




ayudame por favor. de  antemano gracias.
En línea
Ariel
Global Moderator
dsPIC
****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 10607



WWW
« Respuesta #11 : Julio 12, 2010, 08:59:14 »

Hola!
Mira, si en Proteus te funciona bien y en el circuito real no, yo no me centraría en buscar errores en el programa. Es posible que algo esté mal montado en tu hardware. Creo que lo primero seria revisar a fondo el hard para descartar esa posibilidad. Incluso, podrías "truncar" el programa de forma que solo encienda una fila o una columna, y ver si el hard responde. cabrón

Saludos!
En línea

Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert
Fulguitron
PIC10F
*
Desconectado Desconectado

Mensajes: 52


« Respuesta #12 : Julio 22, 2010, 03:08:00 »

   Buenos días, yo también estoy intentando hacer la matriz en el proteus pero a mi no me ha salido correctamente. Cargo el programa dos y en vez de ver un led recorriendo la matriz lo veo al revés y solo hace un ciclo, alguien sabe que puede pasar?? una observación en vez de usar el 74H164N uso el mismo pero sin la N porque no la tengo en la librería. Alguien me puede dar una solución???
En línea
leokorn
PIC10F
*
Desconectado Desconectado

Sexo: Masculino
Mensajes: 63



« Respuesta #13 : Julio 25, 2010, 07:55:03 »

hola , buenos dias . estoy tratando de hacer el cartel de led en proteus pero no se como se conectan los led, ya conecte todos los anodos pero no se cono se conectam los catodos
aca les dejo la simulacion de proteus
gracias por si ayuda

* 8x8.DSN (128.69 KB - descargado 437 veces.)
« Última modificación: Julio 26, 2010, 07:08:36 por leokorn » En línea

Haz las cosas tan simples como sea posible pero no demasiado
sencillas. Albert Einstein
toti97
PIC10F
*
Desconectado Desconectado

Mensajes: 7


« Respuesta #14 : Septiembre 10, 2010, 11:27:36 »

Buenas gente..
Estoy haciendo esta matriz (la de 8x8http://www.ucontrol.com.ar/wiki/index.php?title=Matriz_de_LEDS_de_8x8).
Ya tengo los componentes y la PCB. Solo me queda soldar. Peroo.. tengo dos dudas que creo que para uds no seran dificiles de resolver. Espero que puedan ayudarme...

Primero, en el tutorial no lo indica, pero no deberia haber un puente para conectar el pin 18 del pic con el 8 del registro de desplazamiento?? Fijense la imagen

Si no es asi, que va soldado ahi?

Bueno, y despues... la pregunta del millon... COMO LO PROGRAMO???
Porque en el tutorial te enseña a poner los codigos con el soft y todo eso, pero en donde se pone el programa? en el PIC? en la EEPROM?? Si es en el PIC, para que esta la EEPROM? Necesitaria una tarjeta programadora de PICs?? Me sirviria esta? http://www.circuit-projects.com/microcontroller/pic-and-eeprom-programmer.html

Ayudemne un poco porfa, ya que estoy entusiasmado con el proyecto!!

Graciasss..
Tobi.



Edit: No hay necesidad de utilizar rojo en las lentras  Wink
« Última modificación: Septiembre 11, 2010, 12:26:31 por Suky » En línea

La gente de Niple nos ofrece un descuento especial para usuarios de uControl.
Entérate de como puedes aprovechar esta oferta haciendo click aqui.

Súmate, y ayuda a uControl con tu participación en esta interesante oportunidad que nos oferece Niple.

Páginas: [1] 2 3 4 5 6 ... 9   Ir Arriba
  Imprimir  
 
Ir a:  


La gente de Niple nos ofrece un descuento especial para usuarios de uControl.
Entérate de como puedes aprovechar esta oferta haciendo click aqui.

Súmate, y ayuda a uControl con tu participación en esta interesante oportunidad que nos oferece Niple.

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.19 | SMF © 2011, Simple Machines
SMFAds for Free Forums
XHTML 1.0 válido! CSS válido!
Página creada en 0.074 segundos con 29 consultas. (Pretty URLs adds 0.013s, 3q)