It is currently Wed Oct 17, 2018 4:44 am

НИЛ АСЭМ Научно - исследовательская лаборатория автоматизированных систем экологического мониторинга

DS1307 - генератор часов реального времени

by Admin » Tue Mar 20, 2018 2:26 pm

DS1307 - 64 X 8 генератор часов реального времени с последовательным интерфейсом для встраиваемых приложений.

Image

Отладочная плата устройства

Характеристики
- часы реального времени (RTC) отсчитывают секунды, минуты, часы, дату месяца, месяц, день недели и год с компенсацией високосного года, действительной до 2100 года;
- 56-байтовое энергонезависимое ОЗУ с питанием от батареи для хранения пользовательских данных;
- двухпроводной последовательный интерфейс;
- программируемый выходной сигнал с прямоугольными импульсами (для тактирования внешних устройств);
- автоматическое обнаружение падения напряжение и схема переключения на батарею;
- потребление менее 500 нА в режиме батарейной поддержки при работающем тактовом генераторе;
- промышленный диапазон температур: от - 40 °C до + 85 °C;
- микросхема производится в 8-выводных корпусах DIP и SOIC.

Расположение выводов
Image

Image
DS1307 8-выводный DIP (300 миллидюймов)

Image
DS1307 8-выводный SOIC (150 милидюймов)

Назначение выводов
VCC - первичный источник питания;
X1, X2 - подключение 32.768 кГц кварцевого резонатора;
VBAT - вход батареи +3 В;
GND - общий минус;
SDA - последовательные данные;
SCL - последовательные синхроимпульсы;
SQW/OUT - выходной сигнал с прямоугольными импульсами.

Описание
Часы реального времени с последовательным интерфейсом DS1307 - это малопотребляющие полные двоично-десятичные часы-календарь, включающие 56 байтов энергонезависимой статической ОЗУ. Адреса и данные передаются последовательно по двухпроводной двунаправленной шине. Часы-календарь отсчитывают секунды, минуты, часы, день, дату, месяц и год. Последняя дата месяца автоматически корректируется для месяцев с количеством дней меньше 31, включая коррекцию високосного года. Часы работают как в 24-часовом, так и в 12-часовом режимах с индикатором AM/PM. DS1307 имеет встроенную схему наблюдения за питанием, которая обнаруживает перебои питания и автоматически переключается на питание от батареи.


Типовая схема включения
Image



Работа
DS1307 на последовательной шине работает как ведомое устройство. Доступ к нему достигается установкой условия START и передачей устройству идентификационного кода, за которым следует адрес регистра. К следующим за ним регистрам доступ осуществляется последовательно, пока не будет выполнено условие STOP.

Если VCC падает ниже 1.25 * VBAT, DS1307 прерывает процесс доступа и сбрасывает счётчик адреса, причем в это время внешние сигналы не воспринимаются (чтобы предотвратить запись ошибочных данных).

Если VCC падает ниже VBAT, DS1307 переключается в низкоточный режим батарейной поддержки.

При включении питания DS1307 переключается от батареи к Vcc, когда значение Vcc превышает VBAT + 0.2 В. Входящие сигналы начинают восприниматься тогда, когда Vcc превышает 1.25 * VBAT.

Блок-схема на Рис. 1 показывает основные элементы RTC с последовательным интерфейсом.

Image

Рис. 1. Блок-схема DS1307


Описание выводов
VCC, GND - на эти выводы подается питание.

VCC - это вход +5 В. Когда питающее напряжение выше 1.25 * VBAT, устройство полностью доступно, и можно выполнять чтение и запись данных. Когда к устройству подключена батарея на 3 В, и VCC ниже, чем 1.25 * VBAT, чтение и запись запрещены, однако функция отсчёта времени продолжает работать. Как только VCC падает ниже VBAT, ОЗУ и RTC переключаются на батарейное питание VBAT.

VBAT - вход для любой стандартной трёхвольтовой литиевой батареи или другого источника энергии. Для нормальной работы DS1307 необходимо, чтобы напряжение батареи было в диапазоне 2.0 ... 3.5 В. Литиевая батарея с ёмкостью 48 мА/ч или более при отсутствии питания будет поддерживать DS1307 в течение более 10 лет при температуре 25°C.

SCL (Serial Clock Input - вход последовательных синхроимпульсов) - используется для синхронизации данных по последовательному интерфейсу.

SDA (Serial Data Input/Output - вход/выход последовательных данных) - вывод входа/выхода для двухпроводного последовательного интерфейса. Вывод SDA - с открытым стоком и требует внешнего подтягивающего резистора.

