TODOPIC

Microcontroladores PIC => * PROYECTOS * => Mensaje iniciado por: aitopes en 12 de Septiembre de 2007, 10:14:36

Título: Matrix de 8x8 LEDs y 24C256 en CCS por software
Publicado por: aitopes en 12 de Septiembre de 2007, 10:14:36
Hola amigos!

¿Alguien puede decirme si el "driver" incluido en CCS (24256.C) cuyo codigo incluyo mas abajo funciona en PICs que no tienen i2c implementado por hardware?

Gracias!  :)

Código: [Seleccionar]
///////////////////////////////////////////////////////////////////////////
////        (C) Copyright 1996,2003 Custom Computer Services           ////
//// This source code may only be used by licensed users of the CCS C  ////
//// compiler.  This source code may only be distributed to other      ////
//// licensed users of the CCS C compiler.  No other use, reproduction ////
//// or distribution is permitted without written permission.          ////
//// Derivative programs created using this software in object code    ////
//// form are not restricted in any way.                               ////
///////////////////////////////////////////////////////////////////////////


#ifndef EEPROM_SDA

#define EEPROM_SDA  PIN_B1
#define EEPROM_SCL  PIN_B0

#endif

#use i2c(master, sda=EEPROM_SDA, scl=EEPROM_SCL)

#define EEPROM_ADDRESS long int
#define EEPROM_SIZE   32768

void init_ext_eeprom()
{
   output_float(EEPROM_SCL);
   output_float(EEPROM_SDA);

}


void write_ext_eeprom(long int address, BYTE data)
{
   short int status;
   i2c_start();
   i2c_write(0xa0);
   i2c_write(address>>8);
   i2c_write(address);
   i2c_write(data);
   i2c_stop();
   i2c_start();
   status=i2c_write(0xa0);
   while(status==1)
   {
   i2c_start();
   status=i2c_write(0xa0);
   }
}


BYTE read_ext_eeprom(long int address) {
   BYTE data;
   i2c_start();
   i2c_write(0xa0);
   i2c_write(address>>8);
   i2c_write(address);
   i2c_start();
   i2c_write(0xa1);
   data=i2c_read(0);
   i2c_stop();
   return(data);
}
Título: Re: 24C256 en CCS por software
Publicado por: Nocturno en 12 de Septiembre de 2007, 11:27:02
Lo mejor será que lo pruebes, pero en teoría debería funcionar tanto si se dispone del periférico como si no, porque el compilador se encarga de meter el código cuando el PIC no tenga hardware específico.
Título: Re: 24C256 en CCS por software
Publicado por: aitopes en 12 de Septiembre de 2007, 11:33:08
Perfecto!! Gracias Manolo.
Es que estoy dibujando una plaquita para "jugar" con unos LEDs y una eeprom con un 16F628A....que no tiene I2C en hard, y no queria trabajar de gusto, aunque apostaba doble contra sencillo que funcionaria igual.

Gracias otra vez.  :mrgreen:
Título: Re: 24C256 en CCS por software
Publicado por: MGLSOFT en 12 de Septiembre de 2007, 18:52:40
Yo trabaje con un 16F628 en comunicacion I2C manejando un MCP23016 y funciona correctamente !!
No te olvides de los pullups de las lineas I2C...
 :mrgreen: :mrgreen:
Título: Re: 24C256 en CCS por software
Publicado por: aitopes en 12 de Septiembre de 2007, 19:03:05
Je................
Acabo de perforar el impreso...y veo que me las olvide! Y eso que sabia que iban, y que las dibuje en el esquemita que hice en el cuaderno. Pues bien, iran soldadas del lado de las pistas en el prototipo. :)
Título: Re: 24C256 en CCS por software
Publicado por: MGLSOFT en 13 de Septiembre de 2007, 00:53:02
Por eso te lo dije, creias ser el unico que no las tuvo en cuenta ?? :D :D
Título: Re: 24C256 en CCS por software
Publicado por: RedPic en 13 de Septiembre de 2007, 01:45:09
Hola amigos!

