Вопрос по 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

ojierr
Offline
Зарегистрирован: 12.05.2019

Ребят, подскажите на pro mini столкнулся с тем, что при отключении питания данные из EEPROM тоже обнуляются

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

#include <EEPROM.h>
float R1=3560;

int detectButton() {  // тут не суть, определяю кнопку
  }

void setup() {
  EEPROM.put(0, R1);
  R1 = EEPROM.get(0,R1);
}

void loop() {
      if (detectButton() == UP){
        R1+=50;
        delay (50);}
      if (detectButton() == DOWN){
        R1-=50;
        delay (50);}
    
      lcd.print(R1,0);
      
  if (detectButton() == SAVE){
    EEPROM.put(0, R1);
    lcd.print("OK");
    delay(2000);
    }
delay (200);
}

 

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

ojierr пишет:

Ребят, подскажите на pro mini столкнулся с тем, что при отключении питания данные из EEPROM тоже обнуляются

Насколько я вижу в коде, они не "обнуляются", а возвращаются к исходному значению 3560 - верно?

Если так - вы сами их каждый раз перезаписываете при старте программы (строка 8). Уберите эту строку - и все будет работать как надо.

ojierr
Offline
Зарегистрирован: 12.05.2019

без нее "nan" . как меня раздрожает этот nan

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

ojierr пишет:

без нее "nan" . как меня раздрожает этот nan

?????

ojierr
Offline
Зарегистрирован: 12.05.2019

 1

ojierr
Offline
Зарегистрирован: 12.05.2019
if (EEPROM.read(0)==255) {
  EEPROM.put(0, R1);}
 
спасибо, беседа с вами осинила меня, все заработало. добавил проверку 1-го байта ЕЕПРОМА
qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

ojierr, проблема не в EEROM , а в вашом неумении написать обработчик кнопки.

ojierr
Offline
Зарегистрирован: 12.05.2019

1

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

ojierr пишет:

 
беседа с вами осинила меня

Не уходи, беседуй с нами, тебя еще и не так "осинит"