Взаимодействие RTC (DS1307) с микроконтроллером и его программирование

Попробуйте наш инструмент устранения неполадок





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

Интерфейс RTC с микроконтроллером 8051

Интерфейс RTC с микроконтроллером 8051



Программирование и интерфейс RTC

Интерфейс RTC с микроконтроллером 8051 аналогичен всем другим видам «часов реального времени», подключенных к нему. Итак, давайте посмотрим на простой интерфейс RTC с 8051 микроконтроллер и процедура программирования вовлечения в него.


Шаг 1: Выберите устройство RTC

Во встроенном мире реального времени доступны различные типы микросхем RTC, которые классифицируются на основе различных критериев, таких как тип корпуса, напряжение питания, конфигурация контактов и т. Д. Несколько типов устройств RTC:



  • Двухпроводной последовательный интерфейс (шина I2C)
  • Трехпроводной последовательный интерфейс (USB-шина)
  • Четырехпроводной последовательный интерфейс (SPI BUS)

Во-первых, нам нужно выбрать тип устройства RTC по категории на основе требований, таких как I2C Bus RTC или SPI Bus RTC или другое, которое подходит для взаимодействия с соответствующим микроконтроллером. Затем мы можем выбрать характеристики устройства RTC в зависимости от требований приложения, таких как время автономной работы, подходящий корпус и тактовая частота. Рассмотрим двухпроводную связь RTC с микроконтроллером 8051, например DS1307 .

Шаг 2: Внутренний регистр и адрес устройства RTC

RTC обозначает часы реального времени, которые показывают годы, месяцы, недели, дни, часы, минуты и секунды в зависимости от частоты кристалла. RTC состоит из встроенных RAM-память для хранения данных . Резервная батарея будет обеспечена в случае отказа основного питания путем подключения батареи к устройству RTC.

RTC DB1307 Конфигурация:

Внутренние блоки RTC и схема контактов

Внутренние блоки RTC и схема контактов

A0, A1, A2: являются адресными контактами микросхемы RTC DB1307, которые могут использоваться для связи с ведущим устройством. Мы можем контролировать восемь устройств с интерфейсом RTC с 8051 микроконтроллер битами A0, A1, A2 с использованием протокола I2C.


VCC и GND: VCC и GND - это контакты питания и заземления соответственно. Это устройство работало в диапазоне от 1,8 В до 5,5 В.

VBT: VBT - вывод питания от батареи. Источник питания от батареи должен находиться в диапазоне от 2 В до 3,5 В.

SCL: SCL - это вывод тактовых импульсов последовательного интерфейса, который используется для синхронизации данных по последовательному интерфейсу.

SDL: Это последовательный вход и выход. Он используется для передачи и приема данных по последовательному интерфейсу.

Часы из: Это дополнительный выходной вывод прямоугольной формы.

OSC0 и OSC1: Это выводы кварцевого генератора, которые используются для подачи тактовых сигналов на устройство RTC. Стандартная частота кварцевого кристалла составляет 22,768 кГц.

Адресация устройства:

Протокол шины I2C позволяет одновременно использовать несколько ведомых устройств. Каждое ведомое устройство должно иметь собственный адрес, который будет отображаться на нем. Главное устройство связывается с конкретным подчиненным устройством по адресу. Адрес устройства RTC - «0xA2», где «1010» задается производителем, а A0, A1, A2 - адрес, определяемый пользователем, который используется для связи с восемью устройствами RTC на Протокол шины I2C .

Адресация устройства

Адресация устройства

Бит R / W используется для выполнения операций чтения и записи в RTC. Если R / W = 0, выполняется операция записи, а R / W = 1 для операции чтения.

Адрес операции чтения RTC = «0xA3»

Адрес операции записи RTC = «0xA2»

Регистры памяти и адрес:

Регистры RTC расположены в адресных ячейках от 00h до 0Fh, а регистры памяти RAM расположены в адресных ячейках от 08h до 3Fh, как показано на рисунке. Регистры RTC используются для обеспечения функций календаря и времени движения, а также для отображения выходных.

