Глава 1: Общее описание
Глава 2: Сенсорный блок
Глава 3: Блок индикации
Глава 4: Взаимодействие с ПК


Схема блока
Несмотря на обилие соединений, схема сенсорного блока довольно проста: центральным элементом является микроконтроллер ATMega8L (IC2), работающий на частоте 4 МГц. С помощью линий PC0-PC3, PD4-PD7 и pull-up- сопротивлений R1-R8 осуществляется коммуникация с термодатчиками. Порты PB0, PB1, PD2 и PD3 используются в качестве цифровых входов, сопротивления R9-R12 защищают порты от пиков напряжения. Линии портов PB3-PB5 и Reset выведены на разъем K3, через который может производиться программирование контроллера (ISP). PC4 и PC5 образуют I2C-интерфейс и выведены на разъем K2. Типичные для I2C pull-up-сопротивления содержатся в самом контроллере и поэтому могут не устанавливаться. К разъему K2 может быть подключен специальный ЖК- индикатор, отображающий температурные данные и информацию о состоянии. P1 служит для регулирования контраста ЖК-индикатора.
Данные, предназначенные для передачи по последовательному каналу, выводятся через порт TD1 (TXD) и с помощью микросхемы IC3 (MAX232 или другая подобная микросхема) преобразуются к уровню RS-232. IC1 также является стандартным элементом, служащим для стабилизации подводимого извне напряжения питания, которое может изменяться в пределах от 10 до 20 В. На выходе этой микросхемы стабилизированное напряжение, используемое в сенсорном блоке, поддерживается на уровне 5 В. Диод D1 встроен в схему для защиты от неправильной полярности подключения рабочего напряжения. С помощью двух перемычек J1 и J2 можно выбрать специальные рабочие режимы сенсорного блока, более подробно они описаны в разделе Обслуживание.
Все соединения с "внешним миром" осуществляются через разъем K1. Выводы 1-8 соединены с выводами шины 1-8, каждому из которых соответствует дополнительная линия массы (14-21). Цифровые входы соединены с выводами 9-12, эти выводы должны делить две линии масс (22 и 23). Через выводы 24 и 25 подводится рабочее напряжение (+ на выводе 25). Отправляемые по последовательному каналу данные измерений могут быть считаны на выводе 13, соответствующая линия массы может быть подключена к любому из выводов 22, 23, 24.
Рисунок слева иллюстрирует одну из множества возможностей подключения внешних устройств к сенсорному блоку. В представленном примере к шине 1 подключено 3 сенсора, следующие 3 сенсора - к шине 2 и последние 2 - к шине 6. Далее, в блоке цифровых входов используются выводы 9 и 10, к которым подключены два выключателя, использующих одну линию массы (вывод 23). Двухпроводная линия (выводы 13 и 24) передает данные на блок индикации или на другой приемник данных. Суммарное потребление тока лежит ниже 20 мА, так что этот блок может питаться от любого маломощного блока питания, выдающего напряжение в диапазоне 10-20 В.
Все необходимые для создания сенсорного блока элементы перечислены в этом списке.

...
Несколько слов об отдельных компонентах:
ЖКИ
...
Разъем K2
...
Термодатчики
Для измерения температуры в данном проекте могут использоваться различные модели производства Dallas/Maxim. Они способны измерять температуру в диапазоне от -55°C до +125°C и в зависимости от типа имеют точность 0,5 - 2,0°C. Обмен данными между контроллером и сенсорами происходит по однопроводной шине стандарта 1-Wire. Ее основным преимуществом является то, что кроме массового провода для обеспечения коммуникации требуется всего одна дополнительная линия. И не только это: на одну шину могут быть подключены несколько сенсоров, питание подается также по этим двум проводам, то есть для сенсоров не требуется прокладки дополнительных проводов. Следующая таблица содержит обзор всех типов сенсоров, которые можно подключать к сенсорному блоку и их важнейшие характеристики:
МодельДиапазон измеренияТочность РазрешениеПримечание
DS1820-55 ... +125°C0,5°C9 битСнята с производства
DS18S20-55 ... +125°C0,5°C9 бит
DS18B20-55 ... +125°C0,5°C9-12 битСенсорный блок работает в 12-битовом режиме
DS1822-55 ... +125°C2°C9-12 битСенсорный блок работает в 12-битовом режиме
DS1920-55 ... +100°C0,5°C9 битКонструкция iButton
Незначительное разрешение некоторых типов в 9 бит не является недостатком. Программа сенсорного блока использует алгоритм из документации производителя и с его помощью рассчитывает значение с разрешением 0,1°C. В результате независимо от типа сенсора все данные температуры выводятся с разрешением 0,1°C в диапазоне температур от -55°C до +125°C.
Хотя на шину 1-Wire теоретически можно подключить произвольное количество сенсоров, практика показывает, что к сожалению невозможно подключить к одной шине все имеющиеся в большом доме датчики. По этой причине блок выполнен с 8 независимыми шинами, что обеспечивает очень гибкое распределение сенсоров: так, несколько расположенных в одной части дома (например, в котельной) сенсоров можно подключить к одной шине, в то время как удаленный сенсор может быть подключен к отдельной шине.

