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


Принципиальная схема
Блок индикации также имеет не слишком сложную конструкцию. Центральным узлом здесь является микроконтроллер AT90S2313 (IC2), работающий с частотой 4 МГц. Принимаемые от сенсорного блока данные сначала обрабатываются простым преобразователем уровня (R1,D2 и Tr1). Этот преобразователь обеспечивает преобразования напряжений протокола RS-232 к обычным для CMOS 5 вольтам, а также производит необходимое инвертирование входного сигнала. Контроллер считывает эти данные с порта PD0, проверяет и сохраняет их, а затем в подходящей форме через выводы PB0-PB7, а также PD2 и PD3 на штекерный разъем K1. К разъему подключен стандартный 4-строчный ЖК-индикатор (HD44780) с длиной строки 20 символов. Подсветка в данной конструкции не предусмотрена, однако может быть реализована без труда.
Остальные выводы контроллера служат для подключения кнопки (PD1), для управления светодиодом, предназначенным для оптической сигнализации (PD4) и для запуска звукового генератора, обеспечивающего акустическую сигнализацию (PD5). Генератор звука состоит из CMOS-микросхемы с четырьмя элементами NAND и входами триггеров Шмитта (IC3). Элемент 1 работает в режиме осциллятора и выдает колебания звуковой частоты (3-4 кГц). Элементы 2 и 4 образуют противотактный драйвер для пъезо-генератора. Когда необходима подача звукового сигнала, осциллятор и драйверная ступень активируются высоким уровнем на выходе PD5. Использованный в схеме преобразователь звука был взят из сломанной стиральной машины и может быть замемен любой другой моделью с резонансной частотой около 4 кГц. Можно также использовать пъезокристаллический зуммер постоянного тока (со встроенным осциллятором). В этом случае элементы IC3, R5, R6, P2 и C8 можно не устанавливать, зуммер подключается напрямую между PD5 и массой. Регулирование силы звука в этом случае можно производить, например, с помощью дополнительного сопротивления, включенного последовательно.
3 порта микроконтроллера имеют двойное применение: PB5-PB7. С помощью этих трех выводов и линии сброса можно производить программирование контроллера (ISP-разъем K2). Из-за двойного применения для ISP и для вывода на ЖК-дисплей на последнем во время программирования выводится мусор - однако он исчезает в конце процедуры программирования. В остальном нет никаких побочных эффектов.
Остальные элементы схемы служат для создания стабилизированного напряжения 5В для блока индикации. Ток, потребляемый схемой, в нормальном режиме (ЖК-индикатор и генератор звука выключены) составляет менее 200 мА. Для этой цели можно использовать простой блок питания с выходным напряжением в диапазоне 10...20В. Если сенсорный блок и блок индикации расположены недалеко друг от друга и имеется 3- или 4-проводный кабель, то оба блока могут питаться от одного блока питания. Как уже було описано в главе, посвященной сенсорному блоку, все блоки данной системы подключены к единому блоку питания с выходным напряжением 12В, находящемуся вблизи сенсорного блока.
Все необходимые для блока индикации элементы перечислены в данной спецификации.



Аппаратное обеспечение
Блок индикации также полностью собран на макетной плате. Слева внизу находится микроконтроллер IC2 с кварцем и драйвер RS-232, справа от него IC3 и пьезокерамический излучатель. Регулятор напряжения и разъемы для напряжения и RS-232 расположены справа вверху. Вырез рядом с разъемами предназначен для последующего ввода соединительного кабеля. С правого края с некоторым возвышением смонтированы кнопка и светодиод. Под кнопкой находятся потенциометры для регулирования контраста ЖК-индикатора (слева) и громкости звукового сигнала (справа). ЖКИ с помощью короткого куска плоского кабеля припаян непосредственно к плате. Из-за различия в шаге контактов ЖКИ и линий кабеля был использован только каждый второй провод.
ЖКИ смонтирован на 4 винтах параллельно к основной плате на высоте 14,5 мм от нее. Поэтому на плате можно использовать только элементы, имеющие высоту не более 10 мм, в противном случае возникает опасность контакта с элементами, размещенными на обратной стороне ЖК индикатора. ISP-разъем (в центре) припаян наклонно, чтобы при подключении кабеля для программирования не приходилось снимать ЖКИ.
Все соединения находятся на обратной стороне. Линии массы и питания проложены проводом толщиной 0,5 мм. Все другие соединения выполнены лакированным медным проводом 0,3 мм.
Собранный модуль индикации точно входит в недорогой пластмассовый корпус с размерами 123x30x70 мм. Если работать с достаточной аккуратностью, можно не выполнять винтовое соединение платы с корпусом - после сборки двух половинок корпуса плата сидит плотно. Соединительный кабель в представленном варианте был подведен сзади (под штукатуркой), так что обычно он не виден.



