Autor Tema: Matrix de 8x8 LEDs y 24C256 en CCS por software  (Leído 21914 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: 24C256 en CCS por software
« Respuesta #15 en: 13 de Septiembre de 2007, 11:15:39 »
Depende de lo atractivo del cliente, Ariel.  :g)

En el caso de Diego hago una excepción, a pesar de la barba.  :D

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: 24C256 en CCS por software
« Respuesta #16 en: 13 de Septiembre de 2007, 14:52:14 »
Manolo, lo tuyo es un apostolado. Te tienes ganado el cielo. :)

Aqui va una foto del "publik-trainer". Un proyectito con una EEPROM, un registro de desplazamiento y un PIC pequeño (un 16F628A) que servira para poner muuuuchos ejemplitos en CCS de como usar la EEPROM, las E/S, el registro de desplazamiento y lo que se me vaya ocurriendo. El boton verde es el RESET. No habia pines para mucho mas. :)



Podria haber usado un registro mas para las filas....pero no lo hice.
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

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: 24C256 en CCS por software
« Respuesta #17 en: 13 de Septiembre de 2007, 16:58:03 »
Ariel !! :-/ :-/
Cuantos agujeritos que hiciste !!!! :D :D :D
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: 24C256 en CCS por software
« Respuesta #18 en: 13 de Septiembre de 2007, 17:53:27 »
Unos 200... :(

Mi primer proyecto desde cero, que me trajo al foro, fue un mini-publik de 7x32 ....como esto, pero mas largo. Ahi si que me aburri de hacer agujeros! :)

Ahora estoy esperando los PCB para uno de 7x80, pero esta vez, con modulos de 7x5, asi que son poquisimos agujeros. :)

Saludos!

PD: las pullup estan del lado de abajo, sodadas sobre las pistas...Es una chanchada, pero...que se le va a hacer, no? :)
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

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: 24C256 en CCS por software
« Respuesta #19 en: 15 de Septiembre de 2007, 18:01:44 »
Hola otra vez!

Bien, ya esta funcionando el aparatejo. Cosa rara, todo funcionó a la primera....en que me habre equivocado?  :D :D


Puse este videito en Youtube y tambien lo estoy publicando con el PCB, circuito y demas en este artículito, que aun falta terminar.

Saludos.
« Última modificación: 12 de Diciembre de 2007, 07:30:45 por aitopes »
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

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: 24C256 en CCS por software
« Respuesta #20 en: 15 de Septiembre de 2007, 18:02:57 »
¿Deberia moverse este hilo a "proyectos", con un titulo acorde?

Si algun moderador cree que si...adelante! :)

Saludos.
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

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Matrix de 8x8 y 24C256 en CCS por software
« Respuesta #21 en: 12 de Diciembre de 2007, 12:42:17 »
Finalmente, el proyecto quedo  terminado: Lee el contenido de la EEPROM y lo muestra en la "pantalla".


Gracias a todos!
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

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Matrix de 8x8 LEDs y 24C256 en CCS por software
« Respuesta #22 en: 12 de Diciembre de 2007, 12:47:31 »
Quedó muy chulo Ariel, aunque se observa un ligero parpadeo. ¿Es culpa de la grabación o también se observa a simple vista?

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: Matrix de 8x8 LEDs y 24C256 en CCS por software
« Respuesta #23 en: 12 de Diciembre de 2007, 13:16:10 »
Hola Manolo!
No, es la camara de fotos devenida en filmadora. :)

En vivo y en directo no parpadea nada de nada. ME voy un par de horas a la cama, es el tercer dia que duermo solo 4 horas, y no doy mas.  :z)

 A la vuelta, posteo el codigo en CCS.

Saludos!
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

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: Matrix de 8x8 LEDs y 24C256 en CCS por software
« Respuesta #24 en: 19 de Diciembre de 2007, 13:45:09 »
Hola Amigos!
Sigo "jugando" con mi matriz de LEDs de 8x8, intentando aprender todo lo posible antes de construir modelos mas grandes.