Регистры памяти и адрес

Регистры памяти и адрес

Регистры управления / состояния:

DB1307 состоит из двух дополнительных регистров, таких как control / status1 и control / status2, которые используются для управления часами реального времени и прерывает .

Регистр управления / состояния 1:

Регистр состояния управления 1

Регистр состояния управления 1

  • TEST1 = 0 нормальный режим

= 1 Тестовый режим EXT-clock

  • STOP = 0 запускается RTC

= 1 остановка RTC

  • TESTC = 0 сброс при включении отключен

= сброс при включении включен

Регистр управления / состояния 2:

Регистр состояния управления 2

Регистр состояния управления 2

  • TI / TP = 0 INT постоянно активен

= 1 INT активное требуемое время

  • AF = 0 Тревога не соответствует

= 1 совпадение сигнала тревоги

  • TF = 0 Переполнение таймера не происходит

= 1 Произошло переполнение таймера

  • ALE = 0 Аварийные прерывания запрещены

= 1 аварийные прерывания разрешены

  • TIE = 0 Таймер прерываний отключен

= 1 Разрешить прерывания по таймеру

Шаг 3: взаимодействие RTC ds1307 с 8051

RTC может быть подключен к микроконтроллеру с помощью различных протоколов последовательной шины, таких как I2C и Протоколы SPI которые обеспечивают связь между ними. На рисунке показано взаимодействие часов реального времени с микроконтроллером 8051 с использованием протокола шины I2C. I2C - это двунаправленный последовательный протокол, который состоит из двух проводов, таких как SCL и SDA, для передачи данных между устройствами, подключенными к шине. Микроконтроллер 8051 не имеет встроенного устройства RTC, поэтому мы подключили его извне через последовательная связь для обеспечения составных данных.

Интерфейс RTC с микроконтроллером 8051

Интерфейс RTC с микроконтроллером 8051

Устройства I2C имеют выходы с открытым стоком, поэтому подтягивающие резисторы должны быть подключены к линии шины I2C с источником напряжения. Если резисторы не подключены к линиям SCL и SDL, шина работать не будет.

Шаг 4: формат кадрирования данных RTC

Поскольку интерфейс RTC с микроконтроллером 8051 использует шину I2C, передача данных осуществляется в виде байтов или пакетов, и за каждым байтом следует подтверждение.

Передача кадра данных:

В режиме передачи ведущее устройство сбрасывает условие запуска после выбора ведомого устройства по биту адреса. Бит адреса содержит 7 битов, которые указывают подчиненные устройства как адрес ds1307. Последовательные данные и последовательные часы передаются по линиям SCL и SDL. Условия START и STOP распознаются как начало и конец последовательной передачи. За операциями приема и передачи следует бит чтения / записи.

Передача кадра данных

Передача кадра данных

Начинать: В первую очередь, последовательность передачи данных, инициированная мастером, генерирующим условие запуска.

7-битный адрес: После этого мастер отправляет подчиненный адрес в двух 8-битных форматах вместо одного 16-битного адреса.

Адрес регистра управления / состояния: Адрес регистра управления / состояния предназначен для разрешения регистров состояния управления.

Регистр управления / состояния 1: Регистр состояния управления1, используемый для включения устройства RTC

Регистр управления / состояния 2: Он используется для включения и отключения прерываний.

R / W: Если бит чтения и записи низкий, выполняется операция записи.

УВЫ: Если операция записи выполняется в ведомом устройстве, то приемник отправляет 1-битный ACK на микроконтроллер.

Останавливаться: После завершения операции записи в подчиненном устройстве микроконтроллер отправляет состояние остановки подчиненному устройству.

Получение кадра данных:

Получение кадра данных

Получение кадра данных

Начинать: В первую очередь, последовательность передачи данных, инициированная мастером, генерирующим условие запуска.

