• Domingo 22 de Diciembre de 2024, 16:45

Autor Tema:  Memorias Externas  (Leído 3169 veces)

vane_ccs

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Memorias Externas
« en: Sábado 9 de Septiembre de 2006, 19:04 »
0
Hola a todos....

estoy trabajando con una memoria externa (24AA256) y realice unas rutinas para leer y escribir en dicha memoria (desde el pic 18F4620)... las cuales funcionan perfectamente... ahora mi problema es... que no se que hacer para borrar todo lo que escribi y poner la memoria en blanco  :unsure:  :unsure:  :unsure:

Las rutinas estan hechas en C... y estoy usando el compilador C18.

Gracias de Antemano,

Cualquier ayuda que me puedan prestar... se los agradeceria...  

 :comp:  :comp:  :comp:

© Jonathan ©

  • Moderador
  • ******
  • Mensajes: 1671
  • Nacionalidad: ar
    • Ver Perfil
    • http://www.einstec.com.ar
Re: Memorias Externas
« Respuesta #1 en: Lunes 11 de Septiembre de 2006, 16:56 »
0
Deberias hacer un bucle while de escritura.. escribes en todas las direcciones el valor 0x00.. porque no tienen segun tengo entendido un modo reset.. me cuentas.. :)
EINSTEC Tecnología «La única fuente del conocimiento es la experiencia.»

«Lo importante es no dejar de hacerse preguntas.»

vane_ccs

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Re: Memorias Externas
« Respuesta #2 en: Martes 12 de Septiembre de 2006, 01:52 »
0
Gracias Jonathan un millon....lo voy a intentar y aviso...  ;)

Saludos.  :D

vane_ccs

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Re: Memorias Externas
« Respuesta #3 en: Jueves 14 de Septiembre de 2006, 02:34 »
0
Hola!, ya hice la rutina que borra la memoria con un bucle...  :bravo:   :gracias:

Ahora tengo otro problema que resolver  :brickwall:   :ouch: .... Como conte en el post inicial ya hice la rutina que lee, pero esta solo lee una pagina dandole la direccion.  

Estoy tratando de leer una serie de paginas de memoria seguidas. Mediante un bucle hago que se pongan automaticamente las direcciones de paginas de manera consecutiva, en orden......

El problema es que cuando corro la simulacion en proteus, me lee nada mas la primera pagina y de la segunda solo muestra la condicion de start....

No se que pueda estar pasando...lo esta haciendo nada mas para la primera pagina.

Lo de las direcciones automaticas consecutivas lo uso tambien para la escritura y funciona bien, por eso me extrana esto.  :think:

Esta es la rutina que estoy usando...

Código: Text
  1.  
  2. void leerTodoMem(void){
  3.  
  4.   signed char i,contador=0;
  5.   unsigned char addressH = 0x00;
  6.   unsigned char addressL = 0x00;  
  7.  
  8.   for(i=0;i<16;i++){  
  9.        
  10.       ReadSQMem(0xA0,addressH,addressL,data_rd,5);
  11.       putsXLCD(data_rd);
  12.                  
  13.     if(contador==3){
  14.       contador = 0;
  15.       addressH = AddH(addressH);      
  16.       addressL = AddL(contador,addressL);
  17.     }
  18.     else{
  19.       contador++;
  20.         addressL = AddL(contador,addressL);  
  21.     }  
  22.   }  
  23. }
  24.  
  25.  

Y estas son las rutinas que uso

Código: Text
  1.  
  2. unsigned char AddH(unsigned char addHActual){
  3.   return(addHActual+1);
  4. }
  5.  
  6. unsigned char AddL(signed char cont,unsigned char addLActual){
  7.  
  8.   switch(cont){
  9.    
  10.     case 0: addLActual = 0b00000000;
  11.           break;
  12.     case 1: addLActual = 0b01000000;
  13.           break;
  14.     case 2: addLActual = 0b10000000;
  15.           break;
  16.     case 3: addLActual = 0b11000000;
  17.           break;
  18.          
  19.   }
  20.   return (addLActual);
  21. }
  22.  
  23.  

Ojala me puedan ayudar  :ayuda:

Saludos.

vane_ccs

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Re: Memorias Externas
« Respuesta #4 en: Jueves 14 de Septiembre de 2006, 02:59 »
0
Hola, acabo de hacer una prueba leyendo dos paginas de la memoria, una lectura despues de la otra y pasa lo mismo....

