Autor Tema: eeprom adjunto programa  (Leído 2231 veces)

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

Desconectado QIQE

  • PIC18
  • ****
  • Mensajes: 335
eeprom adjunto programa
« en: 27 de Abril de 2006, 16:59:56 »
Hola amigos vuelvo a dar guerra que raro!! tengo una memoria 24lc1025 la borro le grabo valores y luego me vuelve los numeros pares bien y los impares con valor de 255, nisiquiera los borro alguna sugerencia??


Código: [Seleccionar]
#include <16F877A.h>
#device adc=8

#FUSES NOWDT //No Watch Dog Timer
#FUSES XT   //Crystal osc <= 4mhz
#FUSES NOPUT  //No Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NODEBUG   //No Debug mode for ICD
#FUSES BROWNOUT  //Reset when brownout detected
#FUSES NOLVP       //No Low Voltage Programming on B3(PIC16) or B5(PIC18)
#FUSES NOCPD     //No EE protection
#FUSES NOWRT    //Program memory not write protected

#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
#use i2c(Master,Fast,sda=PIN_C4,scl=PIN_C3)

#include <ctype.h>
#include <string.h>

#define eep_escribir 0b10100000  //Primeros 512kas
#define eep_leer 0b10100001

#define eep1_escribir 0b10101000  //Primeros 512kas
#define eep1_leer 0b10101001

int const longitud=4;
char rcvchar=0x00;
int xbuff=0x00;
char cbuff[longitud];


#int_RDA

void serial_isr()
{
rcvchar=0x00;
if (kbhit())
   {
   cbuff[xbuff++]=getc();

   if (xbuff>longitud)
      xbuff=longitud;
   }
 
}



   int dato=0,AUX,i=0;
   long int direccion=0,direccion1=0;
   short int status;

void main()
{

   setup_adc_ports(AN0);
   setup_adc(ADC_CLOCK_INTERNAL);
   setup_psp(PSP_DISABLED);
   setup_spi(FALSE);
   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(VREF_LOW|-2);
   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);

   
           
      i2c_start();
     
      i2c_write(eep_escribir);
     
      i2c_write(direccion1>>8);
      i2c_write(direccion1);

   while (direccion1<6400 )
      {
      i2c_write(0);
      delay_ms(5);
      i2c_stop();
     
      direccion1++;
      }

      direccion1=0;
     
      i2c_start();
     
      i2c_write(eep1_escribir);
     
      i2c_write(direccion1>>8);
      i2c_write(direccion1);

   while (direccion1<6400 )
      {
      i2c_write(0);
      delay_ms(5);
      i2c_stop();
     
      direccion1++;
      }

while (1)
   {
   
   if (direccion<64000 )
      {   
      printf("%u ",i);     
      i2c_start();     
      i2c_write(eep_escribir);     
      i2c_write(direccion>>8);
      i2c_write(direccion);
      i2c_write(i);
      delay_ms(100);
      i2c_stop();     
      i++;
      direccion++;
      }


   while (cbuff[0]=='a'&& cbuff[1]=='0')
         {
         disable_interrupts(INT_RDA);
         printf("valor\r");         
         direccion=0;
         
         WHILE (direccion!=6400)
            {     
            for (AUX=0; AUX<8; ++aux)
               {
               i2c_start();
               i2c_write(eep_escribir);         
               i2c_write(direccion>>8);
               i2c_write(direccion); 
               i2c_start();
               i2c_write(eep_leer);
               dato=i2c_read(0);
               i2c_stop();
               printf("%u ",dato);
               direccion++;
               }
            printf("\r");
            }           
         strcpy(cbuff," ");
         xbuff=0;
         enable_interrupts(INT_RDA);
         }
   }
}


muchas gracias compañeros
Muchas gracias por vuestro tiempo.

Saludos desde valencia!!!

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: eeprom adjunto programa
« Respuesta #1 en: 27 de Abril de 2006, 17:31:42 »
No he tenido tiempo de ver todo el codigo pero el compilador es case sensitive? o sensible a mayusculasy minusculas?

Porque fijate esta linea

Código: C
  1. for (AUX=0; AUX<8; ++aux)

