Реле Tianbo - ресурс 10 млн переключений

AVR часы с поддержкой NTP от Tuxgraphics

Теория

Протокол Сетевого Времени (NTP) перевернул мир. Неожиданно, каждый смог получать точное время и дату где угодно в мире. NTP это простой, основанный на UDP протокол и он вполне может быть реализован на микроконтроллере.

Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Используя Ethernet плату от tuxgraphics и LCD дисплей, мы создадим великолепные часы, получающие время и дату из Интернета через NTP. Вам надо будет просто присоединить их к своему DSL роутеру.

Часы с поддержкой NTP от Tuxgraphics

NTP клиент

До сих пор мы создавали только серверы UDP и TCP. Часам однако, необходим клиент. Это нечто новое. Сервер только отвечает на входящие IP пакеты и по этому немного проще в реализации. Однако NTP использует короткие пакеты данных, и поэтому вполне возможно добавить NTP клиента к существующему множеству сетевых протоколов. Таким образом, мы создадим часы не только с LCD дисплеем, но и со встроенным web сервером. Web сервер может быть использован для конфигурирования часов или для просмотра текущего времени.

NTP протокол описан в RFC958. По сути это 64 битовая временная метка. 32 бита этой временной метки это секунды в UTC (Время по Гринвичу GMT) с первого июня 1900 года. Другие 32 бита – доли секунды. Другими словами NTP может обеспечивать большую точность. Для наших целей будет вполне достаточно, если мы вычислим секунды.

Наши часы будут синхронизироваться при запуске от NTP сервера, и затем использовать прерывание таймера, чтобы считать время. Каждый час они будут пытаться синхронизироваться снова. Если ваш DSL роутер будет выключен в течении ночи, это не проблема. Часы продолжат работу. Мы используем кварцевый резонатор на схеме, чтобы считать время локально. Это минимизирует сдвиг, даже если связи с Интернетом не будет в течении нескольких дней.

Как сделать часы

Часы это по сути всего лишь счетчик. Так как NTP сам по себе 32х битный счетчик, мы просто возьмем 32х битную переменную и будем увеличивать ее. Иными словами, начальная установка счетчика приходит через NTP, и мы просто увеличиваем значение на единицу каждую секунду.

Для этого мы просто будем генерировать прерывания таймера каждую секунду. 16 битный таймер-счетчик в микроконтроллере Atmega168 имеет такую возможность на аппаратном уровне.

Основа часов таким образом такова:
// прерывание, шаг счетчика секунд
ISR(TIMER1_COMPA_vect){
time++;
}
Аппаратные прерывания генерируются каждую секунду, и мы увеличиваем счетчик на единицу. Все просто.

Если вы уже просматривали файлы программы, вы должны были заметить, что в файле README написано, что для данного устройства необходим контроллер Atmega168, контроллер Atmega88 не подойдет. Почему такого простого счетчика нет в контроллере Atmega88?

Проблема в математическом преобразовании секунд со дня Х в понимаемый человеком формат времени. Оно требует довольно большой вычислительной нагрузки на микроконтроллер. Контроллеры AVR имеют восьми битный процессор, по этому 32х битные вычисления потребляют много вычислительной мощности. Если к этому добавить NTP клиент, web сервер и драйвер LCD дисплея, учитывая, что в Atmega88 имеет 8 килобайт свободного места, памяти просто не хватит на все. Atmega168 имеет более чем достаточно памяти. Вся программа займет не более 2/3 памяти Atmega168. Вы можете таким образом, легко добавлять в в часы дополнительные функции, если захотите.

Часы с поддержкой NTP от Tuxgraphics

[LCD display + AVR webserver SMD board]

Все, что вам нужно это LCD дисплей, web сервер на AVR и SMD плата.

LCD дисплей 16х2 с голубой подсветкой и SMD плата AVR web сервера смонтированы на кусочке листа акрилового стекла. Для питания часов я использовал зарядное устройство от старого мобильного телефона Ericsson (не видно на рисунке). Зарядное устройство вырабатывает 5 вольт постоянного напряжения и при этом очень легкое так как в нем используется ключевой блок питания. Оно включается непосредственно в розетку, а выходное напряжение поступает в часы по кабелю диной 1,5 м. Я купил это зарядное устройство за 2 евро на ebay.

[NTP clock front view]

NTP часы, вид с переди.

[NTP clock at night]

NTP вид ночью.

Использование часов

Часы имеют LCD дисплей со следующими полями:

День недели Дата Х
Время (сдвиг от UTC)

Х в правом углу это индикатор статуса:

  • Ничего: сеть подключена, время своевременно обновлено.
  • «/»: Сеть не подключена.
  • «|»: Сеть подключена, но NTP сервер не найден. Часы пытаются синхронизироваться каждый час. Таким образом, если вы отключите Интернет на ночь, вы увидите этот символ. Заметьте, часы при этом будут работать от внутреннего кварцевого резонатора.