Цифровые входы: Эти входы реализованы в форме переключателей: простое замыкание на массу генерирует сигнал тревоги. Могут быть использованы как рабочие, так и нормально-замкнутые контакты, соответствующая интерпретация происходит затем в блоке индикации. Реакция на замыкание или размыкание контакта происходит с некоторой задержкой (около 700 мсек). Это должно предотвратить ложные срабатывания. Вместо механических контактов могут использоваться также выходы с открытым коллектором от внешних схем. Однако, в этом случае необходимо обеспечить связь обеих схем по массе.

Питание: Выше уже упоминалось, что схема питается от источника тока с напряжением 10-20 В, потребление тока составляет около 20 мА. Для этой цели рекомендуется приобрести стандартный блок питания с соответствующими характеристиками.

Аппаратное обеспечение
Макет платы сенсорного блока выполнен Стином Андреассеном. В архиве содержатся разводки для верхней и нижней стороны платы, а также схема расположения элементов в PDF-формате. Пожалуйста, примите во внимание указания сопроводительных текстов.
Фотография слева показывает прототип, собранный на макетной плате. Практически в центре платы расположен микроконтроллер IC2, сразу под ним - кварцевый генератор. Слева вверху сгруппированы элементы стабилизатора напряжения IC1, справа от которого находится разъем для пленочного кабеля K2 (в исходном варианте использован дисплей, имеющий подвод в виде пленочного кабеля).
Справа от разъема K2 видна микросхема последовательного интерфейса IC3 с конденсаторами. На левом краю платы размещен разъем DSUB-25, осуществляющий связь блока с внешним миром. Наконец, в самом внизу справа виден разъем для программирования.
На этой фотографии отсутствуют две перемычки, которые были внесены в схему позднее.
Нижнюю стороны платы (как и следовало ожидать) занимает множество соединительных проводов. Масса и линия питания проложены с помощью провода толщиной 0,5 мм. Для остальных соединений была использована лакированная медная проволока толщиной 0,3 мм. Каким образом прокладываются провода, не имеет особого значения, важно лишь, чтобы конденсаторы 100 нФ располагались как можно ближе к микросхемам.
К сожалению, использованный штекер DSUB-25 не совпадал с растром макетной платы (2,54 мм), поэтому пришлось просверлить дополнительные отверстия. Хотя это выглядит не слишком презентабельно, но, к сожалению, это единственный выход в случае готовых макетных плат.
Использованный в экспериментальном экземпляре ЖК-дисплей, к сожалению, не имеет никаких элементов для крепления и поэтому может быть либо зажат в корпусе, либо приклеен к нему. В данном экземпляре дисплей был приклеен с помощью быстросхватывающегося двухкомпонентного клея. Ни в коем случае нельзя использовать клеи, содержащие растворители - они могут бесповоротно повредить чувствительную поверхность ЖК-дисплея.
На этом снимке представлен готовый сенсорный блок. В качестве корпуса был использован простой и дешевый стандартный пластмассовый корпус размерами 123 x 30 x 70 мм. Он состоит из двух половин и довольно хорошо обрабатывается. (Приобрести разнообразные корпуса можно в магазине MCU-Shop)



Программное обеспечение
ВремяОперацияИндикация
Секунда 0 (старт)На всех сенсорах запускается измерение температуры, текущее состояние цифровых входов пересылается по каналу RS-232.MESSUNG
Секунда 1Опрос сенсора 1 и пересылка измеренного значения по каналу RS-232.1: 22.5°
Секунда 2Опрос сенсора 2 и пересылка измеренного значения по каналу RS-232.2: 21.9°
Секунда 3Опрос сенсора 3 и пересылка измеренного значения по каналу RS-232.3: -7.1°
Секунда 4-15Опрос сенсора 4-15 и пересылка измеренного значения по каналу RS-232.n: 20.9°
Секунда 16Опрос сенсора 16 и пересылка измеренного значения по каналу RS-232.H: 17.6°
Секунда 17См. секунду 0, начало нового программного цикла.MESSUNG