Программное обеспечение
ПО v1.04 от 25.10.04 для AT90S2313 состоит из комментированного ассемблерного кода и скомпилированного HEX-файла. Кроме того, в качестве примеров включены еще два EEP-файла, которые могут быть использованы для тестирования измерительной системы. Файл "anzeigem-test-01-08.eep" конфигурирует блок индикации для вывода информации с сенсоров 1-8, а файл "anzeigem-test-09-16.eep" - для вывода информации с сенсоров 9-16. Окончательная конфигурация должна быть выполнена с помощью AVR-Studio и ASM-файла, он подробно описывается в разделе Пуск и конфигурирование.
Предварительно еще одно замечание по переходу с более ранней версии на v1.04: начиная с v1.04, в связи с увеличением числа поддерживаемых сенсоров до 16, произошли изменения в структцре данных конфигурации в EEPROM. Старая таблица отображения преобразована в таблицу индикации, значение которой несколько изменилось. Дополнительная информация по этому поводу содержится в разделе Пуск и конфигурирование.
По поводу функционирования ПО: после подачи напряжения питания на ЖКИ в течение примерно 10 секунд выводится приветственный текст. Здесь выводится также номер версии и дата генерации файла. В течение этого времени постоянно светится красный светодиод. После этого из EEPROM ситываются данные и проверяются на достоверность. Если при этом будет обнаружена ошибка, то на экран выводится сообщение EEPROM-Fehler. В этом случае светодиод продолжает светиться и прибор остается в своем прежнем состоянии, пока ошибка не будет устранена. Если ошибка встречается при саомо первом пуске, то это указывает на тот факт, что EEPROM не была запрограммирована (EEP-файл). Если все данные в порядке, то светодиод гаснет и индикатор переключается в режим отображения температур. Одновременно инициализируется приемник RS-232 и модуль входит в цикл ожидания данных от сенсорного блока.
В режиме индикации температуры происходит вывод на индикатор данных от 8 датчиков температуры вместе с короткими текстами, идентифицирующими каждый датчик. Пример индикации изображен на рисунке слева. Тексты для каждого датчика (по 4 символа) могут быть любыми, позиция 8 значений также может быть определена индивидуально.
Если блок получает сообщение о сработавшем сигнальном входе, то индикатор переключается в режим тревоги и выводит текстовое сообщение, соответствующее сработавшему входу. Так как ЖКИ имеет 4 строки, возможна одновременная индикация всех четырех сигналов. Здесь тексты также определяются произвольно (до 12 символов на каждый из сигналов).
До тех пор, пока активен хотя бы одна из сигнальных линий, светодиод мигает с частотой 2 Гц (460 мс вкл, 40 мс выкл). Кроме этого, в течение 3 секунд выдается звуковой сигнал (3 сеприи гудков с интервалом в 1 секунду), причем количество гудков в серии зависит от номера активной сигнальной линии. Таким образом, можно на слух определить, какая из линий сигнализирует о тревоге.
Если все сигнальные входы неактивны, то на ЖКИ выводится текст keine Alarme и через 30 сек модуль возвращается к индикации температуры. Независимо от этого с помощью кнопки можно в любой момент переключиться от индикации температуры на индикацию сигналов и обратно.
Для каждого канала температуры можно установить минимальное и максимальное граничное значение. Если измеренное значение температуры выходит за нижнее граничное значение, то значение соответствующего датчика на ЖКИ начинает мигать (40 мс вкл, 960 мс выкл). Дополнительно справа от этого значения появляется стрелка, направленная вниз, и в течение 3 секунд подается звуковой сигнал (короткие импульсы с интервалом 0,5 сек). То же самое происходит и при превышении верхнего грнаничного значения, только в этом случае стрелка направлена вверх.
Если по каким-либо причинам от одного из сенсоров перестает поступать информация, то примерно через минуту значение температуры для этого сенсора исчезает с экрана, при этом не подается никакого звукового или оптического сигнала.
Наряду с индикацией температуры и состояния сигнальных линий ЖКИ может показывать еще 2 особых состояния:

Запуск и конфигурирование
При запуске модуля индикации болишим преимуществом является, если сенсорный модуль и все термодатчики уже установлены и работоспособны. кроме того, модули должны быть соединены друг с другом по каналу RS-232. Для этого используется двухпроводная линия: один проводник передает сигнал данных (RS-232), а другой служит для соединения масс. К этим линиям не предъявляется высоких требований,благодаря высокому уровню напряжений в линии и относительно невысокой скорости передачи не должно возникать никаких проблем при длине линии 50 м и более. Если в использованном кабеле есть лишние линии, то целесообразно использовать их для электропитания. В описываемом варианте был использован блок питания 12 В, установленный вблизи от сенсорного модуля, напряжение с которого по кабелю подавалось также на модуль индикации. Таким образом, для всей установки потребовался единственный блок питания.
Если все подключено правильно, то результаты измерения температуры на дисплее модуля индикации должны появиться сразу после включения. Если индикатор пуст, то необходимо проверить линию RS-232. Лучшим инструментом для этого является осциллограф. Однако вполне можно обойтись и без него, использовав изображенную здесь схему. Она подключается параллельно выходу RS-232 сенсорного модуля или параллельно входу модуля индикации и если светодиод мигает с интервалом 1 сек, то происходит передача данных. Если светодиод светится постоянно, то перепутаны выводы.
Если коммуникация функционирует, то можно приступить к конфигурации модуля индикации. К сожалению, это не очень просто, но я попытаюсь объяснить весь процесс максимально доходчиво. Будут постоянно использоваться два термина - "Позиция индикации" и "Номер сенсора". Позиция индикации - это величина в диапазоне от 1 до 8, определяющая, на какой позиции ЖКИ должно выводиться значение температуры (см. иллюстрацию). Номер сенсора - это число в диапазоне 1...16, каждому из которых ставится в соответствие свой сенсор температуры. При этой операции очень полезен список который был составлен при установке сенсорного модуля.
Конфигурацию следует производить на ПК с помощью AVR-Studio, так как у контроллера нет достаточно памяти для сохранения процедур диалога ввода, кроме того, было бы слишком сложно вводить данные с помощью одной- единственной кнопки. Итак, в AVR-Studio создается новый проект, загружается файл "anzeigem.asm", в конце файла отыскивается строка ".eseg" и модифицируется в соответствии со следующими настройками. Для лучшего понимания строки из ASM-файла (синего цвета) снабжены дополнительными комментариями:

Общие настройки
.eseg ; edummy: .db 0xff,0xff ; байты 0/1 не используются

Пожалйуста, не изменяйте приведенные выше строки.

