EEPROM

gena321
Offline
Зарегистрирован: 19.01.2019
Добрый вечер.
Я пытаюсь сохранить 2 переменные i и j в EEPROM, я могу изменить эти значения кнопками, но после отключения питания оба значения не сохраняются, и на ЖК-дисплее у меня i = 0 и j = 0.
 
Пожалуйста, помогите мне решить проблему.

#include <LiquidCrystal.h>
#include <EEPROM.h>
LiquidCrystal lcd(PA0, PA1, PA2, PA3, PA4, PA5);
int i;
int ovfi;
int j;
int ovfj;

void setup()
{
  pinMode(PB6, INPUT_PULLDOWN);
  pinMode(PB9, INPUT_PULLDOWN);
  pinMode(PB5, INPUT_PULLDOWN);
  pinMode(PB8, INPUT_PULLDOWN);
  lcd.begin(16, 2);

  EEPROM.read(256);
  EEPROM.read(0);
}


void loop()
{
  ovfi = 3000 - i;
  if (digitalRead(PB8) == HIGH)
  {
    if (i < 3000)
    {
      i++;
    }

  }
  if (digitalRead(PB5) == HIGH)
  {
    if (i > 0)

    {
      i--;
    }
  }

  EEPROM.write(256, i);
  //////////////////////////////////
  ovfi = 3000 - j;
  if (digitalRead(PB9) == HIGH)
  {
    if (i < 3000)
    {
      j++;
    }

  }
  if (digitalRead(PB6) == HIGH)
  {
    if (i > 0)

    {
      j--;
    }
  }
  EEPROM.write(0, j);
  /////////////////////////////////
  lcd.setCursor(0, 0);
  lcd.print(EEPROM.read(256));

  lcd.setCursor(0, 1);
  lcd.print(EEPROM.read(0));
}

 

 

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

сегодня похоже день епрома

строки 17 и 18, вы куда читаете из EEPROM?

gena321
Offline
Зарегистрирован: 19.01.2019

Это должны быть адреса EEPROM, STM32f103

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

gena321 пишет:

Это должны быть адреса EEPROM, STM32f103

Повторю вопрос: КУДА вы читаете из EEPROM в строках 17 и 18? Правильный ответ - в ни-ку-да, вместо переменных i и j. Поняли, в чём ошибка?

gena321
Offline
Зарегистрирован: 19.01.2019

Я читаю их на LCD

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

так ... спокойнее )))

еще раз: что вы делаете в строках 17 и 18?

gena321
Offline
Зарегистрирован: 19.01.2019

Я читаю сохраненные значения после отключения питания и подключenyu его снова

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

так, все понятно

замените 17,18 на

i = EEPROM.read(256);

j = EEPROM.read(0);

и идите с богом.

код написан просто безграмотно и объяснять кажлый ляп, просто нет желания.

 

gena321
Offline
Зарегистрирован: 19.01.2019

Я сделал так и i  сохраняется

Я сделал так и  только i сохраняется


  //EEPROM.read(256);
  //EEPROM.read(0);
  EEPROM.read(0, (uint16*)&i);
  EEPROM.read(1, (uint16*)&j);

 

gena321
Offline
Зарегистрирован: 19.01.2019
xDriver
Спасибо работает.
А как будет грамотно?
ЕвгенийП
ЕвгенийП аватар
Онлайн
Зарегистрирован: 25.05.2015

gena321 пишет:

Я читаю их на LCD

А радиостанция - на бронепоезде.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

STM32 не имеет энергонезависимой EEPROM памяти. EEPROM есть только у STM32L.

http://www.avislab.com/blog/stm32-flash_ru/

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

qwone пишет:

STM32 не имеет энергонезависимой EEPROM памяти. EEPROM есть только у STM32L.

http://www.avislab.com/blog/stm32-flash_ru/

Пух: https://github.com/rogerclarkmelbourne/Arduino_STM32/tree/master/STM32F1/libraries/EEPROM

Сделана эмуляция, и как EEPROM используется флеш. Так что к рамках Arduino IDE класс EEPROM под STM32 работает, и предоставляет наружу всем известный стандартный функционал. Ну - почти стандартный, сигнатуры некоторых методов чуть отличаются, но всё-же - узнаваемы вполне.

gena321
Offline
Зарегистрирован: 19.01.2019
Спасибо
Поменял
  //EEPROM.write(256, j);
    EEPROM.write(0, j);

и всё работает

 

bwn
Offline
Зарегистрирован: 25.08.2014

А как быстро этот код, дырку во флэше сделает? 

gena321
Offline
Зарегистрирован: 19.01.2019

После 100 000 записей в один адрес, потом надо его менять , вот как, пока я не знаю.

bwn
Offline
Зарегистрирован: 25.08.2014

А в постоянно крутящемся лупе, как быстро закончатся 100тысч?

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

gena321 пишет:

потом надо его менять , вот как, пока я не знаю.

Чего там знать? Открываешь чип, находишь там епром, выбрасываешь, и ставишь новый.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Ворота пишет:

gena321 пишет:

потом надо его менять , вот как, пока я не знаю.

Чего там знать? Открываешь чип, находишь там епром, выбрасываешь, и ставишь новый.

не, ну новый дорого, я бушный беру у борыг в треть цены, а вообще я слышал ща умельцы научились востанавливать его и не дорого. ))

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

xDriver пишет:

не, ну новый дорого, я бушный беру у борыг в треть цены

Ворота у нас богатый!