Si tu compilador es case sensitive en realidad AUX y aux debieran ser dos variables diferentes.

Puedes confirmarme este dato?
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado QIQE

  • PIC18
  • ****
  • Mensajes: 335
Re: eeprom adjunto programa
« Respuesta #2 en: 28 de Abril de 2006, 09:52:41 »
no no sensible a las mayusculas/minusculas esa parte me la hace bien el problema esta en la lectura o escritura de la eeprom
Muchas gracias por vuestro tiempo.

Saludos desde valencia!!!

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: eeprom adjunto programa
« Respuesta #3 en: 28 de Abril de 2006, 10:12:05 »
Hola. las memorias I2C poseen un contador interno. Cada vez que leas un o escribas un dato en modo Current Address Read/Write, el contador interno de la EEPROM se autoincrementa en 1, por lo tanto, no necesitas incrementarlo desde el programa.Por eso seguramente te estas salteando las impares.
Revisa bien la hoja de datos de la memoria para mayor informacion.
Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado QIQE

  • PIC18
  • ****
  • Mensajes: 335
Re: eeprom adjunto programa
« Respuesta #4 en: 01 de Mayo de 2006, 08:50:57 »
no sigue sin funcionar :S:S no se que hago mal si que incrementa él solo la dirección. pero me sigue leyendo dato correcto 255 dato correcto 255 dato correcto y asi sucesivamente hasta el fin de los tiempos :(  alguna idea de loq ue puede suceder?? muchas gracias a todos
Muchas gracias por vuestro tiempo.

Saludos desde valencia!!!

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: eeprom adjunto programa
« Respuesta #5 en: 01 de Mayo de 2006, 10:46:06 »
no sigue sin funcionar :S:S no se que hago mal si que incrementa él solo la dirección. pero me sigue leyendo dato correcto 255 dato correcto 255 dato correcto y asi sucesivamente hasta el fin de los tiempos :(  alguna idea de loq ue puede suceder?? muchas gracias a todos

Fijate bien en el datasheet a ver que comando estas usando para escribir.

Como dijo BrunoF algunos comandos de 'write' tienen un autoincremento del address interno, aunque estos comandos en gral suelen necesitar que uno le envié el siguiente byte en el siguiente ciclo (sin tener que mandar toda la trama nuevamente) ya que permiten cierto cache de escritura para hacer las cosas más velozmente. 

De todas formas, hay comandos write que no tienen autoincremento y puedes enviarle la dirección como tu dices, ahora bien puedes apuntarnos al menos a la datasheet del IC que estas usando? Por ahi veamos algo en las datasheet que nos de otra pista. 

;)

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado QIQE

  • PIC18
  • ****
  • Mensajes: 335
Re: eeprom adjunto programa
« Respuesta #6 en: 01 de Mayo de 2006, 12:38:41 »
http://www.microchip.com/ParamChartSearch/chart.aspx?branchID=70012&mid=&lang=en
Esta es la memoria que estoy usando una 24lc1025 muchas gracias ;)
Muchas gracias por vuestro tiempo.

Saludos desde valencia!!!

Desconectado marcegoncba

  • PIC10
  • *
  • Mensajes: 17
Re: eeprom adjunto programa
« Respuesta #7 en: 02 de Mayo de 2006, 12:25:37 »
El problema parece estar aquí:
     i2c_write(0);
      delay_ms(5);
      i2c_stop();

La memoria comienza el proceso interno de escritura después del STOP, y estas poniendo el retardo antes de enviarle el STOP y es por eso que te ignora las direcciones impares ya que está aún grabando la dirección par anterior.

Probá:
     i2c_write(0);
      i2c_stop();
      delay_ms(5);

Saludos
Marcelo

Desconectado QIQE

  • PIC18
  • ****
  • Mensajes: 335
Re: eeprom adjunto programa
« Respuesta #8 en: 02 de Mayo de 2006, 16:04:15 »
Muchas gracias compañeros correcto el error estaba en los delays aun se estaba grabando cuandoq ueria meter otro dato :S:S enfin tropezando se aprende :S:S muchas gracias de nuevo
Muchas gracias por vuestro tiempo.

Saludos desde valencia!!!


 

anything