Таблица индикации
; Таблица индикации, содержит 8 номеров сенсоров, (в диапазоне 1-16)
; в том порядке, в каком они должны выводиться на дисплей. В позициях,
; которые должны оставаться пустыми, следует ввести 0.
; Позиции ЖКИ определены следующим образом:
; 
; +--------------------+
; | Поз. 1      Поз. 5 | Пример: если в позиции 6 ЖК-индикатора
; | Поз. 2      Поз. 6 | необходимо вывести значение сенсора 12,
; | Поз. 3      Поз. 7 | то шестой элемент etempm должен иметь
; | Поз. 4      Поз. 8 | значение 12.
; +--------------------+
;
etempm:	.db	1,2,3,4,5,6,7,8	; 8 значений, см. выше
Теперь начинается интересное: эти 8 чисел определяют, какие значения температуры должны выводиться в 8 доступных позициях индикатора (напоминаю - речь идет о дисплее 20х4, оспользованном в описываемой конструкции). Если оставить строку неизменной, то слева вверху (то есть в позиции 1) появится значение температуры, определенное сенсором 1, под ним - значение от сенсора 2 и так далее до правого нижнего угла (позиция 8), где будет выведено значение с сенсора 8. Теперь предположим, что нам требуется вывести в позиции 1 значение с сенсора 7, а в позиции 2 - с сенсора 14. В этом случае строка должна быть изменена следующим образом:
etempm:	.db	7,14,3,4,5,6,7,8
При получении информации от очередного сенсора температуры происходит следующее: номер сенсора ищется в таблице индикации и если он найден, то в соответствующей позиции индикатора выводится принятое значение. Например, если модуль индикации получил данные от сенсора 14, то в результате сканирования таблицы индикации номер 14 будет найден во второй позиции. В результате полученное значение выводится в позиции 2 индикатора. Если пришли данные от сенсора, номер которого отсутствует в таблице, то оно игнорируется. Если определенные позиции индикатора должны оставаться пустыми (например, если в системе установлено менее 8 сенсоров), то в соответствующих позициях таблицы следует установить нули:
etempm:	.db	1,2,0,4,5,6,0,8
В этом примере не используются позиции 3 и 7 - строка 3 будет пустой.
Инверсия сигналов тревоги
; Таблица значений тревоги, здесь определяется, каким образом следует интерпретировать
; сигналы тревоги: 0=нормальная интерпретация, 1=инверсия. При нормально-разомкнутом
; контакте на сенсорном модуле здесь нужно установить 0, а при нормально-замкнутом - 1.
ealmin:	.db	0,0,0,0	; обработка без инверсии
Если контакты не используются или в случае нормально-разомкнутого контакта (замыкающегося при тревоге), то здесь ничего менять не надо. Если же используются контакты, замкнутые в исходном состоянии, то для соответствующего ввода должна быть установлена единица. Предположим, подобный контакт подключается к вводу 3, тогда таблица должна выглядеть следующим образом:
ealmin:	.db	0,0,1,0	; инверсия сигнала 3
Сигналы, приходящие по линии 3, теперь будут инвертироваться, то есть размыкание контакта на линии 3 сенсорного модуля будет вызывать тревогу, а замкнутый на массу ввод будет прекращать ее.

Температурные тексты
; Температурные тексты, независимо от описанной выше таблицы индикации выводимые 
; в позиции 1-8 ЖК-индикатора. Здесь задается 8 текстов с длиной каждого в 4 символа.
; Специальные символы (напрмер, умляуты) должны кодироваться в соответствии с кодировкой
; ЖКИ: ae - oxe1, oe - oxef, ue - oxf5, ss - oxe2 (справедливо для большинства ЖКИ с HD44780,
; если возникнут сомнения, то ищите эту информацию в даташите конкретного дисплея)
;
etemp:	.db	"T-01"	; текст, выводимый на дисплей в позицию 1
	.db	"T-02"	; текст, выводимый на дисплей в позицию 2
	.db	"T-03"	; текст, выводимый на дисплей в позицию 3
	.db	"T-04"	; текст, выводимый на дисплей в позицию 4
	.db	"T-05"	; текст, выводимый на дисплей в позицию 5
	.db	"T-06"	; текст, выводимый на дисплей в позицию 6
	.db	"T-07"	; текст, выводимый на дисплей в позицию 7
	.db	"T-08"	; текст, выводимый на дисплей в позицию 8
