Часы, термометр, барометр, гигрометр в одном флаконе. « схемопедия
Очередной проект продвинутого показометра, включающий в себя измерение температуры, атмосферного давления, влажности воздуха и отсчет времени с календарем. В общем в него включены все мои наработки по работе с датчиками за все время увлечения микроконтроллерами, да и все накупленное добро нужно куда-то применить 🙂 В итоге должен получится усовершенствованный логгер температуры, первую версию которого я забросил. Ну это позже, а сейчас приведу описание этой платы и тестовый код для проверки работоспособности напичканных туда датчиков и микросхем.Схема устройства ниже, конвертер USB-UART на FT232RL показан схемотически, схема в нем стандартная и уже описана здесь.
Сердцем схемы служит микроконтроллер ATMega64 фирмы Atmel, работающий от внешнего кварца на 16 МГц. Отсчитыванием времени занимается микросхема часов реального времени DS1307, я уже имел с ней дело и поэтому пошел по проверенному пути.
Так как в дальнейшем планируется превратить устройство в логгер, предусмотрено место для подключения внешней EEPROM памяти 24LCxx.
Для сопряжения 3х вольтового датчика давления использована зарекомендовавшая себя схема согласования на полевых тарнзисторах.
Все элементы (за исключением двух резисторов) находятся на верхнем слое, на нижнем разведены дороги которые не уместились на верху. Интересного там мало поэтому фото не привожу.
Чтобы иметь возможность напрямую подключать утсройство к компьютеру (к примеру, для того чтобы скинуть накопленные данные) на плате установлен преобразователь USB-UART на микросхеме FT232RL.
Для подключения внешних датчиков, навсякий случай предусмотрены выводы с портов PA0-PA3. А также выведены контакты SPI-интерфейса, на случай если захочется подключить NRF24L01 и организовать радиоканал.
Тестовый код выводит на экран время и дату с часов DS1307, с возможностью ручной установки (см. видео). На вторую строку выводится информация с датчика влажности DHT11, на третью – с датчика давления BMP085. Как видите китаец DHT не уступает по показаниям температуры своему немецкому собрату BMP085 от Bosh. Кстати, китаец тоже умеет выдавать показания с десятыми долями градуса, позже добавлю в код эту функцию.
И напоследок видео, демонстрирующее возможность ручной установки даты и времени.
Схемма в Proteus
Печатная плата в Dip Trace
Исходник тестовой прошивки
Прошивка
Термометр на атмега8 схема
Более четырех лет назад я собрал простые часы на ATmega8. Все это время они исправно работали и приносили пользу, особенно в темнее время суток. Но мне показалось, что такой микроконтроллер, как ATmega8 может делать намного больше, чем просто подсчитывать колебания кварца и выводить их в виде времени. Захотел, чтобы новые часы информировали не только о текущем времени, но и о температуре в помещении, где они находятся. Задался поиском подобных схем в интернете, отталкиваясь от уже имеющихся комплектующих, а именно: микроконтроллер ATmega8 и светодиодный индикатор с общим катодом. Отличное решение нашлось на этой странице, которое предоставил пользователь Soir, за что ему большая благодарность.
Поиск данных по Вашему запросу:
Схемы, справочники, даташиты:
Прайс-листы, цены:
Обсуждения, статьи, мануалы:
Дождитесь окончания поиска во всех базах.
По завершению появится ссылка для доступа к найденным материалам. ПОСМОТРИТЕ ВИДЕО ПО ТЕМЕ: Термометр на Atmega8
Термометр на ATMega8 и 2-4 датчика DS18B20
Установка показаний времени на электронных часах — занятие, не отнимающее много времени, но, тем не менее, хотелось бы обойтись без этой процедуры. Функции часов:. Принцип работы часов.
Основу устройства составляет микроконтроллер AtmegaPI, работающий под управлением программы, которая реализует все вышеупомянутые функции часов. Звуковой излучатель BF1 служит для подачи сигнала будильника, а светодиоды HL1 и HL2 показывают процесс поиска информации со спутника.
Кнопки SB1-SB3 служат для установки часового пояса, включения режима «Секундомер» и установки времени срабатывания будильника. Рисунок 2 — Принципиальная электрическая схема часов. Этот процесс сопровождается коротким звуковым сигналом и появлением бегущей «змейки» в разрядах индикатора. Для достоверности информационная строка принимается пять раз, после чего микроконтроллер запускает счётчик секунд, «змейка» исчезает и начинается отображение текущего времени.
Последующая синхронизация времени часов с временем спутника осуществляется каждый час и сопровождается кратковременным свечением светодиодов «SAT» и «GPS». Процесс синхронизации происходит в фоновом режиме и не влияет на ход часов. Если по каким-то причинам фоновая синхронизация времени не произошла, часы не остановятся, но точность показаний будет хуже.
Назначение кнопок управления. Кнопка » UTC «. Как уже упоминалось, при первичной синхронизации часы принимают время нулевого часового пояса.
При нажатии этой кнопки на индикаторе отобразится «U — — -«, что значит переход в меню выбора часового пояса, а при отпускании — отобразится «U 3″ часовой пояс установленный по умолчанию. Далее, нажатием этой кнопки устанавливают необходимый часовой пояс в диапазоне минус 12 плюс Кнопка » Alarm clock » или «Будильник». При нажатии этой кнопки произойдёт переход в меню установки будильника, при этом на индикаторе отобразится «A-.
После отпускания, если будильник выключен, на индикаторе появятся прочерки, а если будильник был включен, то отобразится время его срабатывания. Чтобы полностью выключить или включить будильник, нужно нажать кнопку «UTC», находясь в меню установки будильника. Последующие нажатия кнопки «Alarm clock» и нажатия кнопки «Sec» в меню установки будильника позволяют установить будильник на нужное время, часы и минуты, соответственно. Установка возможна только «вперёд.
При достижении числа «24» в часах и «60» в минутах происходит сброс показаний в «0» часов и минут соответственно. При срабатывании будильника звуковой сигнал можно отключить до следующего срабатывания, которое произойдёт через сутки, нажатием на любую из трёх кнопок. Выход из меню установки будильника происходит автоматически, через 5 секунд после последнего нажатия кнопки.
Кнопка » Sec » или «Секундомер». Нажатие данной кнопки переведёт часы в режим секундомера, при этом на индикаторе отобразится «C-. Максимальное время — При превышении этого значения произойдёт автоматический переход в режим часов. До одного часа в 1 и 2 разрядах отображаются минуты секундомера, а в 3 и 4 разрядах отображаются секунды, после часа — часы и минуты. Выход из режима секундомера осуществляется нажатием на любую из трёх кнопок.
Принцип работы термометра. Основу термометра составляет микроконтроллер ATTINY, работающий под управлением программы, которая реализует все вышеупомянутые функции термометра. Датчиком температуры служит микросхема DS18B Значение измеряемой температуры выводится на трёхразрядный светодиодный индикатор.
Рисунок 3 — Принципиальная электрическая схема термометра. При подаче напряжения питания микроконтроллер ATTINY в течении одной секунды тестирует индикатор, засвечивая все его сегменты, после чего переходит к проверке исправности датчика и линии связи с датчиком. При обрыве или коротком замыкании линии связи на индикаторе отображаются прочерки «».
Далее производится проверка контрольной суммы информации, принимаемой с датчика. При ошибке контрольной суммы CRC на индикаторе появится сообщение «crc». Если все проверки завершены успешно, то микроконтроллер перейдёт к чтению информации с датчика температуры и отправит измеренное значение температуры на индикатор. Каких либо органов управления термометр не имеет и в настройке не нуждается, Диод VD1 предназначен для защиты от переполюсовки напряжения питания.
Конструкция устройства и применяемые радиоэлементы. В связи с единственностью изготовления печатные платы для монтажа радиоэлементов не разрабатывались. Все радиоэлементы установлены на макетных платах и соединены между собою собственными выводами и отрезками провода типа МГТФ при помощи пайки.
Считаю, что разработка и изготовление печатных плат устройств категории «Для себя» — это лишняя трата времени. Платы установлены на эбонитовых стоечках на дно корпуса из органического стекла толщиной 5 мм и крепятся винтами М2. Рисунок 4 — Макетная плата. Рисунок 5 — Вид со стороны монтажа. Рисунок 6 — Вид со стороны радиоэлементов. Рисунок 7 — Индикаторы. Рисунок 8 — Плата кнопок и модуля GPS.
Рисунок 9 — Вид со стороны гнезда питания. Плата кнопок управления использована готовая от отслужившего свой век электронного оборудования. Применены индикаторы красного свечения с общим анодом размером символа 0. Без внешней антенны приём информации со спутника не происходит, хотя, по утверждению разработчика часов, в модуле имеется внутренняя антенна. Звукоизлучатель BF1 со встроенным генератором, напряжение питания на устройство подаётся через гнездо типа micro USB, расположенное на отдельной покупной плате.
Все вышеупомянутые комплектующие радиоэлементы, макетные платы, плата с гнездом питания приобретены в интернет-магазине Aliexpress. Конкретных ссылок на товар не даю, ибо они не долговечны, да и цена у разных продавцов отличается.
Остальные радиоэлементы, резисторы, конденсаторы, диоды, светодиоды, транзисторы, кварцевые резонаторы в пояснениях не нуждаются. Передняя часть корпуса изготовлена из органического стекла оранжевого цвета.
Для уменьшения яркости индикаторов добавлен светофильтр, вырезанный из пластиковой бутылки. Рисунок 11 — Готовое устройство. Рисунок 12 — Элементы корпуса. Рисунок 13 — Светофильтр из пивной бутылки. Рисунок 14 — Задняя стенка устройства. Также в источник питания входит устройство защиты от превышения напряжения. Радиоэлементы платы защиты смонтированы на макетной плате и помещены во всем знакомую упаковку. Рисунок 15 — Принципиальная электрическая схема устройства защиты.
Рисунок 16 — Источник питания устройства. Рисунок 17 — Устройство защиты от превышения напряжения. Рисунок 18 — Ток потребления устройства. Датчик температуры — микросхема DS18B20, с подпаянным к её выводам трёхпроводным кабелем, помещена в стеклянную трубку, заполненную белым герметиком, после высыхания которого обеспечивается защита микросхемы от атмосферных осадков.
Датчик закреплён при помощи магнита на отливе за окном. Другой конец кабеля снабжён трёхконтактным разъёмом типа TRS jack 3,5мм, который вставляется в соответствующее гнездо на задней стенке устройства. Рисунок 20 — Расположение датчика температуры за окном. Рисунок 21 — Подключение датчика температуры.
Рисунок 22 — Расположение устройства в комнате. Рисунок 23 — Расположение устройства в комнате. Наладка правильно собранных схем часов и термометра не потребовалась. Оба устройства заработали сразу после подачи напряжения питания. Были опасения, что в предполагаемом месте размещения в квартире 2 метра от оконного стекла и 0,5 метра в сторону приём информации со спутника будет затруднён, но всё обошлось.
После подачи напряжения питания «змейка» на индикаторе наблюдалась всего несколько секунд, после чего часы перешли в режим отображения текущего времени, что и делают в течение последних восьми месяцев с высокой точностью и без моего вмешательства. Управляющая программа для микроконтроллера часов AtmegaPI. Резервные ссылки. Основное меню. Главная Контакты.
Китайский ночник Мне каждый вечер зажигают свечи Десять рабочих советов для портретных фотографий Как фотографировать на зимних улицах Простые электронные часы Как сфотографировать ёлку. Обновлено: 14 февраля Опубликовано: 27 января Автор: Юрий Просмотров: Принцип работы часов Основу устройства составляет микроконтроллер AtmegaPI, работающий под управлением программы, которая реализует все вышеупомянутые функции часов. Назначение кнопок управления Кнопка » UTC «. Принцип работы термометра Основу термометра составляет микроконтроллер ATTINY, работающий под управлением программы, которая реализует все вышеупомянутые функции термометра.
Рисунок 3 — Принципиальная электрическая схема термометра При подаче напряжения питания микроконтроллер ATTINY в течении одной секунды тестирует индикатор, засвечивая все его сегменты, после чего переходит к проверке исправности датчика и линии связи с датчиком. Конструкция устройства и применяемые радиоэлементы В связи с единственностью изготовления печатные платы для монтажа радиоэлементов не разрабатывались. Назад Вперёд. Часы Термометр. Умный поиск.
Сдвоенный цифровой термометр на ATmega8 и DS18B20
На протяжении тысячелетий люди пытались предсказать погоду. В настоящее время становятся все более популярными метеорологические станции, позволяющие спрогнозировать погоду на следующий день. Неотъемлемой функцией даже самой простой метеостанции является измерение температуры и влажности. Эти параметры также очень важны и в других ситуациях, например, при хранении продуктов питания. Схема, приведенная в данной статье, представляет собой USB приставку к компьютеру, позволяющая измерять температуру и влажность воздуха. Устройство собрано на миниатюрной печатной плате с преобладанием элементов поверхностного монтажа SMD , благодаря чему оно может быть использовано как адаптер для ноутбука или настольного компьютера.
За основу я взял контроллер AtMega8, что оказалось не совсем правильным решением, так как Выводы для подключения реле (реле на схеме нет).
Цифровой термометр на DS1820
Привет всем читателям и почитателям сайта Радиосхемы! Немного предыстории: вечером очень плохо видно показания уличного термометра, чтобы разглядеть положение стрелки, необходимо довольно долго вглядываться и иной раз пользоваться фонариком. Спустя определённое время мне это надоело и решил заменить прибор на электронный, который бы отображал информацию на светодиодных семи сегментных индикаторах. После чего бы не пришлось даже подходить к окну, чтоб узнать уличную температуру. Так как индикацию хорошо видно более чем с трёх метров. Схем данного устройства в сети полно , но я, как человек относящийся к семейству Радиолюбителей, решил собрать свою. Так как с недавних пор пытаюсь осваивать микроконтроллеры, то выбор пал на широко распространённый и дешёвый МК Atmega8.
Любые схемы
Более четырех лет назад я собрал простые часы на ATmega8. Все это время они исправно работали и приносили пользу, особенно в темнее время суток. Но мне показалось, что такой микроконтроллер, как ATmega8 может делать намного больше, чем просто подсчитывать колебания кварца и выводить их в виде времени. Захотел, чтобы новые часы информировали не только о текущем времени, но и о температуре в помещении, где они находятся.
Категория: Таймеры, часы, счётчики , Для дома.
Термометр на ATmega8 и датчике DS18B20
Отключить звук досрочно можно нажатием на любую из кнопок. При отпускании кнопок возобновляется автоматическая смена показаний. При включении питания часы в основном режиме. По-очереди доступны для установки:. Группа CLOC :.
ЧАСЫ-ТЕРМОМЕТР НА МИКРОКОНТРОЛЛЕРЕ ATMEGA8
Задача такова: сделать устройство, к которому подключить 3 реле и 3 термометра. На основании показаний с термометра необходимо включать или отключать реле. То есть, в устройстве должен быть дисплей с меню и кнопки. И так приступим. За основу я взял контроллер AtMega8, что оказалось не совсем правильным решением, так как там всего 4 кБ памяти для программы.
Простота схемы обусловлена используемым датчиком температуры. Это 12 -битный цифровой термометр, который может работать в.
Часы-Термометр с большими цифрами (LCD 1602 + Atmega8)
Здравствуйте уважаемые друзья и гости сайта! Представляю на ваш суд вторую конкурсную работу. Автор конструкции — Григорьев Илья Сергеевич.
Цифровой термометр на ATMega8
Схема барометра и термометра изображена на рис. Необходимые для работы датчика тактовые импульсы частотой Гц вырабатывает кварцевый генератор на элементах микросхемы DD1. В принципе, эти импульсы мог бы формировать и микроконтроллер DD2 с помощью одного из имеющихся в нем таймеров. Но это потребовало бы усложнения программы.
Логин или эл.
Термометр на базе ATMega16
Предлагаю свой вариант цифрового термометра с двумя датчиками температуры. Устройство используется в домашних целях, один из его датчиков устанавливается на улице, другой в помещении. Индикация значений температуры осуществляется двумя сдвоенными светодиодными 7-сегментными индикаторами с общим катодом. Знак «минус» индицируется отдельным светодиодом. Чтобы не было заморочек со считыванием 64 разрядного идентификационного кода датчика и определения, какой из них уличный, а какой комнатный, датчики подключены к разным ножкам МК, а не висят на одной шине 1-wire.
Часы, будильник, термометр (ATmega8).
В Интернете можно найти немало схем, позволяющих измерять температуру и отображать ее в цифровой или аналоговой форме. Часто для этого используется популярный датчик температуры DS18B20 или его аналоги. Приборы имеют хорошую точность, помехоустойчивость, и, по сравнению с аналоговыми решениями, значительно упрощают схему. Надо отметить, что в этом случае точность измерений снизится.
Схема. Часы-будильник и термометр с бегущей строкой на шестнадцатиэлементных индикаторах
Простые часы на светодиодных матрицах. Многие радиолюбители, начинающие и не только любят «изобретать велосипед» — строить СВОИ электронные часы. Не обошла эта участь и меня. Конструкций часов в инете сегодня конечно предостаточно, но вот часов на светодиодных матрицах почему-то среди них единицы. В русскоговорящем интернете я нашел только одну полностью законченную и описанную конструкцию. В тоже время, светодиодные матрицы сейчас очень сильно подешевели, и их стоимость не выше, а то и ниже, чем у семисегментных индикаторов такого же размера. Например примененные мной GNM23881AD при размере 60х60мм были куплены за 1,5уе (3 индикатора обошлись в 4,5уе), за эти деньги врядли можно купить четыре семисегментника таких-же размеров. А вот информации, разместить на матричном индикаторе, можно намного больше. Кроме цифр на них можно отображать любые буквы, знаки, а с помощью бегущей строки еще и текст.
Исходя из этого, появилось желание построить часы на светодиодных матрицах, но чтоб схема при этом получилась не сложнее чем на семисегментниках. Также хотелось чтоб она была достаточно функциональная и не похожая на другие. Так родилась следующая схема.
Функционал у часов такой:
- Отсчет времени, календарь, день недели. (високосный год учитывается, переход на летнее/зимнее время не осуществляется).
- Сохранение хода часов при пропадании внешнего питания (потребление составляет 15мка).
- Коррекция хода + — 59,9сек\сутки, с шагом 0,1сек. 9 будильников. 3 из которых «одноразовые», и 6 «постоянных», индивидуально настраиваемых по дням недели.
- Индивидуально настраиваемая длительность звукового сигнала каждого будильника (1-15мин).
- Звуковое подтверждение нажатия кнопок (возможно отключить).
- Ежечасный звуковой сигнал (возможно отключить).
- С 00-00 до 08-00 сигнал не подаётся.
- 1 или 2 датчика температуры (Улица и дом).
- Настраиваемая бегущая строка, посредством которой выводится вся информация (кроме времени)
- Значение коррекции хода, и настройки «бегущей строки» — сохраняются даже при пропадании резервного питания.
«Сердцем» часов выбрана AtMega16A, из-за её доступности, дешевизны и «ногастости». Схему хотелось максимально упростить, поэтому все что можно, было возложено на контроллер. В результате удалось обойтись всего двумя микросхемами, контроллером и регистром TPIC6B595. Если кому то недоступен TPIC6B595, то можно его заменить на 74НС595 + ULN2803. Оба варианта были опробованы. Так же можно попробовать применить TPIC6С595, она немного слабовата, и слегка грелась, но в целом работала стабильно. Отсчет времени производится с помощью асинхронного тайме – Т2. Ход часов сохраняется и при пропадании питания. В это время бОльшая часть схемы обесточивается, а контроллер питается от батарейки, аккумулятора, или от ионистора. Мне было интересно «по играться» с ионистором, поэтому применил его. Ток потребления часами в дежурном режиме составляет 15мка. При питании от ионистора на 1Ф, часы «продержались» четверо суток. Этого вполне достаточно для поддержания хода во время перебоев питания. Если применить батарейку СR2032, то теоретически, по расчетам заряда должно хватить на 1,5года. Наличие сетевого напряжения контроллер «слушает» через вывод РВ.3 Этот вывод является инвертирующем входом компаратора. Напряжение питания, через делитель R2-R3 подается на вывод РВ.3, и в нормальном состоянии равно примерно 1,5в. Если внешнее напряжение упадет ниже 4,1 вольта, то напряжение на выводе РВ.3 станет меньше 1,23вольта, при этом сгенерируется прерывание от компаратора, и в обработчике этого прерывания выключаются все «лишние» узлы контроллера и сам контроллер усыпляется. В этом режиме продолжает работать только отсчитывающий время таймер Т2. При появлении внешнего питания, напряжение на РВ.3 снова подымится выше 1,23в, контроллер «увидев» это, переведет все узлы в рабочее состояние. Если вместо ионистора, будет использоваться батарейка СR2032, то её нужно подключить через диод(предпочтительно диод шоттки). Анод диода подключается к + батарейки, а катод к катоду VD1. В обычном режиме на экране отображается время в формате часы-минуты. С интервалом в одну минуту происходит запуск бегущей строки. Бегущей строкой отображается день недели, дата, год, темп. дома, и темп. на улице. Бегущая строка настраиваемая, т.е. можно включить/выключить отображение любого из элементов. (я например всегда отключаю отображение года). При выключении всех элементов, бегущая строка не запускается, и часы постоянно отображают текущее время. 9 будильников разделены на 3 одноразовых и 6 многоразовых. При включении будильников 1-3, они срабатывают только один раз. Для того чтоб они сработали еще раз, их нужно повторно включать вручную. А будильники 4-9 многоразовые, т.е. они будут срабатывать ежедневно, в установленное время. Кроме того эти будильники можно настроить на сработку только в определенные дни недели. Это удобно, например если не хотите чтоб будильник разбудил Вас в выходные. Или например Вам нужно просыпаться в будние дни в 7-00, а в четверг в 8-00, а на выходных будильник не нужен. Тогда настраиваем один многоразовый на 7-00 в понедельник-среду и пятницу, а второй на 8-00 в четверг….. Кроме того все будильники имеют настройку длительности сигнала, и если Вам, для того чтоб проснуться, мало сигнала в течении 1 минуты, то можно увеличить его на время от 1 до 15мин. Коррекция хода производится один раз в сутки, в 00-00. Если часы спешат к примеру на 5 сек в сутки, то в 00-00-00 время установится в 23-59-55, если же часы отстают, то в 00-00-00 время установится в 00-00-05. Шаг коррекции – 0,1 сек. Максимальная коррекция – 59,9 сек/сутки. С исправным кварцем больше вряд ли понадобиться. Коррекция осуществляется и в дежурном режиме при питании от батареи. Светодиодные матрицы можно использовать любые 8*8 светодиодов с общим катодом. Как уже было указано, я применил GNM23881AD. В принципе можно «набрать» матрицу и из отдельных светодиодов. Микроконтроллер AtMega16a можно заменить на «старый» AtMega16 с буквой L. При этом, теоретически должен немного увеличится ток потребления от батарейки. Наверное будет работать и просто AtMega16, но могут возникнуть проблемы при работе от батарейки. Диод D1 — желательно любой диод шоттки. С обычным выпрямительным тоже работает, но чтоб обезопасить себя от различных глюков, связанных с тем что часть схемы питается напряжением «до диода», а часть «после диода» лучше поискать шоттки. Транзистор VT1 – любой n-p-n. Управление часами осуществляется двумя кнопками. Их количество можно было довести до 8шт, не добавляя больше вообще ни одного компонента, кроме самих кнопок, но захотелось попробовать «выкрутится» всего двумя. Кнопки условно названы «ОК» и «ШАГ». Кнопкой «ШАГ» как правило происходит переход к следующему пункту меню, а кнопкой «ОК» изменение параметров текущего меню. Сигнал сработавшего будильника также выключается кнопками «ОК» или «ШАГ». Нажатие любой кнопки во время сигнала будильника отключает его. Схема управления получилась такой:
Видео как все работает!
Эта бегущая строка позволяет читать текст объемом не более 8192 буквы включая пробелы. Текст вводится в память 24С64 бегущей строки при помощи клавиатуры от компьютера без подключения самого компьютера. Во время ввода текста есть возможность стирания букв при помощи клавиши (Backspace) наблюдая за этим действием удаления букв на табло.
Есть возможность регулировки скорости бега букв при помощи двух клавиш рядом с цифрами клавиатуры (+ и -). Скорость бега строки записывается в самую последнюю ячейку памяти 24С64 поэтому при первом включении без регулировки скорости будет наблюдаться медленный бег букв и поэтому нужно сделать первую регулировку. Скорость бега очень сильно меняется при регулировки записи числа в последнюю ячейку 24С64 числа от 1….30 в десятичном измерении или в шестнадцатиричном1..1Е в чем можно убедиться с помощи программатора PICKIT2, но это не обязательно.
Память строки содержит знакогенератор имеющий в своей памяти весь алфавит русских букв заглавных и маленьких букв, а также некоторые знаки и все цифры.
Индикация строки построчная динамическая состоящая из 8 строк которые зажигаются сверху вниз по очереди одна за другой 300 раз в секунду выполняется весь цикл из 8 строк, что позволяет наблюдать картинку без мерцания.
Микросхемы табло 74НС595 выполняют роль зажигания горизонтали табло или строки из 160 светодиодов, а транзисторы дают возможность менять горизонтали или строки от верхних до нижних по очереди то есть зажигание табло происходит построчно с верху вниз по очереди со скоростью 300 кадров в секунду.
Сама микросхема 74НС595 представляет из себя обычный сдвиговый регистр с выводом каждого регистра на светодиодную матрицу но есть большое НО матрица с регистрами соединяется не на прямую а через фиксирующие логическое состояние регистрами.
Зачем это нужно? Это нужно для того чтобы пока идет загрузка от МК сдвиговых регистров по цепочке от одного к другому с каждым тактовым сигналом на выводе 11 и при этом наблюдалось на светодиодных матрицах чего нам вовсе не нужно так как картинка при этом засвечивалась светодиодами не в нужных местах. Поэтому дополнительные фиксирующие регистры блокируют во время загрузки данных вывод информации на матрицы и обновляют только после того как на выводах 12 появиться тактовый сигнал передовая от сдвиговых регистров к фиксирующим данные, а фиксирующие передают на матрицы.
Данные табло создающие все картинку строки поступают от МК с вывода 34 на вход регистра 14 микросхемы 74НС595 от первой микросхемы 74НС595 ко второй данные передаются с выхода 9 на вход 14 и так по цепочке до последней 20 микросхемы.
Повторюсь данные двигаются с каждым тактом на входе 11 всех микросхем 74НС595 по цепочке к самой последней микросхеме 74НС595 и после загрузки все 20 микросхем появляется такт на фиксирующих регистрах вывод 12 тем самым обновляя изображение всей строки, а не всего изображения табло. Строки каждый раз обновляются после перехода на более нижнюю строку.
При сборки табло очень удобно делать платы из двух матриц 8х8 или чтобы плата содержала по две матрицы с возможностью наращивания количества плат, подключив первую плату дисплея к плате микроконтроллера можно убедиться в ее работе без остальных плат дисплея и только после этого проверить следующие платы, так будет проще искать изъяны и ляпы пайки.
Чтобы проверить первую плату дисплея нужно подключить клавиатуру к плате МК подать питание нажать одну или несколько букв подать команду конца строки, что текст введен нажав клавишу ENTER после этого пойдет бег строки с низкой скоростью так как скорость бега тоже нужно отрегулировать нажимая клавишу (-) до тех пор пока не запишется константа от 5..1Е в шестнадцатиричном виде в память 24С64.
Если вам не нужна строка такой большой длинны состоящая из 20 матриц 8х8, то я могу вам выслать прошивку с меньшим количеством от 2 до 19 это делается просто и быстро ответ вам вышлю письмо с прошивкой мой адрес evgen100777(sobaka)rambler.ru.
Платы дисплея разведены для матриц 6х6 сантиметров красного цвета свечения с маркировкой QFT 2388ASR плата микроконтроллера сделана с условием модернизации добавления строке часов и термометра но так как прошивка под это дело не доделана не рекомендую добавлять кнопки, чтобы не спалить порт МК.
Командные кнопки.
(Shift ) – кнопка переключения на большие буквы, нажав на нее и отпустив нажимается буква и выводиться на табло заглавная буква если нажать следующую букву без предварительного нажатия Shift выводиться маленькая буква, то есть перед каждым вводом заглавной буквы нужно нажать и отпустить Shift.
(+ и— ) — эти клавиши работают при включении бегущей строки до набора текста и регулируют скорость перемещения букв по табло + увеличивает скорость – уменьшает скорость перемещения букв.
Backspace — клавиша стирания текста во время набора, работает только в режиме набора текста отображая на табло удаленную букву смещением текста налево.
Enter эта клавиша запускает бег строки после набора текста обозначая конец текста в памяти 24С64 и говорит о том что нужно с этого места текста начать бег строки с начала.
Для нового набора текста бегущую строку нужно выключить и снова включить с подключенной клавиатурой выбрать скорость бега текста клавишами плюс и минус и при первом нажатии на букву табло очищается с отображением в правой части строки первой буквы набирая текст он продвигается в левую сторону после этого нажимается клавиша Enter и строка уходит в рабочий режим бега не реагируя на клавиатуру.
Для повторного вода текста нужно не забывать включить и выключить строку.
Бегущая строка с часами, календарем и набором текста на клавиатуре PS/2
Бегущая строка показывает время часы минуты секунды день цифрами, а месяц и день недели словами например ВРЕМЯ 12.30.10 20 ЯНВАРЯ СРЕДА.
Точно такая же бегущая строка с набором текста на клавиатуре только имеет еще часы с календарем. В этой строке нельзя менять количество светодиодных матриц так как они все 20 штук задействованы в настройке времени даты и месяца и дня недели.
Во время набора текста нажатием клавиши левого CTRL вставляются часы с календарем в текст бегущей строки. Эта строка имеет все те же функции что и прошлые строки на PIC16F628 и PIC16F877 и управляется она точно также.
Для настройки времени нужно нажать кнопку выбор на плате с микроконтроллером при этом появляется табло настройки времени, начинают мигать секунды нажатием кнопки изменить секунды сбрасываются в ноль. Давим повторно кнопку выбор начинают мигать минуты нажатием кнопки изменить увеличиваем минуты, тоже самое с часами датой месяцем и днем недели.
В настройках времени день недели и месяц отображается в виде цифр.
Вот чуть измененная схема этой строки тут добавилось две кнопки с подтягивающими резисторами изменения времени и часовым кварцем на 32768 Гц и еще один резистор подтягивающий вход контролера отвечающий за ввод клавиатуру.
Для более стабильной работы PIC16F877 лучше запитывать через резистор 11 ом 0.25 Ватт по плюсовому питанию для понижения помех идущих от транзисторов которые коммутируют строки табло.
Бегущая строка с часами и термометром для улицы и дома.
Бегущая строка работает на датчиках DS1820 и показывает температуру в доме и на улице путем вставки в текст бегущей строки вывода показаний на табло.
Показания выводиться в виде надписи ТЕМПЕРАТУРА ДОМ 25,2 УЛИЦА -12,4 показания температуры имеют младший показатель в виде десятой доли градуса.
Для вставки термометра в текст надо нажать клавишу левый ALT на компьютерной клавиатуре, подключенной к бегущей строке.
Диапазон температур выводимым термометром -55 до 99 градусов но не рекомендуется нагревать датчик выше 70 градусов во избежание его порче.
Длина провода идущего к датчику на улице должен быть не более 4 метров.
Есть прошивка с тремя Украинскими буквами.
Сигнал будильника снимается в виде лог 0 во время сигнала с 38 вывода PIC16F877
Список радиоэлементов
Обозначение | Тип | Номинал | Количество | Примечание | Магазин | Мой блокнот | |
---|---|---|---|---|---|---|---|
Схема 1 | |||||||
IC | МК PIC 8-бит | PIC16F877 | 1 | В блокнот | |||
IC1 | Микросхема памяти | 24C64 | 1 | В блокнот | |||
IC2, IC3 | Сдвиговый регистр | CD74HC595 | 20 | В блокнот | |||
VT1-VT8 | Биполярный транзистор | BD140 | 8 | В блокнот | |||
C1, C2 | Конденсатор | 100 нФ | 2 | В блокнот | |||
C3, C4 | Конденсатор | 15 пФ | 2 | В блокнот | |||
C5 | Конденсатор | 3.3 нФ | 1 | В блокнот | |||
R1-R16, R18, R19, R21-R24, R30, R31 | Резистор | 330 Ом | 24 | В блокнот | |||
Резистор | 330 Ом | 144 | В блокнот | ||||
R26, R27 | Резистор | 5.1 кОм | 2 | В блокнот | |||
R28, R29 | Резистор | 4.7 кОм | 2 | В блокнот | |||
Cr1 | Кварцевый резонатор | 20.000 МГц | 1 | В блокнот | |||
Светодиодная матрица | 8х8 | 20 | В блокнот | ||||
Разъём | PS/2 | 1 | В блокнот | ||||
Схема 2 | |||||||
IC | МК PIC 8-бит | PIC16F877 | 1 | В блокнот | |||
IC1 | Микросхема памяти | 24C64 | 1 | В блокнот | |||
Сдвиговый регистр | CD74HC595 | 20 | В блокнот | ||||
Биполярный транзистор | BD140 | 8 | В блокнот | ||||
C2 | Конденсатор | 100 нФ | 1 | В блокнот | |||
C3, C4 | Конденсатор | 15 пФ | 2 | В блокнот | |||
C5 | Конденсатор | 3.3 нФ | 1 | В блокнот | |||
C6, C7 | Конденсатор | 33 пФ | 2 | В блокнот | |||
C8 | Конденсатор электролитический | 47 мкФ | 1 | В блокнот | |||
R18, R19, R21-R24, R30, R31 | Резистор | 330 Ом | 24 | В блокнот | |||
Резистор | 330 Ом | 144 | В блокнот | ||||
R26, R27, R32, R33 | Резистор | 5.1 кОм | 4 | В блокнот | |||
R29, R34, R35 | Резистор | 4.7 кОм | 3 | В блокнот | |||
R36 | Резистор | 11 Ом | 1 | В блокнот | |||
Cr1 | Кварцевый резонатор | 20.000 МГц | 1 | В блокнот | |||
Cr2 | Кварцевый резонатор | 32768 Гц | 1 | В блокнот | |||
S1, S2 | Кнопка тактовая | 2 | В блокнот | ||||
Светодиодная матрица | 8х8 | 20 | В блокнот | ||||
Разъём | PS/2 | 1 | В блокнот | ||||
Схема 3 | |||||||
IC | МК PIC 8-бит | PIC16F877 | 1 | В блокнот | |||
IC1 | Микросхема памяти | 24C64 | 1 | В блокнот | |||
Сдвиговый регистр | CD74HC595 | 20 | В блокнот | ||||
Датчик температуры | DS18B20 | 2 |
Уличные электронные часы широко используются в дизайне современной инфраструктуры Москвы и других городов как эффективное средство привлечения внимания людей.
Производственная компания «РусИмпульс» выпускает большой ассортимент уличных светодиодных часов: с высотой цифр от 80мм и выше и любым цветом свечения.
Серийные модели уличных настенных часов «Импульс» стандартно отображают текущее временя, дату и температуру воздуха в попеременном режиме. Опционально такие часы-термометр способны также показывать широкий спектр метеоданных: температуру воды, относительную влажность воздуха, атмосферное давление, скорость ветра, уровень радиационного фона. Время отображения каждого из параметров может быть установлено пользователем самостоятельно.
Электронные табло «Импульс» работают в широком температурном диапазоне (от -40 до +50 °С), имеют специальную защиту от коррозии, попадания пыли и влаги внутрь корпуса (IP 65) и могут эксплуатироваться в любых погодных условиях.
Электронные уличные часы с термометром «Импульс» выпускаются, как правило, в одностороннем исполнении и устанавливаются на стену здания. Возможно двустороннее исполнение часов с вертикальным или боковым креплением.
В зависимости от предполагаемого места установки уличные электронные часы-термометр можно выбрать для теневой или солнечной стороны. Для размещения в тени подойдут часы-термометр с менее яркими светодиодами красного цвета — 1,5Кд, тогда как для солнечной стороны, а также установки в витринах рекомендуются часы с более яркими светодиодами (3,0Кд для красного свечения / не менее 2Кд для иного цвета)
Уличные электронные часы с термометром стандартно управляются при помощи пульта дистанционного управления на ИК–лучах с дальностью действия до 10 м. Пульт позволяет менять яркость свечения и длительность индикации отображаемых параметров. Крупногабаритные часы-термометр с высотой шрифта от 700 мм управляются с помощью радиопульта дальностью действия до 50 м.
Базовые модели уличных электронных часов «Импульс»
отображаемые параметры | текущее время (ЧЧ:ММ), дата (ДД.ММ), температура воздуха (-88 °С или 88 °С) |
формат индикаторов | 88:88 |
тип индикаторов | светодиоды |
яркость индикаторов | |
управление | пульт ДУ на ИК-лучах (расстояниес действия до 10м) |
питание | 220В/ 50Гц, кабель питания 1,5м. |
условия эксплуатации | улица, температура от-40° до 50° С |
тип и цвет корпуса | стальной штампованные корпус, окрашенный черной порошковой краской, декоративный профиль, акриловое стекло, крепление — петли на задней стороне корпуса |
метеодатчики | датчик температуры воздуха – выносной, провод датчика 1,5м.
опционально возможно оснащение табло другими метеодатчиками |
гарантийный срок | 2 года |
- Второй вариант, DS18b20 ) .
Отображение в режиме бегущей строки — дата, месяц, год и день недели.
Общая схема.
— При нажатии
Кн2
Кн2
Кн1
–
Кн3
Кн2
UA-EN-RU
.
ds
18
b
20 №1 или №2.
Возможны схемные решения, с вариантами комбинаций для подключения датчиков, ниже примеры вариантов, с которыми данная программа будет работать корректно.
Схема в протеусе
прошивкой загрузчика ATmega328.)
FUSE, если кто будет использовать ICSP программатор для прошивки ATmega328 в этой схеме.
С помощью перемычек Jp -1, Jp -2, Jp RF
1сек. |
2сек. |
4сек. |
8сек. |
16сек. |
32сек. |
64сек. |
128сек. |
|
Jp -1 |
||||||||
Jp -2 |
||||||||
Jp -3 |
FUSE, ATtiny24а устанавливаются на внутренний генератор МК — 8МГц.
в архиве .
Радиодатчик для матричных часов, от батарейного питания, схема и прошивка в форуме.
DS18b20
, RTC
DS1307
, датчик освещения, кнопки управления, комплект
RF
-модулей, и блок питания 5 вольт (потребление схемы в пиковых моментах, при максимальной яркости, составляет до 0.6А, а в среднем это 0.3А, можно использовать и лишнюю зарядку от мобилки, если имеется с подходящими параметрами)
).
В чем интерес применения
Arduino Nano Atmega328
.
В том, что на борту этой платки уже имеется модем с выходом на мини USB, прошить такой контроллер можно без особого труда через bootloader, с помощью вашего компьютера и телефонного шнура для зарядки мобильного телефона с разъемом под мини USB.
Все это несложно делается с помощью простенькой программки
XLoader
.
Чуть подробней про опыт прошивки через bootloader, описывал здесь «Nano вольт — амперметр 2 канала.
«.
При желании все необходимые модули можно по выгодной цене купить на Aliexpress.
После заказа, немного терпения пока все эти детальки придут по почте, и вы сможете себе гарантированно собрать, эту весьма интересную схему с часами и термометром.
В общем, с элементарной базой, думаю вопросов не должно возникнуть, так все здесь стандартно.
Оформление отображения вида работы часов — термометра, это уже любительский вариант исполнения.
В программе имеется три варианта оформления работы часов термометра.
- Первый вариант это, поочередное отображение времени (часы и минуты), уличной температуры и температуры помещения (два датчика DS18b20 ) .
Отображение в режиме бегущей строки — дата, месяц, год и день недели.
- Второй вариант, отображение времени (часы и минуты), температуры окружающего воздуха (один датчик DS18b20 ) .
Отображение в режиме бегущей строки — дата, месяц, год и день недели.
- Третий вариант, просто часы, отображение времени (часы и минуты),
отображение в режиме бегущей строки — дата, месяц, год и день недели (отображение температуры отключено).
Собственно различия вариантов небольшие, и заключается только в различиях отображения температуры на матричном дисплее часов термометра, практически каждый вариант может быть востребован.
Схема.
— В схеме использованы три кнопки управления, при кратковременном нажатии на эти кнопки, одноразово вызываем ротацию показаний на основном экране часы – дату — день недели – температура.
— При нажатии
Кн2
более 2х сек., осуществляется вход в меню установок (при нахождении в меню, нажатие
Кн2
более 2х сек., выход из меню установок).
— После входа в меню, кнопками
Кн1
–
Кн3
можно сделать коррекцию даты и времени, движение по меню осуществляется
Кн2
, изменяемый параметр будет находиться в инверсном свечении.
— Также в меню, возможно, если в этом есть необходимость, установить коррекцию неточности хода часов, в течение суток ±9сек.
— Следующий пункт в меню будет, это выбор используемого языка, в одной прошивке предусмотрено использование языков
UA-EN-RU
.
— Пункт варианта анимации на экране, один из трех, что описан в начале статьи.
— Радиодатчик, при выборе значение «0» , радиодатчик в программе не задействован, при выборе 1 или 2, показания температуры с радиодатчика займут место на дисплее, вместо
ds
18
b
20 №1 или №2.
Фото часов в процессе отладки на макетной плате.
Схема в протеусе
Схема передатчика для этих часов.
С помощью перемычек Jp -1, Jp -2, Jp -3, можно выбрать, частоту передачи RF -модулем пакетов информации с температурой от датчика №3.
1сек. |
2сек. |
4сек. |
8сек. |
16сек. |
32сек. |
64сек. |
128сек. |
|
Jp -1 |
||||||||
Jp -2 |
||||||||
Jp -3 |
(1 – перемычка замкнута, 0 – нет)
Печатная плата для часов, и радиодатчика.
FUSE для работы ATmega328 с загрузчиком (архив с прошивкой загрузчика ATmega328. )
FUSE, если кто будет использовать ICSP программатор для прошивки ATmega328 в этой схеме.
Прошивка “Часы – термометр на матричных модулях ” , печатные платы, proteus, в архиве .
«Радиоежегодник» — Выпуск 2. Микроконтроллеры.
Издательство: Радиоежегодник Тема номера: МИКРОКОНТРОЛЛЕРЫ Выпуск: октябрь, 2011 №2 Обьем: 8.1 мб
Схемотехнический обзор радиолюбительских изданий первой половины 2011 года. В обзоре 100 схем из 7 журналов.
Содержание:
Скачать Радиоежегодник зеркало
Радиоежегодник,Выпуск 2,Микроконтроллеры,Обзор,2011 год,радио ежегодник,скачать бесплатно,без регистрации |
Говорящие LED-часы — часть 3: Схема — DiMoon Electronics
Во 2-ой части мы разобрались с преобразованием текущего времени и температуры в речь. Все готово для воплощения нашего проекта в железе. В этой статье мы рассмотрим принципиальную схему часов и обсудим некоторые особенности аппаратной реализации.
Изначально, при проектировании часов, я не рисовал ни какие схемы. Были только небольших наброски в Proteus-е. Поэтому, пришлось заняться ее воссозданием по имеющемуся железу и программному обеспечению. Ссылка на схему в формате DipTrase и PDF будет в конце статьи.
Схема часов вместилась на трех страницах, нажмите на картинку для открытия в полном размере.
«Мозгом» конструкции является микроконтроллер DD1 ATMega16. К нему подключена микросхема Flash-памяти DS1 на 4 метра для хранения семплов из предыдущей статьи, термометр DD4 DS18B20, буферы LED-дисплея DD2, DD3 с кнопками SB1-SB4 и внешний R-2R ЦАП. Питается конструкция от 5-и вольт через разъем XP2. Через XP1 производится заливка прошивки в микроконтроллер.
Микросхема флеш-памяти DS1 питается от отдельного линейного стабилизатора DD5 на 3.3 вольта. Судя по даташиту на флешку, все ее входы толерантны к 5-и вольтам, а это значит, что ее можно напрямую подключать к 5-и вольтной AVR-ке, не боясь что-либо сжечь.
Индикация производится с помощью 2-х строенных семисегментных индикаторов HG1 и HG2. Индикация динамическая. Для конкретных индикаторов токоограничивающие резюки R25-R32 поставил по 300 Ом.
Сигнал с ЦАП-а, выполненного на резисторах R1-R16, через потенциометр R33 подается на усилитель DA1 LM386N. R33 служит для подстройки громкости речевого информатора, чтоб он не орал и не будил окружающих, если те спят)) Обвязка LM-ки взята прямиком из datasheet-та, без изменений. И не забываем про цепочку Цобеля на С4-R34, иначе будем долго чесать репу и искать причину самовозбуда усилка высоких частотах. Ну и конденсаторы С6, С7 надо ставить поближе к микросхеме.
Перейдем теперь к кнопкам и индикаторам. В целях экономии выводов, кнопки висят на том же порту, что и сегменты индикатора. Попробую объяснить, как оно работает и не мешает друг другу.
На рисунке изображена упрощенная схема внутренней части микроконтроллера и внешней обвязки. Она не совсем соответствует реальной, но для нашей задачи это не критично.
Переключатель PORTB управляет пином PBx микроконтроллера, настроенного на выход. В нижнем положении переключателя PORTB на выводе PBx выдает ноль, в верхнем — единица. Переключатель DDRD управляет направлением вывода PDx, в нижнем положении PDx является выходом, в верхнем положении переключателя — входом. Когда PDx настроен как выход, логическим уровнем на нем модно управлять с помощью переключателя PORTD, по аналогии с PBx. Резистор R2 — внутренний подтягивающий резистор, PIN:D — внутренний буфер, с выхода которого из программы в МК можно прочитать значение логического уровня на PDx, когда он настроен на вход. Буферы LED_BUFF:A и LED_BUFF:B — буферы LED-дисплея DD2 и DD3 соответственно, LED_SEGMENT — один сегмент одного светодиодного индикатора.
Начнем с простого — управление свечением светодиода. Для этого переключатель PORTB переведем в нижнее положение, там самым подадим на катод светодиода минус источника питания, DDRD так же в нижнее положение, и PDx у нас работает как выход. После этого с помощью переключателя PORTD мы сможем зажигать и гасить светодиод.
Переведем PORTD в верхнее положение. Черными стрелками указано направление обхода интересующей в данный момент части контура. Это не в коем случае не направление течения тока, скорее, это наглядное представление наличия «электрического» контакта; стрелка начинается на плюсе, проходит через светодиод и кончается на массе, при этом потенциал на аноде светодиода больше, чем на катоде, следовательно, он будет гореть:
Если в этот момент юзер нажмет на кнопку BUTTON, то ни чего страшного не произойдет, так как резистор R1 предотвратит КЗ, а за счет того, что выходное сопротивление вывода PDx в этом режиме очень мало, то наш резистор R1 ни как не повлияет на значение логического уровня на PDx.
Чтобы погасить светодиод, достаточно перевести переключатель PORTD в нижнее положение:
Здесь черные стрелки начинаются на массе и, проходя через светодиод, на той же массе и кончаются, поэтому светодиод не горит.
Все сказанное выше по своей сути является примером реализации динамической индикации для индикаторов с общим катодом: на PBx вешаются катоды индикаторов, на PDx аноды сегментов.
Вроде как все хорошо, зажигать и гасить светодиод научились. Перейдем теперь к вводу информации с кнопки.
Для начала переключателем PORTB установим на PBx логическую единицу. Это делаем для того, чтобы светодиод не светился при любом логическом значении на PDx. Далее, настроим PDx на вход, переведя DDRD в верхнее положение. Через резистор подтяжки логическая единица поступает и на вход внутреннего буфера PIN:D, и на PDx. Значение на выходе буфера PIN:D можно прочитать программно.
И вот, юзер решил нажать на кнопку BUTTON. Так как сопротивление резистора R1 намного меньше резистора подтяжки R2, на выводе PDx установится низкий уровень, который можно прочитать на выходе буфера PIN:D.
Таким образом реализуется временнОе мультиплексирование кнопок и LED-индикатора, висящих на одном и том же выводе порта. При частоте обновления индикатора, равной около 100 Hz, видимых задержек реагирования на кнопки не будет, а драгоценные выводы микроконтроллера мы сэкономим)) Правда при этом усложняется программа опроса кнопок и вывода значения на индикатор, по сути будет один программный модуль, который занимается и тем, и другим, но об этом как-нибудь потом.
Про схему собственно все))
Теперь немного о функционале. На данный момент часы умеют отсчитывать текущее время, что не удивительно, ведь это же часы)), имеют календарь, учитывающий високосный год, отображают температуру за окном и снижают яркость индикаторов в период с 23:00 до 7:00, чтоб ночью не мешали спать. Так же можно настроить диапазон часов, когда работает речевой информатор. У меня он объявляет каждый час начиная с 7:00 и до 22:00. Будильника нет. Не стал его делать по одной причине: если ночью «моргнет» свет, то время собьется, и будильник зазвенит не тогда, когда нужно, следовательно, есть опасность проспать. Когда были у меня китайские LED радио-часы, натыкался несколько раз на такой казус. Так что лучше на телефоне поставлю будильник, когда он нужен.
Немного фоток.
В качестве корпуса выбрана пластиковая китайская коробка
Печатную плату не делал, все собрано на макетке типа «решето»
Индикатор поближе: 5 секунд показывают текущее время, 2 секунды температуру
Видео с демонстрацией работы:
Собственно, на этом все, спасибо за внимание!))
Архив со схемой и фотками
|
||||||||
1сек. |
2сек. |
4сек. |
8сек. |
16сек. |
32сек. |
64сек. |
128сек. |
|
Jp -1 |
||||||||
Jp -2 |
||||||||
Jp -3 |
FUSE, ATtiny24а устанавливаются на внутренний генератор МК — 8МГц.
в архиве .
Радиодатчик для матричных часов, от батарейного питания, схема и прошивка в форуме.
DS18b20
, RTC
DS1307
, датчик освещения, кнопки управления, комплект
RF
-модулей, и блок питания 5 вольт (потребление схемы в пиковых моментах, при максимальной яркости, составляет до 0.6А, а в среднем это 0.3А, можно использовать и лишнюю зарядку от мобилки, если имеется с подходящими параметрами)
).
В чем интерес применения
Arduino Nano Atmega328
.
В том, что на борту этой платки уже имеется модем с выходом на мини USB, прошить такой контроллер можно без особого труда через bootloader, с помощью вашего компьютера и телефонного шнура для зарядки мобильного телефона с разъемом под мини USB.
Все это несложно делается с помощью простенькой программки
XLoader
.
Чуть подробней про опыт прошивки через bootloader, описывал здесь «Nano вольт — амперметр 2 канала.
«.
При желании все необходимые модули можно по выгодной цене купить на Aliexpress.
MAX7219 dot matrix |
Nano Atmega328 |
DS1307 |
DS18b20 |
Датчик освещения |
Блок питания |
После заказа, немного терпения пока все эти детальки придут по почте, и вы сможете себе гарантированно собрать, эту весьма интересную схему с часами и термометром.
В общем, с элементарной базой, думаю вопросов не должно возникнуть, так все здесь стандартно.
Оформление отображения вида работы часов — термометра, это уже любительский вариант исполнения.
В программе имеется три варианта оформления работы часов термометра.
- Первый вариант это, поочередное отображение времени (часы и минуты), уличной температуры и температуры помещения (два датчика DS18b20 ) .
Отображение в режиме бегущей строки — дата, месяц, год и день недели.
- Второй вариант, отображение времени (часы и минуты), температуры окружающего воздуха (один датчик DS18b20 ) .
Отображение в режиме бегущей строки — дата, месяц, год и день недели.
- Третий вариант, просто часы, отображение времени (часы и минуты),
отображение в режиме бегущей строки — дата, месяц, год и день недели (отображение температуры отключено).
Собственно различия вариантов небольшие, и заключается только в различиях отображения температуры на матричном дисплее часов термометра, практически каждый вариант может быть востребован.
Схема.
— В схеме использованы три кнопки управления, при кратковременном нажатии на эти кнопки, одноразово вызываем ротацию показаний на основном экране часы – дату — день недели – температура.
— При нажатии
Кн2
более 2х сек., осуществляется вход в меню установок (при нахождении в меню, нажатие
Кн2
более 2х сек., выход из меню установок).
— После входа в меню, кнопками
Кн1
–
Кн3
можно сделать коррекцию даты и времени, движение по меню осуществляется
Кн2
, изменяемый параметр будет находиться в инверсном свечении.
— Также в меню, возможно, если в этом есть необходимость, установить коррекцию неточности хода часов, в течение суток ±9сек.
— Следующий пункт в меню будет, это выбор используемого языка, в одной прошивке предусмотрено использование языков
UA-EN-RU
.
— Пункт варианта анимации на экране, один из трех, что описан в начале статьи.
— Радиодатчик, при выборе значение «0» , радиодатчик в программе не задействован, при выборе 1 или 2, показания температуры с радиодатчика займут место на дисплее, вместо
ds
18
b
20 №1 или №2.
Фото часов в процессе отладки на макетной плате.
Схема в протеусе
Схема передатчика для этих часов.
С помощью перемычек Jp -1, Jp -2, Jp -3, можно выбрать, частоту передачи RF -модулем пакетов информации с температурой от датчика №3.
1сек. |
2сек. |
4сек. |
8сек. |
16сек. |
32сек. |
64сек. |
128сек. |
|
Jp -1 |
||||||||
Jp -2 |
||||||||
Jp -3 |
(1 – перемычка замкнута, 0 – нет)
Печатная плата для часов, и радиодатчика.
FUSE для работы ATmega328 с загрузчиком (архив с прошивкой загрузчика ATmega328. )
FUSE, если кто будет использовать ICSP программатор для прошивки ATmega328 в этой схеме.
Прошивка “Часы – термометр на матричных модулях ” , печатные платы, proteus, в архиве .
Эта бегущая строка позволяет читать текст объемом не более 8192 буквы включая пробелы. Текст вводится в память 24С64 бегущей строки при помощи клавиатуры от компьютера без подключения самого компьютера. Во время ввода текста есть возможность стирания букв при помощи клавиши (Backspace) наблюдая за этим действием удаления букв на табло.
Есть возможность регулировки скорости бега букв при помощи двух клавиш рядом с цифрами клавиатуры (+ и -). Скорость бега строки записывается в самую последнюю ячейку памяти 24С64 поэтому при первом включении без регулировки скорости будет наблюдаться медленный бег букв и поэтому нужно сделать первую регулировку. Скорость бега очень сильно меняется при регулировки записи числа в последнюю ячейку 24С64 числа от 1….30 в десятичном измерении или в шестнадцатиричном1..1Е в чем можно убедиться с помощи программатора PICKIT2, но это не обязательно.
Память строки содержит знакогенератор имеющий в своей памяти весь алфавит русских букв заглавных и маленьких букв, а также некоторые знаки и все цифры.
Индикация строки построчная динамическая состоящая из 8 строк которые зажигаются сверху вниз по очереди одна за другой 300 раз в секунду выполняется весь цикл из 8 строк, что позволяет наблюдать картинку без мерцания.
Микросхемы табло 74НС595 выполняют роль зажигания горизонтали табло или строки из 160 светодиодов, а транзисторы дают возможность менять горизонтали или строки от верхних до нижних по очереди то есть зажигание табло происходит построчно с верху вниз по очереди со скоростью 300 кадров в секунду.
Сама микросхема 74НС595 представляет из себя обычный сдвиговый регистр с выводом каждого регистра на светодиодную матрицу но есть большое НО матрица с регистрами соединяется не на прямую а через фиксирующие логическое состояние регистрами.
Зачем это нужно? Это нужно для того чтобы пока идет загрузка от МК сдвиговых регистров по цепочке от одного к другому с каждым тактовым сигналом на выводе 11 и при этом наблюдалось на светодиодных матрицах чего нам вовсе не нужно так как картинка при этом засвечивалась светодиодами не в нужных местах. Поэтому дополнительные фиксирующие регистры блокируют во время загрузки данных вывод информации на матрицы и обновляют только после того как на выводах 12 появиться тактовый сигнал передовая от сдвиговых регистров к фиксирующим данные, а фиксирующие передают на матрицы.
Данные табло создающие все картинку строки поступают от МК с вывода 34 на вход регистра 14 микросхемы 74НС595 от первой микросхемы 74НС595 ко второй данные передаются с выхода 9 на вход 14 и так по цепочке до последней 20 микросхемы.
Повторюсь данные двигаются с каждым тактом на входе 11 всех микросхем 74НС595 по цепочке к самой последней микросхеме 74НС595 и после загрузки все 20 микросхем появляется такт на фиксирующих регистрах вывод 12 тем самым обновляя изображение всей строки, а не всего изображения табло. Строки каждый раз обновляются после перехода на более нижнюю строку.
При сборки табло очень удобно делать платы из двух матриц 8х8 или чтобы плата содержала по две матрицы с возможностью наращивания количества плат, подключив первую плату дисплея к плате микроконтроллера можно убедиться в ее работе без остальных плат дисплея и только после этого проверить следующие платы, так будет проще искать изъяны и ляпы пайки.
Чтобы проверить первую плату дисплея нужно подключить клавиатуру к плате МК подать питание нажать одну или несколько букв подать команду конца строки, что текст введен нажав клавишу ENTER после этого пойдет бег строки с низкой скоростью так как скорость бега тоже нужно отрегулировать нажимая клавишу (-) до тех пор пока не запишется константа от 5..1Е в шестнадцатиричном виде в память 24С64.
Если вам не нужна строка такой большой длинны состоящая из 20 матриц 8х8, то я могу вам выслать прошивку с меньшим количеством от 2 до 19 это делается просто и быстро ответ вам вышлю письмо с прошивкой мой адрес evgen100777(sobaka)rambler.ru.
Платы дисплея разведены для матриц 6х6 сантиметров красного цвета свечения с маркировкой QFT 2388ASR плата микроконтроллера сделана с условием модернизации добавления строке часов и термометра но так как прошивка под это дело не доделана не рекомендую добавлять кнопки, чтобы не спалить порт МК.
Командные кнопки.
(Shift ) – кнопка переключения на большие буквы, нажав на нее и отпустив нажимается буква и выводиться на табло заглавная буква если нажать следующую букву без предварительного нажатия Shift выводиться маленькая буква, то есть перед каждым вводом заглавной буквы нужно нажать и отпустить Shift.
(+ и— ) — эти клавиши работают при включении бегущей строки до набора текста и регулируют скорость перемещения букв по табло + увеличивает скорость – уменьшает скорость перемещения букв.
Backspace — клавиша стирания текста во время набора, работает только в режиме набора текста отображая на табло удаленную букву смещением текста налево.
Enter эта клавиша запускает бег строки после набора текста обозначая конец текста в памяти 24С64 и говорит о том что нужно с этого места текста начать бег строки с начала.
Для нового набора текста бегущую строку нужно выключить и снова включить с подключенной клавиатурой выбрать скорость бега текста клавишами плюс и минус и при первом нажатии на букву табло очищается с отображением в правой части строки первой буквы набирая текст он продвигается в левую сторону после этого нажимается клавиша Enter и строка уходит в рабочий режим бега не реагируя на клавиатуру.
Для повторного вода текста нужно не забывать включить и выключить строку.
Бегущая строка с часами, календарем и набором текста на клавиатуре PS/2
Бегущая строка показывает время часы минуты секунды день цифрами, а месяц и день недели словами например ВРЕМЯ 12.30.10 20 ЯНВАРЯ СРЕДА.
Точно такая же бегущая строка с набором текста на клавиатуре только имеет еще часы с календарем. В этой строке нельзя менять количество светодиодных матриц так как они все 20 штук задействованы в настройке времени даты и месяца и дня недели.
Во время набора текста нажатием клавиши левого CTRL вставляются часы с календарем в текст бегущей строки. Эта строка имеет все те же функции что и прошлые строки на PIC16F628 и PIC16F877 и управляется она точно также.
Для настройки времени нужно нажать кнопку выбор на плате с микроконтроллером при этом появляется табло настройки времени, начинают мигать секунды нажатием кнопки изменить секунды сбрасываются в ноль. Давим повторно кнопку выбор начинают мигать минуты нажатием кнопки изменить увеличиваем минуты, тоже самое с часами датой месяцем и днем недели.
В настройках времени день недели и месяц отображается в виде цифр.
Вот чуть измененная схема этой строки тут добавилось две кнопки с подтягивающими резисторами изменения времени и часовым кварцем на 32768 Гц и еще один резистор подтягивающий вход контролера отвечающий за ввод клавиатуру.
Для более стабильной работы PIC16F877 лучше запитывать через резистор 11 ом 0.25 Ватт по плюсовому питанию для понижения помех идущих от транзисторов которые коммутируют строки табло.
Бегущая строка с часами и термометром для улицы и дома.
Бегущая строка работает на датчиках DS1820 и показывает температуру в доме и на улице путем вставки в текст бегущей строки вывода показаний на табло.
Показания выводиться в виде надписи ТЕМПЕРАТУРА ДОМ 25,2 УЛИЦА -12,4 показания температуры имеют младший показатель в виде десятой доли градуса.
Для вставки термометра в текст надо нажать клавишу левый ALT на компьютерной клавиатуре, подключенной к бегущей строке.
Диапазон температур выводимым термометром -55 до 99 градусов но не рекомендуется нагревать датчик выше 70 градусов во избежание его порче.
Длина провода идущего к датчику на улице должен быть не более 4 метров.
Есть прошивка с тремя Украинскими буквами.
Сигнал будильника снимается в виде лог 0 во время сигнала с 38 вывода PIC16F877
Список радиоэлементов
Обозначение | Тип | Номинал | Количество | Примечание | Магазин | Мой блокнот | |
---|---|---|---|---|---|---|---|
Схема 1 | |||||||
IC | МК PIC 8-бит | PIC16F877 | 1 | В блокнот | |||
IC1 | Микросхема памяти | 24C64 | 1 | В блокнот | |||
IC2, IC3 | Сдвиговый регистр | CD74HC595 | 20 | В блокнот | |||
VT1-VT8 | Биполярный транзистор | BD140 | 8 | В блокнот | |||
C1, C2 | Конденсатор | 100 нФ | 2 | В блокнот | |||
C3, C4 | Конденсатор | 15 пФ | 2 | В блокнот | |||
C5 | Конденсатор | 3.3 нФ | 1 | В блокнот | |||
R1-R16, R18, R19, R21-R24, R30, R31 | Резистор | 330 Ом | 24 | В блокнот | |||
Резистор | 330 Ом | 144 | В блокнот | ||||
R26, R27 | Резистор | 5.1 кОм | 2 | В блокнот | |||
R28, R29 | Резистор | 4.7 кОм | 2 | В блокнот | |||
Cr1 | Кварцевый резонатор | 20.000 МГц | 1 | В блокнот | |||
Светодиодная матрица | 8х8 | 20 | В блокнот | ||||
Разъём | PS/2 | 1 | В блокнот | ||||
Схема 2 | |||||||
IC | МК PIC 8-бит | PIC16F877 | 1 | В блокнот | |||
IC1 | Микросхема памяти | 24C64 | 1 | В блокнот | |||
Сдвиговый регистр | CD74HC595 | 20 | В блокнот | ||||
Биполярный транзистор | BD140 | 8 | В блокнот | ||||
C2 | Конденсатор | 100 нФ | 1 | В блокнот | |||
C3, C4 | Конденсатор | 15 пФ | 2 | В блокнот | |||
C5 | Конденсатор | 3.3 нФ | 1 | В блокнот | |||
C6, C7 | Конденсатор | 33 пФ | 2 | В блокнот | |||
C8 | Конденсатор электролитический | 47 мкФ | 1 | В блокнот | |||
R18, R19, R21-R24, R30, R31 | Резистор | 330 Ом | 24 | В блокнот | |||
Резистор | 330 Ом | 144 | В блокнот | ||||
R26, R27, R32, R33 | Резистор | 5.1 кОм | 4 | В блокнот | |||
R29, R34, R35 | Резистор | 4.7 кОм | 3 | В блокнот | |||
R36 | Резистор | 11 Ом | 1 | В блокнот | |||
Cr1 | Кварцевый резонатор | 20.000 МГц | 1 | В блокнот | |||
Cr2 | Кварцевый резонатор | 32768 Гц | 1 | В блокнот | |||
S1, S2 | Кнопка тактовая | 2 | В блокнот | ||||
Светодиодная матрица | 8х8 | 20 | В блокнот | ||||
Разъём | PS/2 | 1 | В блокнот | ||||
Схема 3 | |||||||
IC | МК PIC 8-бит | PIC16F877 | 1 | В блокнот | |||
IC1 | Микросхема памяти | 24C64 | 1 | В блокнот | |||
Сдвиговый регистр | CD74HC595 | 20 | В блокнот | ||||
Датчик температуры | DS18B20 | 2 |
- Второй вариант, DS18b20 ) .
Отображение в режиме бегущей строки — дата, месяц, год и день недели.
Общая схема.
— При нажатии
Кн2
Кн2
Кн1
–
Кн3
Кн2
UA-EN-RU
.
ds
18
b
20 №1 или №2.
Возможны схемные решения, с вариантами комбинаций для подключения датчиков, ниже примеры вариантов, с которыми данная программа будет работать корректно.
Схема в протеусе
прошивкой загрузчика ATmega328.)
FUSE, если кто будет использовать ICSP программатор для прошивки ATmega328 в этой схеме.
С помощью перемычек Jp -1, Jp -2, Jp RF
1сек. |
2сек. |
4сек. |
8сек. |
16сек. |
32сек. |
64сек. |
128сек. |
|
Jp -1 |
||||||||
Jp -2 |
||||||||
Jp -3 |
FUSE, ATtiny24а устанавливаются на внутренний генератор МК — 8МГц.
в архиве .
Радиодатчик для матричных часов, от батарейного питания, схема и прошивка в форуме.
DS18b20
, RTC
DS1307
, датчик освещения, кнопки управления, комплект
RF
-модулей, и блок питания 5 вольт (потребление схемы в пиковых моментах, при максимальной яркости, составляет до 0.6А, а в среднем это 0.3А, можно использовать и лишнюю зарядку от мобилки, если имеется с подходящими параметрами)
).
В чем интерес применения
Arduino Nano Atmega328
.
В том, что на борту этой платки уже имеется модем с выходом на мини USB, прошить такой контроллер можно без особого труда через bootloader, с помощью вашего компьютера и телефонного шнура для зарядки мобильного телефона с разъемом под мини USB.
Все это несложно делается с помощью простенькой программки
XLoader
.
Чуть подробней про опыт прошивки через bootloader, описывал здесь «Nano вольт — амперметр 2 канала.
«.
При желании все необходимые модули можно по выгодной цене купить на Aliexpress.
MAX7219 dot matrix |
Nano Atmega328 |
DS1307 |
DS18b20 |
Датчик освещения |
Блок питания |
После заказа, немного терпения пока все эти детальки придут по почте, и вы сможете себе гарантированно собрать, эту весьма интересную схему с часами и термометром.
В общем, с элементарной базой, думаю вопросов не должно возникнуть, так все здесь стандартно.
Оформление отображения вида работы часов — термометра, это уже любительский вариант исполнения.
В программе имеется три варианта оформления работы часов термометра.
- Первый вариант это, поочередное отображение времени (часы и минуты), уличной температуры и температуры помещения (два датчика DS18b20 ) .
Отображение в режиме бегущей строки — дата, месяц, год и день недели.
- Второй вариант, отображение времени (часы и минуты), температуры окружающего воздуха (один датчик DS18b20 ) .
Отображение в режиме бегущей строки — дата, месяц, год и день недели.
- Третий вариант, просто часы, отображение времени (часы и минуты),
отображение в режиме бегущей строки — дата, месяц, год и день недели (отображение температуры отключено).
Собственно различия вариантов небольшие, и заключается только в различиях отображения температуры на матричном дисплее часов термометра, практически каждый вариант может быть востребован.
Схема.
— В схеме использованы три кнопки управления, при кратковременном нажатии на эти кнопки, одноразово вызываем ротацию показаний на основном экране часы – дату — день недели – температура.
— При нажатии
Кн2
более 2х сек., осуществляется вход в меню установок (при нахождении в меню, нажатие
Кн2
более 2х сек., выход из меню установок).
— После входа в меню, кнопками
Кн1
–
Кн3
можно сделать коррекцию даты и времени, движение по меню осуществляется
Кн2
, изменяемый параметр будет находиться в инверсном свечении.
— Также в меню, возможно, если в этом есть необходимость, установить коррекцию неточности хода часов, в течение суток ±9сек.
— Следующий пункт в меню будет, это выбор используемого языка, в одной прошивке предусмотрено использование языков
UA-EN-RU
.
— Пункт варианта анимации на экране, один из трех, что описан в начале статьи.
— Радиодатчик, при выборе значение «0» , радиодатчик в программе не задействован, при выборе 1 или 2, показания температуры с радиодатчика займут место на дисплее, вместо
ds
18
b
20 №1 или №2.
Фото часов в процессе отладки на макетной плате.
Схема в протеусе
Схема передатчика для этих часов.
С помощью перемычек Jp -1, Jp -2, Jp -3, можно выбрать, частоту передачи RF -модулем пакетов информации с температурой от датчика №3.
1сек. |
2сек. |
4сек. |
8сек. |
16сек. |
32сек. |
64сек. |
128сек. |
|
Jp -1 |
||||||||
Jp -2 |
||||||||
Jp -3 |
(1 – перемычка замкнута, 0 – нет)
Печатная плата для часов, и радиодатчика.
FUSE для работы ATmega328 с загрузчиком (архив с прошивкой загрузчика ATmega328. )
FUSE, если кто будет использовать ICSP программатор для прошивки ATmega328 в этой схеме.
Прошивка “Часы – термометр на матричных модулях ” , печатные платы, proteus, в архиве .
В предлагаемом устройстве используются символьные светодиодные шестнадцатиэлементные индикаторы PSA08-11 с общими анодами. Выбор пал именно на них из-за невысокой стоимости, большого размера отображаемого символа и высокой яркости. Для того чтобы выводить максимум полезной информации, текст перемещается справа налево. На шести знакоместах поочерёдно отображаются текущее время, температура в помещении, температура вне его, число, день недели и месяц прописью, например, “18 МАРТА ЧЕТВЕРГ.
Счёт времени ведёт микросхема DS1307. Она представляет собой часы реального времени (Real Time Clock -RTC) со встроенным календарём. При выключенном общем питании эта микросхема продолжает работать от резервного источника — литиевого элемента CR2032 напряжением 3 В. Поскольку при отсутствии внешних обращений потребляемый микросхемой DS1307 ток не превышает 300 нА, счёт времени в таком режиме может продолжаться до десяти лет. Тактовый генератор этой микросхемы построен с применением внешнего кварцевого резонатора частотой 32768 Гц, что обеспечивает высокую точность хода. Микросхема отсчитывает секунды, минуты, часы, дни месяца (с учётом високосных лет), месяцы, дни недели и годы. Её календарь действителен до 2100 г. Более подробную информацию о ней можно получить в .
Для измерения температуры в устройстве применены цифровые термодатчики LM75, имеющие погрешность не более 2 °С в интервале температуры от -25 до +100°С. Более подробную информацию о них можно найти в .
Схема часов и термометра с бегущей строкой
показана на рис. 1. Все функции, за исключением счёта времени, выполняет микроконтроллер DD2 (PIC16F873A-20I/P), тактируемый встроенным генератором с кварцевым резонатором ZQ2. Для управления устройством предназначены кнопки SB1-SB5. Когда их контакты разомкнуты, резисторы R4-R8 обеспечивают высокий логический уровень на соответствующих входах микроконтроллера. Резистор R11 поддерживает высокий уровень на входе начальной установки микроконтроллера, предотвращая перезапуск программы случайными помехами.
Для питания часов необходим стабилизированный источник напряжения 5 В с максимальным током нагрузки не менее 600 мА. Его подключают к разъёму XS1. В авторском варианте используется зарядное устройство от сотового телефона. Конденсаторы С1 и С2 — сглаживающие, причём ёмкость конденсатора С1 должна быть не менее 1000 мкФ.
В часах предусмотрен будильник. Его звуковой сигнал подаёт пьезоизлучатель со встроенным генератором НА1 (НРА24АХ). По сигналам микроконтроллера им управляет ключ на транзисторе VT7. Подбирая резистор R18 в цепи базы этого транзистора, можно в некоторых пределах регулировать громкость звука.
Для индикации режимов работы предназначены светодиоды HL1-HL3 красного цвета свечения. Их яркость изменяют, подбирая резисторы R15- R17.
Для программирования микроконтроллера, установленного на плату, на ней имеется разъём ХР1. На время выполнения этой операции к нему присоединяют программатор, например, PICkit2, EXTRAPIC или другой подобный . В действующем устройстве этот разъём не нужен. Его можно не устанавливать, если до монтажа на плату запрограммировать микроконтроллер в панели программатора.
Программирование микроконтроллера заключается в загрузке программного кода из НЕХ-файла в его FLASH-память. Для этого требуется управляющая программатором программа, например WinPic800, которая находится в свободном доступе по адресу www.winpic800.com/descargas/WinPic800.zip в сети Интернет. Подробную инструкцию по программированию микроконтроллера также можно прочитать в .
Для упрощения программы микроконтроллера и устройства в целом микросхема RTC DD1 и датчики температуры ВК1 и ВК2 связаны с микроконтроллером по одной и той же шине I2C. Датчик ВК2 подключают к разъёму ХР2 кабелем длиной до нескольких метров по схеме, изображённой на рис. 2.
Резисторы R2 и R9 соединяют линии SCL и SDA шины I 2 C с плюсом питания, поддерживают на них высокий уровень в паузах передачи информации, как того требует спецификация шины. Более подробно об использовании этой шины можно узнать из . Адресные входы датчиков температуры ВК1 и ВК2 по-разному соединены с плюсом питания и общим проводом, что даёт микроконтроллеру возможность программно различать датчики.
Шестнадцатиразрядные параллельные коды для вывода информации на индикаторы образуются на выходах микросхем DD3 и DD4. Микроконтроллер DD2 заносит информацию в эти микросхемы последовательным кодом, используя для этого всего три линии своих портов В и С. Установив на линии RC6 и информационном входе сдвигового регистра микросхемы DD3 уровень, соответствующий значению (0 или 1) очередного разряда кода, он формирует на линии RC7 и тактовых входах обеих микросхем нарастающий перепад уровня. При этом уже содержащийся в соединённых последовательно сдвиговых регистрах код перемещается на одну позицию в сторону старшего разряда регистра DD4, а в освободившийся младший разряд регистра DD3 записывается значение, установленное микроконтроллером на его входе.
После шестнадцати таких операций весь код записан в образованный микросхемами DD3 и DD4 шестнадцатиразрядный сдвиговый регистр. Однако на выходах микросхем этот код ещё не появился, на них продолжает действовать тот, что был выведен в предыдущем цикле. Чтобы обновить состояние выходов, микроконтроллер формирует нарастающий перепад уровня на своей линии RB0 и входах записи кода из сдвиговых регистров микросхем DD3 и DD4 в их регистры хранения. Более подробно с работой микросхемы преобразователя последовательного кода в параллельный 74НС595 можно ознакомиться, прочитав .
После записи кода в микросхемы DD3 и DD4 микроконтроллер подаёт команду включить тот из шести индикаторов, для катодов элементов которого этот код предназначен. Чтобы не перегружать выходы микроконтроллера, аноды индикаторов соединены с ними через ключи на транзисторах VT1-VT6. Схема платы индикаторов показана на рис. 3, а условные обозначения элементов индикатора PSA08-11SRW – – на рис. 4. Разъёмы ХР1 и ХР2 платы индикаторов соединяют соответственно с разъёмами XS3 и XS2 основной платы.
Чертежи основной платы и размещения элементов на ней приведены на рис. 5. Она изготовлена из фольгированного с одной стороны стеклотекстолита. Плата рассчитана на установку датчика температуры ВК1 в корпусе DIP8, однако датчик LM75AD выпускают в корпусе SO8 для поверхностного монтажа, поэтому устанавливать его следует через плату-переходник (рис. 6). На рис. 5 контур переходника показан штрихпунктирной линией. В соответствующие отверстия переходника и платы вставляют и пропаивают с обеих сторон отрезки провода. Можно, конечно, изменив топологию печатных проводников на основной плате, обойтись и без переходника.
Двусторонняя печатная плата индикаторов показана на рис. 7. Обратите внимание, что разъёмы на ней устанавливают со стороны, противоположной той, где находятся индикаторы. При сочленении разъёмов обе платы располагаются одна над другой “этажеркой”, как можно видеть на фотоснимке рис. 8.
Транзисторы КТ502Б можно заменить любыми той же серии. Вместо светодиодов АЛ307БМ подойдут и другие маломощные красного цвета свечения, например АЛ310А.
Правильно собранное устройство с корректно запрограммированным микроконтроллером в налаживании не нуждается и начинает работать сразу после включения.
После подачи питания первым на индикаторы выводится приветственное сообщение. За ним следует время в 12- или 24-часовом формате, который можно выбрать в соответствующем пункте меню. Далее бегущая строка с текущим временем на 10с останавливается. По их истечении выводятся температура в помещении (показания датчика ВК1), температура на улице (показания датчика ВК2) и выдерживается ещё одна десятисекундная пауза, в течение которой индикатор показывает уличную температуру. После этого выводится число, за ним месяц и день недели прописью, после чего цикл (за исключением приветственного сообщения) повторяется.
Для установки текущего времени и других параметров переходят в режим “Меню” кратковременным нажатием на кнопку SB3 “М”. Включается светодиод HL2, показывая, что этот режим включён. На индикаторе после сообщения “НАСТРОЙКА” выводится и останавливается строка “ЧАС XX”, где XX — текущее значение часа, которое можно увеличить нажатием на кнопку SB1 “+” или уменьшить нажатием на кнопку SB5 “-“.
Для того чтобы перейти к следующему пункту меню, нажимают на кнопку SB2 “>”. С её помощью меню можно “листать” в указанном далее порядке, с помощью кнопки SB4 “” выводится строка “МИН XX”, затем “ГОД 20ХХ” (по умолчанию 2011), далее “МЕСЯЦ XX”, “ЧИСЛО XX”, “ДЕНЬ НЕДЕЛИ XX”, “БУД_ЧАС XX” (час срабатывания будильника), “БУД_МИН XX” (минуты срабатывания будильника).
Затем на индикаторе появляется одна из строк “БУД ВЫКЛ” или “БУД ВКЛ”, отображая текущее состояние будильника. Его можно менять, нажимая на кнопку SB1 “+” или SB5 “-“. Когда будильник включён, горит светодиод HL1, сигнализируя об этом.
Далее выводится строка “ФОРМАТ XX”, где XX равно 12 или 24 в зависимости от выбранного нажатиями на кнопку SB1 “+” или SB5 ” формата отображения времени. После очередного нажатия на SB2 “>” выводится строка “ПОКА”, выключается светодиод HL2, часы переходят в обычный рабочий режим.
Когда текущее время совпадает с заданным временем срабатывания будильника, включаются светодиод HL3 и излучатель звука НА1. Чтобы отключить световую и звуковую сигнализацию, достаточно нажать на любую кнопку. Электрический сигнал для управления внешним исполнительным устройством при необходимости можно снять с выхода RB5 микроконтроллера, к которому через резистор R17 подключён светодиод HL3.
При выключенном внешнем питании устройство продолжает счёт времени — микросхема DD1 работает от литиевого элемента G1.
Прилагаемые файлы: source.zip
ЛИТЕРАТУРА
1. DS1307 – 64 X 8 часы реального времени с последовательным интерфейсом. – www.piclist.ru/D-DS-DSB1 “+”307-RUS/D-DS-DS1307-RUS.html
2. LM75A Digital tem- perature sensor and thermal watchdog. www.alldatasheet.com/datasheet-pdf/pdf/100962/PHILIPS/LM75AD.html
3. Долгий А. Программаторы и программирование микроконтроллеров. – Радио, 2004, № 1, с. 53.
4. Семёнов Б. Ю. Шина I2C в радиотехнических конструкциях. – М.: “СОЛОН-Р”, 2002.
5. 74НС595; 74НСТ595 8-bit serial-in, serial or parallel-out shift register with output latches; 3-state. — www.nxp.com/documents/data_sheet/74HC_HCT595.pdf
В. БАЛАНДИН, с. Петровское Тамбовской обл.
“Радио” №9 2012г.
Разработка средств измерения температуры
Объект. Микроконтроллер ATmega16.
Предмет. Измерение температуры
Цель. Измерение температуры контактным методом.
Задачи. Измерение температуры контактным методом, обработка измерительного сигнала с помощью микроконтроллера и вывода значения температуры на 7-сегментный дисплей.
Программное обеспечение:
1. Программная среда разработки AVRStudio или AtmelStudio, для разработки программ для МК AtmelAVR® (Atmel).
2. Стандартный Windows-приложение — калькулятор (Microsoft).
3. Пакет программ для автоматизированного проектирования электронных схем – Proteus DesignSuite CAD Software (Labcenter electronics).
Ход работы предусматривает последовательное выполнение рекомендаций и действий, описанных далее в этом проекте по пунктам.
СОДЕРЖАНИЕ
1. ВСТУПЛЕНИЕ
2. АППАРАТНАЯ РЕАЛИЗАЦИЯ ПРОЕКТА
2.1 Микроконтролер ATmega16
2.2 Датчик температуры DS18B20
2.3 Четырехразрядный семисегментный индикатор
2.4 Моделирование электронной схемы проекта
3. ПРОГРАМННАЯ РЕАЛИЗАЦИЯ ПРОЕКТА
3.1 Среда разработки AtmelStudio
3.2 Разработка программы
ЗАКЛЮЧЕНИ
1. Вступление
Температура — физическая величина, являющаяся мерой интенсивности теплового движения атомов и молекул.
Контактный метод измерения температуры метод измерения температуры при теплового контакта между объектами измерения и чувствительным элементом измерительного оборудования.
Измерительная система — разновидность информационно-измерительной системы в виде совокупности измерительных каналов, измерительных устройств и других технических средств, объединенных для создания сигналов измерительной информации о нескольких измеряемых физических величин. Перечисленные элементы измерительной системы объединены общим алгоритмом функционирования для получения данных о величинах, характеризующих состояние объекта исследования. Информационные системы могут быть составляющими развитых структур измерительных информационных систем и систем управления, на которые возлагаются функции контроля, диагностики, распознавания образов, автоматического управления научными экспериментами, испытаниями сложных объектов и технологическими процессами.
Средство измерения делаем на базе микроконтроллера AVRATmega16.
AVR — семья восьмибитных микроконтроллеров фирмы Atmel.
Микроконтроллеры AVR имеют гарвардскую архитектуру и систему команд, близкую к идеологии RISC. Процессоры AVR имеют 32 8-битных регистров общего назначения. Максимальная тактовая частота — 20 мегагерц, короткие команды выполняются за один такт.
Разработка аппаратного обеспечения и моделирования работы измерительной системы может быть выполнена с помощью пакета программ Proteus DesignSuite CAD Software (Labcenterelectronics).
2. Аппаратная реализация проекта
Средство измерения температуры создаем на базе микроконтролера AVR ATmega16.
AVR — семейство восьмибитных микроконтроллеров, ранее выпускались фирмой Atmel, затем Microchip.
Микроконтроллеры AVR имеют гарвардскую архитектуру (программа и данные находятся в разных адресных пространствах) и систему команд, близкую к идеологии RISC. Процессор AVR имеет 32 8-битных регистра общего назначения, объединенных в регистровый файл. В отличие от «идеального» RISC, регистры не абсолютно ортогональны.
Система команд микроконтроллеров AVR очень развита и насчитывает в разных моделях от 90 до 133 различных инструкций. Большая часть команд Занимает всего 1 ячейку памяти (16 бит). Большинство команд выполняется за 1 такт.
Управление периферийными устройствами осуществляется через Адресное пространство данных.Для измерения температуры используем цифровой датчик температуры DS18B20. Если нет особых требований к датчику температуры по параметрам, условиям работы, цене, то очевидным решением является выбор цифрового датчика для совместной работы с микроконтроллером. Цифровые датчики могут подключаться через довольно длинные проводные линии; в отличие от слабых аналоговых сигналов, поступающих из других типов датчиков, цифровой сигнал устойчив к воздействию помех. Используемые интерфейсы позволяют в одной линии подключить сразу несколько цифровых датчиков. Цифровая форма передачи данных позволяет использовать цифровые датчики температуры совместно с совсем простыми микроконтроллерами, не имеющих АЦП и даже не имеют нужного цифрового интерфейса — используемые интерфейсы достаточно просты и легко реализуются программно.
Значение температуры должно отражаться на 4-разрядном 7-сегментном индикаторе.
2.1 Микроконтролер ATmega16
ATmega16 — 8-разрядный высокопроизводительный AVR микроконтроллер с
малым энергопотреблением.
Микроконтролер ATmega16Технические характеристики:
Серия | AVRATmega |
Ядро | AVR |
Ширина шины данных | 8-біт |
Тактова частота | 16 МГц |
Количество входов / выходов | 32 |
Объем памяти программ | 16 кбайт (8k*16) |
Тип памяти программ | Flash |
Объем EEPROM | 512*8 |
Объем SRAM | 1k*8 |
Наличие АЦП/ЦАП | АЦП 8*10b |
Встроенные интерфейсы | I2C, SPI, UART |
Встроенная периферия | Brown-outdetect/reset, POR, PWM, WDT |
Напряжение питания | 4.5…5.5 В |
Рабочая температура | -40…+85 ºC |
Отличительные особенности:
Прогрессивная RISC архитектура
130 высокопроизводительных команд, большинство команд выполняется за один тактовый цикл
32 8-разрядных рабочих регистра общего назначения
Полностью статическая работа
Производительность приближается к 16 MIPS (при тактовой частоте 16 МГц)
Встроенный 2-цикловийперемножувач
Энергонезависимая память программ и данных
Обеспечивает 1000 циклов стирания / записуFlashи 100000 циклов стирания / записи EEPROM
Дополнительный сектор загрузочных кодов с независимыми битами блокировки
внутрисистемных программирования встроенной программой загрузки
Обеспечена режим одновременного чтения / записи (Read-While-Write)
Программируемый блокировки, обеспечивает защиту программных средств пользователя
Интерфейс JTAG (совместим с IEEE 1149.1)
Возможность сканирования периферии, соответствует стандарту JTAG
Расширенная поддержка встроенной отладки
Программирование через JTAG интерфейс: Flash, EEPROM памяти, перемычек и битов блокировки
Встроенная периферия
Один 16-разрядный таймер / счетчик с отдельным предварительным делителем и режимами захвата и сравнения
Счетчик реального времени с отдельным генератором
Четыре канала PWM (ШИМ)
8-канальный 10-разрядный аналого-цифровой преобразователь
Два 8-разрядных таймера / счетчика с отдельным предварительным делителем, один с режимом сравнения
8 несимметричных каналов
7 дифференциальных каналов (только в корпусе TQFP)
2 дифференциальных канала с программируемым усилением в 1, 10 или 200 раз (только в корпусе TQFP)
Байт-ориентированный 2-проводной последовательный интерфейс
Программируемый последовательный USART
Последовательный интерфейс SPI (ведущий / ведомый)
Программируемый сторожевой таймер с отдельным встроенным генератором
Встроенный аналоговый компаратор
Специальные микроконтроллерные функции
Сброс по подаче питания и программируемый детектор кратковременного снижения напряжения питания
Встроенный калиброванный RC-генератор
Внутренние и внешние источники прерываний
Шесть режимов пониженного потребления: Idle, Power-save, Power-down, Standby, ExtendedStandby и снижение шумов ADC
Выводы I / O и корпуса
Описание выводов микроконтроллераVCC -питание.
GND — земля.
Port A (PA7..PA0) служит в качестве аналоговых входов преобразователя A / D.
Port A также служит в качестве 8-битный двунаправленный порт ввода / вывода, если преобразователь A / D не используется.
Port B (PB7..PB0) является 8-битным двунаправленным портом ввода / вывода с внутренними подтягуючемые резисторы (выбранными для каждого бита).
Port B также выполняет функции различных специальных функций ATmega16.
Port C (PC7..PC0) является 8-битным двунаправленным портом ввода / вывода с внутренними подтягуючимые резисторами (выбранными для каждого бита).
Port C также выполняет функции интерфейса JTAG и других специальных функций ATmega16.
Port D (PD7..PD0) является 8-битным двунаправленным портом ввода / вывода с внутренними подтягивающий резистор (выбранными для каждого бита).
Port D также выполняет функции различных специальных функций ATmega16.
RESET — сброс входных данных. Низкий уровень на этом выводе дольше минимальной длины импульса приведет к сбросу.
XTAL1 — вход на инвертирующий усилитель осциллятора и вход во внутреннюю схемы работы часов.
XTAL2 — выход из инвертирующего усилителя осциллятора.
AVCC — это контактный разъем питания для порта A и A / D преобразователя. Она должна быть внешне подключена к VCC, даже если АЦП не используется. Если используется АЦП, он должен быть подключен к VCC через фильтр низких частот.
AREF- это аналоговый контрольный пин для A / D-преобразователя.
2.2 Датчик температуры DS18B20
DS18B20 — цифровой температурный датчик, имеет много функций. По сути, DS18B20 — это целый микроконтроллер, который может хранить значения измерений, сигнализировать о выходе температуры за установленные пределы (сами границы мы можем устанавливать и изменять), менять точность измерений, способ взаимодействия с контроллером и многое другое. Все это в очень небольшом корпусе, который, к тому же, может быть в водонепроницаемом исполнении.
Описание выводов датчика:
датчик DS18B20VDD – питание.
GND – земля.
DO–цифровой выход.
Микросхема имеет три выхода, из которых для данных используется только один, два других — это земля и питание. Число проводов можно сократить до двух, если использовать схему с позитивным питанием и соединить VDD с землей. К одному провода данным можно подключить сразу несколько датчиков DS18B20 и в микроконтроллере ATmega16 будет задействован только один пин.
Технические характеристики:
Напряжение питания | 3,0…5,5 В |
Потребляемый ток | 1,5 мА (рабочий режим) 1 мкА (спящий режим) |
Диапазон измеряемых температур | -55…+125 ºC |
Разрешение АЦП | 9…12 біт |
Абсолютная погрешность | ±0.5 ºC (в диапазоне от -10 до +85 ºC) ±2ºC (в диапазоне от -55 до +125 ºC) |
Максимальное время полного 12-Разрядного преобразования | ~750 мс |
Интерфейс | 1-Wire |
Схема подключення:
DS18B20Для корректной работы между 2 и 3 выводами датчика (VDDта DO) необходимо устанавливать резистор номиналом 4,7 кОм.
Особенности датчика:
Интерфейс 1-Wire® требует только одного порта для связи
Каждое устройство имеет уникальный 64-битный серийный код, хранящийся в бортовом ПЗУ
Возможность многоканального подключения упрощает измерения температуры
Питание может осуществляться от линии данных
Разрешение термометра по выбору от 9 до 12 бит
Микросхема имеет встроенный механизм сигнализации о выходе температуры за один из выбранных диапазонов.
2.3 Четырехразрядный семисегментный индикатор
Результаты измерения отображаются на 4-разрядном 7-сегментном LED индикаторе.
Семисегментный индикаторСемисегментный индикатор — устройство отображения цифровой информации. Это наиболее простая реализация индикатора, который может отображать арабские цифры. Для отображения букв используются более сложные многосегментные и матричные индикаторы.
Семисегментный индикатор, как понятно из его названия, состоит из семи элементов индикации (сегментов), включаемых и исключаются отдельно. Включая их в различных комбинациях, из них можно составить упрощенные изображения арабских цифр. Часто семисегментный индикаторы делают в курсивное начертание.
Сегменты обозначаются буквами от A до G; восьмой сегмент — десятичная точка (decimalpoint, DP), предназначенная для отображения чисел с плавающей точкой.
Расположение выводов 4-разрядного семисегментного индикатора:
4-разрядный 7-сегментный индикатор имеет 12 выводов. Выводы A-G отвечают сегментам, обозначенные этими буквами, decimal — точка, D1-D4 соответствуют номеру разряда справа налево.
Технические характеристики:
Напряжение питания | 1,8 В |
Рабочий ток | 20 мА |
Количество разрядов | 4 |
Рабочая температура | -35…+85 ºC |
2.4 Моделирование электронной схемы проекта
Моделирование электронной схемы проекта выполняем с помощью пакета программ ProteusDesignSuiteCADSoftware (Labcenterelectronics).
ProteusDesign — пакет программ для автоматизированного проектирования (САПР) электронных схем. Разрабатывается компанией LabcenterElectronics (Великобритания).
Пакет представляет собой систему схемотехнического моделирования, базирующуюся на основе моделей электронных компонентов, принятых в PSpice. Отличительной чертой пакета ProteusDesign является возможность моделирования работы программируемых устройств: микроконтроллеров, микропроцессорных систем, DSP и ин. Причем в Proteus полностью реализована концепция сквозного проектирования, когда например инженер меняет что-то в логике работы схемотехники и программный пакет тут же «подхватывает» данные изменения в системе трассировки. Библиотека компонентов содержит справочные данные. Дополнительно в пакет PROTEUS VSM входит система проектирования печатных плат. Пакет Proteus состоит из двух частей, двух подпрограмм: ISIS — программа синтеза и моделирования непосредственно электронных схем и ARES — программа разработки печатных плат. Вместе с программой устанавливается набор демонстрационных проектов для ознакомления.
Также в состав восьмой версии входит среда разработки VSM Studio, что позволяет быстро написать программу для микроконтроллера, используемого в проекте, и скомпилировать.
Пакет является коммерческим. Бесплатная ознакомительная версия характеризуется полной функциональностью, но не имеет возможности сохранения файлов.
Примечательной особенностью является то, что в ARES можно увидеть 3D-модель печатной платы, позволяет разработчику оценить устройство еще на стадии разработки.
Система поддерживает подключение новых элементов (SPICE) и подключения различных компиляторов (PICOLO, ARM-образные, AVR и т.д.).
Также программа включает в себя инструменты USBCONN и COMPIM, которые позволяют подключить виртуальное устройство к USB- и COM-портов компьютера.
Моделирование аппаратного обеспечения проекта начнем с запуска программы ProteusDesignSuiteCADSoftware. Для этого необходимо дважды кликнуть по ярлыку Proteus.
Создаем новый проект. Для этого в строке меню находится в верхней части окна выбираем File → NewProject. Задаем имя проекта, путь к файлам проекта, выбираем шаблон формата бумажного документа DEFAULT, шаблон монтажной платы пропускаем, создаем проект с использованием встроенных в Proteusпрограм для семейства микроконтроллеров AVR, микроконтроллера ATmega16; компилятор AVRASM (Proteus) файл быстрого старта не создаем.
Все необходимые в проекте компоненты выбираем из списка библиотеки компонентов, которую открываем с меню Library → Pickpartsfromlibraries. Открывается окно PickDevices. Выбранный компонент добавляется в список компонентов в окне DEVICES. В дальнейшем, компоненты из этого списка размещаем в рабочем окне проекта.
Поиск необходимого компонента осуществляем, введя ключевое слово или по категории и подкатегории, или по производителю компонента.
Выбираем микроконтроллер. Вводим ключевое слово ATMEGA, и в списке результатов поиска выбираем необходимый компонент — ATMEGA16. Подтверждаем выбор, два раза кликнув левой кнопкой мыши на элемент списка, после чего, избранный компонент появляется в окне DEVICES.
Далее по аналогии добавляем в окно DEVICES другие компоненты.
Список необходимых компонентов:
· ATMEGA16 – микроконтролер ATmega16
· DS18B20 – цифровой датчик температуры
· 7SEG-MPX4-CA – четырехразрядный семисегментный индикатор с общим анодом
· RES – резистор
· OSCILLOSCOPE – осциллограф
Размещаем все выбранные компоненты в окне проекта.
На вертикальной панели инструментов расположена кнопка TerminalsMode, что открывает окно TERMINALS, из которого выбираем компоненты POWER (питание) и GROUND (земля), и располагаем их в рабочем окне проекта.
Для того, чтобы отредактировать свойства компонента, необходимо дважды кликнуть по нему мышкой. На экране появится окно редактирования компонента.
На вертикальной панели инструментов нажимаем кнопку SelectionMode и соединяем между собой компоненты линиями-проводами следующим образом:
Электронная схема проектаПосле создания электронной схемы сохраняем проект и закрываем программу Proteus.
3. ПРОГРАМННАЯ РЕАЛИЗАЦИЯ ПРОЕКТА
Для разработки программного обеспечения для микроконтроллеров AVRиснуе много сред разработки. Некоторые из них приведены в списке ниже:
WinAVR- программный пакет под Windows, включающий в себя компилятор, ассемблер, компоновщик и другие инструменты.
AlgorithmBuilder- алгоритмическая среда разработки программного обеспечения для микроконтроллеров с архитектурой AVR.
Code :: Blocks – кросс платформенного среду разработки.
Avrdude- средство для прошивки микроконтроллеров.
AVR-Eclipse-плагин для среды разработки Eclipse, позволяет разрабатывать программы на С / С ++ и ассемблере, программировать и отлаживать контроллеры, используя внешний набор инструментов (WinAVR, Atmel AVR Toolchain)
AtmelStudio- бесплатная IDE от самой Atmel
ArduinoIDE — бесплатная среда разработки для плат Arduinoна базе микроконтроллеров AVR.
Программное обеспечение для средства измерения температуры создаем в программной среде разработки AVRStudio или AtmelStudio, используемый для разработки программ для МК AtmelAVR® (Atmel).
Программное обеспечение с помощью AtmelStudio можно разработать с использованием следующих языков программирования:
Программу создаем с использованием языка программирования AVRAssembler.
3.1 Среда разработки AtmelStudio
AtmelStudio (ранее AVRStudio) — основанное на VisualStudio бесплатное проприетарное интегрированную среду разработки (IDE) для разработки приложений для 8- и 32-битных микроконтроллеров семейства AVR и 32-битных микроконтроллеров семейства ARM от компании Atmel, работающий под управлением операционных систем Windows NT / 2000 / XP / Vista / 7/8/10. AtmelStudio содержит компилятор GNU C / C ++ и эмулятор, позволяющий наладить выполнения программы без загрузки в микроконтроллер.
Ранее среда разработки носило название AVR Studio, но начиная с версии 6.0, вышедшей в 2012 году, в нее была добавлена поддержка разработки для микроконтроллеров архитектуры ARM, также выпускаются фирмой Atmel, и среда разработки получило новое название AtmelStudio. Текущая версия (AtmelStudio 7) поддерживает все микроконтроллеры архитектур AVR, AVR32 и ARM, выпускаемые на сегодняшний день фирмой Atmel.
AtmelStudio содержит в себе менеджер проектов, редактор исходного кода, инструменты виртуальной симуляции и внутрисхемного наладка, позволяет писать программы на ассемблере или на C / C ++.
Характеристики AVRStudio:
Интегрированный компилятор C / C ++;
Интегрированный симулятор;
С помощью плагина возможна поддержка компилятора GCC в виде сборника WinAVR;
Поддержка инструментов Atmel, совместимых с 8-разрядной AVR архитектурой, в том числе AVR ONE !, JTAGICE mkI, JTAGICE mkII, AVR Dragon, AVRISP, AVR ISPmkII, AVR Butterfly, STK500 и STK600;
Поддержка плагина AVR RTOS;
Поддержка AT90PWM1 и ATtiny40;
Интерфейс командной строки с поддержкой TPI.
3.2 Разработка программы
Создаем проект, используя интегрированную платформу разработки AtmelStudioдля разработки и отладку программ для МК AtmelAVR.
Загружаем AtmelStudio. Создаем новый проект:
Выбираем тип проекта, Atmel AVR Assembler (AVR Assembler Project)
Вводим имя проекта
Вводим местоположение проекта
Выбираем отладочных платформу, AVRSimulator
Выбираем МК, ATmega16
Нажимаем кнопку Finish
Окно редактора программы можно открыть, дважды кликнув на имя выходного файла * .ASM окне Project.
В окне редактора программы набираем следующий программный код:
.include "m16def.inc" // подключаете заголовочный файл
.deftemp = r16 // Присваиваем регистр символические имена
.defrazr1 = r17
.defrazr2 = r18
.defrazr3 = r19
.defsys = r20
.deftry = r21
.defcount = r22
.equch0 = 0x03 // 0 для отображения
.equFREQ = 8000000 // Частота процессора
.equW1_DDR = DDRA // Регистр порта датчика
.equW1_PORT = PORTA // Регистр порта датчика
.equW1_PIN = PINA // Регистр порта датчика
.equW1_BIT = 0 // Бит порта на котором датчик
.dseg // ОЗУ
Trm: // 2 комирку под температуру
.byte2
Visible: // 4 ячейки под отображение на индикатор
.byte4
Otobr: // 4 ячейки под промежуточные вычисления
.byte4
.cseg // Программный сегмент
.org0 // Вектор прерывания Reset
jmpReset // Переходим на Reset
.org $ 012 // Вектор прерывания запереполненнием таймера 0
jmpTIM0_OVF // динамично индикация
Reset: // Предустановки
lditemp, 128
outMCUCSR, temp // Вимкнемо JTAG, бит JTD в MCUCSR = 1
lditemp, high (RAMEND) // Инициализуемо в стек
out sph, temp
lditemp, low (RAMEND)
out spl, temp
lditemp, 0xFF // Порты DиCна выход, там семисегментный индикатор
out DDRD, temp
out DDRC, temp
lditemp, 128
outMCUCSR, temp // Выключим JTAG, бит JTD = 1
lditemp, 0b00000010
outTCCR0, temp // Установим предделитель таймера, биты CS
lditemp, 1
outTIFR, temp // Позволим прерывания запереповненням, битTOV0 = 1
outTIMSK, temp
ldisys, 0b10000000 // Установим sys на первый разряд индикатора
Proga_Pred:
rcallW1_Sbros // Сбрасываем шину и проверяем есть ли датчик
cpir17 0 // После сброса, если датчик евr17 будет 1
breqProga_Pred // Если этого нет, идем в бесконечность проверки
rcallW1_Init_12bit // Перестроюемо конфигурационный байт на 9 битную схему работы
sei // позволяется прерывания
Proga:
cli // Запрещаем прерывания на время работы с датчиком
rcallW1_Sbros // Сбрасываем шину и перевиряемочы есть датчик
cpir17 0 // После сброса, если датчик есть в r17 будет 1
breqProga // Если этого нет, идем в бесконечность проверки
rcallW1_ConvTemp // Говорим датчику конвертировать температуру
sei // позволяется прерывания и ждем
rcallDelay // Подождем несколько секунд, пока датчик закончит конвертировать
Proga 0:
cli // Запрещаем прерывания на время работы с датчиком
rcallW1_Sbros // Сбрасываем шину и перепроверяем есть датчик
cpir17 0
breqProga0 // Если этого нет, идем в нескончаемость проверки
rcallW1_ReadMem // Читаем в ОЗУ текущую температуру
sei // позволяется прерывания и начинаем пересчет температуры
lditemp, 0x00 // обнуляем ячейки, где будет температура
stsOtobr + 1, temp
stsOtobr + 2, temp
stsOtobr + 3, temp
ldstemp, Trm // Загружаем старший регистр температуры
sbrstemp, 7 // Проверим положительная у нас температура
rjmpProga_Plusovay // если 7 бит установлен пропускаем эту срока, то есть температура -
lditemp, 0b11111101 // Запишем в Otobr отображения сегменту G, то есть "-"
stsOtobr, temp // Сохраним в 1 разряд
ldstemp, Trm // Загружаем в temp старший регистр температуры
anditemp, 0b00001111 // Выполняем логическое И с константой, отсекаем 4 бита слева
ldirazr1, 0x0F // Записываем число 0x0F в razr1
subrazr1, temp // Отнимаем от 0x0F число из старшего регистра датчика
ldstemp, Trm + 1 // Загружаем в temp младший регистр температуры
anditemp, 0b11110000 // Выполняем логическое И с константой, отсекаем 4 бита справа
ldirazr2, 0xF0 // Записываем число 0xF0 в razr2
subrazr2, temp // Вычитаем от 0xF0 число с младшего регистра датчика
swaprazr2 // Меняем тетради младшего регистра датчика
incrazr2 // Увеличиваем мона 1
swaprazr2 // Изменение назад тетради младшего регистра датчика
rcallRasch_Decimal // Вызываем под программу пересчета температуры в десятинный вид
rcallRasch_Otobr // Вызываем под программу конвертации учитаемий вид
rcallOtobr_Visible// Вызываем подпрограмму перезаписи ячеек
rjmpProga // Переходим на Proga
Proga_Plusovay: // Пришли, если температура +
lditemp, 0b11111111 // Запишем в Otobr отображения "Ничего", то есть "+"
stsOtobr, temp
ldsrazr1, Trm // Загрузим старший регистр температуры
ldsrazr2, Trm + 1 // Загрузим младший регистр температуры
andirazr2, 0b11110000 // Выполняем логическое С константой, отсекаем 4 бита справа
// Этим мы от Сика с младшего бита мусора десятинности температуры
rcallRasch_Decimal // Вызываем подпрограмму пересчете температуры в десятинный вид
rcallRasch_Otobr // Вызываем подпрограмму преобразования в читабельный вид
rcallOtobr_Visible // Вызываем подпрограмму перезаписи ячеек
rjmpProga // Переходим на Proga
Rasch_Decimal: // Пересчет регистра на десятинную форму
swaprazr1 // Изменим тетради в razr1 (старший регистр)
swaprazr2 // Изменим тетради в razr2 (молодшийрегистр)
addrazr1, razr2 // Просуммируем регистры, теперь получена температура в razr1
cpirazr1 0 // Проверим, не 0 градусов
breqNULL_Temp // Перейдемоякщо 0 градусов
Rasch_Decimal0:
ldiXH, High (Otobr + 3) // Загрузим ячейку Otobr + 3 в регистр косвенной адресации X
ldiXL, Low (Otobr + 3)
ldtemp, X // Загрузим с Otobr + 3 значения
inctemp // Увеличим на 1
stX, temp // Сохраним назад в Otobr + 3
cpitemp, 10 // Проверим на 10
brneRasch_Decimal1 // Если не равно перейдем по метке
lditemp 0 // если же = 10, тогда обнулить Otobr + 3
stX, temp
ldtemp, -X // А здесь уже загрузим Otobr + 2 и проведем те же манипуляции
inctemp
stX, temp
cpitemp, 10
brneRasch_Decimal1
lditemp 0
stX, temp
ldtemp, -X
inctemp
stX, temp
Rasch_Decimal1:
decrazr1 // Зменшимона 1 razr1
brneRasch_Decimal0 // Если не = 0 перейдем заметкой
ret // иначе все пересчитали и выходим из подпрограммы
Rasch_Otobr: // Пересчет регистров вчитабельну форму
ldstemp, Otobr + 3 // Загрузим в temp значение ячейки Otobr + 3
rcallRasch_Otobr_Podp // Вызовем подпрограмму пересчете
stsOtobr + 3, razr1 // Сохраним полученное значение в Otobr + 3, ниже по аналогии
ldstemp, Otobr + 2
rcallRasch_Otobr_Podp
stsOtobr + 2, razr1
ldstemp, Otobr + 1
rcallRasch_Otobr_Podp
stsOtobr + 1, razr1ret
Rasch_Otobr_Podp: // Подпрограмма пересчете в читабельную форму
ldiZH, High (CH * 2) // Загрузим в Z наш адрес цифр у памяти программ
ldiZL, Low (CH * 2)
inctemp // Увеличим temp на 1
Rasch_Otobr_Podp0:
lpmrazr1, Z + // Загрузим с программно и памяти число вrazr1
dectemp // Снизим temp
brneRasch_Otobr_Podp0 // Если temp не = 0 перейдем
ret // Если же = 0, выйдем из подпрограммы и в razr1 у нас полученное число
NULL_Temp: // т.к. уOtobr ячейках и так 0, просто выйдем из подпрограммы
ret
Otobr_Visible: // Переписываем готовы ячейки с Otobr у Visible
cli // Запретим прерывания
ldstemp, Otobr
stsVisible, temp
ldstemp, Otobr + 1
stsVisible + 1, temp
ldstemp, Otobr + 2
stsVisible + 2, temp
ldstemp, Otobr + 3
stsVisible + 3, temp
sei // Позволим прерывания
ret
TIM0_OVF: // Динамическая индикация
cli // Запрещаем прерывания
pushtemp // Записываем temp в стек
intemp, SREG // Достаем значение SREG в temp
pushtemp // и сохраняем в стеке
lsrsys // Логический сдвиг вправо
cpisys, 0b00001000 // Проверяем не вышло за границы сегментов
brneTIM0_OVF_Vix // если не получилось переход моза меткой
ldiYH, High (Visible) // а если вышло за границы, обнулить регистровую пару Y
ldiYL, Low (Visible)
ldisys, 0b10000000 // Поставим 7 бит регистра sys, он контролирует который разряд включительно.
TIM0_OVF_Vix:
ldtemp, Y + // Загрузим значение Y и повысим его адрес
outPORTD, sys // Отправим сегмент в порт
outPORTC, temp // И число или знак который выводим
poptemp // Достаем из стека значенния SREG
outSREG, temp // инадсилаемо назад в SREG
poptemp // Достаем значення temp
sei // позволяется прерывания
reti // Выходим из прерывания
//////////////////////////// Начало подпрограмм 1-Wire
W1_Sbros: // Сложения шины и проверка на месте датчик
ldsr16, W1_BIT // Записываем в r16 ножку де датчик
sbiW1_DDR, W1_BIT // Ножку на выход
cbiW1_PORT, W1_BIT // Опракидуем вывод на землю
rcallW1_DelayH // Задержка 480 мкс, для сброса
cbiW1_DDR, W1_BIT // Ножку на вход
rcallW1_DelayI // Ждем тайм слот 70 мкс
sbisW1_PIN, W1_BIT // Пропускает мо следующею срока, если бит порта в 1
ldir17, 1 // И установим сигнальный регистр в 1
sbicW1_PIN, W1_BIT // Пропускаем следующую строку, если бит порта в 0
ldir17 0 // И установим сигнальный регистр в 0
rcallW1_DelayJ // Ждем тайм слот 410 мкс
ret // Если датчик на месте, в r17 по выходе отсюда будет 1, в противном случае 0
W1_ReadMem: // Чтения памяти регистре в температуры
ldir16, 0xCC // Вышлем команду 0xCC, это пропустить уникальный номер датчика
rcallds_byte_wr // Так как он у нас один на проводе
ldir16, 0xBE // Говорим датчику, мы сейчас будем читать
rcallds_byte_wr // Запуливаемо байт
rcallds_byte_rd // А здесь уже начинаем читать, прочитали первый (младший)
stsTrm + 1, r16 // И запулилы его в память, по метке Trm + 1
rcallds_byte_rd // Читаем второй (старший)
stsTrm, r16 // И запулилы его в память, по метке Trm
ret
W1_ConvTemp: // Подпрограмма преобразования температуры
ldir16, 0xCC // Пропускаем уникальный номер датчика
rcallds_byte_wr
ldir16, 0x44 // Говорим что нужно сконвертировать температуру, этот процесс занимает 750 мс
rcallds_byte_wr
ret
W1_Init_12bit: // Подпрограмма перестройки на 12 бит температуры
ldir16, 0xCC // Пропускаем уникальный номер датчика
rcallds_byte_wr // Спуливаемо в датчик
ldir16, 0x4E // Говорим что сейчас будем писать в RAM регистры датчика
rcallds_byte_wr // Спуливаемо в датчик
ldir16, 0xFF // 0xFF записываем в первые 2 регистры, это регистры температуры, они нам не нужны
rcallds_byte_wr // поэтому их оставляем в стандартном состоянии
ldir16, 0xFF // 0xFF второй байт температуры
rcallds_byte_wr // Спуливаемо на порт
ldir16, 0x1F // Говорит мощо 12 бит - 7F, или 1F - 9бит, 3F - 10 бит, 5F - 11 бит
rcallds_byte_wr // Спуливаемо на порт
ret
ds_byte_rd: // Подпрограмма чтения данных в регистр r16 с 1 Wire
ldir17, 8 // Пишем в r17 - 8, т.к. у нас 8 бит в регистре
clrr16 // Чистимоr16, сюда будем читать данные
ds_byte_rd_0:
sbiW1_DDR, W1_BIT // Вывод на выход
cbiW1_PORT, W1_BIT // Опрокидуемо вывод на землю
rcallW1_DelayA // Ждем 6 микросекунд
cbiW1_DDR, W1_BIT // Вывод на вход
rcallW1_DelayE // Ждем 9 микросекунд
sbisW1_PIN, W1_BIT
clc // Очищаем бит C = 0
sbicW1_PIN, W1_BIT
sec // Очищаем бит C = 1
rorr16 // Выполняем циклический сдвиг вправо через С
rcallW1_DelayF // Ждем 55 микросекунд
decr17 // Снижаем на 1 регистр r17
brneds_byte_rd_0 // Если не равно 0 обращаемся в цикле
ret
ds_byte_wr: // Подпрограмма записи данных с региструr16 в датчик
ldir17, 8 // Пишем в r17 - 8, т.к. у нас 8 бит в регистре
ds_byte_wr0:
sbiW1_DDR, W1_BIT // Вывод на выход
cbiW1_PORT, W1_BIT // Опрокидаем вывод на землю
sbrcr16 0 // Проверим, в r16 бит 0 очищено или установлена
rjmpds_byte_write_1 // Если установлено перейдем по этой метке
rjmpds_byte_write_0 // Если очищено перейдем по этой метке
ds_byte_wr1:
lsrr16 // Логический сдвиг вправо
decr17 // Знижуемоr17 на 1
brneds_byte_wr0 // Если не равно 0, обращаемся в цикле
ret // Выход из подпрограммы
ds_byte_write_0: // Запись 0
rcallW1_DelayC // Ждем 60 микросекунд
cbiW1_DDR, W1_BIT // Вывод на вход
rcallW1_DelayD // Ждем 10 микросекунд
rjmpds_byte_wr1
ds_byte_write_1: // Запись 1
rcallW1_DelayA // Ждем 6 микросекунд
cbiW1_DDR, W1_BIT // Вывод на вход
rcallW1_DelayB // Ждем 64 микросекунд
rjmpds_byte_wr1
W1_DelayA: // Задержка 6 mcs
ldiXH, high (FREQ / 1000000)
ldiXL, low (FREQ / 1000000)
rcallW1_Delay
ret
W1_DelayB: // Задержка 64 mcs
ldiXH, high (FREQ / 65000)
ldiXL, low (FREQ / 65000)
rcallW1_Delay
ret
W1_DelayC: // Задержка 60 mcs
ldiXH, high (FREQ / 68000)
ldiXL, low (FREQ / 68000)
rcallW1_Delay
ret
W1_DelayD: // Задержка 10 mcs
ldiXH, high (FREQ / 500000)
ldiXL, low (FREQ / 500000)
rcallW1_Delay
ret
W1_DelayE: // Задержка 9 mcs
ldiXH, high (FREQ / 600000)
ldiXL, low (FREQ / 600000)
rcallW1_Delay
ret
W1_DelayF: // Задержка 55 mcs
ldiXH, high (FREQ / 75000)
ldiXL, low (FREQ / 75000)
rcallW1_Delay
ret
W1_DelayH: // Задержка 480 mcs
ldiXH, high (FREQ / 8332)
ldiXL, low (FREQ / 8332)
rcallW1_Delay
ret
W1_DelayI: // Задержка 70 mcs
ldiXH, high (FREQ / 58000)
ldiXL, low (FREQ / 58000)
rcallW1_Delay
ret
W1_DelayJ: // Задержка 410 mcs
ldiXH, high (FREQ / 9756)
ldiXL, low (FREQ / 9756)
rcallW1_Delay
ret
W1_Delay: // Подпрограмма задержки
sbiwXH: XL, 1 // Отнимаем единицу с регистровой пары
brneW1_Delay // Если не равно 0 крутимся в цикле
ret // Выход из подпрограммы
//////////////////////////// Конец подпрограммы 1-Wire
Delay: // Стандартная задержка
ldirazr1, 255
ldirazr2, 255
ldirazr3, 10
Pdelay:
decrazr1
brnePdelay
decrazr2
brnePdelay
decrazr3
brnePdelay
ret
CH: // Цифры динамической индикации от 0 до 9
.db0x03, 0x9F, 0x25, 0x0D, 0x99, 0x49, 0x41, 0x1F, 0x01, 0x09
После ввода кода программу необходимо сохранить и скомпилировать в * .hex-файл.
4. Симуляция работы проекта
Для симуляции работы проекта воспользуемся пакетом программ ProteusDesignSuiteCADSoftware.
Откроем у Proteus созданный ранее проект термометра.
Дважды кликните по микроконтроллера ATmega16 для редактирования. В появившемся окне, в разделе ProgramFile указываем * .hex-файл программы и нажимаем кнопку ОК.
На нижней панели инструментов нажимаем кнопку Runtimesimulation.
Симуляция работы проектаЗаключение
Итак, я разработал проект средства измерения температуры в диапазоне от -10 до +85 ºCз абсолютной погрешностью ≤ 0,5 ºC, отражающий значение температуры на четырехразрядному семисегментному индикаторе.
Датчик температуры DS18B20передае значение температуры в микроконтроллер ATmega16, который его обрабатывает, конвертирует в десятинный формат и выводит на четырехразрядный семисегментный индикатор.
Для моделирования электронной схемы были использованы программный пакет ProteusDesignSuiteCADSoftware, который позволяет проектировать и симулировать работу электронных схем.
Для разработки программного обеспечения были использованы программный пакет AtmelStudio, который позволяет разрабатывать программное обеспечение для любых микроконтроллеров семейства AVR. ПО разработано с использованием языка программирования AVRAssembler, что обеспечивает высочайшее быстродействие, но достаточно сложным по сравнению с C / C ++.
Данную работу, мне помогал мой однокурсник и коллега, Коваль Игорь. Спасибо, может кому-то пригодиться в будущем.
AVR Atmega16/32 Плата для разработки микроконтроллеров с USB-программатором Combo по цене 849 рупий за комплект | Моти Нагар | New Delhi
AVR Atmega16/32 Плата для разработки микроконтроллеров с USB-программатором Combo по цене 849 рупий за комплект | Моти Нагар | Нью-Дели| ID: 1959Спецификация продукта
1 | 1 | Название модели 1 | ATMEGA16 Доска для разработки | 1|||||
Бренд | 1 | |||||||
Вес | 350 г | |||||||
Размер упаковки | 13 x 8 0.5 см | |||||||
набор контента | 4 пункта | 4 пункта | ||||||
тип пакета | коробка | 1|||||||
Минимальный заказ Количество | 10 Kit |