Приветствую, подскажите как записать и считать из 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/
uint32_t temp = 28500000;
EEPROM.put(2, temp):
Считывается методом get()
ЗЫ: Малёхо не успел ))
Ох спасибо Братцы!
Вопрос еще один, дело в том что я использую внешнюю память на 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 просто впустую потратили время.
На этом заканчиваю, идите в…
Да, собственно, точно так же.
Многобайтовое число или структура пишутся побайтно.
Единственное, о чем нужно помнить, - о паузе в 5 мс при пересечении границы страницы при записи.
Не указал оттого что если не получится реализовать в микросхеме 24ххх то придётся к сожалению юзать EEPROM.
Теперь точно не получится
ТС, сколько таких «больших» чисел тебе нужно в память «загнать», что ты к внешней обратился?
Если пару десятков, то и EEPROM сгодится. Опять таки - что за МК используется?
Когда уже молодежь научится правильно вопросы задавать?
Спасибо за проявленный интерес к моему вопросу и ваш ответ.
Собираю самодельный синтезатор частоты для самодельного КВ трансивера. Железо в прототипе UNO и готовый модуль на si5351, применить внешнюю память было из соображений того что будет много перезаписей и заменить в случае чего микросхему дело пары минут.
Опишу в двух словах, будет 9 диапазонов и у каждого диапазона будет такое длинное число с цифрами означающими частоту, а так же у каждого диапазона будут еще свои настройки 5-7 настроек которые мне не составляет труда записать в память.
И самое главное, при повороте энкодера частота будет меняться в ту или иную сторону и текущая частота должна записываться в память что бы при переходе по диапазонам из памяти считывалась именно та частота которая была на этом диапазоне в последний раз.
А крутить энкодер блуждая по диапазонам можно и весь вечер, поэтому чтобы не сокращать ресурс микроконтроллера поставил 24ххх.
Вы уж простите, может я не совсем внятно формулирую мысли, мне за 40 и я после инсульта, трудно все это мне дается. Печатаю одним пальцем. Но сидеть на пятой точке ровно не буду, все равно буду что то мастерить.
FM24xx
Плата UNO - это ATmega328P
Хотя для синтезатора проще было бы взять Nano, но не в этом суть.
Итак, хранение частоты 9ти диапазонов и по 5 настроек к ним (даже если они будут тоже по 4 байта) вообще не вопрос для EEPROM ATmega328P.
Теперь о расходовании ресурсов. Если подойти к вопросу так, как ты описываешь, а я так понимаю ты хочешь при каждом изменении частоты писать её в EEPROM, то скажу сразу - это глупо!
Глупо по разным причинам. Например, запись в EEPROM сильно тормознее записи в оперативную память. То есть при твоём подходе каждый поворот энкодера будет сопровождаться задержкой, которая в свою очередь может проявиться шумами при перестройке частоты. Это могут быть «щелчки», «кваканья» и тп.
Как тебе нужно сделать (лично я так делал):
- Сохраняем настройки только во время события сохранения настроек. Это может быть событие нажатия кнопки, или временной интервал.
- Сохраняем частоту не во время её изменения, а после временного интервала (например, если не вращаем ручку настройки более 2х минут, то есть «поиск частоты» завершен , значит можно сохранить частоту текущую в EEPROM). Либо же вообще не сохраняем частоты во время перестройки, а сохраняем их лишь при переходе с диапазона на другой диапазон и/или после отключения питания). Я за первую часть, так проще. Но комбинировать никто не запрещал для удобства.
Это вкратце, если что не понял - спроси, отвечу более развернуто.
Вы правы FM24xx, у меня 4 таких микросхемы выпаянных откуда то в свое время, FM24C08A, 24C01, 24W02 и 24C04. Все эти 4 микросхемы без проблем работают с кодом приведенным выше.
Ну тогда если ресурса перезаписи родной EEPROM достаточно, напрашивается советуемый вами вариант сохранять все настройки при переходе с диапазона на диапазон, а так же по прошествии нескольких минут бездействия и при отключении питания.
Оффтоп:
24я серия, это не микросхемы хранения биос случаем в старых материнках?
на сколько я помню в материнках 25 серия 3.3v и размер там по несколько Mb
А, да-да. Спутал…
В старых материнках и мегабайты? Или у нас с вами разная “старость”
офф
Все эти 4 микросхемы что я приводил ранее имеют следы пайки, на материнках флешки биоса если не ошибаюсь они стояли на панельках.
Полез в коробку посмотрел что есть от старых материнок, 25Q80, 25L80, 25X80 это 8M-BIT, мой промах, каюсь.
Вы уверены? Думаю вы путаете с AT24xx.
Серия FM24 это память типа фрам, у которой почти бесконечное число перезаписи. С такой памятью вы можете записывать свои настройки хоть 10 раз в секунду и и не надо будет ничего придумывать чтобы экономить ресурс.