collapse

* Posts Recentes

Substituir um 78xx por um switching regulator ? por senso
[Ontem às 22:25]


leitura de voltagens com o analogRead(A0) por Njay
[Ontem às 15:29]


Kit Completo Robô Inmoov 299€ por aldricnegrier
[Ontem às 13:39]


BostonDynamics - Vai uma mãozinha? por josecarlos
[14 de Outubro de 2018, 19:44]


PCB de passadeira por vasco
[13 de Outubro de 2018, 16:00]


Proteção contra reverse voltage por Njay
[12 de Outubro de 2018, 10:04]


Bus I2c necessita de pullups ? por vasco
[11 de Outubro de 2018, 18:15]


Circuito básico do 7805 por jm_araujo
[09 de Outubro de 2018, 10:33]


Nome em ingles por helderjsd
[06 de Outubro de 2018, 09:48]


Preciso de programador de arduino Zona norte por Sérgio
[05 de Outubro de 2018, 16:06]

Autor Tópico: EEPROM maluca  (Lida 2266 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline vicardosof

  • Moderator
  • Mini Robot
  • *****
  • Mensagens: 223
EEPROM maluca
« em: 24 de Abril de 2013, 19:01 »
Boas!
Estou a programar um sistema com PIC que guarda dados numa eeprom (24LC256).
Quando leio os dados pela primeira vez, todos retornam certos. Quando os leio novamente, alguns vem errados :o e se tentar ler uma terceira vez o PIC trava.

Alguém tem alguma ideia do que possa ser? Preciso terminar este projecto até o fim da semana.

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.364
    • Tróniquices
Re: EEPROM maluca
« Responder #1 em: 24 de Abril de 2013, 19:36 »
E se esperares algum tempo e só depois fizeres a 1ª leitura, os dados vêm bem?

Offline vicardosof

  • Moderator
  • Mini Robot
  • *****
  • Mensagens: 223
Re: EEPROM maluca
« Responder #2 em: 24 de Abril de 2013, 19:40 »
se espero muito tempo, tornam-se 255

Offline dropes

  • Mini Robot
  • *
  • Mensagens: 1.942
Re: EEPROM maluca
« Responder #3 em: 24 de Abril de 2013, 20:40 »
Isso cheira-me a mau sincronismo do relógio, pode haver uma alteração do estado de clock (SCL) entre cada leitura ou escrita.
A configuração I²C também pode não estar muito correcta...
A leitura começa por uma condição de estado, depois vem o endereço e a seguir os dados, também tem que se dar o estado de terminado; podes baixar a velocidade ou mesmo fazer a leitura em software para detectar onde está o erro.
Na ficha técnica descreve melhor a comunicação.

Também é fácil criar uma interface com a porta paralela e ler pelo ponyprog:


http://www.lancos.com/prog.html

Sempre daria para confirmar se a eeprom estava boa.

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.364
    • Tróniquices
Re: EEPROM maluca
« Responder #4 em: 24 de Abril de 2013, 21:23 »
se espero muito tempo, tornam-se 255

Ou seja, a EEPROM vai-se desprogramando até ficar toda desprogramada. Essa EEPROM não será já muito velha (muitos ciclos de escreve/apaga)?
Outra hipótese que me ocorre é estares a alimentá-la com uma tensão muito baixa ou não teres condensadores de desacoplamento.

Offline vicardosof

  • Moderator
  • Mini Robot
  • *****
  • Mensagens: 223
Re: EEPROM maluca
« Responder #5 em: 25 de Abril de 2013, 14:55 »
Boas!
Hoje reescrevi os códigos de comunicação usando uma biblioteca confiável e nada mudou. Ontem troquei a eeprom e o problema se manteve o mesmo.
Hoje estive a estudá-lo melhor e acho que já o percebi.

Quando coloco-a a gravar até 64 bytes, tudo é feito sem nenhum problema e os dados são conservados.
Se a coloco a gravar mais de 64 (no meu caso preciso de 1584), parece-me que é feita uma paginação (embora esteja programada para gravar byte e byte) e somente a última página é mostrada na leitura.
Algo interessante: Se a coloco para gravar os 1584 bytes e depois gravo 64 bytes a começar da posição 0x00, consigo ler os outros 1520 bytes  :o Se a gravo somente com 0, não tenho esse poblema

Segue meu código de leitura gravação:

Código: [Seleccione]
void Write_eeprom(long address, byte data){
   i2c_start();
   i2c_write(0xa0);
   i2c_write(address>>8);
   i2c_write(address);
   i2c_write(data);
   i2c_stop();
   delay_ms(5);
}

byte Read_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;
}
« Última modificação: 25 de Abril de 2013, 15:05 por vicardosof »

Offline vicardosof

  • Moderator
  • Mini Robot
  • *****
  • Mensagens: 223
Re: EEPROM maluca
« Responder #6 em: 25 de Abril de 2013, 18:27 »
Passei toda a tarde a fazer testes e cheguei a conclusões interessantes:

1) Existe algum problema na hora de determinar o endereço. Exemplo: Se a mando gravar em 0x00 0x00, ela gravará em 0x00 0x00, 0x01 0x00 e assim por diante, ou seja, grava várias vezes a mesma coisa em diferentes posições!

2) quando corto a alimentação o dado é mantido, mas basta retirar o PIC do lugar e tudo é apagado  :o

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.560
  • Helpdesk do sitio
Re: EEPROM maluca
« Responder #7 em: 25 de Abril de 2013, 19:39 »
Ou tens algo mal ligado, ou então deves ir ler a datasheet com atenção.
Avr fanboy

Offline vicardosof

  • Moderator
  • Mini Robot
  • *****
  • Mensagens: 223
Re: EEPROM maluca
« Responder #8 em: 26 de Abril de 2013, 02:20 »
Li o datasheet para mais de 500 vezes  ??? Meu prazo é até amanhã. Vou tenta usar um driver que achei na internet para gravar/ler, minha última esperança  :'(




--- EDIT ---
Consegui resolver o problema. Ele estava em parte das rotinas de gravar/ler. Ainda não sei exatamente onde ele estava, mas estou com o código funcionando então está tudo certo  ;D
« Última modificação: 27 de Abril de 2013, 05:03 por vicardosof »