LusoRobótica - Robótica em Português

Sistemas específicos => Arduino / AVR => Tópico iniciado por: filipe89 em 14 de Abril de 2013, 19:18

Título: EPROM 24AA1026
Enviado por: filipe89 em 14 de Abril de 2013, 19:18
Boas,
estou a precisar de uma pequena ajuda com uma EPROM (https://www.google.pt/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&ved=0CC8QFjAA&url=http%3A%2F%2Fww1.microchip.com%2Fdownloads%2Fen%2FDeviceDoc%2F22270A.pdf&ei=wfFqUY-wNouw7AaJzoHoAw&usg=AFQjCNHxXOz6lvl1cGkIIBSoxSUxAF3lfg&sig2=VNETk4cwvx_uUo4LZkPbiQ (https://www.google.pt/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&ved=0CC8QFjAA&url=http%3A%2F%2Fww1.microchip.com%2Fdownloads%2Fen%2FDeviceDoc%2F22270A.pdf&ei=wfFqUY-wNouw7AaJzoHoAw&usg=AFQjCNHxXOz6lvl1cGkIIBSoxSUxAF3lfg&sig2=VNETk4cwvx_uUo4LZkPbiQ))

ela tem um endereço de 8bits mas o arduino só envia 7, por isso do 0xA0 passo para 0x50
estive a ensaiar este código:

Código: [Seleccione]
#include <Wire.h>

#define endssREAD 0x51//B01010001//0xA1
#define endssWRITE 0x50//B01010000//0xA0
void setup()
{
  Wire.begin();
               // join i2c bus with address #4
  //Wire.onReceive(receiveEvent); // register event
  Serial.begin(9600);           // start serial for output
}

void loop()
{
  int enviar = 0;

  Wire.beginTransmission(endssWRITE);
  Wire.write(0x00);
  Wire.write(1);
  enviar = 0;
 
   for(int x=0; x<120; x++){
    enviar = enviar + 1;
    Wire.write(enviar);
   
    Serial.print(enviar);
  }
 
  Wire.endTransmission();
  Serial.print("enviados ");
  Serial.print(enviar);
  Serial.println(" ");
      delay(100);

   Wire.beginTransmission(endssREAD);
   int bearing = Wire.read();
    Wire.endTransmission();
   Serial.print(bearing);

   delay(100);

Serial.println();
 
}

mas recebo sempre "-1" de certeza que é por não estar a ler.
Título: Re: EPROM 24AA1026
Enviado por: pmj_pedro em 14 de Abril de 2013, 19:53
esta no datasheet que o endereço é de 7bits 1 0 1 0 A2 A1 B0  e depois tens de dizer se é para fazer uma leitura ou escrita
Título: Re: EPROM 24AA1026
Enviado por: filipe89 em 14 de Abril de 2013, 20:11
sim, os endereços já incluem isso, também já corri um código para saber os endereços disponíveis e dá-me o 0x50 e 0x51

isto implica que o A1 e o A2 estão a 0 e para efeitos de teste quero ler/escrever no banco 0

EDIT:

o datasheet tem o endereço de 8bits

1 0 1 0        A2 A1 B0 + (R/W) = 8bits
Título: Re: EPROM 24AA1026
Enviado por: pmj_pedro em 14 de Abril de 2013, 21:03
sim, os endereços já incluem isso, também já corri um código para saber os endereços disponíveis e dá-me o 0x50 e 0x51

isto implica que o A1 e o A2 estão a 0 e para efeitos de teste quero ler/escrever no banco 0

EDIT:

o datasheet tem o endereço de 8bits

1 0 1 0        A2 A1 B0 + (R/W) = 8bits

nao tenho experiencia em trabalhar com i2c na plataforma arduino,
e algo importante é saber se és tu que vais incluir o R/W ou é acrescentado pela funçao write()

nao sou a melhor pessoal para te tentar ajudar
Título: Re: EPROM 24AA1026
Enviado por: senso em 14 de Abril de 2013, 21:18
Está tudo na documentação do IDE, não custa nada ler.
Título: Re: EPROM 24AA1026
Enviado por: filipe89 em 14 de Abril de 2013, 21:22
pois, não sei exactamente como funciona os bits enviados, mas na leitura dos endereços havia de ter tido 4 respostas, os 2 bancos e os 2 modos.

Mas no final de cada instrução wire acho que tenho o ACK, logo não posso meter a instrução R\W no wire.write()
Título: Re: EPROM 24AA1026
Enviado por: filipe89 em 14 de Abril de 2013, 21:37
Está tudo na documentação do IDE, não custa nada ler.

mas o problema é que não sei como adaptar aos comandos do arduino
Título: Re: EPROM 24AA1026
Enviado por: pmj_pedro em 14 de Abril de 2013, 23:21
Está tudo na documentação do IDE, não custa nada ler.

mas o problema é que não sei como adaptar aos comandos do arduino

nesse caso podes ir ver outros exemplos na net, de como utilizaram
e ver a descriçao das funcoes no site