Со встроенным web сервером вы можете проще конфигурировать часы:

[NTP clock config page]

Страница конфигурации часов

Поля на этой странице конфигурации часов следующие:

  • Clock own IP: IP адрес часов. Это адрес, по которому вы можете обратиться к часам в вашей локальной сети через web браузер. Это должен быть свободный адрес, не попадающий в диапазон DHCP вашего DSL роутера. Вы должны зарезервировать этот адрес в вашем DSL роутере привязав его к МАС адресу часов. Это позволит избежать ситуации, при которой DHCP сервер роутера назначит этот IP адрес другому компьютеру в сети. Конфигурирование привязки IP адреса к МАС в DSL роутере обычно делается в пункте меню называемом "Lan IP settings" или "DHCP configuration".
  • Default GW: Это внутренний IP адрес вашего DSL роутера. Обычно 192.168.0.1 или 10.0.0.1.
  • NTP server IP: Это IP адрес NTP сервера в Интернете. Вы найдете несколько других примеров NTP адресов в исходном коде (загрузки, файл main.c) или здесь http://www.pool.ntp.org/.
  • Offset to UTC: Этот параметр для конфигурирования вашего часового пояса. Вы также можете изменять данный параметр для установки летнего или зимнего времени.
  • New password: Вводите сюда текст, только если хотите изменить пароль.
  • Password: Пароль для защиты установок конфигурации. Пароль по умолчанию "secret". Вы должны ввести правильный пароль, чтобы применить любые изменения. Если вы забудете пароль, вам надо сбросить все настройки, установив таким образом их значения по умолчанию. Это делается соединением контакта PB0 с общим проводом при включенном питании часов.

Так же возможно использовать эти часы в ситуации, когда запрашиваемый NTP сервер находиться не в Интернете, а в локальной сети. В этом случае вы должны ввести IP адрес NTP сервера в оба поля: "NTP server IP" и "Default GW".

Web сервер имеет также вторую страницу (URL http://IP_адрес_часов), на которой выводиться текущие время и дата как на LCD дисплее.

[NTP clock main page]

NTP часы через web браузер.

Аппаратная часть NTP часов

Аппаратная часть состоит из AVR Ethernet платы от tuxgraphics (также известной как плата AVR web сервера) и 16х2 совместимого с HD44780 LCD дисплея. Я рекомендую использовать для Ethernet платы нашу SMD плату, так как она точно помещается позади дисплея. Схема Ethernet устройства доступна здесь. LCD дисплей подключается как показано ниже:

Схема NTP часов, подключение LCD дисплея (кликните, чтобы получить схему в формате PDF)

Вы можете запитать от 3,3 Вольт Ethernet плату и LCD дисплей, а подсветку от 5 Вольт постоянного тока. Я использую для этой цели зарядное устройство от старого мобильного телефона Ericsson.

Между контактом PB1, контроллера Atmega168 и проводом VCC (3.3 В) можно подключить резистор, сопротивлением 270 Ом и светодиод. Светодиод будет мигать каждую секунду.

Часто задаваемые вопросы (FAQ)

Q: Мои часы работают, но почти 5 минут не работают перед следующей ежечасной синхронизацией.
A: Вы забыли установить комбинированные байты. Измените младший комбинированный байт с 0x62 на 0x60: avrdude -p m168 -c stk500v2 -u -v -U lfuse:w:0x60:m

Q: Когда я обращаюсь к часам через web браузер, все хорошо. Однако LCD дисплей не отображает время. Я вижу только строки из квадратиков.
A: Нарисуйте на бумаге таблицу, и запишите в нее, какой контакт ATmega требуется подключить к какому контакту LCD дисплея. Записывайте номера контактов и их имена. После этого проверьте каждый провод между платой Ethernet и LCD дисплеем. Где то здесь должна быть ошибка.

Заключение

Очень хорошие часы и очень приятно смотрятся ;-). В памяти контроллера Atmega168 осталось место, вы можете легко добавить функциональность, если захотите.

Развлекайтесь!

Ссылки

Перевод: [IMG]/i/Image/wand.gif[/IMG] по заказу РадиоЛоцман

На английском языке: The Tuxgraphics AVR NTP Clock

Электронные компоненты. Бесплатная доставка по России
Для комментирования материалов с сайта и получения полного доступа к нашему форуму Вам необходимо зарегистрироваться.
Имя
Фрагменты обсуждения:Полный вариант обсуждения »
  • Своего рода продолжение статей о [URL="http://www.rlocman.ru/shem/schematics.html?di=55059"]Ethernet-модулях[/URL] и [URL="http://www.rlocman.ru/shem/schematics.html?di=55066"]web-сервере на микроконтроллере[/URL]. Отлично, будет чего познавать на выходных.