Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Удаленная работа
Помощь проекту

Часы реального времени для Arduino

Сегодня мы к Arduino подключим часы реального времени (RTC — realtime clock). Это такая электронная схема, которая считает текущее время, дату, день недели… Название по-русски звучит странновато. Но так уж сложилось в электронике, что словосочетанием со словом clock сначала назвали задающие частоту генераторы, потом это слово встречалось в обозначениях различных таймеров, и, когда пришло время назвать часы словом часы (clock), использовали словосочетание «часы реального времени».

Для чего нужны часы, наверно, понятно — чтобы учитывать время. Вот и мы построим очередной прибор для учета времени. Итак, часы реального времени

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

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

Кроме Arduino, нам понадобятся: микросхема DS1307, часовой кварц (32768 Гц), три резистора 4,7 кОм (подойдут резисторы от 4,7 до 10 кОм), конденсатор и батарейка 3 В. Микросхему придется купить, кварц и батарейку можно выпаять из ненужной старой системной платы компьютера. Там же можно взять и держатель батареи. Производитель обещает, что батареи хватит на 10 лет. Схему возьмем типовую, предложенную разработчиком (рис. 2).


Теперь об Arduino

В ее основе лежит микроконтроллер. Микроконтроллеры общаются с внешними устройствами с помощью различных протоколов. Например, для связи с компьютером — один протокол, для подключения наших часов — другой. Есть протоколы, которые позволяют связать между собой два устройства, есть те, что позволяют соединить несколько десятков устройств. Протокол — это как бы правила передачи данных между устройствами. В техническом описании микроконтроллера atmega8 каждому протоколу отводится около 30 страниц. Итальянцы, придумавшие Arduino, облегчили нам работу. Кроме того, что нам не нужен программатор, нам еще предложено большое количество библиотек на разные случаи жизни. Среди них есть и библиотеки для работы с протоколами, так что нам достаточно подобрать подходящую библиотеку. Библиотека — это такой кусочек кода, который можно включить в свою программу. Хочу заметить, если вы задумаете что-то новое и необычное, то может оказаться, что подходящих библиотек нет, в этом случае придется писать весь код самостоятельно. Кучу примеров и уроков по Arduino вы всегда можете найти в нашем разделе схем для Arduino

Но ближе к делу. Для установки библиотеки нужно папку с ее файлами скопировать в каталог …/arduino/libraries. Для работы с часами 1307 когда-то давно я скачал библиотеку, ее и использую. Она нормально работает с версией arduino ide 0022 и не работает с версиями 1.0 и выше. Но это не страшно, более свежую библиотеку с описанием и примерами можно найти в Интернете, например, по запросу «dsl307 и arduino ide 1.0».

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

У меня плата «среднего» размера (рисунок ниже), и присматривался я к ней довольно долго — пугала цена. Решил посмотреть в Интернете, нет ли у нее аналогов, и увидел, что цена на эту плату в разных интернет-магазинах отличается в разы. Поэтому, прежде чем покупать, изучите побольше предложений. Советую вместе с платой купить набор перемычек и соединительных проводов, это очень облегчает работу.

Плата у меня небольшая, но и ее размера многовато, можно было взять поменьше. Тем более несколько плат можно соединить в одну, правда, без электрического контакта. На такой плате и будем макетировать следующее устройство.

Собираем схему (можно на макетной плате, можно сразу изготовить печатную, в данном случае она несложная). Проверяем все соединения и подключаем резервную батарею. Схема потребляет очень мало тока. Питание возьмем от Arduino. Четвертый вывод DS1307 соединим с «землей», восьмой — с +5 В. Далее соединим пятый вывод микросхемы с аналоговым входом Arduino А4, а шестой с А5. Еще раз проверим все соединения.


Код

Код будет состоять из двух частей. Можно их объединить, можно использовать по отдельности. Первая часть кода будет устанавливать текущее время в часах, вторая будет это время выводить в терминал. Начало в обоих случаях одинаковое, так как настраивает одни и те же параметры. Так как наши часы ничего больше не делают, кроме как выводят время в терминал, то, чтобы в терминале время не мелькало очень быстро, во второй части предусмотрена трехсекундная пауза, ее можно уменьшить/увеличить, но совсем от нее отказываться не стоит. Устанавливаемое время поменяйте, в программе выставлено 1 марта 2013 года, пятница, 15 часов 25 минут 00 секунд. Не забудьте библиотеку dsl307.h скопировать в папку /libraries. Остальные библиотеки должны уже быть в этой папке.

Код установки и запуска часов:

 
Код:
//Подключаем библиотеки #include 
#include <Wire.h>
#include <DS1307.h>
void setup()
{Serial. begin(9600);
RTC.stop(); //Останавливаем часы
RTC.set(DS1307_SEC,0); //Выставляем секунды (00)
RTC.set(DS1307_MIN,25); //Выставляем минуты (25)
RTC.set(DS1307_HR,15); //Выставляем часы (15)
RTC.set(DS1307_DOW,5); //Выбираем день недели (5)
RTC.set(DS1307_DATE,l); //День месяца (1)
RTC.set(DS1307_MTH,3); //Месяц (3)
RTC.set(DS1307_ YR,13); //Год (13)
RTC.start(); //Запускаем часы
}
void 1оор() //в основном цикле ничего нет
{
}

Обратите внимание: после заливки этого кода в часах установится нужное время, и они начнут отсчитывать время. Если нажать на Arduino reset, то программа запустится еще раз и еще раз установит время. Поэтому после заливки этой программы нужно сразу залить следующий код, который на установку часов влиять уже не будет.

Код отслеживания текущего времени:

 
Код:
/*Подключаем библиотеки*/
#include <WProgram.h>
#include <Wire.h>
#include <DS1307.h>
void setup()
{
Serial.begin(9600);
}
void loop()
{
Serial.print(RTC.get(DS1307_HR,true)); // Считываем часы с обновлением всех значений Serial. print(«:»);
Serial.printf RTC.get(DS1307_MIN,false)); // Считываем минуты без обновления Serial. print(«:»);
Serial. print(RTC. get(DS1307 SEC, false)); // Считываем секунды без обновления Serial.print(« «);
Serial. print (RTC. get(DS1307_DATE, f alse)); // Считываем дату без обновления Serial. print(« / »);
Serial. print(RTC. get(DS1307_MTH, f alse)); // Считываем месяц без обновления Ser ial. prin t(«/»);
Serial. print (RTC. ge t(DS1307_YR, false)); // Считываем год без обновления Serial. print(« Day-»); Serial.println(RTC.get(DS1307_DOW,false)); Считываем день недели без обновления delay(3000);
}

Теперь, выключая питание, мы часы не остановим, и если снова все включить и запустить терминал, в нем будет показано текущее время. Необходимую библиотеку можно найти в Интернете. Если вы найдете более свежую библиотеку, обратите внимание: там могут быть другие команды для запуска/ остановки, настройки и отслеживания времени. На рисунке ниже вы видите результат работы программы.


Следует заметить, эти два кода удобны для ознакомления с работой часов. Они пригодны, если вы будете разрабатывать устройство для себя. Если предполагается, что устройством будет пользоваться кто-то еще, то необходимо сделать единый код, добавить к устройству кнопок и запрограммировать так, чтобы время настраивалось с их помощью. Правда, это подразумевает еще и подключение индикатора, а это уже другая история.


C этой схемой также часто просматривают:

ЗАЖИГАЛКА ДЛЯ ГАЗА
Зарядное устройство для автомобильных и мотоциклетных батарей
Зарядное устройство для автомобильных аккумуляторов
Имитатор для проверки телефонных аппаратов
Простые датчики для охранной сигнализации
Ионофон своими руками!
Индикатор разрядки аккумулятора
Велосипедная фара на мощном светодиоде
Внутрисхемный программатор для PIC-контроллеров и I2C EPROM

Главные категории

Arduino


Аудио


В Вашу мастерскую


Видео


Для автомобиля


Для дома и быта


Для начинающих


Зарядные устройства


Измерительные приборы


Источники питания


Компьютер


Медицина и здоровье


Микроконтроллеры


Музыкантам


Опасные, но интересные конструкции


Охранные устройства


Программаторы


Радио и связь


Радиоуправление моделями


Световые эффекты


Связь по проводам и не только...


Телевидение


Телефония


Узлы цифровой электроники


Фототехника


Шпионская техника



Реклама на KAZUS.RU


Последние поступления

Графический семиполосный эквалайзер-радуга на Arduino Nano и MSGEQ7

Старинные часы-метеостанция

Блок питания для Arduino из ATX

ATX блок питания управляемый Arduino

Arduino своими руками с USB портом

Подключение монетоприемника к Arduino

Подключение PS/2 клавиатуры к Arduino

Пробуждение ПК по сети на Arduino

Запись/чтение на SD-карту с Arduino

Подключение I2C EEPROM к Arduino


Красивая работа спортсменов в стальной раме для приседа, удобная перфорация для грифа. || система звукоусиления || сделать постоянную регистрацию в москве.

© 2003—2024 «KAZUS.RU - Электронный портал»