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

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

RTC е електронно устройство, което играе съществена роля в дизайн на вградена система в реално време . Той предоставя точен час и дата в различни приложения като системния часовник, системата за присъствие на ученици и алармата и т.н., които следят текущото време и осигуряват постоянен резултат за съответната задача. Тази статия представя RTC взаимодействие с 8051microcotrolle и основен достъп до вътрешни регистри.



RTC взаимодействие с 8051 микроконтролер

RTC взаимодействие с 8051 микроконтролер

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

RTC взаимодействието с микроконтролер 8051 е подобно на всички останали видове „часовници в реално време“, свързани с него. Така че нека разгледаме простото RTC взаимодействие с 8051 микроконтролер и процедура за програмиране, включваща в него.






Стъпка 1: Изберете RTC устройство

Различните видове RTC чипове се предлагат във вградения свят в реално време, които се класифицират въз основа на различни критерии като тип опаковка, захранващо напрежение и конфигурация на щифтове и т.н. Няколко вида RTC устройства са

  • Двужилен сериен интерфейс (I2C шина)
  • Трижилен сериен интерфейс (USB BUS)
  • Четирижилен сериен интерфейс (SPI BUS)

Първо, трябва да изберете тип RTC устройство по категория въз основа на изискване като I2C Bus RTC или SPI Bus RTC или друго, което е подходящо за взаимодействие със съответния микроконтролер. След това можем да изберем функции на RTC устройство в зависимост от изискванията на приложението като живот на батерията, подходящ пакет и тактова честота. Нека разгледаме двупроводното свързване RTC с микроконтролер 8051 като DS1307 .



Стъпка 2: Вътрешен регистър и адрес на RTC устройството

RTC означава часовник в реално време, който предоставя години, месеци, седмици, дни, часове, минути и секунди въз основа на честотата на кристалите. RTC се състои от вграден RAM памет за съхранение на данни . Ще бъде осигурено резервно копие на батерията в случай на повреда на основното захранване чрез свързване на батерия към RTC устройство.

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

RTC Вътрешни блокове и Pin диаграма

RTC Вътрешни блокове и Pin диаграма

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


VCC и GND: VCC и GND са съответно захранващи и земни щифтове. Това устройство работи с обхват от 1.8V до 5.5V.

VBT: VBT е щифт за захранване на батерията. Източникът на захранване на батерията трябва да се поддържа между 2V и 3.5V.

SCL: SCL е сериен щифт за часовник и се използва за синхронизиране на данни на серийния интерфейс.

SDL: Това е сериен вход и изход щифт. Използва се за предаване и получаване на данни по сериен интерфейс.

Часовник: Това е незадължителен извод с квадратна вълна.

OSC0 и OSC1: Това са кристални осцилаторни щифтове, които се използват за подаване на тактови сигнали към RTC устройството. Стандартната кварцова кристална честота е 22.768KHzs.

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

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:

Регистър на контролния статус

Регистър на контролния статус

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

= 1 EXT-часовник тест режим

  • STOP = 0 RTC стартира

= 1 RTC стоп

  • TESTC = 0 деактивирано включване при нулиране

= включено нулиране при включване

Регистър за контрол / статус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 се разпознават като начало и край на сериен трансфер. Операциите за приемане и предаване са последвани от R / W бита.

Предаване на рамка за данни

Предаване на рамка за данни

Начало: На първо място, последователността на трансфера на данни, инициирана от главния генериращ началното условие.

7-битов адрес: След това главният изпраща подчинения адрес в два 8-битови формата вместо един 16-битов адрес.

Адрес на регистъра за контрол / статус: Адресът на контрола / регистъра на състоянието е да разреши регистрите на състоянието на контрола.

Регистър за контрол / статус1: Регистърът на контролния статус1, използван за активиране на RTC устройството

Регистър за контрол / статус2: Използва се за активиране и деактивиране на прекъсвания.

R / W: Ако битът за четене и запис е нисък, тогава се извършва операцията за запис.

АЛАС: Ако операцията за запис се извършва в подчиненото устройство, приемникът изпраща 1-битов ACK към микроконтролера.

Спри се: След приключване на операцията за запис в подчиненото устройство, микроконтролерът изпраща състояние на спиране към подчиненото устройство.

Получаване на рамка за данни:

Получаване на рамка за данни

Получаване на рамка за данни

Начало: На първо място, последователността на трансфера на данни, инициирана от главния генериращ началното условие.

7-битов адрес: След това главният изпраща подчинен адрес в два 8-битови формата вместо един 16-битов адрес.

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

Контролен / Регистър на състоянието1: Регистърът на контролния статус1, използван за активиране на RTC устройството

Регистър за контрол / статус2: Използва се за активиране и деактивиране на прекъсвания.

R / W: Ако битът за четене и запис е висок, тогава се извършва операцията за четене.

АЛАС: Ако операцията за запис се извършва в подчиненото устройство, приемникът изпраща 1-битов ACK към микроконтролера.

Спри се: След приключване на операцията за запис в подчиненото устройство, микроконтролерът изпраща състояние на спиране към подчиненото устройство.

Стъпка 5: Програмиране на RTC

Напишете операция от Master към Slave:

  1. Издайте условието за стартиране от главен на подчинен
  2. Прехвърлете подчинения адрес в режим на запис на SDL линия
  3. Изпратете адреса на контролния регистър
  4. Изпратете контрола / статус register1value
  5. Изпратете контролата / стойността регистър2 стойност
  6. Изпратете датата на подобни минути, секунди и часове
  7. Изпратете стоп бита

#include

sbit SCL = P2 ^ 5
sbit SDA = P2 ^ 6
празно начало ()
невалидни хостове (неподписан знак)
забавяне (неподписан знак)

void main ()
{

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

празно начало ()
{

SDA = 1 // обработка на данните //
SCL = 1 // часовникът е висок //
забавяне (100)
SDA = 0 // изпрати данните //
забавяне (100)
SCL = 0 // тактовият сигнал е нисък //
}
void write (неподписан знак 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)
{
неподписан, b
За (a = 0a<255a++) //delay function//
За (b = 0b}

Прочетете Операция от роб до господар:

#include
sbit SCL = P2 ^ 5
sbit SDA = P2 ^ 6
празно начало ()
void write (въведен знак)
невалидно четене ()
празно ack ()
забавяне на празнотата (неподписан знак)
void main ()
{
старт ()
write (0xA3) // slave адрес в режим на четене //
Прочети()
Уви ()
sec = стойност
}
празно начало ()
{

SDA = 1 // обработка на данните //
SCL = 1 // часовникът е висок //
забавяне (100)
SDA = 0 // изпрати данните //
забавяне (100)
SCL = 0 // тактовият сигнал е нисък //
}
void write (неподписан знак 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)
{
неподписан, 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
празно ack ()
{
SDA = 0 // SDA линията преминава към ниско //
SCL = 1 // часовникът е висок към нисък //
забавяне (100)
SCL = 0
}

Това са необходимите стъпки за RTC взаимодействие с 8051 микроконтролер. В допълнение към тези стъпки, рамките за данни, използвани за прехвърляне и получаване на данни, също са обсъдени в тази статия за разбиране от потребителя с подходящо програмиране. За допълнителна помощ относно тази концепция можете да оставите коментар по-долу.