Автономный цифровой термометр для различных целей
реклама
В цифровом термометре будут применяться всего три активных элемента: Микроконтроллер, индикатор, микросхема термометра.
В качестве микроконтроллера я использовал AtTiny2313. Я его выбрал потому, что полностью перешёл с МК PIC на AVR, что стоит порядка $1 оптом и $2, что у меня их было 4 штуки. Так же у него имеется встроенный генератор. Принципе подойдёт любой МК от AVR, имеющий не менее 13 линий ввода/вывода, только нужно будет подправить прошивку.
В качестве индикатора я выбрал индикатор марки Kingbright BA56-12EWA. Он стал моим выбором потому, что имеет 3 цифры на одном индикаторе, с общим катодом, соответствующие «чёрточки» цифр соединены между собой. Тут то же в принципе подойдёт любой 3х или 2х значный индикатор. Так же придётся подправить прошивку. В случае использования 2х значного индикатора у вас не будет возможности измерять десятые доли температуры.
В качестве микросхемы термометра будет применять микросхема DS1820 (она же DS18S20. Без разницы). Других вариантов я не предусматривал. Эта микросхема использует протокол однопроводной передачи 1-Wire. Схем её подключения к ПЭВМ достаточно в Интернете.
ds18s20
Так же нам понадобится любой программатор для AVR. Я программировал как Algorithm Builder овским программатором так и PonyProg овским. Первый программатор прост до нельзя, второй – удобнее. Я пользуюсь вторым. Схемы программаторов в интернете так же очень много.
Схемы как таковую перед разработкой термометра я не рисовал. Но вот она примерно такая:
схема
Это только пример схемы. Опять повторю, что во время разработки схема не рисовалась. На самом деле я всё делал сразу на плату:
плата
Плату в Sprint Layout 4.0 можно скачать из файлов.
Поясню. Пятачки со штриховкой – это место для подпайки пяти проводов от программатора. Attiny2313 я использовал в SOIC корпусе (мне так удобнее). У меня D181S20 подключается к 7-ой ножке МК. Остальные два вывода – на всякий случай, если будет использоваться до 4-х DS18S20 (На одну шину можно подключить достаточно много термометров. Мне нужен был всего один.) Так же можно измерять отрицательную температуру. Для этого используется ещё один светодиод. На последней прошивке (это когда появилось измерение десятичной доли температуры) я не измерял отрицательную температуру, так что гарантировать не буду.
Про питание: если МК спокойно заводится и работает на 2.5 вольт, то DS18S20 – завышает температуру на 6-12 градусов. Это связано со схемотехникой DS12S20. Так что питание – стабилизированные 5В.
Прошивка с исходниками на Algorithm Builder лежит в файлах
Скажу сразу. Учиться по этой прошивке не стоит. Так как последняя версия не оптимизировалась (почему то не хотелся умножать регистр на константу, так же сложный алгоритм деления). Вообще это ваше дело. Я просто очень долго мучался с десятой долей температуры и сделал всё через заднее место, но зато работает, хоть и занижает температуру на 0.1 градусов. Это глюк прошивки. Кстати, микроконтроллер работает на внутреннем генераторе на частоте 4мгц. В ponyprog в FuseBits ах (это где такой замочек нарисован) должны быть установлены галочки на: sut1, cksel3, cksel2 ,cksel0. Тогда он должен запускаться без проблем. Так же в файлах лежит прошивка для теста индикатора. Вначале загораются символы слево направо. Потом на portb поочерёдно выставляются единицы на выходах 0, 1, 2 ... 7. И всё потом повторяется.
Размеры так же можно уменьшить до габаритов самого индикатора применив двухстороннюю плату, но мне просто не хотелось.
Для продвинутых в микроконтроллерах:
Как уже говорилось, мк работает на 4мгц и для связи с термометром применяется 1-Wire протокол. Этот протокол основан на временных задержках, так что если у вас будет иная частота извольте подправить задержки. В исходнике есть вершины блока на разные временные задержки, которые сводяться к другой вершине блока с циклом, у которого время одного цикла - 12 тактов генератора или 3мкс (4мгц = 0.25мкс один так). Увеличить задержку можно двумя путями:
1) Заменить значения которые записываются в TempL перед циклом на необходимые.
2) Добавить 12 NOP ов в цикл.
Вывод на индикатор производится так:
Для упрощения схемы применялся 3х значный идикатор, у которого соответсвующие аноды цифр соединены, а котоды - для каждой цифры свой. Принцип работы такой. Выставляем на катодах нашу цатодах нашу цифру, и ставим единицу на необходимый анод. Загориться цифра. Если поставить единицу ещё на один анод, то загорится ещё одна такая же цифра. У меня реализовано так: на каждую цифру выделяется некоторое колличество времени (16мкс) реализованое на прерываниях по Timer0 с делителем 64. После прошествия этого времени загорается другая цифра. Потом третья, а потом опять первая. И т.д. Преимущества видны на лицо - простота и малое энерго потребление посравнению с тем, если бы каждая цифра была бы подключена к МК по отдельности. Сами цифры, а точнее значения выводимые в PORTB, храняться в памяти программы и поэтому настоятельно не рекомендую менять подключения от МК к индикатору (ну если поменяете, сами будете набирать эти цифры). Хочу добавить, что вовремя приёма/пересылки байта по 1-Wire прерывания отключаются. Это сделано для того, что бы не было глюков в приёме/передачи. Если не отключать - глюки будут и такие, что мама не горюй. Даже частота генератора в 8мгц не помогала.
Про микросхему термометра. В магазине мне попалась DS1820. от DS18S20 отличается тем, что время преобразования температуры у первой - 500мс, у второй - 750мс. Так что если у вас будет DS18S20, извольте подправить прошивку. Там задержку нужно увеличить с 600мс до 900мс - 1с. Средняя ножка микросхемы подключена к Pind.3 (она же 7 лапа Attiny2313). По даташиту эта микросхема может работь и без дополнительного питания. Для этого нужно ножку питания припаять к земле. Я не проверял.
Что планируется в будущем - да накупить штук пять таких термометров подключить это к какой-нить Tiny12 или tiny15 и выводить на нокиевский дисплей.
И фотки:
реклама
Лента материалов
Соблюдение Правил конференции строго обязательно!
Флуд, флейм и оффтоп преследуются по всей строгости закона!
Комментарии, содержащие оскорбления, нецензурные выражения (в т.ч. замаскированный мат), экстремистские высказывания, рекламу и спам, удаляются независимо от содержимого, а к их авторам могут применяться меры вплоть до запрета написания комментариев и, в случае написания комментария через социальные сети, жалобы в администрацию данной сети.
Сейчас обсуждают