Ir ao conteúdo
  • Cadastre-se

Memória 24lc512 às vezes grava e às vezes não


Ir à solução Resolvido por ViniciusKruz,

Posts recomendados

Pessoal, boa noite!

 

CCS C, 18f4550(testado com osc. interno de 8Mhz e cristal externo de 20Mhz )

 

Não é de hoje que tenho problemas ao gravar em memórias 24lc512, pelo que já entendi, parace que a lib nativa do CCS (24512.c) tem algum bug. Todas as vezes que uso a bendita, tenho problema para gravar em determinada parte desta memória, se possível, alguém me dê uma força para entender o que está acontecendo.

 

Se eu envio o comando:

for(k=0;k<=indexBufferMemo;k++){         write_ext_eeprom(k*indexBufferMemo,k);         delay_us(10);         write_ext_eeprom((k*indexBufferMemo)+1,0);         delay_us(10);         write_ext_eeprom((k*indexBufferMemo)+2,0);         delay_us(10);         write_ext_eeprom((k*indexBufferMemo)+3,0);         delay_us(10);         write_ext_eeprom((k*indexBufferMemo)+4,0);         delay_us(10);         write_ext_eeprom((k*indexBufferMemo)+5,1);         delay_us(10);} 

grava até certo ponto (endereço 400 e alguma coisa), acima disso não grava.

Porém se nesses endereços eu enviar os comandos separadamente desta forma:

write_ext_eeprom(NumAcion*indexBufferMemo+1,Hr_inicio);                     

aí funciona normal.

 

 

Segue a lib:

#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   65535void 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);   }   i2c_stop();}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);}

Lembrando, que testei com cristal de 20mhz externo e também com o oscilador interno de 8Mhz.

 

Dese já agradeço.

 

Link para o comentário
Compartilhar em outros sites

  • Solução

Resolvido, na verdade não era falha na gravação, modifiquei uma variável de leitura, ela era int8 passei ela para int16 e resolveu. Na verdade nem entendi o porque deu certo pois a variável de 8 bits vai de 0 a 255 e quando a contagem dela passava de 12, a leitura falhava. Coisas de CCS hahaha ou a pecinha entre a cadeira e o pc. De qualquer forma valeu!!

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!