7-битный адрес: После этого мастер отправляет подчиненный адрес в двух 8-битных форматах вместо одного 16-битного адреса.

Адрес регистра управления / состояния: Адрес регистра управления / состояния предназначен для разрешения регистров состояния управления.

Регистр управления / состояния 1: Регистр состояния управления 1, используемый для включения устройства RTC.

Регистр управления / состояния 2: Он используется для включения и отключения прерываний.

R / W: Если бит чтения и записи высокий, выполняется операция чтения.

УВЫ: Если операция записи выполняется в ведомом устройстве, то приемник отправляет 1-битный ACK на микроконтроллер.

Останавливаться: После завершения операции записи в подчиненном устройстве микроконтроллер отправляет состояние остановки подчиненному устройству.

Шаг 5: Программирование RTC

Запись операции от ведущего к ведомому:

  1. Задайте условие запуска от ведущего к ведомому
  2. Перенести адрес подчиненного устройства в режим записи в строке SDL
  3. Отправить адрес регистра управления
  4. Отправить значение регистра управления / статуса
  5. Отправить значение регистра управления / состояния 2
  6. Отправить дату как минуты, секунды и часы
  7. Отправить стоповый бит

#включают

сбит SCL = P2 ^ 5
sbit SDA=P2^6
недействительный старт ()
недействительные хосты (беззнаковый символ)
задержка (символ без знака)

пустая функция()
{

Начните()
write (0xA2) // адрес ведомого //
write (0x00) // адрес управляющего регистра //
write (0x00) // управлять значением регистра 1 //
write (0x00) // управление regiter2 vlaue //
write (0x28) // значение секунды //
write (0x50) // значение минут //
write (0x02) // значение часов //
}

недействительный старт ()
{

SDA = 1 // обработка данных //
SCL = 1 // часы высокие //
задержка (100)
SDA = 0 // отправил данные //
задержка (100)
SCL = 0 // тактовый сигнал низкий //
}
пустая запись (беззнаковый символ d)
{

символ без знака k, j = 0 × 80
для (k = 0k<8k++)
{
SDA = (d и j)
J = j >> 1
SCL = 1
задержка (4)
SCL = 0
}
SDA = 1
SCL = 1
задержка (2)
c = SDA
задержка (2)
SCL = 0
}
пустая задержка (int p)
{
unsignedinta, b
Для (a = 0a<255a++) //delay function//
Для (b = 0b}

Прочтите операцию от ведомого к главному:

#включают
сбит SCL = P2 ^ 5
sbit SDA=P2^6
недействительный старт ()
пустая запись (знаковый символ)
недействительное чтение ()
void ack ()
недействительная задержка (символ без знака)
пустая функция()
{
Начните()
write (0xA3) // адрес ведомого устройства в режиме чтения //
читать()
Увы()
сек = значение
}
недействительный старт ()
{

SDA = 1 // обработка данных //
SCL = 1 // часы высокие //
задержка (100)
SDA = 0 // отправил данные //
задержка (100)
SCL = 0 // тактовый сигнал низкий //
}
пустая запись (беззнаковый символ d)
{

символ без знака k, j = 0 × 80
для (k = 0k<8k++)
{
SDA = (d и j)
J = j >> 1
SCL = 1
задержка (4)
SCL = 0
}
SDA = 1
SCL = 1
задержка (2)
c = SDA
задержка (2)
SCL = 0
}
пустая задержка (int p)
{
unsignedinta, b
Для (a = 0a<255a++) //delay function//
Для (b = 0b}
Пустое чтение ()
{
Символ без знака j, z = 0 × 00, q = 0 × 80
SDA = 1
для (j = 0j<8j++)
{
SCL = 1
задержка (100)
flag = SDA
если (флаг == 1)

z = (z
void ack ()
{
SDA = 0 // линия SDA идет на низкий //
SCL = 1 // часы идут от высокого к низкому //
задержка (100)
SCL = 0
}

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