Código: Text
  1.  
  2.                 ReadSQMem(0xA0,0x02,0xC0,data_rd,5);
  3.   SetDDRamAddr(0x00);
  4.   putsXLCD(data_rd);
  5.  
  6.   ReadSQMem(0xA0,0x03,0x80,data_rd,5);
  7.   SetDDRamAddr(0x00);
  8.   putsXLCD(data_rd);
  9.  
  10.  

Pense que podria ser que necesito esperar un tiempo antes de volver a leer pero nop hace lo mismo. <_<

Que puede estar pasando????  :huh:

Por favor, si a alguien se le ocurre algo y tiene mas experiencias con memorias de este tipo....ayudenme un poquito.  ;)

© Jonathan ©

  • Moderador
  • ******
  • Mensajes: 1671
  • Nacionalidad: ar
    • Ver Perfil
    • http://www.einstec.com.ar
Re: Memorias Externas
« Respuesta #5 en: Viernes 15 de Septiembre de 2006, 11:46 »
0
los codigos parecen estar bien.. despejame una duda..

Citar
Ahora tengo otro problema que resolver brickwall.gif ouch.gif .... Como conte en el post inicial ya hice la rutina que lee, pero esta solo lee una pagina dandole la direccion.

con el codigo que lee la pagina puedes leer cualquiera de las paginas asignandole la direccion?.. osea.. descartando esto del bucle para leerlas consecutivamente, puedes acceder a cualquier pagina con la rutina que usas?. saludos
EINSTEC Tecnología «La única fuente del conocimiento es la experiencia.»

«Lo importante es no dejar de hacerse preguntas.»

vane_ccs

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Re: Memorias Externas
« Respuesta #6 en: Sábado 16 de Septiembre de 2006, 02:02 »
0
Hola jonathan :) gracias por responder... sip me sirve perfecto cuando hago una sola lectura.

Tienes alguna idea de que pueda ser???  :unsure:

Saludos.

© Jonathan ©

  • Moderador
  • ******
  • Mensajes: 1671
  • Nacionalidad: ar
    • Ver Perfil
    • http://www.einstec.com.ar
Re: Memorias Externas
« Respuesta #7 en: Sábado 16 de Septiembre de 2006, 07:27 »
0
Si te funciona perfecto de llamando de a uno, el problema esta en la llamada a la funcion
Código: Text
  1. unsigned char AddL(signed char cont,unsigned char addLActual){
  2.  
  3.   switch(cont){
  4.  
  5.     case 0: addLActual = 0b00000000;
  6.           break;
  7.     case 1: addLActual = 0b01000000;
  8.           break;
  9.     case 2: addLActual = 0b10000000;
  10.           break;
  11.     case 3: addLActual = 0b11000000;
  12.           break;
  13.          
  14.   }
  15.   return (addLActual);
  16. }
  17.  

Si seguis el valor de la variable addLActual usando el simulador, cuando llega al return, que valor tiene?.. que valor tiene al salir de la funcion?.. habria que seguir el programa con el simulador para ver en que paso esta fallando

Yo rebizaria el switch(cont) y buscaria info sobre el ambito de las variables, talves tengas que declararlas de manera diferente, es rarisimo porque parece tar todo bien a simple vista.. yo estoy buscando la manera de arreglarlo para descubrir que cosa se esconde  :ph34r: . Saludos :)
EINSTEC Tecnología «La única fuente del conocimiento es la experiencia.»

«Lo importante es no dejar de hacerse preguntas.»

vane_ccs

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Re: Memorias Externas
« Respuesta #8 en: Jueves 21 de Septiembre de 2006, 16:49 »
0
Hola Jonathan, GRACIAS....yo tambien estoy en eso... :)    

Sabes que ademas de ese problema...me esta apareciendo otro...creo que si te dije que estaba trabajando con el pic 18f4620...bueno.. ahora estoy soldando el circuito porque estoy trabajando con tambien con el modulo SPI y en el simulador funciona perfect y cuando lo corria en fisico en el protoboard manda basura... bueno soldando el circuito me salio un problema con el circuito de reset.... yo pensaba que estaba bien pues lo estaba haciendo tal cual como dice en el datasheet del pic...pues bien, algo no parece estar funcionando, sin que yo presione el boton de reset el lcd se resetea...  <_<  y a veces no se resetea bien....Por lo menos ahora estoy trabajando con un programa de prueba en el que con un teclado escribo numeros en el LCD....Escribe los numeros bien pero cuando le doy a boton de reset no me borra la primera linea, es decir, no llega a la instruccion inicial bien...

No se de verdad que pasa. Quizas estoy metiendo la pata con el circuito de reset y por eso me hace esa cantidad de barbaridades  :huh:

Tienes alguna idea???

Saludos y Gracias