Главная » Статьи » АВТО & МОТО |
АвтоТермометр -55+125С Attiny2313 DS18B20
Недавно занимался сборкой компьютера с полностью
пассивным охлаждением. Чтобы было удобно контролировать температуру
процессора, нужно было по быстрому собрать термометр. Всяческие
программы типа «Everest», «Aida», и прочие мне не подходили по одной
простой причине: хотелось контролировать температуру даже при
выключенном мониторе. Или даже при полностью отключенном мониторе. Было
решено собрать термометр на основе цифрового датчика DS18B20, дешёвого
микроконтроллера AVR, и семисегментного индикатора. Сначала я хотел
повторить схему термометра по одному из вариантов, предложенных в
интернете. Но после анализа схем, размещённых в интернете, я пришёл к
выводу, что придётся изобретать свой «велосипед». Конструкции, представленные в интернете, имели ряд недостатков, а именно: * низкая скорость динамической индикации (50...100 герц), изза которой становится некомфортно смотреть на индикатор, если быстро бросить на него взгляд, кажется что цифры «шевелятся»; * не все конструкции адекватно измеряли весь диапазон температур (от -55 до +125), попадались например конструкции, не измеряющие температуру ниже нуля градусов, или некорректно измеряющие температуру выше 100 градусов; * отсутствовала проверка контрольной суммы (CRC); * общие выводы сегментов подключались к одной ножке микроконтроллера без ключевых транзисторов, ПЕРЕГРУЖАЯ ПОРТЫ МИКРОКОНТРОЛЛЕРА. При перегрузке портов МК, яркость свечения индикатора может снизиться, а также можно пожечь ножки микроконтроллера. Несколько лет назад я собирал термометр на ATtiny2313+DS18B20 по схеме с интернета. Схема была без ключевых транзисторов. При температуре 18 градусов, цифра «1» светилась ярко, а цифра «8» светилась заметно тусклее, надеюсь всем понятно почему всё происходит именно так. Поэтому я пообещал себе в будущем не перегружать ножки МК. Вот кстати фотка того термометра, собранного по схеме из инета, думаю что в комментариях не нуждается: Также хотелось сделать несколько доработок: * вывести на индикатор символ градуса (десятые доли градуса мне были не так критичны); * затактировать микроконтроллер от внешнего кварца, так как протокол «1-Wire», который использует датчик, критичен к формированию временнЫх интервалов (тайм-слотов), поэтому молиться о стабильности встроенного тактового генератора мне не хотелось; * ввести в программу проверку контрольной суммы, при несовпадении контрольной суммы выводить на индикатор: «Crc»; * добавить в схему диод (для защиты схемы от переполюсовки питания); * при подаче питания в течении 1 секунды засветить все сегменты (так называемый тест сегментов). Проект я написал в среде AVR Studio 5, функции работы с датчиком нашёл где-то в инете, а остальное переписал на свой лад, обильно снабдив комментраиями исходный код. В конце статьи есть ссылка на скачивание прошивки и исходника. Семисегментный индикатор я использовал на 3 знакоместа, сегменты с общим анодом. Также в архиве (в конце статьи) есть прошивки под индикатор с общим катодом. Общие выводы сегментов я подключил сразу к двум выводам МК, соединённым параллельно. Таким образом, каждый общий вывод сегментного индикатора использует 2 ножки МК для повышения нагрузочной способности выводов. Микроконтроллер я использовал ATtiny2313A (также можно использовать ATtiny2313 или ATtiny2313L), задействовал практически все свободные ножки (за исключением ножки сброса). Если собирать термометр на ATmega8, то можно соединять параллельно по 3 или по 4 ножки для повышения нагрузочной способности портов. Схема девайса: Прилагаю фотографии собранного термометра. Корпуса покачто нет, так как термометр будет встраиваться в корпус ПК. Индикация. Не подключен датчик температуры, либо короткое замыкание на линии данных: Ошибка контрольной суммы (CRC): Подключен датчик температуры, температура от -55 до -10 градусов: Подключен датчик температуры, температура от -9 до -1 градуса: Подключен датчик температуры, температура от 0 до 9 градусов: Подключен датчик температуры, температура от 10 до 99 градусов: Подключен датчик температуры, температура от 100 до 125 градусов: Частота динамической индикации — несколько килогерц, благодаря чему мерцание на глаз не заметно даже при броском взгляде на индикатор. Для желающих повторить конструкцию я скомпилировал несколько прошивок под разные кварцы: 4 МГц, 8 МГц, 10 МГц, 12 МГц, 16 МГц. Также сделал прошивки под индикаторы с общим анодом (ОА), и с общим катодом (ОК). Все прошивки в архиве (см. ниже). г.Вельск, Апрель 2014г. P.S. Первоначально материал разместил тут. Частота динамической индикации - несколько килогерц, благодаря чему мерцание на глаз не заметно даже при броском взгляде на индикатор. Для желающих повторить конструкцию я скомпилировал несколько прошивок под разные кварцы: 4 МГц, 8 МГц, 10 МГц, 12 МГц, 16 МГц. Также сделал прошивки под индикаторы с общим анодом (ОА), и с общим катодом (ОК). Все прошивки в архиве (см. ниже). UPD Обновил прошивку. Мелкие исправления, мелкие плюшечки. Из основного — stdint типы данных, гибкая настройка ног под сегменты. Все изменения описаны в шапке исходника. Схема (формат PNG) и (формат SPLAN7, в архиве) Печатка (формат SL5, в архиве) Прошивки (формат HEX) и фузы (формат JPG) (в архиве) и исходник (среда AVR STUDIO 5, в архиве) Даташит на ATtiny2313 Описание работы с датчиком DS18B20 на русском Даташит на семисегментный индикатор UPD. Обновил прошивку. Мелкие исправления, мелкие плюшечки. Из основного — stdint типы данных, гибкая настройка ног под сегменты. Все изменения описаны в шапке исходника. В связи с большим наплывом желающих выкинуть кварц из схемы, и не читающих зачем он в схеме нужен, отключил комментарии. Источник: http://we.easyelectronics.ru/AVR/termometr-na-attiny2313ds18b20-dorabotannyy.html | |
Просмотров: 4867 | | |
Всего комментариев: 0 | |