Una de mis preocupaciones se relaciona con los tiempos de lectura de la EEPROM.

Tal como hago las cosas, es bastante lenta.
Les cuento un poco mas: uso un PIC16F628A, que no dispone de I2C por hard, asi que recurro a las rutinas del CCS por software. Tengo un set de caracteres ASCII guardados en la EEPROM, a razon de 8 bytes por cada caracter (si, son 8x8=64bits), almacenados en posiciones contiguas.

Antes de mostrar un caracter en la matriz, lo "busco" en la EEPROM y lo guardo en una tabla de 1x8 bytes de tamaño. Luego, envio cada uno de esos bytes al registro de desplazamiento, uno por fila. Repito el "refresco" de la pantalla unas 100 o 200 veces, antes de pasar al caracter siguiente. Con el micro a 4 MHz, eso permite que cada caracter este mas o menos un segundo en pantalla antes de pasar al siguiente. Y la verdad, funciona muy bien.

Ahora, al intentar dar el gran paso (una matriz de por ejemplo 16x128 o algo asi) intente algunas pruebas para no hacer algunos miles de agujeros (como dice Marcos) de gusto. Y no me gusto lo que encontre.

Modifique el programa para que lea de la EEPROM 20 veces el caracter ANTES de dibujarlo. Esto me daria el mismo "trabajo" (o consumiria el mismo tiempo) que si utilizara una matriz 20 veces mas grande. Tambien envio al registro de desplazamiento 20 veces la misma informacion (el 74HC164N debe creer que estoy loco) para que los tiempos sean los mismos que si el cartel fuese 20 veces mas grande.

No hay problemas con la escritura en el registro de desplazamiento. Pero las 20 lecturas de la EEPROM se demoran bastante. Soy incapaz de medirlo, aunque con el osciloscopio debiera poder medirlo. De todos modos, entre caracter y caracter se produce una demora apreciable a simple vista, de unos 100 o 200ms. Y queda muy feo!

La cuestion es la siguiente: ¿que me combiene hacer?  :lol:

1) Utilizar un micro de 20Mhz? (si es que el problema es la velocidad del PIC y no de la EEPROM)
2) Utilizar un micro que tenga implementado I2C en Hard?
3) Comunicarme con la EEPROM mediante algun codigo mas rapido que el que viene en CCS (cosa que soy incapaz de escribir, creo  :shock:)

¿Ideas?

Gracias por adelantado.  :mrgreen:
Ariel.
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

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Matrix de 8x8 LEDs y 24C256 en CCS por software
« Respuesta #25 en: 19 de Diciembre de 2007, 13:53:38 »
¿Y no puedes leer de la eeprom los 20 caracteres de una tacada para luego ir mostrándolos?, en otras palabras, vuelca el contenido de la eeprom a la ram y trabaja con esta última.

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: Matrix de 8x8 LEDs y 24C256 en CCS por software
« Respuesta #26 en: 19 de Diciembre de 2007, 14:21:34 »
Hola Manolo!
Leo los 20, y eso es lo que ME PARECE demora demasiado.

En realidad, no los vuelco a la EEPROM del micro, si no que los cargo en una tabla....supongo que es mas o menos lo mismo.

Pero tengo que estar haciendo algo mal, no puedo creer que el acceso sea tan lento.

¿tendra que ver que para acceder a las posiciones de la EEPROM hago una cuenta? ¿Que eso demore mucho? Este es el pedazo de código:

Código: [Seleccionar]
   int tabla[8]; //={0x3C,0x42,0x81,0xa5,0x81,0x99,0x42,0x3c};
   int fila[8]={254,253,251,247,239,223,191,127};
