Текущее время: 23 ноя 2017, 19:00

Часовой пояс: UTC + 10 часов




Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
 Заголовок сообщения: Arduino и часы на микросхеме Dallas DS1307
СообщениеДобавлено: 07 апр 2013, 01:44 
Не в сети
Аватар пользователя

Зарегистрирован: 10 янв 2012, 08:31
Сообщений: 34
Откуда: Хабаровск
Благодарил (а): 0 раз.
Поблагодарили: 4 раз.
Пункты репутации: 0
Arduino и часы на микросхеме Dallas DS1307
Краткое описание:
Микросхема Dallas DS1307 представляет собой часы реального времени с календарем и дополнительной памятью NW SRAM (56 байт). Микросхема подключается к микроконтроллеру при помощи шины I2C. Количество дней в месяце рассчитывается с учетом високосных лет до 2100 года. В микросхеме DS1307 имеется встроенная схема, определяющая аварийное отключение питания и автоматически подключающая резервную батарейку. При этом отсчет времени продолжается и после восстановления питания часы показывают правильное время. Также в этой микросхеме имеется программируемый генератор прямоугольных импульсов, позволяющий вырабатывать одну из четырех частот (1гц, 4096Гц, 8192Гц или 32768Гц).

Схема включения:
Часы на микросхеме Dallas DS1307 собираются очень просто, с минимальным количеством внешних элементов: три резистора, кварцевый резонатор и батарейка резервного питания (обычно литиевая «таблетка», которой, по уверению производителей микросхемы должно хватить лет на 10). Типовая схема включения показана на рисунке:
Вложение:
1.jpg
1.jpg [ 19.38 KiB | Просмотров: 139566 ]


Также производители рекомендуют при распайке кварцевого резонатора расположить его как можно ближе к выводам микросхемы, а корпус его желательно припаять к общей шине. В противном случае возможна нестабильность хода часов.
Несмотря на то, что в Arduino есть встроенные подтягивающие резисторы на цифровых пинах, их все же следует установить – рассматриваемая далее библиотека DS1307.h не поддерживает встроенные резисторы Arduino.
Но это все – если Вы пожелаете изготовить часы самостоятельно, что называется, с нуля. Если же нет – в интернет-магазинах полно готовых решений, стоимостью 3-5 долларов (включая доставку). Например такой купленный на http://www.buyincoins.com :
Вложение:
2.jpg
2.jpg [ 233.53 KiB | Просмотров: 139569 ]

Библиотека DS1307.h
Библиотека DS1307.h служит для подключения к Arduino модуля часов реального времени на микросхеме Dallas DS1307. Основная ее особенность: отказ от использования библиотеки Wire и аналоговых пинов A4 и A5 в качестве шины I2C. В этой библиотеке шина I2C организуется на цифровых пинах Arduino.

Начиная с версии 1.10 от 26 января 2012 библиотека адаптирована для поддержки Arduino 1.0 IDE.

Еще раз обратите внимание, при использовании данной библиотеки модуль часов следует подключать к ЦИФРОВЫМ ПИНАМ Arduino, а не к аналоговым (не используя стандартную шину I2C),
например:
SDA – Digital Pin 4
SCL – Digital Pin 5

Выход CQW/OUT можно оставить неподключенным, если Вам не требуется частота, выдаваемая встроенным генератором.

Основные функции:
DS1307 xxx (SDA,SCL) – инициализация библиотеки. Параметры – имя создаваемого объекта и номера ЦИФРОВЫХ пинов, к которым подключены сигналы от модуля. Функция ничего не возвращает и создает объект часов с именем xxx, подключенный к соответствующим пинам.

Time xxx – создает структуру данных с именем xxx для вывода данных о дате и времени при помощи функции getTime. Структура состоит из следующие переменных:
xxx.hour – значение часов
xxx.min – значение минут
xxx.sec – значение секунд
xxx.date – день месяца
xxx.mon – месяц
xxx.year – год
xxx.dow – день недели


