Страница 1 из 1

Однократно считать с EEPROM

Добавлено: 19 апр 2017, 15:04
kbplug
Добрый день, подскажите пожалуйста как правильно однократно при включении питания ардуино считать данные из EEPROM и присвоить их переменным, я делаю вот так но не уверен что это оптимально:

Изображение

Однократно считать с EEPROM

Добавлено: 19 апр 2017, 15:16
slavas
да

Однократно считать с EEPROM

Добавлено: 19 апр 2017, 15:23
kbplug
slavas, Спасибо.

Однократно считать с EEPROM

Добавлено: 19 апр 2017, 17:17
jonik22sm
Лучше всего делать так
1) создаёш плату №1 туда кидаешь чтение из EEPROM все которые тебе нужны


2) когда открываешь в arduino IDE плату №1 переносишь в область void setup


Однократно считать с EEPROM

Добавлено: 20 апр 2017, 10:56
slavas
jonik22sm, может асcемблер проще?

Однократно считать с EEPROM

Добавлено: 20 апр 2017, 11:45
jonik22sm
я когда на работе собирал расходомеры клея то меня только это спасло
а через триггер подглючивало

Добавлено (20.04.2017, 11:45)
---------------------------------------------
зато 100% прочитается 1 раз

Однократно считать с EEPROM

Добавлено: 20 апр 2017, 14:09
kbplug
jonik22sm, Спасибо буду иметь ввиду.

Однократно считать с EEPROM

Добавлено: 21 апр 2017, 02:09
Oleg_UA
Можно ещё через условие выполнения платы, главное запись переменной START размещать последней (не раньше платы с чтением)

Однократно считать с EEPROM

Добавлено: 21 апр 2017, 12:21
Sancho
jonik22sm писал(а):Лучше всего делать так
1) создаёш плату №1 туда кидаешь чтение из EEPROM все которые тебе нужны
2) когда открываешь в arduino IDE плату №1 переносишь в область void setup
Правильное, самое правильное, решение - в void setup

Однократно считать с EEPROM

Добавлено: 21 апр 2017, 12:29
kbplug
Так может тогда есть смысл попросить автора интегрировать данное решение в FLProg.
Скажем, можна добавить галочку в свойства платы "запускать однократно".

Однократно считать с EEPROM

Добавлено: 21 апр 2017, 12:47
OlegAn1962
Здесь три решения этого вопроса, нужен еще четвертый?

Однократно считать с EEPROM

Добавлено: 21 апр 2017, 12:56
kbplug
Нужен один но он должен быть правильный и не должен ни при каких обстоятельствах вызывать ошибок. И если самое правильное, решение - в void setup то хотелось бы чтобы это можно было сделать из FLProg.

Однократно считать с EEPROM

Добавлено: 21 апр 2017, 18:32
support
В первом посту вы почти правильно описали решение.
На первой плате делаете такую схему


Однократно считать с EEPROM

Добавлено: 21 апр 2017, 19:39
kbplug
support, Спасибо за ответ.

Однократно считать с EEPROM

Добавлено: 21 апр 2017, 21:44
jonik22sm
да но он в любом случае читается каждый раз просто выполняется один раз
а если в void setup то он и читается только при загрузке и ВСЁ больше не участвует в коде

Добавлено (21.04.2017, 21:44)
---------------------------------------------
Или я неправ!?

Добавлено (21.04.2017, 21:44)
---------------------------------------------
Мне очень помогло в расходомере

Однократно считать с EEPROM

Добавлено: 21 апр 2017, 22:30
support
Нет не правы. Вот образец кода который получается

  if (_trgrt1) {
    _gtv1 = (readIntegerFromEEPROM(0, 0, 0x0));
  }

Читается только если  _trgrt1 = 1. А она равнв 1 один раз при пуске контроллера.  В остальных случаях код чтения пропускается

Однократно считать с EEPROM

Добавлено: 22 апр 2017, 12:49
Oleg_UA
support писал(а):Читается только если  _trgrt1 = 1. А она равнв 1 один раз при пуске контроллера.  В остальных случаях код чтения пропускается
С использованием триггера и нескольких блоков чтения из памяти - программа создаёт столько условий  if (_trgrt2) сколько было создано блоков чтения и две переменные, но  когда создать условие выполнения платы тогда создаётся только одно условие if (var1 == 0) и нужна только одна переменная.
Но в любом случае сделать возможность переноса в void setup() было-бы очень полезно.

//Плата:с триггером

if (1) { if (_trgrt2I) { _trgrt2 = 0;} else {_trgrt2 = 1; _trgrt2I = 1;} } else {_trgrt2 = 0; _trgrt2I = 0;}; 
 if (_trgrt2) {
var2 = (readIntegerFromEEPROM(2, 0, 0x50));
}
if (_trgrt2) {
var3 = (readIntegerFromEEPROM(2, 0, 0x50));
}
if (_trgrt2) {
var4 = (readIntegerFromEEPROM(2, 0, 0x50));
}

//Плата:с условием

if (var1 == 0) {
var2 = (readIntegerFromEEPROM(2, 0, 0x50));
var3 = (readIntegerFromEEPROM(2, 0, 0x50));
var4 = (readIntegerFromEEPROM(2, 0, 0x50));
var1 = 1;
}