Вопрос по EEPROM

Dmz2003
Offline
Зарегистрирован: 18.03.2019

Здравствуйте. Осваиваю работу с EEPROM.

Имеется простой пример

#include <EEPROMex.h>
float MileageCar; 
float Mileagecar1;
void setup() {
 Serial.begin(9600);
  MileageCar=10325.28;
  EEPROM.writeFloat (1, MileageCar);
  Mileagecar1=EEPROM.readFloat(1);
  Serial.print (Mileagecar1, 2);
}

void loop() {
 }

Все работает.

Делаем так:

#include <EEPROMex.h>
float MileageCar; 
float Mileagecar1;
void setup() {
 Serial.begin(9600);
  MileageCar=10325.28;
 
 //EEPROM.writeFloat (1, MileageCar);
 
 Mileagecar1=EEPROM.readFloat(1);
  Serial.print (Mileagecar1, 2);
}

void loop() {
 }

То есть в ячейке памяит 1, должно остаться записанное число. Но у меня почему то там 0. Пробовал на двух платах, результат оди. Данные в EEPROM не сохраняются. Платы UNO WAWGAT. Неужели платы неисправны? Или в чем то косяк у меня? Помогите пожалуйста.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Dmz2003 пишет:

Делаем так:

#include <EEPROMex.h>
float MileageCar; 
float Mileagecar1;
void setup() {
 Serial.begin(9600);
  MileageCar=10325.28;
 
 //EEPROM.writeFloat (1, MileageCar);
 
 Mileagecar1=EEPROM.readFloat(1);
  Serial.print (Mileagecar1, 2);
}

void loop() {
 }

То есть в ячейке памяит 1, должно остаться записанное число. 

Кому это оно должно? В какой именно строке кода Вы его туда записываете?

Dmz2003
Offline
Зарегистрирован: 18.03.2019

ЕвгенийП пишет:

Кому это оно должно? В какой именно строке кода Вы его туда записываете?

EEPROM.writeFloat (1, MileageCar);

 

Andrey12
Andrey12 аватар
Offline
Зарегистрирован: 26.12.2014

Думаю так, записывает он его строкой 07 из первого кода, потом строку комментит и пытается прочитать. Но не видит там того что записал. Хотя результатов Serial.print ТС не показал.

Но библиотека EEPROMex.h какая то странная, искать на просторах инеета не стал, если ТС выложить ссылку, можно глянуть, нет выложит так не выложит.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Dmz2003 пишет:

EEPROM.writeFloat (1, MileageCar);

Я не нашёл такой строки в коде. Возможно, пропустил. Номер скажите, я посмотрю.

b707
Offline
Зарегистрирован: 26.05.2017

Dmz2003 пишет:

ЕвгенийП пишет:

Кому это оно должно? В какой именно строке кода Вы его туда записываете?

EEPROM.writeFloat (1, MileageCar);

 

эта строка есть в примере, а в вашем коде ее нет.

b707
Offline
Зарегистрирован: 26.05.2017

Andrey12 пишет:

Думаю так, записывает он его строкой 07 из первого кода, потом строку комментит и пытается прочитать. Но не видит там того что записал. Хотя результатов Serial.print ТС не показал.

значит у него при заливке нового кода ЕЕПРОМ очищается

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Andrey12 пишет:

Думаю так, записывает он его строкой 07 из первого кода, 

А я так понял, что к первому коду у ТС претензий нет. Он ожидает, что второй код тоже что-то запишет, т.к. после него "должно остаться".

ТС, так?

Объяснитесь вразумительно!

Dmz2003
Offline
Зарегистрирован: 18.03.2019

ЕвгенийП пишет:

Объяснитесь вразумительно!

Давайте так. С помощью первого кода записываю число в ячейка 1. Проверяю. Число записано.

Потом вторым кодом просто считываю, что записано в ячейке 1. А там 0.0. 

Dmz2003
Offline
Зарегистрирован: 18.03.2019

b707 пишет:

значит у него при заливке нового кода ЕЕПРОМ очищается

Похоже что так. И при нажатии на кнопку сброса тоже очищается.

Dmz2003
Offline
Зарегистрирован: 18.03.2019

Andrey12 пишет:

Думаю так, записывает он его строкой 07 из первого кода, потом строку комментит и пытается прочитать. Но не видит там того что записал. Хотя результатов Serial.print ТС не показал.

Но библиотека EEPROMex.h какая то странная, искать на просторах инеета не стал, если ТС выложить ссылку, можно глянуть, нет выложит так не выложит.

Со стандартной библиотекой EEPROM.h происходит тоже самое.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Dmz2003 пишет:

b707 пишет:

значит у него при заливке нового кода ЕЕПРОМ очищается

Похоже что так. И при нажатии на кнопку сброса тоже очищается.

Не знаю, что такое кнопка сброса, но при прошивке точно всё стирается.

Можно это убрать, но помнится тут на форуме кто-то пробовал и говорил, что "хоть заубирайся", всё равно стирается. Сам я не пробовал убирать.

Dmz2003
Offline
Зарегистрирован: 18.03.2019

ЕвгенийП пишет:

Не знаю, что такое кнопка сброса, но при прошивке точно всё стирается.

Можно это убрать, но помнится тут на форуме кто-то пробовал и говорил, что "хоть заубирайся", всё равно стирается. Сам я не пробовал убирать.

Кнопка reset имелась ввиду. Проблема в том, что стирается не только при перепрошивке, но и при выключении питания

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Значить, нет, наерна, у Wavgat-a настоящей EEPROM

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Dmz2003, это не Atmel, а LGT . Для них есть своя библиотека, эмулирующая EEPROM. Поставляется вместе с аддоном.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Dmz2003 пишет:
Проблема в том, что стирается не только при перепрошивке, но и при выключении питания
Каким кодом Вы это проверяли?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

dimax пишет:

Dmz2003, это не Atmel, а LGT . Для них есть своя библиотека, эмулирующая EEPROM. Поставляется вместе с аддоном.

т.е. настоящий EEPROM там есть? 

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

Dmz2003 пишет:

Похоже что так. И при нажатии на кнопку сброса тоже очищается.

Работал на LGT с EEPROM. Уже не помню как там с загрузкой, но с ресетом всё было ОК.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

DetSimen пишет:

т.е. настоящий EEPROM там есть? 

Нету, просто эмуляция.  Библиотека работает с основной флеш-памятью.

Dmz2003
Offline
Зарегистрирован: 18.03.2019

ЕвгенийП пишет:

Dmz2003 пишет:
Проблема в том, что стирается не только при перепрошивке, но и при выключении питания
Каким кодом Вы это проверяли?

#include <EEPROMex.h>
float MileageCar; 
float Mileagecar1;
void setup() {
    Serial.begin(9600);
    Serial.println (EEPROM.readFloat(1));
    delay(3000);
     MileageCar=10325.28;
  EEPROM.writeFloat (1, MileageCar);
  Mileagecar1=EEPROM.readFloat(1);
  Serial.print (Mileagecar1, 2);
}

void loop() {
   }

При первом включении порт пишет

0.00

10325.28

Вроде все правильно. Изначально в ячейке 1 был 0, записали 10325.28.

Теперь отключаем питание, или нажимаем reset, ожидаем увидеть

10325.28

10325.28

Так как число в память уже записано и ничего не обнулялось, но получаем опять 

0.00

10325.28

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Интересно, с каких пор перепрошивка НАНО очищает данные в EEPROM? На 2017-й (1.6.4 + Ardublock) ничего не очищалось, иначе как-бы наш герой занял свое 3-е место .. Настроил и поехал. Поправил скетч, но датчики то на кой перенастраивать? Они в EEPROM..

b707
Offline
Зарегистрирован: 26.05.2017

Arhat109-2 пишет:

Интересно, с каких пор перепрошивка НАНО очищает данные в EEPROM?

Как настроишь, так и будет. За это отвечают опции avrdude -e  -U