¿Alguien puede decirme si el "driver" incluido en CCS (24256.C) cuyo codigo incluyo mas abajo funciona en PICs que no tienen i2c implementado por hardware?

Gracias!  :)

Ariel, toda la diferencia entre hacerlo por hardware o por software está en esta línea:

Código: Text
  1. #use i2c(master, sda=EEPROM_SDA, scl=EEPROM_SCL)

Para que funcione correctamente por Hardware tienes que asegurarte de una cosa y añadir un parámetro más a la declaración:

1º.- Asegurarte de que EEPROM_SDA y EEPROM_SCL corresponden efectivamente a los pines del PIC que tienen la función I2C implementada.

2º.- Añadir el FORCE_HW a la declaración del i2C. CCS por defecto nunca fuerza la realización por Hardware, hay que declararlo explícitamente.

Código: CSS
  1. #use i2c(master, sda=EEPROM_SDA, scl=EEPROM_SCL, FORCE_HW)

Nota: a diferencia del #use i2c que en CCS siempre es por software salvo que se declare FORCE_HW el #use rs232 es por software sólo si xmit y rcv no coinciden con los pines asociados a la USART, es decir que detecta y utiliza el hardware automáticamente.


Título: Re: 24C256 en CCS por software
Publicado por: aitopes en 13 de Septiembre de 2007, 07:19:55
Hola Diego!

Como siempre, impecable! Muchas gracias.

Marcos, el temas de las resistencias pullup estan bajo la órbita de las leyes de murphy: "Si puedes olvidar de poner las resistencias pullup, seguramente no las pondras", o algo asi. :)

Gracias!
En un rato (5 o 6 horas) voy a soldar todo, y posteo una foto del juguetito que estoy armando para aprender un poco mas de CCS.

Saludos!
Título: Re: 24C256 en CCS por software
Publicado por: Nocturno en 13 de Septiembre de 2007, 07:40:39
Realmente es absurdo que los PIC no tengan integradas esas resistencias pull-up en su propio core. De hecho las tienen en el PORTB...
Título: Re: 24C256 en CCS por software
Publicado por: aitopes en 13 de Septiembre de 2007, 07:49:15
Hola Manolo!

Citar
Realmente es absurdo que los PIC no tengan integradas esas resistencias pull-up en su propio core.

Lo hacen a proposito, para obligarnos a mantener la mente alerta. :)

De hecho....podrian estar en la misma EEPROM!

Saludos.
Título: Re: 24C256 en CCS por software
Publicado por: MGLSOFT en 13 de Septiembre de 2007, 07:56:14
Creo que es porque el pull-up deberia estar en el ultimo dispositivo del bus, al menos eso entiendo, aunque no se cual es la diferencia ?? :mrgreen: :mrgreen:
Título: Re: 24C256 en CCS por software
Publicado por: aitopes en 13 de Septiembre de 2007, 08:07:20
Hola Marcos!
Esa no la sabia.
Es probable que altas velocidades los componentes inductivos de las resistencias o de las pistas del impreso tengan algo que ver en su posicion.....no?
Título: Re: 24C256 en CCS por software
Publicado por: Nocturno en 13 de Septiembre de 2007, 08:24:34
Pues no sé cuál será la explicación. Yo a veces las pongo en un extremo y otras en el otro sin miramiento alguno. Al fin y al cabo ambos dispositivos tienen la posibilidad de bajar la señal Data cuando les toque, así que no tendría que haber diferencias entre ambos.
Título: Re: 24C256 en CCS por software
Publicado por: RedPic en 13 de Septiembre de 2007, 09:00:12

Marcos, el temas de las resistencias pullup estan bajo la órbita de las leyes de murphy: "Si puedes olvidar de poner las resistencias pullup, seguramente no las pondras", o algo asi. :)


¡¡¡Exacto!!

Este pasado sábado tuve que llamar al Servicio Nocturno de Rediseños de PCB's de Urgencia para añadir un par de Pull-Up's que DHEYSENE (Debieran Haber Estado Y Sin Embargo No Estaban). ja ja ja  :D :D :D

