Описанная здесь система представляет собой универсальный двухканальный термометр. Работает в диапазоне температур от -50,0 до +99,9 градуса. Система была разработана для измерения температуры в доме и на улице, но вы можете найти множество других применений. После изменения программного обеспечения устройство может действовать как простой термостат или более сложный регулятор температуры. Система была построена на основе популярного датчика DS18B20 и микроконтроллера ATTiny2313 , что значительно упростило его конструкцию и уменьшило его размеры. Термометр собран на SMD компонентах, так что почти все элементы поместились под обычный трехзначный дисплей высотой 15 мм. Простота схемы обусловлена используемым датчиком температуры DS18B20 . Это типичный 12-разрядный цифровой термометр, способный работать в диапазоне от -55 до +125 градусов. Время обработки (преобразования) температуры в двоичное значение (число) длится не более 750 мс. Показания температуры являются полностью цифровыми, а связь с микроконтроллером обеспечивается популярной шиной 1-Wire. Монтаж платы Расположение элементов показано на рис.3, а печатная плата в формате Sprint-Layout 6.0 находится в архиве. При изготовлении плату зеркалить. Сборка не сложная, но требует небольшой практики пайки SMD. Описание программы Программа управления термометром написана на BASCOM AVR . Он занимает около 70% доступной памяти микроконтроллера. Работа программы не сложна и, в двух словах, выглядит так: все время "процесс" вращается в бесконечном цикле Do Loop, ожидая установки одного из временных флагов в прерывании. Timer0 отвечает за правильное время. Каждые 4 мс запускается процедура мультиплексирования дисплея, в которой в нужный момент выскакивает показание температуры.
Первоначально значение 131 загружается в счетчик таймера, который дает прерывание после 125 импульсов (256-131). Таймер работает с аппаратным делителем 256, который на тактовой частоте 8 МГц дает прерывание каждые 4 мс. Сразу после прерывания устанавливается флаг F4ms. Переменные Dziel (1) и Dziel (2) являются делителями частоты. Первый отвечает за деление на 25, и после переполнения счетчика устанавливается флаг F100ms (это происходит каждые 100 мс). Вторая переменная является счетчиком до 10 и гарантирует, что флаг F1s устанавливается каждые 1 с. Основной цикл показан ниже:
Операция очень проста и зависит только от флагов: F4ms и F100ms. Большую часть времени процессор вращается в бесконечном цикле Do Loop, ожидая установки одного из флагов. Каждые 4 мс вызывается процедура, поддерживающая отображение и измерение температуры, а каждые 100 мс считываются состояния клавиш. В базовой версии программы простое управление с клавиатуры достаточно для непосредственного чтения состояния входных контактов. Нажатие S1 вызывает считывание второго датчика, тогда как нажатие S2 вызывает считывание первого датчика. Процедура отображения и измерения температуры показана ниже:
Действие состоит из 5 шагов в зависимости от состояния вспомогательной переменной Mux. Она принимает значения от 0 до 4 и циклически изменяется при следующем вызове процедуры. Отрицательное значение переменной Minus копируется в управляющий выход (Port D.3). Он отвечает за отображение отрицательных температур и, следовательно, на порте D.3 микроконтроллера появляется низкий уровень, когда измеренная температура отрицательна. Затем, благодаря циклу for, переменная Wysw, содержащая отображаемое значение, делится на три отдельные цифры. Затем они преобразуются в коды светодиодного дисплея с помощью команды Lookup (с использованием таблицы преобразования). После выхода из цикла for получается массив W (n) с закодированными значениями, где n = 1 ... 3 индексирует последующие символы дисплея. Остальная часть процедуры зависит от переменной Mux. При значении от 0 до 2 последовательные цифры подсвечиваются выключением предыдущего анода, отображением значения следующего символа на Portb и включением соответствующего анода. Исключением здесь является символ W (2), где дополнительная операция (А & B11011111) обеспечивает добавление десятичной точки после второго символа. Для значения Mux = 3 вызывается процедура измерения температуры, а состояние Mux = 4 - это фаза ожидания спокойного завершения измерения температуры. Процедура измерения температуры показана ниже:
Эта процедура вызывается примерно каждые 20 мс, однако измерение выполняется каждые 1 с благодаря проверке состояния флага F1s. Существует типичное 1-Wire обслуживание для случая только одного объекта на шине. Все команды 1-Wire вызываются параметром Kanal, который определяет, с какой шины будет считываться температура (pind.0 или pind.1). После сброса отправляется инструкция об обходе проверки ПЗУ и отправляется заказ на считывание регистра DS18B20 . Затем два байта температуры считываются в переменную T (целое число), определяется температурный знак и выполняются простые вычисления. В результате переменная T принимает форму температуры в градусах, умноженных на 10 (например, от 13 до 1,3 градусов). В самом конце посылается команда для преобразования температуры, чтобы получить ее текущее значение в следующем чтении. Система может быть преобразована в термостат без особых усилий. Здесь мы отказываемся от двухканального измерения температуры и отрицательных температур за счет исключения управления выхода. К управляющему выходу (Portd.3) вы можете подключить оптотриак и триак, управляющий любым приемником переменного тока, или вы можете подключить МОП-транзистор, управляющий приемником постоянного тока. В основном цикле вам нужно будет внести изменения, показанные ниже: Такой код требует, чтобы Tu, H и L были объявлены как Integer, а Ust как Bit, так и Autoret как Byte в начале программы. Кроме того, переменная Tu должна иметь начальное значение, поскольку оно является значением заданной температуры. В процедуре отображения и измерения удалите линейку, отвечающую за сигнализацию отрицательных температур, поскольку portd.3 теперь служит выходом управления. Представленное решение не является идеальным, оно не ограничено установленными значениями и не может сохранить настройки в памяти EEPROM, но во многих ситуациях оно будет отличным. Схема может успешно работать в качестве газонного термостата, если значение Tu по умолчанию установлено на 40 градусов. Фьюзы Фьюзы микроконтроллера должны быть настроены на работу с внутренним 8-МГц RC-генератором, который на практике отключит только аппаратный делитель (бит CKDIV). Настройки fusebit приведены ниже:
Материал взят с сайта http://mirley.net
| |
[ Скачать файлы (14.4 Kb) ]   | |
Просмотров: 1994 | | 08.12.2019 |
Всего комментариев: 0 | |