Запуск и конфигурирование
После того, как все необходимые проверки завершились успешно, можно приступить к установке сенсорного блока на его постоянное место. Одно из самых подходящих мест для этого - возле распределительного щита, так как в этом случае можно обеспечить минимальную длину (новых) соединений с датчиками температуры и цифровыми входами. В описываемом устройстве для обеспечения максимальной гибкости конфигурирования были использованы 4 кабеля CAT5, одни концы которых были припаяны к выводам разъема DSUB-25, а другие - выведены на клеммы распределительного щита. Такая схема позволяет в дальнейшем произвольным образом коммутировать входы сенсорного блока с различными линиями дома.
Теперь необходимо продумать порядок оптимального распределения сенсоров по шинам. В соответствии с топологией шины необходимо всегда создавать цепь, т.е. кабель идет от сенсорного блока к первому сенсору, а от него при необходимости - к следующему. Соединение по схеме "звезда", как правило, довольно проблематично и не должно применяться, по крайней мере, в случае удаленных сенсоров. Если предполагается использовать не более 8 сенсоров, то рекомендуется каждый из них подключить к отдельной шине. Кроме всего прочего, этот вариант имеет то преимущество, что в дальнейшем будет несложно однозначно определить сенсоры, то есть подключенный к шине 1 сенсор получит номер 1 и т.д.
Если к блоку подключено более 8 сенсоров, то нужно попытаться создать наиболее оптимальные группы сенсоров. Так, например, логично было бы все сенсоры, размещенные на одном этаже, подключить к общей шине. Возможно, здесь нужно немного поэкспериментировать, прежде чем будет найдено наиболее приемлемое решение. Не существует никаких четких ограничений для системы шин 1-Wire, линия длиной 50 метров может быть работоспособной, но не обязана. Тестовая эксплуатация с кабелем Cat5 длиной 40 метров прошла без проблем, в то время как звездообразное соединение двух сенсоров (один на кабеле 15 м, другой на кабеле 25 м) не работало. Эти же сенсоры, подключенные к раздельным шинам, работали без нареканий. Опытная эксплуатация показала также, что рекомендуется заземлить экраны всех кабелей и соединить их с массой схемы.
На этапе тестирования блока большую помощь оказывает ЖК-дисплей, размещенный непосредственно в блоке, так как с его помощью можно контроллировать конфигурацию подключенных сенсоров. В случае модуля без ЖК-индикатора используется последовательный интерфейс RS232, к которому подключается либо блок индикации, либо ПК. Подробная информация по подключению ПК содержится в разделе Программное обеспечение. Пожалуйста, не забывайте: при каждом изменении конфигурации сенсорный блок должен быть перезапущен для определения вновь подключенных сенсоров (удаления информации об отключенных).
Если несмотря на все усилия не удается получить отклик от всех подключенных сенсоров, с большой долей вероятности причина заключается в проблемах с кабельными соединениями. Возможные источники неисправностей:
1. Перепутанные жилы кабеля - в этом случае рабочее напряжение подается на сенсор с обратной полярностью. Это необходимо обязательно избегать. Лучше всего подключать сенсор только после проверки полярности. Между линией данных и линией масс должно присутствовать напряжение +5В.
2. Обрыв линии - эту неприятность можно выявить, измерив напряжение на сенсоре. Обрыв имеет место, если отсутствует напряжение на сенсоре.
3. Короткое замыкание - можно определить с помощью омметра или прозвонки цепей. Однако для этого необходимо предварительно отсоединить от кабеля как сенсорный блок, так и сенсор.
4. Неправильное подключение сенсоров - правильным подключением для DS1820, DS18S20, DS18B20 и DS1822 является соединение выводов 1 и 3 на массу и вывода 2 на линию данных; для DS1920 боковая и верхняя сторона подключаются к массе, а нижняя сторона - к линии данных.
5. Неисправный сенсор - если есть подозрение в неисправности сенсора, его следует подключить к сенсорному блоку напрямую (лучше всего на отдельную шину). В такой конфигурации исправный сенсор просто обязан работать.
В случае серьезных проблем необходимо проверить напряжение на сенсоре, он должно составлять +5В на выводе DQ. В самом неблагоприятном случае слишком велика длина кабеля или он не подходит для этой цели. Здесь может помочь последнее средство - подключение подключение нескольких жил кабеля.
После того, как найдена оптимальная конфигурация для сенсоров, т.е. все подключенные сенсоры регистрируются при включении устройства и расположение сенсоров соответствует действительности, то должно произойти правильное определение всех сенсоров. Как уже было описано выше, сенсорный блок в по специальному алгоритму опрашивает каждую шину, причем порядок подключенных к соответствующей шине сенсоров однозначно определяется их идентификаторами, содержащимися в ROM. При упоминавшейся в качестве примера конфигурации сенсорорв 33000200 сенсорам на шине 1 присваиваются номера 1, 2 и 3, но какой из них получает номер 1? Конечно, зная идентификатор сенсора, определить этот порядок не составляет труда, но есть и более простой способ: необходимо просто нагреть пальцами один из сенсоров на шине и посмотреть, какое из выводящихся на дисплей показаний изменит свое значение (возможно, при этом вам потребуется помощь). Конечно, при таком способе определение положения каждого сенсора займет некоторое время, ведь при 16 подключенных сенсорах полный цикл опроса длится 18 секунд.
К сожалению, и этот метод имеет свои границы: если подключено более 8 сенсоров, и для определения топологии сенсоров используется блок индикации, на первом этапе можно обработать только сенсоры 1-8. Чтобы обработать и оставшиеся сенсоры, придется перепрограммировать блок индикации, чтобы он начал показывать данные, собранные сенсорами 9-16. Для этой цели разработана программа "anzeigem-test-9-16.eep" (включена в пакет программ блока индикации), после записи которой в память блока индикации он начнет показывать данные, собранные сенсорами 9-16.
Важное замечание: следует составить список всех датчиков температуры с информацией о том, в каком месте установлен каждый из них, к какой шине он подключен и какой порядковый номер получил от блока индикации. Этот список будет очень полезен в дальнейшем при конфигурировании блока индикации и при устранении возможных неполадок. Впрочем, то же самое справедливо и для цифровых входов.