Título: Re: 24C256 en CCS por software
Publicado por: aitopes en 13 de Septiembre de 2007, 09:08:36
Citar
Servicio Nocturno de Rediseños de PCB's de Urgencia
:D :D :D :D :D

¿Hasta que hora de la madrugada funciona el sistema?

Título: Re: 24C256 en CCS por software
Publicado por: Nocturno 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
Título: Re: 24C256 en CCS por software
Publicado por: aitopes 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. :)

(http://www.ucontrol.com.ar/fotos/Image2.jpg)

Podria haber usado un registro mas para las filas....pero no lo hice.
Título: Re: 24C256 en CCS por software
Publicado por: MGLSOFT en 13 de Septiembre de 2007, 16:58:03
Ariel !! :-/ :-/
Cuantos agujeritos que hiciste !!!! :D :D :D
Título: Re: 24C256 en CCS por software
Publicado por: aitopes 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? :)
Título: Re: 24C256 en CCS por software
Publicado por: aitopes 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 (http://www.youtube.com/watch?v=Kp2LvbqODHk) y tambien lo estoy publicando con el PCB, circuito y demas en este artículito (http://www.ucontrol.com.ar/wiki/index.php?title=Matriz_de_LEDS_de_8x8), que aun falta terminar.

Saludos.
Título: Re: 24C256 en CCS por software
Publicado por: aitopes 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.
Título: Matrix de 8x8 y 24C256 en CCS por software
Publicado por: aitopes 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!
Título: Re: Matrix de 8x8 LEDs y 24C256 en CCS por software
Publicado por: Nocturno 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?
Título: Re: Matrix de 8x8 LEDs y 24C256 en CCS por software
Publicado por: aitopes 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!
Título: Re: Matrix de 8x8 LEDs y 24C256 en CCS por software
Publicado por: aitopes 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.
Título: Re: Matrix de 8x8 LEDs y 24C256 en CCS por software
Publicado por: Nocturno 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.
Título: Re: Matrix de 8x8 LEDs y 24C256 en CCS por software
Publicado por: aitopes 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.
   }
}
Título: Re: Matrix de 8x8 LEDs y 24C256 en CCS por software
Publicado por: MGLSOFT 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...
Título: Re: Matrix de 8x8 LEDs y 24C256 en CCS por software
Publicado por: aitopes 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!
Título: Re: Matrix de 8x8 LEDs y 24C256 en CCS por software
Publicado por: MGLSOFT 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:
Título: Re: Matrix de 8x8 LEDs y 24C256 en CCS por software
Publicado por: jfmateos2 en 19 de Diciembre de 2007, 15:44:22
Hola Aitopes, yo ando en un proyecto similar, aunque más sencillo. ¿Podrías decirme o mostrar cómo has soldado los leds? ¿has tenido que recurrir a puentes?
Título: Re: Matrix de 8x8 LEDs y 24C256 en CCS por software
Publicado por: aitopes en 19 de Diciembre de 2007, 15:46:42
Hola Jesus!

Si, montones de ellos. Todo por no hacer la PCB a doble faz.

Si quieres darte una vuelta por mi web vas a encontrar el PCB y fotos de los puentes. De paso, aprendes lo que es un trabajo hecho a "lo que salga". :)

Un abrazo!
Título: Re: Matrix de 8x8 LEDs y 24C256 en CCS por software
Publicado por: jeremylf en 19 de Diciembre de 2007, 17:10:04
Aiopes si quieres leer la Eeprom mas rapido te recomiendo usar su metodo de "Sequential Read". Q dandole un vistaso al datasheet seria algo asi:

Código: [Seleccionar]
int8 dato[];
int16 direcion_inicial = 0, direcion_final = 100;

i2c_start();
i2c_write(0xa0);

i2c_write(direcion_inicial >> 8);
i2c_write(direcion_inicial);

i2c_start();
i2c_write(0xa1);

for (direcion_inicial; direcion_inicial <= direcion_final; direcion_inicial++)
{
     dato[direcion_inicial] = i2c_read(0);
}

i2c_stop();

No lo e probado pero deberia funcionar  :mrgreen:


salu2 8)


