Работа с EEPROM

Lictor
Offline
Зарегистрирован: 01.10.2015

Приобрел память М24С32, научился записывать различные типы переменных, считывать их  и т.п. Но тут  у меня появился вопрос, какой адрис последний для записи? согласно даташиту  - 4096. Написал такой скетч 

  while (k < 5001) {
  eeprom.writeByte(k, 42);
 delay(8);
   k++; 
 }
  
 Serial.print("TEST");
 while (i <5001) {
   byte data1 = eeprom.readByte(i);
   Serial.print("adress  ");
   Serial.print(i);
      Serial.print("znachenie  ");
   Serial.println(data1, DEC);
   i++; 
 }

Беда в том, что даже на значениях адреса свыше 10000 контроллер все равно выдает в порт значение 42, а не 255 или ноль (я так понял он должен был выдать одно из крайних значений). Что же я сделал не так? И как определить последний адрес?

использую библиотеки

#include <Wire.h>
#include <Eeprom24C32_64.h>

 

Lictor
Offline
Зарегистрирован: 01.10.2015

Ссылка на даташит не прикрепилась 

Logik
Offline
Зарегистрирован: 05.08.2014

Все так, работает по кругу после максималього адреса идет начало. Т.е. после адреса 4095 будет значение с 0, даже если пытаетесь указать 4096.

В качестве головоломки - придумайте как используя только операции записи и чтения определить максимальный адрес. Это возможно.

Lictor
Offline
Зарегистрирован: 01.10.2015

Благодарю за ответ и задачку


#include <Wire.h>
#include <Eeprom24C32_64.h>
#define EEPROM_ADDRESS  0x50
static Eeprom24C32_64 eeprom(EEPROM_ADDRESS);
int k = 1;
void setup()
{
  Serial.begin(9600);
  eeprom.initialize();
  eeprom.writeByte(0, 1);
  while (k > 0) {
    eeprom.writeByte( k, 2);
    delay(4);
    k++;
    if (eeprom.readByte(0) != 1) {
      Serial.println(k - 1);
      break;
    }
  }
}

void loop()
{
}
Logik
Offline
Зарегистрирован: 05.08.2014

ОК. Код похож на ответ.