SQW/OUT (Square Wave/Output Driver - сигнал с прямоугольными импульсами) - когда включен, т.е. бит SQWE установлен в 1, вывод SQW/OUT выдаёт прямоугольные импульсы с одной из четырёх частот (1 Гц, 4 кГц, 8 кГц, 32 кГц). Вывод SQW/OUT - с открытым стоком и требует внешнего подтягивающего резистора. SQW/OUT будет работать как при питании от VCC, так и при питании от VBAT.

X1, X2 - выводы для стандартного кварцевого резонатора с частотой 32.768 кГц. Схема внутреннего тактового генератора разработана для работы с кварцевым резонатором, имеющим входную ёмкость 12.5 пФ.

Более детальную информацию по выбору и расположению кварцевого резонатора вы сможете найти в примере применения № 58 "Рассмотрение кварцевого резонатора для часов реального времени от Dallas" (Application Note 58, "Crystal Considerations with Dallas Real-Time Clocks"). DS1307 также может тактироваться внешним тактовым генератором с частотой 32.768 кГц. В этом случае вывод X1 подключается к сигналу внешнего тактового генератора, а вывод X2 остаётся неподключенным.


Рекомендуемое расположение кварцевого резонатора

Image


RTC и карта адресации памяти
Image
Рис. 2. Карта адресов DS1307


Часы и календарь
Информация от часов и календаря получается чтением соответствующих байтов регистра. Регистры RTC показаны на Рис. 3. Время и календарь устанавливаются или инициализируются записью соответствующих байтов регистра. Содержимое регистров времени и календаря имеет двоично-десятичный формат. Бит 7 регистра 0 - это бит останова часов (clock halt - CH). Когда этот бит установлен в 1, тактовый генератор выключен. Когда сброшен в 0, - тактовый генератор включен.

При включении питания начальное состояние всех регистров не определено. Поэтому необходимо принудительно включать тактовый генератор (бит CH = 0) во время начальной инициализации.

DS1307 может работать и в 12-часовом, и в 24-часовом режимах. Бит 6 регистра часов отвечает за выбор 12- или 24-часового режима. Когда он установлен в 1, выбран 12-часовой режим. В этом режиме бит 5 - это бит AM/PM, при этом высокий логический уровень означает PM. В 24-часовом режиме бит 5 - это бит второго десятка часов (20 - 23 часа).

При появлении на двухпроводной шине условия START, текущее время копируется во второй набор регистров. Информация о времени читается из этих вспомогательных регистров, в то время как часы могут продолжать работать. Это устраняет необходимость перечитывать регистры DS1307 в случае обновления их содержимого во время чтения.

Image

Рис. 3. Регистры хронометра DS1307


Управляющий регистр
Управляющий регистр используется для управления работой вывода SQW/OUT.
Image

OUT (Output control - управление выходом) - этот бит управляет логическим уровнем на выводе SQW/OUT, когда выход сигнала с прямоугольными импульсами отключен. Если SQWE = 0, то логический уровень на выводе SQW/OUT равен 1, если OUT = 1, и 0, если OUT = 0.

SQWE (Square Wave Enable - включение сигнала с прямоугольными импульсами) - когда этот бит установлен в 1, включается генерация прямоугольных импульсов. Их частота зависит от значения битов RS0 и RS1. (Если частота выходного сигнала установлена в 1Гц, регистры часов обновляются по заднему фронту этих импульсов).

RS (Rate Select - выбор частоты) - эти биты управляют частотой прямоугольных импульсов, когда бит SQWE=1. В Таблице 1 приведены частоты, которые можно выбрать с помощью битов RS.

Image

Таблица 1. Частота выхода SQW


Двухпроводная последовательная шина данных
DS1307 поддерживает обмен данными по протоколу I2C по двухпроводной двунаправленной шине. Устройство, которое передаёт данные на шину, является передатчиком, а устройство, принимающее данные, - приёмником. Устройство, управляющее передачей данных, называется ведущим. Устройство, которым управляет ведущий, называется ведомым. Ведущее устройство генерирует синхроимпульсы (serial clock - SCL), управляет доступом к шине и генерирует условия START и STOP. DS1307 работает на шине как ведомое устройство. Типовая конфигурация шины с использованием протокола I2C показана на Рис. 4. Пример сопряжения DS1307 с микроконтроллером приведён на Рис. 5.

Image

Рис. 4. Типовая конфигурация двухпроводной шины


Image

Рис. 4. Схема сопряжения DS1307 с PIC16F876



Cимуляция работы DS1307 в Proteus


Модуль TinyRTC I2C с DS1307 (Видео Моисеева Д.Н.)

Управляющий код для микроконтроллера (на Proton BASIC Compiler):
Code: Select all
Device = 16F876
Xtal = 4
All_Digital = True
PortB_Pullups = True
 
' Setup the LCD
 LCD_DTPin = PORTB.4