Título: Re: Matrix de 8x8 LEDs y 24C256 en CCS por software
Publicado por: aitopes en 19 de Diciembre de 2007, 17:16:23
Hola jeremylf!

Muy buena idea. Obviamente es mi primera vez en CCS con las EEPROM, y tambien la primera vez en que el tiempo es crucial.

Ya es tarde por hoy, pero mañana mismo me pongo a experimentar con el codigo que pasaste. Es una buena idea el leer todos los datos "de un tiron", sin hacer todos los pasos byte por byte.

Mañana te cuento como me ha ido.

GRACIAS!    :mrgreen:
Título: Re: Matrix de 8x8 LEDs y 24C256 en CCS por software
Publicado por: jfh900 en 19 de Diciembre de 2007, 20:47:23
¿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.

Eso ya te lo dijo Manolo hace unos cuantos post más arriba, pero es que no le haces caso  :D :D :D :D

Un saludo
Título: Re: Matrix de 8x8 LEDs y 24C256 en CCS por software
Publicado por: aitopes en 19 de Diciembre de 2007, 21:07:08
Es que soy un cabeza dura.....hasta recien, para mi leer los 20 caracteres era lo que yo hacia....ja ja ja ja!

Ahora lo he pillado.

De todos modos, quizas lo mas eficiente y elegante sea realizar las lecturas en los "tiempos muertos" que hay entre la visualizacion de una fila y la siguiente. Si tengo 8 filas, puedo leer 2 o 3 caracteres de la EEPROM durante los ms que la fila esta iluminada....

Organizando todo con algunos flags deberia andar. Eso va a ser mi trabajo de mañana (ademas del curro de verdad, claro!).

Saludos....y gracias!
Título: Re: Matrix de 8x8 LEDs y 24C256 en CCS por software
Publicado por: jeremylf en 21 de Diciembre de 2007, 02:22:59
No entiendo porq tienes q hacer 21 lecturas! oO!


salu2 8)
Título: Re: Matrix de 8x8 LEDs y 24C256 en CCS por software
Publicado por: aitopes en 21 de Diciembre de 2007, 07:49:47
Hola!

No entiendo porq tienes q hacer 21 lecturas! oO!

Es que estoy intentando determinar si puedo usar una EEPROM para almacenar los datos a mostrar en un cartel mucho mas grande, entiendes?

Si el cartel en lugar de ser de 8x8 es de 128x16, por ejemplo, tendria que hacer 32 lecturas de caracteres de 8x8 por pantalla....se entiende?

Saludos!
Título: Re: Matrix de 8x8 LEDs y 24C256 en CCS por software
Publicado por: jeremylf en 21 de Diciembre de 2007, 16:47:53
Me refiero a esto:
Código: [Seleccionar]
   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.
       }

Estas haciendo 20 veces algo que no va a cambiar, porq despues del 2do for la variable i vuelve a 0 y segun veo, la variable "imagen" no cambiara hasta llamar denuevo a esa funcion dandole otro valor. Bueno no ntiendo tu metodo pero si de ahi viene la demora te aconsejo a q cambies de metodo ya q se te hara eterno. Prueba como te dije (y manolo tb) en obtener todos los valores de la Eeprom de una sola lectura y trabajas ya con ello. Es mejor asi.

suerte.
salu2 8)
Título: Re: Matrix de 8x8 LEDs y 24C256 en CCS por software
Publicado por: aitopes en 21 de Diciembre de 2007, 18:16:11
Hola amigo!
Si, estoy al corriente de que leo 20 veces LA MISMA zona de la EEPROM. Aun no me hago tiempo de hacer mas pruebas, supongo que hasta el martes o miercoles esto seguira colgado, entre el trabajo y la farra de fin de año se me han agotado las horas libres. ;)

Un abrazo.
Título: Re: Matrix de 8x8 LEDs y 24C256 en CCS por software
Publicado por: alexdjpic en 27 de Noviembre de 2008, 21:17:28
Saludos ¨aitopes¨ podrias explicarme la forma en que debo hacer la lectura de la eeprom desde el pic. Estoy haciendo esta matriz y quisiera saber como le establezco la información a la Eeprom. Y a que se refiere esta linea de la progrmación:

