Входы:
1) датчик температуры DS18B20
2) датчик нижнего уровня (герконовый, на замыкание)
3) датчик верхнего уровня (герконовый на замыкание)
4) кнопка наполнения водой
5) кнопка стоп
Выходы:
1) индикация на четырехразрядном семисегментнике, ОА, четыре – исходя из того что большие индикаторы были только сдвоенные, поэтому пришлось купить две штуки по два элемента.
2) зуммер с встроенным генератором
3) выход 1 включения питания керхера
4) выход 2 на электроклапан подачи воды.
Меню и настройки в программе считаю избыточными, всё прописываем в программе, в крайнем случае проще исправить в проге и перекомпилировать, чем городить кнопки и меню.
Логика работы (может будет много дури, но пока как есть)
1. Включаем, выходы 1 и 2 в 0. Флаг 1=0 (разрешение на вкл керхера по температуре), Флаг 2=0 (разрешение на вкл керхера по уровню воды), Fill=0 (процесс набора воды).
2. Инициализируем датчик t:
2.1 при неудачной инициализации выводим «Errt», протяжно пикаем зуммером «п-и-и-и-и, п-и-и-и-и». Всё это продолжается в течение 5 сек, далее уходим в начало инициализации датчика. Что делать дальше – Не знаю (честно).
2.2 при удачной инициализации выводим значение температуры в формате «101°», первые незначащие нули гасим. Инициализацию подтверждаем коротким пиком(один раз при включении). Значение выводим в течение 5 сек, замер температуры – думаю раз в 5 сек достаточно. Процедура циклическая, далее её не касаемся. Если температура попадает в диапазон +5..+36, то Флаг1=1. Здесь думаю надо ввести гистерезис по срабатыванию, чтоб на граничной температуре не было включений/выключений. Например включаем при t=36, выключаем при t=37, и нижний предел соответственно вкл при t=5, выкл при t=4.
3. Опрашиваем датчики уровня
3.1 верх=1, низ=0. После вывода температуры в течение 5 сек выводим «ErrL», ну и так же пищим как и при ошибки температуры. Уходим на опрос датчиков. Чтоб избежать дребезга, считать срабатыванием, если датчик принимает одинаковое значение, скажем, в течение 3 сек.
Далее, как и в следующих пунктах значения выводим циклично, 5 сек – по температуре, 5 сек – по остальной индикации, в данном пункте – сообщение об ошибке и состояние Выхода1=0 как “StOP». Опрос думаю сделать раз в 1 сек.
3.2 верх=1, низ=1. Fill=0. Выход2=0. Флаг2=1. Если Флаг1=0 и Флаг2=1, выводим циклически по 5 сек надписи «знач.температуры», «FULL», «StOP». Стоп подтверждаем тремя короткими пиками(один раз до изменения значения). При падении температуры до Флаг1=1, Выход1=1, выводим «знач.темп», «FULL», «Act» (не самый удачный вариант, но больше ничего не придумал)+ один длинный сигнал . Уходим на опрос датчиков (температуру мы зациклили и дальше не трогаем).
3.3 верх=0, низ=0. Выводим «знач.температуры», «ПУС» с тремя длинными сигналами, «StOP». Выход2=1.Делаем задержку на опрос датчиков в течение 10 сек.(чтоб заполнить бак до нижнего уровня). Ставим флаг Fill=1(заполняем водой). Выводим «знач.температуры», «FILL» с тремя длинными сигналами, «StOP». Уходим на опрос датчиков.
3.4 самое гемморойное. Верх=0, низ=1.
Если Fill=1 и Флаг1=1, Флаг2=1 => Выход1 =1, Выход2=1 (заполняем бак до полного, тогда флаг Fill скинется в =0). Выводим «знач.темп», «FiLL», «Act»+ один длинный если до этого был стоп(при смене состояния). Уходим на опрос. Если Флаг1=0, то выводим «знач.темп», «FILL», «StOP»+сигнал при смене состояния.
Если Fill=0 и Флаг1=1, Флаг2=1 => Выход1=1, Выход2=0. Выводим «знач.темп», «---- »(тоже не придумал что вывести при промежуточном значении между верхом и низом», «Act»+сигн.при смене состояния. Eсли Флаг1=0, Выводим «знач.темп», «---- », «StOP»с сигн.при смене состояния.
Теперь в общем. Система вывода на индикатор состоит из трех последовательных значений по 5 сек каждое. Первое – температура либо ошибка инициализации, второе – уровень бака (ErrL, FULL, ПУС, ----, FILL), третье – состояние Выхода1 (StOP, Act). Если бак в состоянии 3.4, при нажатии на кнопку наполнения водой переводим Fill=1 и далее по циклу наполняем бак до полного. При нажатии на кнопку стоп, выходы 1 и 2 скидываем в 0, выводим непрерывно «StOP», непрерывно пищим длинными сигналами, висим до сброса питания.
Керхер включается в заданном диапазоне температур и при наличии воды(Выход1=1 при Флаг1=1 и Флаг2=1). Водой заполняем либо принудительно кнопкой, либо до срабатывания нижнего уровня.
За сумбур не пинайте
Имеются программаторы для pic и avr, поэтому выбор МК не имеет значения, всё равно покупать, хотелось бы только определиться с моделью чтоб назначить выходы и нарисовать схему в Протеусе.
С уважением, velant77.


