Nord написал(а):Я бы все-таки прерывания отдавал по приоритету значимости, привязывая их к приоритетам в МК.
Нету их в атмелене, приоритетов!
Nord написал(а):EEPROM через месяц стирок выработает свой ресурс...
У тебя калькелятор врёт или ты в прачечной работаешь?
Если брать логику работы современных машин - они все работают на событиях.
Допустим, вы захотели постирать, загрузили бельё, закрыли крышку, выбрали программу и нажали кнопку "Старт"
Возникает гирлянда событий и конечный флаг в конце.
Вот так:
дверь закрыта+программа выбрана+кнопка старта нажата+ещё какие-либо события = флаг_готовность_к_наполнению_воды (1 байт в еепром!!!).
Далее второе событие:
открыть водяной клапан и считать время наполнения бака и следить за уровнем в нём
если за время, отведённое в векторо бак не наполнился = флаг_нет_воды установился и машинка свалилась в аварию.
если всё нормально = выставляем флаг разрешение_нагрева ТЭНом и включаем его
контролируем температуру и время нагревания тогда, когда процессору делать нефиг, да хоть раз в минуту, система инерционна
делаем паузу и покрутим туды-сюды барабан для намокания белья несколько раз, допустим 1 минуту
проверим уровень воды и если нужно - добавим опять-же через таймер.
если всё хорошо - выставляем флаг = бак_наполнен
ВСЁ, к прессостату БОЛЬШЕ не обращаемся, бак то у нас не дырявый...
далее из указателя берём температуру стирки и стратегию стирки
вращаем туды-сюды барабан, делаем паузы и вращаем опять, заодно иногда контролируя температуру
всё! цикл стирки запущен и работает!
по мере нагрева воды по таймеру и температуре ставим флаг = вода_нагрета_до_температуры_стирки или ошибка = ТЭН неисправен!
по тому-же таймеру отсчитываем длительность стирки, ставим флаг = стирка_1_закончена (ну или замачивание или что ещё...)
ВСЁ!!!
по образу и подобию делаем циклы замачивания, полоскания и выжима!!
Усё просто, шеф!!! 