int fila[8]={254,253,251,247,239,223,191,127};

Lo demas lo estoy captando pues esta escrito en hexadecimal, lo paso a binario y dibujo mi matriz dando como resultado los caracteres. Me podrias pasar un ejemplo con la letra ¨A¨ y yo mismo empezar a escribir en la matriz. Y darle un efecto a esta letra, ó simplemente que pase de derecha a izquierda y asi ir implementando mas letras hasta lograr alguna frese. Saludos!!
Título: Re: Matrix de 8x8 LEDs y 24C256 en CCS por software
Publicado por: alexdjpic en 03 de Diciembre de 2008, 18:02:24
Hola amigos de TODOPIC. Los molesto preguntandoles a que se refieren estos renglones, forma parte del programa en C de un ejemplo que se encienden Led por led en la matriz 8x8. Estoy decifrando por renglon que es lo que significan para mi aprendizaje, espero me ayuden. Estos son los renglones que quiero me ayuden a traducir.

void fConfigurar_puertos (void);
void fRDD_send_data0 (void);
void fRDD_send_data1 (void)

y estos que estan casi al final.

PORTB = (PORTB << 1 )+1 ;

Solo tengo entendido que desplazo el valor de PORTB una posición a la izquierda pero el +1 que me indica?
Les agradezco su atención y espero sus respuestas. Saludos!
Título: Re: Matrix de 8x8 LEDs y 24C256 en CCS por software
Publicado por: MLO__ en 03 de Diciembre de 2008, 18:08:58
Hola.

Es pora mantener siempre el 1 al incio de la variable.

Si el valor de PORTB es 0b11111110 y le hacemos: PORTB<<1, el nuevo valor de PORTB seria 0b11111100. Al sumarle 1 quedaria asi: 0b11111101.

Se puede usar tambien las funciones shift_left() y/o shift_right()

Saludos
Título: Re: Matrix de 8x8 LEDs y 24C256 en CCS por software
Publicado por: alexdjpic en 03 de Diciembre de 2008, 18:31:57
Ok, gracias amigo ¨MLO¨ lo entendí sin mas dudas, esto mantendra solo una salida en PORTB, y no mantendra apagadas dos, ó tres filas al mismo tiempo.
Y los estos renglones que me dicen?

void fConfigurar_puertos (void);
void fRDD_send_data0 (void);
void fRDD_send_dat1 (void);

Título: Re: Matrix de 8x8 LEDs y 24C256 en CCS por software
Publicado por: MLO__ en 03 de Diciembre de 2008, 18:35:12
Hola.

Esos renglones son la declaracion de los prototipos de las funciones que se van a usar en el programa principal, si buscas al final del codigo del programa principal, encontraras las mismas funciones pero ya definidas.

Saludos
Título: Re: Matrix de 8x8 LEDs y 24C256 en CCS por software
Publicado por: alexdjpic en 03 de Diciembre de 2008, 18:39:57
ok, esto tiene que ver con el envio de un 0 ó 1 al registro de desplazamiento. En el cual se encuantran definidas al final del progrma principal, tal y como me lo dices. Gracias por todo, has sido el unico en responderme. Saludos desde México!
Título: Re: Matrix de 8x8 LEDs y 24C256 en CCS por software
Publicado por: alexdjpic en 04 de Diciembre de 2008, 17:03:50
Bueno, estoy aqui molestandolos con una ayuda que me puedan dar. Como ya lo comente atras, estoy desifrando un progrma en ¨C¨ para profundisar mi conocimiento. Aparte de comprender el lenguaje ¨C¨ quiero saber aplicarlo en los Pic´s. Quisiera que alguien me ayudara a traducir este programa, renglón por renglón para terminar con mis dudas.

