Данное устройство на основе микроконтроллера AVRMega168 может контролировать до 16 DS18x20 термометров, с переменной скоростью опроса от 5 до 9999 секунд. Данные отображаются на многострочном дисплее для немедленного просмотра, а также направляются через RS232 на скорости 19200 бод для записи. Данные записываются с метками времени полученными от часов реального времени, также подключенных к шине 1-Wire.

Опытно-конструкторские работы были произведены с помощью платы Atmel STK500, используя AVR Studio 4, и среду программирования AVR-GCC. Плата разработчика, в центре фотографии, имеет элементы такие как светодиоды, переключатели, последовательные порты и регуляторы, так что вы можете просто сосредоточиться на написании программы.

Схема устройства:

Регистратор температуры на Atmega168 - схема

Для программирования и отладки был использован программатор Atmel JTAGICE MkII. Анализ временных сигналов шины 1-Wire был произведен с помощью 32-канального логического анализатора Intronix Logicport, расположенного в левом нижнем углу. Logicport сыграл важную роль в отладке временных интервалов 1-проводной связи.

На этом изображении мы видим сигнал 1-Wire, содержащий импульс присутствия, за которым следуют четыре 0s и четыре 1s. Это команда поиска датчиков на 1-проводной шине.

Программное обеспечение регистратора основано на конечном автомате. Есть несколько режимов работы или состояний в одном из которых регистратор будет в любой момент времени.

При запуске устройства на дисплее отображается текущая версия прошивки и количество найденных на 1-Wire шине датчиков DS18x20 (либо DS1820 [прекращено], DS18B20 или DS18S20). Через несколько секунд появится сообщение об обнаружении на шине часов реального времени(RTC), если данная микросхема подключена. Если RTC присутствует, интервал опроса температуры будет синхронизирован с фактическим временем часов реального времени. Если RTC нет, временной меткой будет число секунд, прошедших с процесса регистрации. Устройство остановится в этой точке, если датчики температуры или RTC не будут найдены. Если число датчиков температуры изменяется, необходимо выключить затем снова включить устройство.

Стартовый экран

 Далее, если активные датчики температуры были обнаружены на 1-Wire шине, отображается экран запуска. Если датчика температуры нет, но RTC активен, стартовый экран пропускается, и мы идем непосредственно к установке времени. В этот момент, четыре кнопки навигации становятся активными. Нажатие на кнопку MODE включит следующий экран. Любая другая кнопка запускает процесс регистрации.

Экран запуска

Алгоритм поиска 1-Wire устройств является предопределенным и повторяемым, но порядок, в котором обнаружены устройства не является интуитивно понятным. При нажатии на кнопку MODE, можно перейти к экрану порядкового списка датчиков. Числа в нижней строке представляют порядок, в котором были обнаружены устройства на 1-Wire шине. Используя комбинацию из кнопок UP и DOWN, мы можем изменить этот порядок в более содержательный вид. Кнопками UP и DOWN можно переместить выбранный элемент в списке. Для изменения выбранного элемента используйте кнопку SELECT.

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

Все температурные датчики считываются, и их выходные данные передаются по последовательному порту через определенные промежутки времени. Этот интервал может быть установлен в любом промежутке от 5 до 9999 секунд (чуть более 2-х часов и 45 минут). Чтобы быстро изменить значение интервала, нажмите и удерживайте кнопку UP или DOWN. Отпустите кнопку, чтобы вернуться к малому интервалу изменения. Выбранное значение будет использоваться для всех последующих сеансов регистрации пока не будут изменены, даже если питание устройства выключено. Нажатие кнопки MODE сохраняет выбранное значение, далее отображается экран исходных данных устройства.

Установка интервала опроса датчиков

Следующий экран отображает идентификационные данные для 1-Wire устройств. Дисплей показывает порядковый номер и первоначальный номер датчика на 1-Wire шине в первой строке. Рядом отображается значение измеренной температуры в шестнадцатиричном виде. Это значение преобразуется программой в температуру по Цельсию, которая отображается и регистрируется. Для получения более подробной информации о процедуре преобразования температуры, обратитесь к описанию DS18x20. Во второй строке отображается тип устройства, либо DS18B20 или DS18S20, и 6-байтовый номер идентификатора устройства. 6-байтный идентификационный номер является уникальным для каждого Dallas Semiconductor 1-Wire устройства. Управляя кнопками ВВЕРХ или ВНИЗ можно получить информацию о всех присутствующих 1-Wire устройствах.

Следующее нажатие кнопки MODE позволяет регулировать уровень подсветки ЖК-дисплея. Могут быть выбраны значения в диапазоне от 0 до 255, если 0 то подсветка не активна, если 255 горит в полную яркость. Это значение также сохраняется, когда устройство выключено. Контраст ЖК-дисплея регулируется поворотом небольшого потенциометра, расположенного на печатной плате между кнопками SELECT и DOWN. Если RTC присутствует, нажатие на кнопку MODE позволяет перейти к настройке времени. Если RTC не установлены, нажатие на MODE возвращает экран запуска.

Следующий экран - установка времени RTC. Изначально показано текущее значение часов RTC. Нажатие кнопки MODE в этом состоянии вернет вас на экран запуска, чтобы начать регистрацию. Нажатие кнопки SELECT позволяет передвигаться по элементам настройки - год, месяц, день, час, минуты и секунды. Нажатие кнопки Select еще раз позволит вам сохранить отображаемое время на RTC, или нажав обе кнопки UP и DOWN одновременно. Нажатие кнопки MODE во время установки времени отменяет все изменения и возвращает к текущему отображению времени.

Режим регистрации активируется нажатием любой кнопки, кроме режима во время экрана запуска. С левой стороны экрана отображаются один или два номера устройства и показания температуры в градусах Цельсия. Эти показания являются результатом предыдущего сканирования. Время последнего сканирования отображается в правом верхнем углу, а время до следующего чтения отображается в нижнем правом углу. В этом режиме кнопками UP или DOWN можно просматривать данные всех имеющихся датчиков. Данные отображаются в порядке, определенным порядковым списком.

Каждый раз, когда отсчет достигнет нуля, выполняется другое прочтение каждого термометра на 1-проводной шине. В дополнение к отображению этих данных на ЖК-дисплее, запись каждого чтения передается через последовательный порт. Последовательное соединение происходит на скорости 19200 бод, 8 бит данных, без проверки четности и 1 стоп-бит. Каждая запись температуры состоит из временного штампа, когда принимались данные, а затем через точку с запятой(;), серии разделенных значений температуры. Значения упорядочены слева направо в том же порядке, установленном на экране установки порядкового списка.

Терминальная программа

Вы можете использовать практически любую терминальную программу, например Hyperterminal или популярный бесплатный пакет  Br@y++ Terminal, для просмотра и сохранения серийных данных. В архиве включен пример программы на Java, чтобы продемонстрировать, как разобрать и построить график температурных данных из сохраненного файла.


Архив для статьи "Регистратор температуры на Atmega168"
Описание: Исходный код программы, схемы, макет печатной платы Eagle
Размер файла: 1.99 MB Количество загрузок: 793 Скачать

Комментарии  

0 #1 borys 20.02.2017 19:26
Компиляция в AVRStudio проходит, модель в Протеусе ра-
ботает.
Сообщить модератору