Управление
Система измерения спроектирована таким образом, чтобы все настройки производились на блоке индикации (или с помощью компьютерной программы). На сенсорном блоке не нужно делать практически никаких настроек, так как он часто может быть установлен в труднодоступном месте. Единственным исключением являются 2 перемычки, с помощью которых можно задать специальные режимы работы сенсорного блока.
Перемычка J1 - режим запоминания: Может случиться так, что какой либо из сенсоров перестает передавать данные, так как произошел обрыв одного из проводов или где-либо нарушился контакт. Эту ситуацию можно определить на сенсорном блоке по индикации ошибки; блок индикации также регистрирует выход сенсора из строя. Если в такой ситуации происходит сбой питания, то при повторном запуске сенсорный блок производит новый опрос сенсоров. Естественно, вышедший из строя сенсор не будет найден и сенсорный блок будет работать так, как если бы этого сенсора никогда и не было. Это означает: все сенсоры с порядковыми номерами больше номера вышедшего из строя сенсора сдвигаются в списке на одну позицию вверх и получают новые номера. Например, если в системе имелось 6 сенсоров и сенсор № 4 вышел из строя, то после перезапуска система работает с 5 сенсорами, причем сенсор 5 получает номер 4, а сенсор 6 - номер 5. В результате блок индикации начинает отображать ложную информацию. Чтобы избежать этого и был разработан режим запоминания.
Режим запоминания активируется с помощью перемычки J1. При включении сенсорного блока выполняются в принципе те же процедуры, что и в нормальном режиме. Дополнительно происходит копирование собранных данных в EEPROM и установка байта-флажка. После этого начинается выполнение обычного цикла сбора данных. Если определенная таким образом конфигурация должна применяться в течение длительного времени, необходимо выключить блок и снять перемычку J1. После этого при каждом новом пуске сенсорный блок будет проверять флажок в EEPROM и, если он установлен, пропускать процедуру поиска сенсоров и загружать необходимые для работы данные из EEPROM. Таким образом обеспечено, что количество и порядок сенсоров больше не изменяется. Для указания на активацию режима запоминания в случае установленной перемычки J1 или после загрузки данных из EEPROM на ЖК-индикатор выводится стерео-символ.
Если позже Вы захотите изменить конфигурацию, необходимо вновь установить перемычку J1 и при следующем запуске сенсорного блока новая конфигурация будет определена и сохранена в EEPROM. Невозможно лишь вернуться в обычный режим. Это можно сделать лишь с помощью программатора, стерев флажок по адресу 1 или просто оставив перемычку J1 постоянно включенной.
Перемычка J2 - специальный режим: Этот режим отличается от нормального режима сокращенным временем опроса и выглядит следующим образом:
ВремяОперацияИндикация
Секунда 0 (старт)На всех сенсорах запускается измерение температуры, текущее состояние цифровых входов пересылается по каналу RS-232.MESSUNG
Секунда 1...2Опрос всех сенсоров и пересылка измеренных значений по каналу RS-232.SENDEN
Секунда 2См. секунду 0, начало нового программного цикла.MESSUNG

Замечание в заключение: данный режим действительно должен использоваться только в том случае, если необходим максимально быстрый сбор информации, например, для управления отопительной системой. Для "нормальной" индикации температуры с помощью блока индикации этот специальный режим не подходит, так как блок индикации просто не в состоянии обработать такой объем информации. Если этот режим все же активирован, на индикатор выводятся 3 балки силы поля. Возможно также комбинировать режим памяти и специальный режим, поскольку они задаются независимо друг от друга.