|
Как сохранить переменную при сбросе по BODLEVEL? |
|
|
|
Jan 10 2007, 13:36
|
Профессионал
   
Группа: Свой
Сообщений: 553
Регистрация: 17-02-05
Из: Свердловская обл.
Пользователь №: 2 712

|
Контроллер на Мега16.
Задача: необходимо сохранить калибровочную переменную при сбросе камня по BODLEVEL. Переменная (калибровочная константа одного из аналоговых датчиков, подключенных к ADC), записывается при инициализации девайса в ячейку SRAM после первого опроса датчика. Датчик измеряет атмосферное давление. Очевидно, что оно не является постоянным, что не позволяет "раз и навсегда" прописать уставку в EEPROM в качестве калировочного значения. При включении устройства (компрессор), давление в патрубке падает, и восстанавливается до атмосферного с большой задержкой - это исключает возможность вторичной автокалибровки датчика до полной остановки механики. В рабочем режиме компрессора, после короткого сброса камня по BODLEVEL, показания датчика отличаются от калибровочного режима, что приводит к дальнейшей разбалансировки системы в целом. Можно ли каким-то образом хранить в памяти (SRAM, EEPROM) в течение какого-то времени (задержка сброса BODLEVEL от единиц микроскунд, до сотен миллисекунд) ранее считанную уставку калибровки, для того, чтобы после отработки BODLEVEL использовать ее значение без вторичной калибровки датчика? При этом после длительной остановки компрессора и включения системы необходимо заново откалибровать датчик и скорректировать работу устройства внесением поправки по атмосферному давлению.
--------------------
Закономерность: Чем больше узнаю, тем меньше знаю... Любые мнения, даже ошибочные, имеют право на существование. Чем лучше узнаю людей, тем больше нравятся собаки...
|
|
|
|
|
 |
Ответов
|
Jan 10 2007, 17:37
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(Валентиныч @ Jan 10 2007, 10:36)  Контроллер на Мега16.
Задача: необходимо сохранить калибровочную переменную при сбросе камня по BODLEVEL. Переменная (калибровочная константа одного из аналоговых датчиков, подключенных к ADC), записывается при инициализации девайса в ячейку SRAM после первого опроса датчика. Датчик измеряет атмосферное давление. Очевидно, что оно не является постоянным, что не позволяет "раз и навсегда" прописать уставку в EEPROM в качестве калировочного значения. При включении устройства (компрессор), давление в патрубке падает, и восстанавливается до атмосферного с большой задержкой - это исключает возможность вторичной автокалибровки датчика до полной остановки механики. В рабочем режиме компрессора, после короткого сброса камня по BODLEVEL, показания датчика отличаются от калибровочного режима, что приводит к дальнейшей разбалансировки системы в целом. Можно ли каким-то образом хранить в памяти (SRAM, EEPROM) в течение какого-то времени (задержка сброса BODLEVEL от единиц микроскунд, до сотен миллисекунд) ранее считанную уставку калибровки, для того, чтобы после отработки BODLEVEL использовать ее значение без вторичной калибровки датчика? При этом после длительной остановки компрессора и включения системы необходимо заново откалибровать датчик и скорректировать работу устройства внесением поправки по атмосферному давлению. Что если сделать так. По включению контроллер калибрует датчик, сохраняет калибровочную константу в ячейке CALIBR, и пишет признак калибровки FLAG=0x131313 в три байта, можно и в один, не суть. Если произошёл сброс по BODLEVEL, то программа прежде всего должна проверить флаг на соответствие значению 0x131313. Если совпадает, то значит недавно был сброс по BODLEVEL, если нет - значит имеем первое включение после перерыва и надо заново калиброваться. Вероятность того, что после выключения питания в этих ячейках останется определенное значение очень мала. Скорее всего там всегда будут нули.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Jan 10 2007, 21:43
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Цитата(=GM= @ Jan 10 2007, 18:37)  Что если сделать так. По включению контроллер калибрует датчик, сохраняет калибровочную константу в ячейке CALIBR, и пишет признак калибровки FLAG=0x131313 в три байта, можно и в один, не суть. Если произошёл сброс по BODLEVEL, то программа прежде всего должна проверить флаг на соответствие значению 0x131313. Если совпадает, то значит недавно был сброс по BODLEVEL, если нет - значит имеем первое включение после перерыва и надо заново калиброваться. Вероятность того, что после выключения питания в этих ячейках останется определенное значение очень мала. Скорее всего там всегда будут нули. Там будут не нули, но будут значения определённые. Например 00ff00ff или 0ff0. Короче я так делал ещё на at90s1200. Сохраняются значения, признак и сохраняется CRC на эти значения. При чтении - проверяется признак достоверных данных и если он установлен контролируется CRC.
|
|
|
|
Сообщений в этой теме
Валентиныч Как сохранить переменную при сбросе по BODLEVEL? Jan 10 2007, 13:36 mse Цитата(Валентиныч @ Jan 10 2007, 13:36) М... Jan 10 2007, 16:03 prottoss Цитата(Валентиныч @ Jan 10 2007, 17:36) К... Jan 10 2007, 18:03 Валентиныч Цитата(prottoss @ Jan 10 2007, 20:03) А ч... Jan 10 2007, 18:15 GDI при старте программы проверяем причину сброса, есл... Jan 10 2007, 18:23 Oldring Может быть лучше всего при запуске контролировать ... Jan 10 2007, 19:52
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|