Pular para o conteúdo principal

Xadow - Storage

A maioria dos AVRs possui uma pequena EEPROM que pode ser usada para salvar variáveis, configurações etc. O chip Atmega32u4 usado na Xadow Main Board possui 1K Bytes de EEPROM interna. Se você quiser mais armazenamento para o seu projeto Xadow, este módulo foi projetado para você! Este módulo fornece 2 blocos extras de 32K bytes para o seu projeto. O Xadow Storage pode ser alimentado com 3,3 V. E é compatível com o sistema Xadow.

Especificação


  • Tensão de trabalho: 3,3 V

  • Modo de controle: I2C

  • EEPROM: AT24C256C

  • Endereços I2C são conversíveis

  • Dimensões: 25,43 mm x 20,35 mm

Configuração do endereço I2C


Duas AT24C256 do Xadow Storage compartilham um barramento comum de dois fios. Cada AT24C256 possui um endereço de hardware de oito bits que é chamado de endereço escravo. O endereço escravo é configurado pelas entradas de seleção de endereço A2, A1 e A0. Os pinos A2, A1 e A0 são entradas de endereço do dispositivo que são conectadas diretamente ao GND ou ao VCC. Se esses pinos forem deixados em aberto, os pinos A2, A1 e A0 serão internamente puxados para GND.

Slave Address[A6 - A0] Estado das entradas A2, A1 e A0
A2 A1 A0
1010000(0x50)GND/FlutuandoGND/FlutuandoGND/Flutuando
1010001(0x51) GND/Flutuando GND/Flutuando VCC
1010010(0x52) GND/Flutuando VCC GND/Flutuando
1010011(0x53) GND/Flutuando VCC VCC
1010100(0x54) VCC GND/Flutuando GND/Flutuando
1010101(default 0x55) VCC GND/Flutuando VCC
1010110(0x56) VCC VCC GND/Flutuando
1010111(0x57) VCC VCC VCC

No modo padrão, um AT24C256 (U1) tem endereço I2C 0x50 e o outro AT24C256 (U2) tem endereço I2C 0x51 (veja o Xadow Storage).

Demonstração


Usando o Xadow Storage, podemos armazenar dados permanentemente mesmo que a energia seja desligada. Agora mostramos uma demonstração: gravar dados no storage e lê-los.

Instalação de hardware:

Observação: ao conectar o Xadow Storage à Xadow Main Board, você deve se atentar ao sentido da conexão. O método de conexão é que o canto sem preenchimento de um módulo Xadow precisa ser conectado ao ângulo reto de outro módulo (veja os quatro cantos de cada módulo Xadow).

O código de demonstração:

#include <Wire.h> //I2C library
void setup()
{
char somedata[] = "this is data from the eeprom"; // data to write
Wire.begin(); // initialise the connection
Serial.begin(9600);
i2c_eeprom_write_page(0x51, 0, (byte *)somedata, sizeof(somedata)); // write to EEPROM

delay(10); //add a small delay

Serial.println("Memory written");
}
void loop()
{
int addr=0; //first address
byte b = i2c_eeprom_read_byte(0x51, 0); // access the first address from the memory

while (b!=0)
{
Serial.print((char)b); //print content to serial port
addr++; //increase address
b = i2c_eeprom_read_byte(0x51, addr); //access an address from the memory
}
Serial.println(" ");
delay(2000);
}
void i2c_eeprom_write_byte( int deviceaddress, unsigned int eeaddress, byte data ) {
int rdata = data;
Wire.beginTransmission(deviceaddress);
Wire.write((int)(eeaddress >> 8)); // MSB
Wire.write((int)(eeaddress & 0xFF)); // LSB
Wire.write(rdata);
Wire.endTransmission();
}

// WARNING: address is a page address, 6-bit end will wrap around
// also, data can be maximum of about 30 bytes, because the Wire library has a buffer of 32 bytes
void i2c_eeprom_write_page( int deviceaddress, unsigned int eeaddresspage, byte* data, byte length ) {
Wire.beginTransmission(deviceaddress);
Wire.write((int)(eeaddresspage >> 8)); // MSB
Wire.write((int)(eeaddresspage & 0xFF)); // LSB
byte c;
for ( c = 0; c < length; c++)
Wire.write(data[c]);
Wire.endTransmission();
}
byte i2c_eeprom_read_byte( int deviceaddress, unsigned int eeaddress ) {
byte rdata = 0xFF;
Wire.beginTransmission(deviceaddress);
Wire.write((int)(eeaddress >> 8)); // MSB
Wire.write((int)(eeaddress & 0xFF)); // LSB
Wire.endTransmission();
Wire.requestFrom(deviceaddress,1);
if (Wire.available()) rdata = Wire.read();
return rdata;
}
// maybe let's not read more than 30 or 32 bytes at a time!
void i2c_eeprom_read_buffer( int deviceaddress, unsigned int eeaddress, byte *buffer, int length ) {
Wire.beginTransmission(deviceaddress);
Wire.write((int)(eeaddress >> 8)); // MSB
Wire.write((int)(eeaddress & 0xFF)); // LSB
Wire.endTransmission();
Wire.requestFrom(deviceaddress,length);
int c = 0;
for ( c = 0; c < length; c++ )
if (Wire.available()) buffer[c] = Wire.read();
}

Visualizador de esquemático online

Recursos


Suporte Técnico & Discussão sobre o Produto

Obrigado por escolher nossos produtos! Estamos aqui para fornecer diferentes formas de suporte para garantir que sua experiência com nossos produtos seja a mais tranquila possível. Oferecemos vários canais de comunicação para atender a diferentes preferências e necessidades.

Loading Comments...