Такую структуру необходимо создать (там где определяются все переменные), если в программе будет использоваться функция getTime(). Далее, после вызова функции getTime() из этой структуры можно будет получать значения по отдельности, например? Если мы определим структуру с именем т:
Time t;

то команда lcd.print t.year выведет значение года, а lcd.print t.min – значение минут.
Команды библиотеки следует вводить в следующем формате:

xxx.yyy

где xxx – имя объекта, созданного вышеописанной командой DS1307, а yyy – имя необходимой Вам команды.
Итак, команды библиотеки DS1307.h

getTime() – без параметров, возвращает текущее значение времени, полученное от модуля часов. Значение должно быть помещено в предварительно созданную функцией Time структуру данных. Пример кода, с которого начинается работа с часами:

DS1307 rtc (4, 5); // Создаем объект часов с именем rtc
Time t; // Создаем структуру данных для часов с именем t
rtc.getTime(); // запрашиваем данные от модуля часов и помещаем их в структуру

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

Следующие команды позволяют выводить при помощи операторов печати данные, полученные от микросхемы часов:
getTimeStr(format) – возвращает значение текущего времени в текстовом (строковом) виде в одном из двух возможных форматов: FORMAT_LONG (чч:мм:сс) и FORMAT_SHORT (чч:мм). Эта функция может быть вызвана прямо из оператора печати, например:
Serial.print(rtc.getTimeStr(FORMAT_LONG)

вывести на дисплей текущее время в формате чч:мм:сс.
getDateStr(Yformat, Dformat, Divider) – возвращает значение текущей даты в текстовом (строковом) виде в одном из возможных форматов. Параметры: Yformat – позволяет задать один из двух возможных форматов отображения года: FORMAT_LONG (гггг) и FORMAT_SHORT (гг), Dformat – позволяет задать один из трех форматов отображения даты: FORMAT_LITTLEENDIAN (дд.мм.гггг), FORMAT_BIGENDIAN (гггг.мм.дд) или FORMAT_MIDDLEENDIAD (мм.дд.гггг). Параметр Divider позволяет задать символ, разделяющий значения (по умолчанию это точка). По умолчанию год отображается в 4-хсимвольном формате, а вся дата – в формате дд.мм.гггг. Эта функция может быть вызвана прямо из оператора печати, например:
Serial.print(rtc.getDateStr()

вывести на дисплей текущее время в формате дд:мм:гггг.
getDOWStr(format) – возвращает значение текущего времени в текстовом (строковом) виде в одном из двух возможных форматов: FORMAT_LONG (полные названия дней недели) и FORMAT_SHORT (трехбуквенные сокращения названий дней недели). Эта функция может быть вызвана прямо из оператора печати, например:
Serial.print(rtc.getDOWStr(FORMAT_LONG)

вывести на дисплей полное название текущего дня недели.
getMonthStr(format) – возвращает значение текущего месяца в текстовом (строковом) виде в одном из двух возможных форматов: FORMAT_LONG (полные названия месяцев) и FORMAT_SHORT (трехбуквенные сокращения названий месяцев). Эта функция может быть вызвана прямо из оператора печати, например:
Serial.print(rtc.getMonthStr(FORMAT_SHORT)

выведет на дисплей сокращенное до трех букв название текущего месяца.
setTime(hour, min, sec) – позволяет задать начальное значение времени. Параметры: часы (0-23), минуты (0-59) и секунды (0-59).

setDate(date, mon, year) – позволяет задать начальное значение даты. Параметры: день месяца (1-31), месяц (1-12), год (2000-2099).

ВНИМАНИЕ! Если задать заведомо несуществующую дату, например, 31 февраля – программа это проглотит, но результат может быть неожиданным ;))

setDOW(dow) – позволяет задать стартовое значение дня недели. Дни недели задаются при помощи строковых констант или числовых кодов от 1 до 7. Коду 1 соответствует понедельник, коду 7 – воскресенье. Список констант:
MONDAY
TUESDAY
WEDNESDAY
THURSDAY
FRIDAY
SATURDAY
SUNDAY


ВНИМАНИЕ! Установка часов должна выполняться при СБРОШЕННОМ флаге ClockHalt. (см. описание функции halt).

halt(booleanvalue) – позволяет установить или сбросить флаг ClockHalt, отвечающий за пуск и остановку часов. Если флаг установлен – halt(true) – часы останавливаются, если флаг сброшен – halt(false) – часы работают.

Следующие функции обеспечивают работу со встроенной памятью модуля часов.

Микросхема DS1307 содержит встроенную память, объемом 64 байта. Из них первые 8 байт используются для хранения значений текущего времени, даты и настроек. Остальные 56 байт доступны для пользователя. Для работы с этой памятью в нашей программе необходимо сначала определить структуру данных, при помощи которой данные будут передаваться из памяти микросхемы в программу и наоборот. Для этого используется функция DS1307_RAM.

DS1307_RAM xxx – создает структуру данных в виде целочисленного массива, объемом 57 байт с именем xxx. В дальнейшем возможна работа с этой структурой как с обычным массивом целых чисел. Обмен между структурой и памятью микросхемы DS1307 осуществляется при помощи функций readBuffer() и writeBufer().

readBuffer() – считывает 57 байт из памяти микросхемы DS1307 и помещает их в предварительно созданную функцией DS1307_RAM структуру данных.

writeBuffer(buffer) – записывает содержимое предварительно созданной функцией DS1307_RAM структуры данных в память микросхемы DS1307. Параметр – имя структуры данных.

poke(address, value) – записывает в память микросхемы одиночный байт по заданному адресу. Параметры: address – номер ячейки пользовательской памяти микросхемы (от 0 до 56), value – значение (от 0 до 255).

peek(address) – считывает из памяти микросхемы значение байта по указанному адресу. Параметр: address – номер ячейки пользовательской памяти микросхемы (от 0 до 56).

Следующие функции позволяют управлять работой генератора тактовых импульсов, выдающих определенные частоты на выход SQW/OUT:

setSQWRate(rate) – устанавливает одну из четырех возможных частот на выходе SQW/OUT. Параметр rate может принимать следующие значения:
SQW_RATE_1
SQW_RATE_4K
SQW_RATE_8K
SQW_RATE_32K


Они устанавливают частоты 1гц, 4096Гцб 8192Гц и 32768Гц соответственно. Генерация запускается отдельной командой, рассмотренной ниже:
enableSQW(booleanvalue) – запускает или останавливает вывод частоты, заданной командой setSQWRate(rate) и выдаваемой на выход SQW/OUT. Параметр booleanvalue может принимать значение TRUE (вывод запускается) и FALSE (вывод останавливается).

С выходом SQW/OUT работает еще одна команда:

setOutput(booleanvalue) – она позволяет установить на выходе высокий или низкий логический уровень. Параметр booleanvalue может принимать значение TRUE (устанавливается уровень лог. 1) и FALSE (устаналвивается уровень лог. 0). ВНИМАНИЕ! Эта команда не работает, если перед этим была вызвана команда enableSQW(TRUE). Т. е. выставлять логические уровни можно только тогда, когда вывод частоты отключен.

Ну вот, вроде бы и все… И на закуску – еще раз полезные ссылки:

Оригинал описания библиотеки DS1307.h (англ.): http://www.henningkarlsen.com/electronics/library.php?id=34
Библиотека DS1307.h: http://www.henningkarlsen.com/electronics/download.php?f=DS1307.rar
Datasheat на Dallas 1307 (англ.): http://datasheets.maxim-ic.com/en/ds/DS1307.pdf
Инструкция по самостоятельному изготовлению модуля от Ladyada (англ.):http://www.ladyada.net/learn/breakoutplus/ds1307rtc.html
Источник


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ 1 сообщение ] 

Часовой пояс: UTC + 10 часов


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB