Saskarne RTC (DS1307) ar mikrokontrolleru un tā programmēšanu

Izmēģiniet Mūsu Instrumentu Problēmu Novēršanai





RTC ir elektroniska ierīce, kurai ir būtiska loma reālā laika iegultās sistēmas dizains . Tas nodrošina precīzu laiku un datumu dažādās lietojumprogrammās, piemēram, sistēmas pulkstenī, studentu apmeklēšanas sistēmā un trauksmes signālos utt., Kas seko līdzi pašreizējam laikam un nodrošina konsekventu rezultātu attiecīgajam uzdevumam. Šajā rakstā ir parādīta RTC saskarne ar 8051 mikrotruleri un pamata piekļuve iekšējiem reģistriem.

RTC mijiedarbība ar 8051 mikrokontrolleru

RTC mijiedarbība ar 8051 mikrokontrolleru



RTC programmēšana un saskarne

RTC saskarne ar 8051 mikrokontrolleru ir līdzīga visiem pārējiem tam pieslēgtajiem “reālā laika pulksteņiem”. Tāpēc apskatīsim vienkāršu RTC saskarni ar 8051 mikrokontrolleris un tajā iesaistīto programmēšanas procedūru.


1. solis: atlasiet RTC ierīce

Reālā laikā iegultā pasaulē ir pieejami dažādi RTC mikroshēmu veidi, kas tiek klasificēti, pamatojoties uz dažādiem kritērijiem, piemēram, paketes tipu, barošanas spriegumu un kontaktu konfigurāciju utt. Daži ir RTC ierīču veidi.



  • Divu vadu seriālā saskarne (I2C kopne)
  • Trīs vadu seriālā saskarne (USB BUS)
  • Četru vadu seriālais interfeiss (SPI BUS)

Pirmkārt, mums jāizvēlas RTC ierīces tips pēc kategorijas, pamatojoties uz tādām prasībām kā I2C kopnes RTC vai SPI kopnes RTC vai citas, kas piemērotas saskarnei ar attiecīgo mikrokontrolleru. Tad mēs varam izvēlēties RTC ierīces funkcijas atkarībā no lietojuma prasībām, piemēram, akumulatora darbības laika, piemērota iepakojuma un pulksteņa frekvences. Apsvērsim divu vadu saskarni RTC ar 8051 mikrokontrolleru, piemēram, DS1307 .

2. solis: RTC ierīces iekšējais reģistrs un adrese

RTC nozīmē reālā laika pulksteni, kas nodrošina gadus, mēnešus, nedēļas, dienas, stundas, minūtes un sekundes, pamatojoties uz kristāla frekvenci. RTC sastāv no iebūvēta RAM atmiņa datu glabāšanai . Baterijas dublējums tiks nodrošināts galvenā barošanas avota atteices gadījumā, pievienojot akumulatoru RTC ierīcei.

RTC DB1307 konfigurācija:

RTC iekšējie bloki un tapu diagramma

RTC iekšējie bloki un tapu diagramma

A0, A1, A2: ir RTC DB1307 mikroshēmas adreses tapas, kuras var izmantot, lai sazinātos ar galveno ierīci. Mēs varam kontrolēt astoņas ierīces ar RTC saskarni 8051 mikrokontrolleris ar A0, A1, A2 bitiem, izmantojot I2C protokolu.


VCC un GND: VCC un GND ir attiecīgi barošanas un zemes tapas. Šī ierīce darbojās ar diapazonu no 1,8 V līdz 5,5 V.

VBT: VBT ir akumulatora barošanas avots. Akumulatora strāvas avotam jābūt no 2 V līdz 3,5 V.

SCL: SCL ir sērijas pulksteņa tapa, un to izmanto, lai sinhronizētu datus seriālajā saskarnē.

SDL: Tā ir sērijveida ievades un izvades tapa. To izmanto datu pārsūtīšanai un saņemšanai seriālajā saskarnē.

Pulkstenis: Tā ir izvēles kvadrātveida viļņu izvades tapa.

OSC0 un OSC1: Tie ir kristāla oscilatora tapas, ko izmanto pulksteņa signālu nodrošināšanai RTC ierīcei. Standarta kvarca kristālu frekvence ir 22,768KHzs.

Ierīces adresēšana:

I2C kopnes protokols vienlaikus atļauj daudzas vergu ierīces. Katrai vergu ierīcei jāsastāv no savas adreses, lai tajā attēlotu. Galvenā ierīce sazinās ar konkrētu vergu ierīci, izmantojot adresi. RTC ierīces adrese ir “0xA2”, kur “1010” norāda ražotājs, un A0, A1, A2 ir lietotāja definēta adrese, ko izmanto, lai sazinātos ar astoņām RTC ierīcēm. I2C kopnes protokols .

Ierīces papildināšana

Ierīces papildināšana

R / W bitu izmanto, lai veiktu lasīšanas un rakstīšanas darbības RTC. Ja R / W = 0, tiek veikta rakstīšanas operācija un R / W = 1 lasīšanas operācijai.

RTC lasīšanas darbības adrese = “0xA3”

RTC rakstīšanas darbības adrese = “0xA2”

Atmiņas reģistri un adrese:

RTC reģistri atrodas adrešu vietās no 00h līdz 0Fh, un RAM atmiņas reģistri atrodas adreses vietās no 08h līdz 3Fh, kā parādīts attēlā. RTC reģistri tiek izmantoti, lai nodrošinātu kalendāra funkcionalitāti un dienas braukšanas laiku, kā arī parādītu nedēļas nogales.

Atmiņas reģistri un adrese

Atmiņas reģistri un adrese

Kontroles / statusa reģistri:

DB1307 sastāv no diviem papildu reģistriem, piemēram, control / status1 un control / status2, kas tiek izmantoti reālā laika pulksteņa kontrolei un pārtrauc .

Kontroles / statusa reģistrs1:

Kontroles statusa reģistrs

Kontroles statusa reģistrs

  • TEST1 = 0 parastajā režīmā

= 1 EXT pulksteņa testa režīms

  • STOP = 0 RTC sākas

= 1 RTC apstāšanās

  • TESTC = 0 ieslēgšanas jauda ir atspējota

= ieslēgta atiestatīšana

Kontroles / statusa reģistrs2:

Kontroles statusa reģistrs

Kontroles statusa reģistrs

  • TI / TP = 0 INT ir aktīvs visu laiku

= 1 INT aktīvais nepieciešamais laiks

  • AF = 0 Trauksme neatbilst

= 1 Trauksmes spēle

  • TF = 0 Taimera pārpilde nenotiek

= 1 notiek taimera pārpilde

  • ALE = 0 Trauksmes pārtraukumi ir atspējoti

= 1 trauksmes pārtraukumi ir iespējoti

  • TIE = 0 Taimeris pārtrauc atspējot

= 1 Taimera pārtraukumu iespējošana

3. solis: RTC ds1307 un 8051 mijiedarbība

RTC var būt savienots ar mikrokontrolleru izmantojot dažādus seriālās kopnes protokolus, piemēram, I2C un SPI protokoli kas nodrošina saziņas saikni starp tām. Attēlā parādīts reālā laika pulksteņa mijiedarbība ar 8051 mikrokontrolleru, izmantojot I2C kopnes protokolu. I2C ir divvirzienu sērijveida protokols, kas sastāv no diviem vadiem, piemēram, SCL un SDA, lai pārsūtītu datus starp ierīcēm, kas pievienotas kopnei. 8051 mikrokontrollerim nav iebūvētas RTC ierīces, tāpēc mēs esam izveidojuši savienojumu ārēji caur a sērijveida saziņa datu nodrošināšanai.

RTC mijiedarbība ar 8051 mikrokontrolleru

RTC mijiedarbība ar 8051 mikrokontrolleru

I2C ierīcēm ir atvērtas drenāžas izejas, tāpēc pievilkšanas rezistori jāpieslēdz I2C kopnes līnijai ar sprieguma avotu. Ja rezistori nav savienoti ar SCL un SDL līnijām, kopne nedarbosies.

4. solis: RTC datu kadru formāts

Tā kā RTC, kas mijiedarbojas ar 8051 mikrokontrolleru, izmanto I2C kopni, datu pārraide notiek baitos vai paketēs, un katram baitam seko apstiprinājums.

Datu rāmja pārsūtīšana:

Pārraides režīmā galvenais vergs atbrīvo sākuma nosacījumu pēc tam, kad ir atlasījis vergu ierīci pēc adreses bita. Adreses bits satur 7 bitus, kas vergu ierīces norāda kā ds1307 adresi. Sērijas dati un sērijas pulkstenis tiek pārsūtīti uz SCL un SDL līnijām. START un STOP nosacījumi tiek atzīti par sērijveida pārsūtīšanas sākumu un beigām. Saņemšanas un pārsūtīšanas darbībām seko R / W bits.

Datu rāmja pārsūtīšana

Datu rāmja pārsūtīšana

Sākt: Pirmkārt, datu pārsūtīšanas secība, ko sāk kapteinis, kas ģenerē sākuma nosacījumu.

7 bitu adrese: Pēc tam kapteinis nosūta verga adresi divos 8 bitu formātos, nevis vienas 16 bitu adreses.

Kontroles / statusa reģistra adrese: Kontroles / statusa reģistra adrese ir atļauta kontroles statusa reģistriem.

Kontroles / statusa reģistrs1: Vadības statusa reģistrs1, ko izmanto, lai iespējotu RTC ierīci

Kontroles / statusa reģistrs2: To izmanto, lai iespējotu un atspējotu pārtraukumus.

R / W: Ja lasīšanas un rakstīšanas bitu ir maz, tad tiek veikta rakstīšanas darbība.

ALAS: Ja verga ierīcē tiek veikta rakstīšanas darbība, uztvērējs nosūta 1 bitu ACK uz mikrokontrolleru.

Pietura: Pēc verdzības ierīces rakstīšanas darbības pabeigšanas mikrokontrolleris nosūta apturēšanas stāvokli vergu ierīcei.

Datu rāmja saņemšana:

Datu rāmja saņemšana

Datu rāmja saņemšana

Sākt: Pirmkārt, datu pārsūtīšanas secība, ko sāk kapteinis, kas ģenerē sākuma nosacījumu.

7 bitu adrese: Pēc tam kapteinis nosūta verga adresi divos 8 bitu formātos, nevis vienas 16 bitu adreses.

Kontroles / statusa reģistra adrese: Kontroles / statusa reģistra adrese ļauj kontrolēt statusa reģistrus.

Vadības / statusa reģistrs1: Vadības statusa reģistrs1, ko izmanto, lai iespējotu RTC ierīci

Kontroles / statusa reģistrs2: To izmanto, lai iespējotu un atspējotu pārtraukumus.

R / W: Ja lasīšanas un rakstīšanas bits ir augsts, tiek veikta lasīšanas darbība.

ALAS: Ja verga ierīcē tiek veikta rakstīšanas darbība, uztvērējs nosūta 1 bitu ACK uz mikrokontrolleru.

Pietura: Pēc verdzības ierīces rakstīšanas darbības pabeigšanas mikrokontrolleris nosūta apturēšanas stāvokli vergu ierīcei.

5. solis: RTC programmēšana