LCD_RSPin = PORTB.2
LCD_ENPin = PORTB.3
LCD_Interface = 4
LCD_Lines = 2
LCD_Type = 0
 
' Define I2C bus ports
 SDA_Pin = PORTA.0 'DS1307 SDA pin
 SCL_Pin =PORTA.1 'DS1307 SCL pin
 
Dim Temp1 As Byte
Dim Temp2 As Byte
Dim TempVal As Byte
 
Dim Secs As Byte
Dim Mins As Byte
Dim Hrs As Byte
Dim day As Byte
Dim Date As Byte
Dim Month As Byte
Dim Year As Byte
Dim Ctrl As Byte
 
Dim Secs_last As Byte
 
'Initialize LCD
 
DelayMS 100
Cls
 
' Set initial DS1307 time / Date
 
Secs = 0 ' Set seconds
 Mins = 30 ' Set minutes
Hrs = 12 ' Set hours

day = 1 ' Set day of week value

Date = 30 ' Day of month value
Month = 11 ' Month value
Year = 6 ' Year value

Ctrl = 0 ' Set the control byte (leave as 0 in this example)

 
' The DS1307 works with data in BCD format, so convert BIN to BCD

TempVal=Secs
GoSub BIN_TO_BCD
Secs=TempVal
 
TempVal=Mins
GoSub BIN_TO_BCD
Mins=TempVal
 
TempVal=Hrs
GoSub BIN_TO_BCD
Hrs=TempVal
 
TempVal=day
GoSub BIN_TO_BCD
day=TempVal
 
TempVal=Date
GoSub BIN_TO_BCD
Date=TempVal
 
TempVal=Month
GoSub BIN_TO_BCD
Month=TempVal
 
TempVal=Year
GoSub BIN_TO_BCD
Year=TempVal
 
BStart
 
' The datasheet specifies the first byte is 1101000x where x is read(1) or write(0).
' The second byte tells the DS 1307 where to start reading, 0 is at the start.
' The Ctrl byte contains advanced features, read the datasheet for more info
BusOut 11010000, 0, [Secs, Mins, Hrs, day, Date, Month, Year, Ctrl]
'Write initial values for time / Date

BStop
 
DelayMS 20
 
Main:
 
BStart
' The datasheet specifies the first byte is 1101000x where x is read(1) or write(0).
' The second byte tells the DS 1307 where to start reading, 0 is at the start.
BusIn 11010001, 0, [Secs, Mins, Hrs, day, Date, Month, Year, Ctrl]
 
BStop
 
' The DS1307 sends it data in BCD, therefore it must be changed to
' BIN so that it can be easily used (eg, print onto an LCD)

TempVal=Secs
GoSub BCD_TO_BIN
Secs=TempVal
 
TempVal=Mins
GoSub BCD_TO_BIN
Mins=TempVal
 
TempVal=Hrs
GoSub BCD_TO_BIN
Hrs=TempVal
 
TempVal=Date
GoSub BCD_TO_BIN
Date=TempVal
 
TempVal=Month
GoSub BCD_TO_BIN
Month=TempVal
 
TempVal=Year
GoSub BCD_TO_BIN
Year=TempVal
 
 
 
'If there is update in Secs, display time and Date
If Secs - Secs_last = 0 Then GoTo Main
 
' The Dec2 modifier makes sure that each value will have 2 characters, eg 1 becomes 01
Print At 1,1,"Time: ",Dec2 Hrs, ":", Dec2 Mins,":", Dec2 Secs
Print At 2,1,"Date: ", Dec2 Date, "-", Dec2 Month, "-", Dec2 Year
 
Secs_last = Secs
 
GoTo Main
 
BCD_TO_BIN: ' Convert the BCD values into BIN

Temp1 = $0F & TempVal ' Clear off the top four bits
Temp1 = Dig Temp1, 0
Temp2 = TempVal >> 4 ' Shift down four to read 2 BCD value
Temp2 = Dig Temp2, 0
TempVal = Temp2 * 10 + Temp1
 
Return
 
BIN_TO_BCD:
 
Temp1 = Dig TempVal, 0 ' GET THE DEC DIGIT FOR THE FIRST NIBBLE
Temp2 = Dig TempVal, 1 ' GET THE DEC DIGIT FOR THE FIRST NIBBLE
Temp2 = Temp2 << 4 ' MOVE NUMBER OVER TO 2ND NIBBLE

' XOR THEM TOGTHER TO MAKE THE WHOLE BCD NUMBER
TempVal = Temp1 ^ Temp2
Return


Литература:
1.Фирменный даташит.




На главную
Admin
Site Admin
 
Posts: 203
Joined: Wed Sep 20, 2017 9:55 am

Return to Промежуточные исследования и разработки

cron

User Menu

Login