Программирование BASCOM
Меню сайта
Категории каталога
Мои статьи [115]
Наш опрос
Оцените мой сайт
Всего ответов: 1292
Главная » Статьи » Мои статьи

Простые часы-термометр радиолюбителя (Конкурс-2011)

В данной статье описываются простые часы-термометр, построенные на современной элементной базе с использованием микроконтроллера фирмы ATMEL. Данная статья будет полезна начинающим радиолюбителям, которые изучают микроконтроллеры. В данном устройстве применены наиболее доступные и дешевые компоненты, которые можно с легкостью найти в различных радиолюбительских магазинах (как местных, так и интернет). 




Итак, «сердцем» устройства является микроконтроллер фирмы Atmel ATmega8-16PU (в DIP корпусе), тактируемый внутренним кварцем на 8 мегагерц. Отсчет времени ведется микросхемой RTC (Real Time Clock) DS1307 фирмы MAXIM. Это часы реального времени с последовательным интерфейсом (I2C) и организацией памяти 64х8. Ее отличительные способности: 
Подсчет реального времени в секундах, минутах, часах, датах месяца, месяцах, днях недели и годах с учетом високосности текущего года вплоть до 2100 г.
56 байт энергонезависимого ОЗУ для хранения данных
2 проводной последовательный интерфейс 
Программируемый генератор прямоугольных импульсов
Автоматическое определение отключения основного источника питания и подключение резервного
Потребление не более 500 нA при питании от резервной батареи питания при температуре 25?C
Возможность поставки в промышленном диапазоне температур: от -40°C до +85°C (Ind)
Исполнение в 8-ми выводных корпусах DIP или SOIC
Микросхема DS1307 – экономичные часы реального времени с последовательным интерфейсом, которая содержит часы-календарь с представлением информации в двоично-десятичном коде и 56 байт энергонезависимого статического ОЗУ. Адрес и данные передаются по двунаправленной двухпроводной последовательной шине. Информация о реальном времени и календаре представляется в секундах минутах, часах, дне, дате, месяце и годе. Если текущий месяц содержит менее 31 дня, то микросхема автоматически определит количество дней в месяце с учетом високосности текущего года. Часы работают или в 24-часовом или 12-часовом формате с индикатором AM/PM (до полудня/ после полудня). DS1307 содержит встроенную схему контроля уровня основного источника питания и при его недопустимом значении автоматически переключается к резервной батареи. Поэтому при отключении часов от сети время и дата не «сбиваются»
Сбор температуры ведется датчиком DS18B20 фирмы Dallas. Он выполнен в корпусе TO-92. Его отличительные особенности:
Точность ±0.5°C от -10°C до +85°C 
Настраиваемое пользователем разрешение от 9 до 12 бит 
Данные передаются посредством 1-проводного (1-Wire) последовательного интерфейса 
64-битный уникальный и неизменяемый серийный номер 
Многоточечное считывание 
Рабочее напряжение от 3.0В до 5.5В 
Вариант датчика с запиткой с линии данных (DS18B20-PAR, т.н. паразитное питание) 
TO-92, 150mil 8-контактный SOIC, или 1.98мм x 1.37мм корпус с шариковыми выводами (±2.0°C) 
Микросхема DS18B20-это термометр с цифровым вводом/выводом, работающий с точностью ±0.5°C. Данные считываются через 1-проводную последовательную шину в дополнительном от 9 до 12 битном (программируется пользователем) коде с ценой младшего разряда от 0.5°C до 0.0625°C. При использовании в качестве термостата, DS18B20 отличается наличием во внутренней энергонезависимой памяти (EEPROM) программируемых пользователем уставок по превышению температуры (TH) и по понижению температуры (TL). Внутренний регистр флага будет выставлен, когда уставка пересечена. Это будет исполнено, когда измеренная температура больше чем TH или меньше чем TL. Если термостатирование не требуется, два байта энергонезависимой памяти (EEPROM) зарезервированные для уставок могут быть использованы для энергонезависимого хранения информации общего назначения. Каждая микросхема DS18B20 имеет уникальный и неизменяемый 64 битный серийный номер, который используется как узловой адрес датчика. Это позволяет множеству микросхем DS18B20 сосуществовать на одной 1-Wire шине. Микросхема DS18B20 может быть локально запитана от 3.0В до 5.5В или она может быть сконфигурирована таким образом, чтобы быть запитанной посредством 1-Wire  линии данных. DS18B20 предлагается в ТО-92, 150mil, 8-контактном SOIC, и 1.98мм х 1.37мм корпусе с шариковыми выводами (изготовленном методом перевёрнутых кристаллов). Микросхема в корпусе с шариковыми выводами рассчитана на точность ±2.0°C. 
Принципиальная схема часов.  



Как уже оговаривалось ранее, он построен на микроконтроллере ATmega8-16PU, имеющий программную память 8 кб. Для работы устройства необходимо загрузить в него коды из файла «I2C DS1307 часы на ATmega8.hex», приложенного к статье. При программировании также необходимо установить FUSE-биты. 



При программировании следует учесть, что биты - инверсные (как в PonyProg). Температура, измеряемая датчиком U3, и часы отображается на двухстрочном 16 символьном ЖКИ индикаторе WH1602, который построен на базе HD44780. Таким образом допускается замена на любой другой индикатор, сделанный на аналогичной микросхеме. Всего в часах предусмотрено четыре кнопки: «Вверх», «Вниз», «Ввод» и «Меню». Первые две в режиме отображения служат для переключения стилей (об этом чуть позже). Кнопкой «Меню» включается режим установок. Для всех микросхем, включая термодатчик, рекомендую установить панели. 
Питается прибор любым стабилизированным источником питания, рассчитанный на выходное напряжение 5В и выходной ток не менее 200мА (это для варианта ЖКИ с подсветкой, без подсветки соответственно допускается меньше). Часы-термометр собран на макетной плате 100 мм х 35мм. Печатная плата не имеет законченного дизайна и каждому необходимо придумывать свой. Плата ЖКИ модуля устанавливается «бутербродом» , т.е. она практически закрывает печатную плату часов.





Термодатчик  U3 рекомендую установить в самом верху печатной платы, но не над модулем ЖКИ, ибо термодатчик улавливает тепло, исходящее от ЖКИ и, соответственно, показания становятся неточными. Резисторы R1-R4 служат для «подтяжки» шины к высокому потенциалу, поэтому их значения лучше не менять. Динамик  LS1 можете использовать любой (к примеру, я использовал от старой материнской платы компьютера). Кварц X2 тоже был взят от старой материнской платы, однако, с ним нужно быть внимательным. Мне попадались неисправные кварцы, да и при демонтаже можно его испортить, соответственно, точность хода часов уменьшается.  Поэтому все-таки лучше купить новый.  Батарею BAT1 и панель под нее тоже можно взять с материнской платы.  Примерное расположение деталей может быть как на рисунке.



Фотография готового устройства. 



Внешний вид печатной платы.







При первом включении происходит инициализация всех устройств. Включение сопровождается коротким гудком, что означает, что программа МК запущена.  В строке «время» появляется что-то вроде такого: 00:00:80. Это означает, что микросхема часов реального времени работает, но необходимо произвести установку времени и даты. Если появляется такое: @@:@@:@@, то это значит, что микросхема часов не «определилась», поэтому необходимо произвести проверку монтажа. Если термодатчик ds18b20 не установлен, то в графе «температура» постоянно будет отображаться 0С. Как производить установку. Нажимаем кнопку «Меню». Появляется надпись как на рисунках. 









Нажимая кнопки «Вверх» и «Вниз» производите корректировку сначала года, потом месяца, дня, часов и минут, нажимая кнопку «Ввод». После ее нажатия автоматически переключается на следующий пункт. Стоит отметить, что как только Вы произведете установку времени, то секунды автоматически обнулятся. Теперь пришло время сказать кое-что про стили. Наверное, это и есть изюминка моего устройства. Т.к. текстово-цифровые индикаторы позволяют загружать до 8 символов, то почему бы этим не воспользоваться? Восемь символов мало, чтобы разместить в нем все числа, однако если применить метод «символ по кусочкам», то выходит очень даже не плохо. Для этого я нарисовал на бумаге все числа, составленные из 8 кусков. На сегодняшний день таблица символов выглядит как на рисунках ниже.





Итак, пока в часах реализовано 4 стиля отображения данных. Нажимая клавиши «Вверх» и «Вниз» можно их менять.

Стиль 1. Самый простой и, в то же время, более полный. В верхней графе отображаются часы в формате ЧЧ:ММ:СС и температура в Цельсиях., а в нижней графе-дата в формате ДД:ММ:ГГ и температура в Фаренгейтах. 


Этот стиль установлен по умолчанию и при включении часов всегда запускается именно этот стиль.

Стиль 2. Отображаются только часы, т.к. данный шрифт занимает все две строки по 16 знакомест. 



Стиль 3. Отображается только дата. 



Стиль 4. Отображается температура в Цельсиях и Фаренгейтах.  



Программа написана на Бейсике Bascom-AVR фирмы MCSelec. Занимает она 63% всего объема памяти МК, что дает большой потенциал для модернизации и доработки устройства, добавив, например, будильник. Также, при использовании русифицированного ЖКИ можно произвести «русификацию» часов, изменив английские надписи на русские. Стоит также отметить, что данная конструкция поможет начинающим радиолюбителям в освоении микроконтроллеров и языка программирования бейсик Bascom-AVR, т.к. в программе использованы самые распространенные функции и команды. В статье так-же приложен проект в ISIS Proteus, симулирующий работу часов. Однако, по непонятным причинам, показания термометра в Proteus являются неточными. Поэтому лучше не полагаться на эмулированный девайс. Работая уже почти четыре месяца, часы показали свою надежность и точность хода. Тем более, что схема настолько проста, что любой начинающий радиолюбитель сможет собрать его.  


Автор - Филатов Артур (aka Gryphon).

P.S.
Евгений Танцура немного переделал проект на свой вкус: вместо температуры в фаренгейтах отображается день недели, так же добавил его ввод в меню. Ещё сделал вывод температуры с десятыми градуса. В Протеусе день недели получается +1, то есть вместо среды будет четверг. В исходнике к 1 дню привязан понедельник, а должно быть воскресенье. Сделал для удобства, ведь в DS1307 день недели простой счетчик, как установишь так и будет считать...

P.S.
Проект от Pautin - часы в автомобиль. 
Проект класный. Вдохновил меня сделать часы для моего авто Ford Transit, родные часы умерли, а новые стоят 5000р. Вот я и решил сканителить своё детище. Пришлось подправить прошивку под свои нужды. Теперь они показывают один режим, верхняя строка день недели, месяц (названия мес. кратко), год полностью и день недели. 
В нижней строке время и температуру с десятыми градуса. 
Часы реального времени DS1703 в So8 корпусе с расширенным диапазоном температур. В мороз при - 10 -22 дисплей медленно соображает, но показания можно прочесть, да и часы идут ровно.
Вот что получилось: 

P.S.






Категория: Мои статьи | Добавил: bascom (06.12.2010)
Просмотров: 52829 | Комментарии: 58
Всего комментариев: 581 2 3 4 5 »
58 Niki59  
0
Добрый день. Повторил конструкцию, работает как часы smile А есть прошивка с будильником?

57 lom  
0
Перепробовал все прошивки - самая полноценная от Евгения Танцуры. Секунды не виснут, сохранены авторские стили отображения, исходник без ошибок, единственно я поменял названия дней недели по-английски на цифровое обозначение (1/7 понедельник). У Паутина в исходнике ошибки по какой-то причине и применив дисплей без русского алфавита придется разбираться, а это было делать лень, секунды тоже подвисали. Так что рекомендую именно прошивку от Евгения. Спасибо большое ему и автору разработки!

56 ildarneo22  
0
В прошивке проблемы, в реале таймер не запускается, в протеусе он по умолчанию запущен, пришлось редактировать прошивку, и нафига прошивку написанную в баскоме прошивать через авр дуде, в баскоме прошивальщик работает со всеми нормальными программаторами, да фьюзы в нем выставлять удобнее, просто указываешь что тебе нужно, а он сам все выставляет

55 Иван  
0
при компиляции выдает две ошибки
Error : 25 Line : 78 Variable already dimensioned [DIGIT] , in File : D:\mk\bascom\Bascom_Proteus\I2C DS1307 часы на ATmega8.bas
Error : 25 Line : 79 Variable already dimensioned [STYLE] , in File : D:\mk\bascom\Bascom_Proteus\I2C DS1307 часы на ATmega8.bas
в чем проблема не пойму

54 Gennadiy  
0
28 июня "добрался" до схемы проверил в новом варианте - заработала.
Наверняка и второй вариант будет с таким же результатом.
Еще раз спасибо.

53 Gennadiy  
0
Да действительно - я подключил ножки Amega8 15 на RS. 16 на E, а по вашей схеме наоборот.
Вроде бы так.
Еще раз перепроверю и ....
Большое спасибо.

51 Gennadiy  
0
№1 30.01.12.HEX

52 Pautin  
0
Если Вы брали прошивку от меня т.е "Pautin", то схема подключения LCD у меня другая ( к другим портам контроллера ). Она отличается от схемы автора проекта. Если вы печатную плату развели по схеме автора проекиа, а прошивку хотите использовать мою надо в исходнике изменить конфигурацию
портов и заново скомпелировать в HEX. фаил. Либо разводить плату по моей схеме она тоже присутствует (см. Proteus фаил) тогда прошивку менять не надо.
happy happy

49 Gennadiy  
0
Я подключил WH1602A-NGJ-CT? Может он не подходит или для него нужна другая прошивка?

50 Pautin  
0
Какую из предложенных прошивок используете?

48 Gennadiy  
0
Я некоторое время отсутствовал.
Выполнил второй вариант на ATmega8-16PU - результат абсолютно индетичный.
Плато для обоих вариатов проектировал сам.
На LCD перемежающийся (и моргающий) сегмет.
Фьюзы вроде-бы выставлены нв частоту 8 Мг. (но не в PonyProg) и соответственно инверсные. LCD проверял (был запасной)
Два варианта и оба не работают.

47 AlexJ  
0
Pautin
Спасибо! Все работает. Эти часы у меня сделаны для дачи, ПК не везу туда принципиально, дома и на работе хватает, потому при работе в эфире аппаратный журнал по старинке на бумаге, оно конечно и так знаешь какое где время, но иногда хорошо когда перед глазами есть индикация . Спасибо.

1-10 11-20 21-30 31-40 41-41
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа
Поиск
Друзья сайта
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Copyright Radan Studio © 2024