.
.
.
.
void fDibujoPantalla(long int imagen, int efecto) {
   int i=0,j=0, aux, tiempo;

   //Cargo en la tabla los valores de la EEPROM
   
   for (aux=0;aux<=20;aux++){  //Este bucle simula las 20 lecturas......
      for (i=0;i<=7;i++) {
           tabla[i] = read_ext_eeprom ((long int)imagen*9+i); //Esta es la "cuenta" que menciono en el post.
       }
   }
   
   
   tiempo = 40;
   
   //Bucle que muestra la imagen "tiempo" veces
   for (i=1;i<=tiempo;i++) {
     
      for (j=0;j<8;j++) {
      PORTB = 255; //Filas apagadas.
      //escribo registro desplazamiento
       for (aux=0;aux<=20;aux++){
         fRDD_send_byte1(tabla[j]);
       }
         
   
      //Enciendo la fila correspondiente
      PORTB = fila[j];
      delay_ms(3);
      }
      PORTB = 255; //Filas apagadas.
   }
}
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

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Matrix de 8x8 LEDs y 24C256 en CCS por software
« Respuesta #27 en: 19 de Diciembre de 2007, 15:25:41 »
Que memoria externa EEPROM usas ??
Es I2C ??
Que valor tiene la variable (o constante) imagen ??

Una simple cuenta:
20 lecturas de 8 bytes por lectura son 160 Bytes leidos; cada memoria tiene su tiempo de latencia (lo encontras en su hoja de datos) antes de responder el nuevo valor, ademas deberias saber a que velocidad esta el bus I2C, ya que esta velocidad determina el tiempo total de transferencia de los 160 bytes.

Alli esta la explicacion de tu demora... :mrgreen: :mrgreen:

Que micro utilizas??
Porque tal vez tengas la posibilidad de escribir y leer la flash interna, sin hacer uso de la EEPROM, que seguramente ya te quedo chica, je..je.. :mrgreen: :mrgreen:

Como consejo queda decirte que podrias utilizar la interrupcion para marcar los tiempos exactos, y leer los bytes de EEPRM mientras ocurre el muestreo...
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: Matrix de 8x8 LEDs y 24C256 en CCS por software
« Respuesta #28 en: 19 de Diciembre de 2007, 15:33:31 »
Hola Marcos!

Gracias por aparecer. :)

1) La EEPROM es una 24C256, I2C
2) La variable tiene un valor que sirve de indice para buscar los bytes que conforman la imagen dentro de la memoria. Cada imagen (solo para jugar) esta compuesta por 8 bytes + 1 byte que es el tiempo que deberia mostrarse. Eso no esta en el codigo que postee, por que es irrelevante. En el proyecto final las imagenes no tendran ese byte extra, y la longitud de 8 bytes ayudara a acelerar un poco los calculos de la posicion de cada una de ellas.

3) Uso un PIC16F628A
4)
Citar
Como consejo queda decirte que podrias utilizar la interrupcion para marcar los tiempos exactos, y leer los bytes de EEPRM mientras ocurre el muestreo...

Por ahora, esa tecnica esta fuera de mi alcance, aunque ya lo habia pensado. En lugar de perder el tiempo en un bucle con los leds encendidos, podria aprovechar para cargar los datos que necesito en la tabla. Creo que voy a rumbear para ese lado.

GRACIAS!
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

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Matrix de 8x8 LEDs y 24C256 en CCS por software
« Respuesta #29 en: 19 de Diciembre de 2007, 15:41:58 »
Si es ese PIC, entonces te conviene obtener una base de tiempo buena a traves del Timer1 y el modulo CCP y efectuar una interrupcion cada 1 milisegundo, por ejemplo.
Dentro de la rutina de interrupcion incrementas una variable cada vez que ocurre y al llegar a un valor predeterminado activas un flag que despues dentro del programa activara una nueva pasada de escritura de los registros de desplazamiento.

La rutina de lectura de la EEPROM la dejas que corra libre, ya que tus tiempos no se veran comprometidos ni por ella, ni por la que escribe...
Se entiende??

Ademas luego este codigo es bastante portable a otro tipo de PIC, hoy casi todos tienen Timer1 y modulo CCP... :mrgreen: :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.


 

anything