Цитата(Валентиныч @ Jan 10 2007, 10:36)

Контроллер на Мега16.
Задача: необходимо сохранить калибровочную переменную при сбросе камня по BODLEVEL. Переменная (калибровочная константа одного из аналоговых датчиков, подключенных к ADC), записывается при инициализации девайса в ячейку SRAM после первого опроса датчика.
Датчик измеряет атмосферное давление. Очевидно, что оно не является постоянным, что не позволяет "раз и навсегда" прописать уставку в EEPROM в качестве калировочного значения. При включении устройства (компрессор), давление в патрубке падает, и восстанавливается до атмосферного с большой задержкой - это исключает возможность вторичной автокалибровки датчика до полной остановки механики. В рабочем режиме компрессора, после короткого сброса камня по BODLEVEL, показания датчика отличаются от калибровочного режима, что приводит к дальнейшей разбалансировки системы в целом.
Можно ли каким-то образом хранить в памяти (SRAM, EEPROM) в течение какого-то времени (задержка сброса BODLEVEL от единиц микроскунд, до сотен миллисекунд) ранее считанную уставку калибровки, для того, чтобы после отработки BODLEVEL использовать ее значение без вторичной калибровки датчика?
При этом после длительной остановки компрессора и включения системы необходимо заново откалибровать датчик и скорректировать работу устройства внесением поправки по атмосферному давлению.
Что если сделать так. По включению контроллер калибрует датчик, сохраняет калибровочную константу в ячейке CALIBR, и пишет признак калибровки FLAG=0x131313 в три байта, можно и в один, не суть. Если произошёл сброс по BODLEVEL, то программа прежде всего должна проверить флаг на соответствие значению 0x131313. Если совпадает, то значит недавно был сброс по BODLEVEL, если нет - значит имеем первое включение после перерыва и надо заново калиброваться. Вероятность того, что после выключения питания в этих ячейках останется определенное значение очень мала. Скорее всего там всегда будут нули.