Rakstīšanas darbība no kapteiņa līdz vergam:

  1. Izsniedziet sākuma nosacījumu no kapteiņa līdz vergam
  2. Pārsūtiet verga adresi rakstīšanas režīmā uz SDL līniju
  3. Nosūtiet kontroles reģistra adresi
  4. Nosūtiet kontroles / statusa reģistru1value
  5. Nosūtiet kontroles / statusa reģistra2 vērtību
  6. Nosūtiet līdzīgu minūšu, sekunžu un stundu datumu
  7. Nosūtiet pieturas bitu

# iekļaut

sbit SCL = P2 ^ 5
sbit SDA = P2 ^ 6
anulēt sākumu ()
void hosts (neparakstīta rakstzīme)
kavēšanās (neparakstīta char)

anulēt galveno ()
{

sākt()
rakstīt (0xA2) // verga adrese //
rakstīt (0x00) // kontroles reģistra adrese //
rakstīt (0x00) // 1. kontroles reģistra vērtība //
rakstīt (0x00) // kontroles regiter2 vlaue //
rakstīt (0x28) // sec vērtība //
rakstīt (0x50) // minūtes vērtība //
rakstīt (0x02) // stundu vērtība //
}

anulēt sākumu ()
{

SDA = 1 // datu apstrāde //
SCL = 1 // pulkstenis ir augsts //
kavēšanās (100)
SDA = 0 // nosūtīja datus //
kavēšanās (100)
SCL = 0 // pulksteņa signāls ir zems //
}
void write (neparakstīta rakstzīme d)
{

neparakstīta char k, j = 0 × 80
par (k = 0k<8k++)
{
SDA = (d & j)
J = j >> 1
SCL = 1
kavēšanās (4)
SCL = 0
}
SDA = 1
SCL = 1
kavēšanās (2)
c = SDA
kavēšanās (2)
SCL = 0
}
tukša kavēšanās (int p)
{
neparakstīta, dz
Par (a = 0a<255a++) //delay function//
Par (b = 0b}

Izlasiet darbību no verga pie galvenā:

# iekļaut
sbit SCL = P2 ^ 5
sbit SDA = P2 ^ 6
anulēt sākumu ()
anulēt rakstīt (paraksta char)
anulēt lasīt ()
anulēt ack ()
void delay (neparakstīta char)
anulēt galveno ()
{
sākt()
write (0xA3) // verga adrese lasīšanas režīmā //
lasīt ()
Diemžēl ()
sec = vērtība
}
anulēt sākumu ()
{

SDA = 1 // datu apstrāde //
SCL = 1 // pulkstenis ir augsts //
kavēšanās (100)
SDA = 0 // nosūtīja datus //
kavēšanās (100)
SCL = 0 // pulksteņa signāls ir zems //
}
void write (neparakstīta rakstzīme d)
{

neparakstīta char k, j = 0 × 80
par (k = 0k<8k++)
{
SDA = (d & j)
J = j >> 1
SCL = 1
kavēšanās (4)
SCL = 0
}
SDA = 1
SCL = 1
kavēšanās (2)
c = SDA
kavēšanās (2)
SCL = 0
}
tukša kavēšanās (int p)
{
neparakstīta, dz
Par (a = 0a<255a++) //delay function//
Par (b = 0b}
Nav spēkā ()
{
Neparakstīta char j, z = 0 × 00, q = 0 × 80
SDA = 1
par (j = 0j<8j++)
{
SCL = 1
kavēšanās (100)
karogs = SDA
ja (karodziņš == 1)

z = (z
anulēt ack ()
{
SDA = 0 // SDA līnija ir zema //
SCL = 1 // pulkstenis ir no augšas līdz zemam //
kavēšanās (100)
SCL = 0
}

Šīs ir nepieciešamās darbības RTC saskarnei ar 8051 mikrokontrolleru. Šo darbību papildinājumos šajā rakstā ir apskatīti arī datu rāmji, kas tiek izmantoti datu pārsūtīšanai un saņemšanai, lai lietotāji saprastu ar atbilstošu programmēšanu. Lai saņemtu papildu palīdzību saistībā ar šo koncepciju, varat atstāt komentāru zemāk.