void main(){
  int8 i,j;
  fConfigurar_puertos();
  output_low(RDD_CLOCK);
  output_low(RDD_DATA);
  //
  while (TRUE){
     PORTB = 0b11111110;
     for (i=0;i<8;i++) {
        //Limpio columnas
        for (j=0;j<8;j++) {fRDD_send_data1();}
        //
        fRDD_send_data0();
        for (j=0;j<8;j++) {
           delay_ms(1);
           fRDD_send_data1();
        }
        //
        PORTB = (PORTB << 1 )+1 ;
        delay_ms(1);
        }
  }//Fin while
}//Fin main

Este es el progrma principal, algunos renglones ya los pude desifrar gracias al amigo ¨MLO¨, espero no sea la esepción para proporcinarme una mano. Gracias!!
Título: Re: Matrix de 8x8 LEDs y 24C256 en CCS por software
Publicado por: MLO__ en 04 de Diciembre de 2008, 19:12:35
Hola.

Con esas funciones lo que hacen es enviar los datos a los registros de desplazamiento para que se carguen en las filas.

Para una matriz de 5x7 se puede hacer de la siguiente manera (de pronto el ejemplo te clarifica las cosas):

Código: C#
  1. void visualizar(void)
  2. {
  3.         for(i=0;i<=6;i++)
  4.         {
  5.                 output_a(0);
  6.                 output_c(col[i]);
  7.                 output_a(row[i]);
  8.                 delay_ms(1);
  9.         }
  10. }

en donde en la variable col[ i ]={0xFE, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF}, estan guardadas las secuencias para el desplazamiento de las filas, seria lo analogo de hacer el corrimiento con PORTB<<1 + 1, y en la variable row[ i ] = {14,17,17,17,31,17,17}; estaran los datos correspondientes para escribir la letra A (esto ya te lo explique antes).

Al entrar en el ciclo for(i=0;i<=6;i++), se hace el despliegue de las variables 7 veces, es decir vamos a recorrer cada una de las 7 posiciones de las filas para forma la letra que esta guardada en la variable, una imagen vale mas cierto?:

Fila 1:
(http://img529.imageshack.us/img529/5619/row1uz0.png)

Fila2:
(http://img529.imageshack.us/img529/1346/row2tg5.png)

Fila3:
(http://img529.imageshack.us/img529/2271/row3aw2.png)

Fila4:
(http://img529.imageshack.us/img529/7771/row4pq1.png)

Fila5:
(http://img529.imageshack.us/img529/7366/row5cp5.png)

Fila6:
(http://img529.imageshack.us/img529/2233/row6fs2.png)

Fila7:
(http://img529.imageshack.us/img529/1278/row7jy6.png)

Si van a haber mas pines de columnas, obviamente no alcanzarian a mostrarse en un puerto de 8 bits (aca estoy usando 5 pines para una letra), por lo que se usan los registros de desplazamiento, ya que de esta manera sacamos los datos de forma serial y los registros se encargan de pasarlos a paralelo.

Ojala no te haya enredado mas  :mrgreen:

Saludos
Título: Re: Matrix de 8x8 LEDs y 24C256 en CCS por software
Publicado por: alexdjpic en 04 de Diciembre de 2008, 19:46:48
Hola amigo ¨MLO¨ la verdad que me estas ayudando bastante y te doy las gracias. Mira que yo también hice el proyecto en proteus y no puedo mirar mi archivo en ¨C¨ en el. Lo hice para ayudarme a la hora de estar simulando pues me desplegara paso a paso mi programa en ¨C¨ pero no pude, por eso recurrí a este grandioso foro. Voy a leer con atención tu respuesta y prometo comprenderlo al 100%. Saludos!
Título: Re: Matrix de 8x8 LEDs y 24C256 en CCS por software
Publicado por: alexdjpic en 04 de Diciembre de 2008, 21:10:42
Hola ¨MLO¨ entonces int8 i,j; Quiere decir que a i,j tendra un valor de 8 bits.
Las filas corresponden a i
Las columnas corresponden a j
O podrias explicarme mejor? Gracias!
Título: Re: Matrix de 8x8 LEDs y 24C256 en CCS por software
Publicado por: gera en 05 de Diciembre de 2008, 00:47:14
hola alexdjpic! Primero q nada, te recomiendo empezar con cosas mas simples si queres aprender el lenguaje.
Con respecto a tu duda, en CCS, int8 es una forma de declarar una variable de 8bits como bien decis. Por lo tanto i, y j, van a tener su espacio de memoria con sus 8 bits.
Luego podes usar esa "i" y "j" para lo q quieras, no siempre tiene q ser "i" las filas y "j" las columnas, pero en el ejemplo es asi.
Suerte!
Título: Re: Matrix de 8x8 LEDs y 24C256 en CCS por software
Publicado por: alexdjpic en 05 de Diciembre de 2008, 17:04:05
Gracias ¨Gera¨ por quitarme de dudas. Primero, quice empezar con este proyecto por la facilidad que dispone el autor de realizarlo. Aprovechando y experimentando por primera vez con los PIC´S quice profundisar el conocimiento, no solo basandome en miles de ejemplos como lo dispone el foro, si no, preguntar el porque de las cosas, por eso creo fue hecho el foro. Ahora de haber iniciado comprendo mucho mas y no me quedan dudas, las ganas de seguir aprendiendo hacen que no desaproveche su valioso tiempo que me proporcionan a la hora de ayudarme.
Cambiando de tema, entonces estoy en lo correcto, pude desifrar la mayoria del ejemplo y eso me ayuda mucho para comenzar a usar mi matrix. No obstante sigo tus observaciones como la de i,j no siempre seran filas ó columnas, eso lo tengo planteado desde que mando mi pregunta pues solo me estoy basando en el ejamplo que hago mención. Gracias nuevamente y saludos!
Título: Re: Matrix de 8x8 LEDs y 24C256 en CCS por software
Publicado por: gera en 05 de Diciembre de 2008, 17:27:21
Te explico por q hice esa aclaracion. "i" y "j" son variables q usas temporalmente para los bucles for. Pero mas adelante en el programa las podes usar para otra cosa q no sea filas y columnas. Todo depende de que haya adentro del bucle. Ponele q mas adelante en el programa volves a usar bucles anidados, pero esta vez intercambias las "i" por las "j" y viceversa. Ahi te cambia el esquema, pero el resultado es el mismo.
A lo que voy, no importa la denominacion de la variable, sino su posicion en el programa.
Espero no haberte perdido jeje, solo te explicaba por si mas adelante lees otro programa que hagan eso.
saludos!
Título: Re: Matrix de 8x8 LEDs y 24C256 en CCS por software
Publicado por: alexdjpic en 05 de Diciembre de 2008, 17:30:33
Ok gracias por tu explicación ¨Gera¨ los voy a considerar. Saludos!
Título: Re: Matrix de 8x8 LEDs y 24C256 en CCS por software
Publicado por: alexdjpic en 19 de Diciembre de 2008, 23:54:09
Que programa me recomiendan para diseñar mis archivos .bin osea para que haga mis pantallas y las represente la matriz. Saludos y espero respuestas.
Título: Re: Matrix de 8x8 LEDs y 24C256 en CCS por software
Publicado por: jacrmr en 20 de Diciembre de 2008, 01:04:53
Puedes usar cualquiera que te genere frames o secuencias de imágenes. Ya de ahí a tí te correspondería hacer el intérprete que traduzca los datos al tipo que quieras. Yo por ejemplo uso Adobe Premiere para hacer mis animaciones de pantalla, incluso es una versión algo antigua pero casi cualquier programa de animación, incluso freeware, trae todo lo necesario como corrimientos, rotaciones, spins, etc.
Título: Re: Matrix de 8x8 LEDs y 24C256 en CCS por software
Publicado por: alexdjpic en 20 de Diciembre de 2008, 16:27:24
Gracias jacrmr, voy a probar los que me dices y comento como me fue.
Título: Re: Matrix de 8x8 LEDs y 24C256 en CCS por software
Publicado por: fgaretto en 23 de Febrero de 2009, 19:45:03
Muchachos, armé en Proteus una matriz de 8x8, una EEPROM 24c256 y un 16f628a pero no me funciona. Podrian echarle un vistazo? Desde ya muchas gracias.
Saludos.  Fernando.