Запись и чтение из памяти большого числа

Приветствую, подскажите как записать и считать из EEPROM большого числа, к примеру число 28500000

unsigned long x = 28500000;
unsigned long y =0;

// записать в ЕЕПРОМ
EEPROM.put(eeAddress, x);

// прочитать в другую переменную
EEPROM.get(eeAddress, y);

Гайд по ЕЕПРОМ
https://docs.arduino.cc/learn/programming/eeprom-guide/

2 лайка
uint32_t temp = 28500000;
EEPROM.put(2, temp):

Считывается методом get()

ЗЫ: Малёхо не успел ))

1 лайк

Ох спасибо Братцы!

Вопрос еще один, дело в том что я использую внешнюю память на 24ххх микросхеме.

/// https://www.electronicshub.org/arduino-at24c256-eeprom/

#include <Wire.h>

#define EEPROM_I2C_ADDRESS 0x50
int i=0;
void setup()
{
  Wire.begin();
  Serial.begin(9600);
  pinMode(13, OUTPUT);
}

void loop()
{
  
writeFlash24(0, 135); // запись в ячейку 0 число 135

  delay(1000);
  Serial.println("Data from EEPROM");
  Serial.println("-----------------");
 Serial.println(readFlash24(0)); // выводим в монитор значение из 0 ячейки

  delay(1000);

}


// Function to write to EEPROOM
void writeFlash24(byte dataAddress, byte dataVal)
{
  Wire.beginTransmission(EEPROM_I2C_ADDRESS);

  Wire.write(dataAddress);
  Wire.write(dataVal);
  Wire.endTransmission();

  delay(5);
}

// Function to read from EEPROM
byte readFlash24(byte dataAddress)
{
  byte readData = NULL;
  Wire.beginTransmission(EEPROM_I2C_ADDRESS);
  Wire.write(dataAddress);
  Wire.endTransmission();

  delay(5);
  Wire.requestFrom(EEPROM_I2C_ADDRESS, 1);
  //delay(1);

  if(Wire.available())
  {
    readData =  Wire.read();
  }

  return readData;
}

как быть в этом случае

Почему это не было указано в первом посте?

Слово ЕЕПРОМ в приложении к ардуино имеет очень четкое и узкое значение - это перманентная память, встроенная в контроллер. Ваша “внешняя ЕЕПРОМ” в это понятие не попадает.

В результате мы с @BOOM просто впустую потратили время.

На этом заканчиваю, идите в…

3 лайка

Да, собственно, точно так же.
Многобайтовое число или структура пишутся побайтно.
Единственное, о чем нужно помнить, - о паузе в 5 мс при пересечении границы страницы при записи.

Не указал оттого что если не получится реализовать в микросхеме 24ххх то придётся к сожалению юзать EEPROM.

Теперь точно не получится

1 лайк

ТС, сколько таких «больших» чисел тебе нужно в память «загнать», что ты к внешней обратился?
Если пару десятков, то и EEPROM сгодится. Опять таки - что за МК используется?
Когда уже молодежь научится правильно вопросы задавать?

Спасибо за проявленный интерес к моему вопросу и ваш ответ.
Собираю самодельный синтезатор частоты для самодельного КВ трансивера. Железо в прототипе UNO и готовый модуль на si5351, применить внешнюю память было из соображений того что будет много перезаписей и заменить в случае чего микросхему дело пары минут.

Опишу в двух словах, будет 9 диапазонов и у каждого диапазона будет такое длинное число с цифрами означающими частоту, а так же у каждого диапазона будут еще свои настройки 5-7 настроек которые мне не составляет труда записать в память.
И самое главное, при повороте энкодера частота будет меняться в ту или иную сторону и текущая частота должна записываться в память что бы при переходе по диапазонам из памяти считывалась именно та частота которая была на этом диапазоне в последний раз.
А крутить энкодер блуждая по диапазонам можно и весь вечер, поэтому чтобы не сокращать ресурс микроконтроллера поставил 24ххх.

Вы уж простите, может я не совсем внятно формулирую мысли, мне за 40 и я после инсульта, трудно все это мне дается. Печатаю одним пальцем. Но сидеть на пятой точке ровно не буду, все равно буду что то мастерить.

FM24xx

Плата UNO - это ATmega328P
Хотя для синтезатора проще было бы взять Nano, но не в этом суть.
Итак, хранение частоты 9ти диапазонов и по 5 настроек к ним (даже если они будут тоже по 4 байта) вообще не вопрос для EEPROM ATmega328P.
Теперь о расходовании ресурсов. Если подойти к вопросу так, как ты описываешь, а я так понимаю ты хочешь при каждом изменении частоты писать её в EEPROM, то скажу сразу - это глупо!
Глупо по разным причинам. Например, запись в EEPROM сильно тормознее записи в оперативную память. То есть при твоём подходе каждый поворот энкодера будет сопровождаться задержкой, которая в свою очередь может проявиться шумами при перестройке частоты. Это могут быть «щелчки», «кваканья» и тп.

Как тебе нужно сделать (лично я так делал):

  1. Сохраняем настройки только во время события сохранения настроек. Это может быть событие нажатия кнопки, или временной интервал.
  2. Сохраняем частоту не во время её изменения, а после временного интервала (например, если не вращаем ручку настройки более 2х минут, то есть «поиск частоты» завершен , значит можно сохранить частоту текущую в EEPROM). Либо же вообще не сохраняем частоты во время перестройки, а сохраняем их лишь при переходе с диапазона на другой диапазон и/или после отключения питания). Я за первую часть, так проще. Но комбинировать никто не запрещал для удобства. :slight_smile:

Это вкратце, если что не понял - спроси, отвечу более развернуто.

1 лайк

Вы правы FM24xx, у меня 4 таких микросхемы выпаянных откуда то в свое время, FM24C08A, 24C01, 24W02 и 24C04. Все эти 4 микросхемы без проблем работают с кодом приведенным выше.

Ну тогда если ресурса перезаписи родной EEPROM достаточно, напрашивается советуемый вами вариант сохранять все настройки при переходе с диапазона на диапазон, а так же по прошествии нескольких минут бездействия и при отключении питания.

1 лайк

Оффтоп:
24я серия, это не микросхемы хранения биос случаем в старых материнках?

на сколько я помню в материнках 25 серия 3.3v и размер там по несколько Mb

А, да-да. Спутал…

В старых материнках и мегабайты? Или у нас с вами разная “старость” :slightly_smiling_face:

офф
Все эти 4 микросхемы что я приводил ранее имеют следы пайки, на материнках флешки биоса если не ошибаюсь они стояли на панельках.

Полез в коробку посмотрел что есть от старых материнок, 25Q80, 25L80, 25X80 это 8M-BIT, мой промах, каюсь.

1 лайк

Вы уверены? Думаю вы путаете с AT24xx.
Серия FM24 это память типа фрам, у которой почти бесконечное число перезаписи. С такой памятью вы можете записывать свои настройки хоть 10 раз в секунду и и не надо будет ничего придумывать чтобы экономить ресурс.