collapse

* Links de Robótica

* Posts Recentes

Ajuda com TRIAC por senso
[17 de Novembro de 2017, 18:00]


TV LG White Screen por almamater
[15 de Novembro de 2017, 08:37]


Pergunta sobre prototipagem ( Pesquisa ) por luisjustin
[14 de Novembro de 2017, 23:22]


Medir Agua que está no Poço por Njay
[14 de Novembro de 2017, 13:28]


Amplificador audio por beirao
[12 de Novembro de 2017, 23:43]


Power_OK Enermax por edeweld
[12 de Novembro de 2017, 17:15]


Driver motor por beirao
[11 de Novembro de 2017, 17:40]


Preciso de uma fonte de corrente constante ? por samc
[09 de Novembro de 2017, 14:18]


Pressoestato 0-10V por artur36
[07 de Novembro de 2017, 23:22]


Ideias para construir um quadrúpede simples por Njay
[07 de Novembro de 2017, 18:39]

Autor Tópico: EEPROM maluca  (Lida 2002 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.134
    • 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.926
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.134
    • 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.400
  • 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 »