Здесь можно задать 8 коротких текстов, которые должны выводиться на дисплее слева от значения температуры. Каждый текст должен содержать 4 символа, более короткие должны быть дополнены пробелами, более длинные - обрезаны. Можно использовать также специальные символы, пример кодировки для них приведен выше в строках комментария. Следующая строка содержит пример кодирования умляута в слове "Büro":
etemp:	.db	"B",0xf5,"ro"	; "Büro"
Важно: позиция текста соответствует позиции индикации, то есть самый первый текст всегда выводится в позиции 2, следующий - в позиции 2 и так далее.

Тексты тревоги
; Тексты тревоги, которые выводятся на дисплей при поступлении сигнала тревоги
; (4 текста по 12 символов)
;
ealmtx:	.db	"Test-Alarm 1"	; текст, выводимый на дисплей при тревоге 1 (12 символов)
	.db	"Test-Alarm 2"	; текст, выводимый на дисплей при тревоге 2 (12 символов)
	.db	"Test-Alarm 3"	; текст, выводимый на дисплей при тревоге 3 (12 символов)
	.db	"Test-Alarm 4"	; текст, выводимый на дисплей при тревоге 4 (12 символов)
Здесь, скорее всего, дополнительные комментарии не нужны. Тексты должны обязательно иметь длину 12 символов, при необходимости их следует дополнить пробелами. Здесь также возможно применение специальных символов, используется та же кондировка, что и в температурных текстах.

Нижняя граница температуры
; Нижняя граница температуры, при выходе за которую соответствующее значение на индикаторе
; начинает мигать и генерируется сигнал тревоги. Все значения должны быть введены в градусах
; Цельсия, возможно также задание отрицательных значений. Значение 128 выключает контроль
; температуры. Последовательность величин соответствует позициям индикации 1-8.
;
eliml:	.db	15,15,15,15,15,15,15,15	; тревога при снижении температуры ниже 15 градусов
Эти 8 значений настраивают систему контроля температуры, а именно нижние границы. Последовательность чисел соответствует позициям индикации, то есть первое значение относится к первой позиции индикации, второе число - ко второй и так далее. В вышеприведенном примере сигнал тревоги генерируется при снижении температуры ниже значения 15&grad;C. Также имеется возможность ввода нуля или отрицательных значений, например, -5&grad;C, однако система допускает только целочисленные значения. Если контроль температуры на определенных сенсорах не требуется, то в соответствующие места списка вносится значение 128. В следующем примере сигнал тревоги генерируется при уменьшении температуры на третьем сенсоре ниже значения -10&grad;C, и для позиций 4-8 контроль температуры выключен:
eliml:	.db	15,15,-10,128,128,128,128,128

Верхняя граница температуры
; Верхняя граница температуры, при выходе за которую соответствующее значение на индикаторе
; начинает мигать и генерируется сигнал тревоги. Все значения должны быть введены в градусах
; Цельсия, возможно также задание отрицательных значений. Значение 128 выключает контроль
; температуры. Последовательность величин соответствует позициям индикации 1-8.
;
elimh:	.db	35,35,35,35,35,35,35,35	; тревога при повышении температуры выше 35 градусов
Эти 8 значений настраивают систему контроля температуры, а именно верхние границы. Здесь действуют в принципе те же правила, что и для нижних границ.
Итак, все настройки произведены. Теперь можно откомпиллировать программу и созданным EEP-файлом запрограммировать микроконтроллер. После этого пуск и конфигурирование можно считать завершенными. Те, для кого конфигурирование кажется слишком сложным процессом, может выслать мне список необходимых ему параметров. Я создам соответствующий EEP-файл и вышлю его Вам по электронной почте.
Запланировано расширение страницы Программирование AVR, на ней будут помещены инструкции по работе с AVR-Studio.


Словарь радиоэлектронных компонентов
Интернет-магазин радиоэлектронных компонентов и наборов
Вопросы и замечания по содержанию данных страниц прошу отправлять в мой почтовый ящик.