RTC (DS1307) liidestamine mikrokontrolleriga ja selle programmeerimine

Proovige Meie Instrumenti Probleemide Kõrvaldamiseks





RTC on elektrooniline seade, millel on oluline roll reaalajas manustatud süsteemi disain . See annab täpse aja ja kuupäeva erinevates rakendustes, näiteks süsteemi kell, õpilaste kohalolekusüsteem ja alarm jne, mis jälgivad praegust aega ja annavad vastava ülesande jaoks järjepideva tulemuse. Selles artiklis esitatakse RTC-liides 8051 mikrotrulliga ja siseregistrite põhiline juurdepääs.

RTC liides 8051 mikrokontrolleriga

RTC liides 8051 mikrokontrolleriga



RTC programmeerimine ja liidestamine

RTC-liides 8051 mikrokontrolleriga on sarnane kõigi muude sellega ühendatud reaalajas kelladega. Vaatame siis lihtsat RTC-liidestust 8051 mikrokontroller ja sellega seotud programmeerimisprotseduur.


1. samm: valige RTC-seade

Reaalajas manustatud maailmas on saadaval mitmesugused RTC kiibid, mis on klassifitseeritud erinevate kriteeriumide alusel, nagu paketi tüüp, toitepinge ja tihvtide konfiguratsioon jne.



  • Kahe juhtmega jadaliides (I2C siin)
  • Kolme juhtmega jadaliides (USB BUS)
  • Neljajuhtmeline jadaliides (SPI BUS)

Esiteks peame valima RTC seadme tüübi kategooria järgi, lähtudes nõudest, näiteks I2C Bus RTC või SPI Bus RTC või muu, mis sobib liidestamiseks vastava mikrokontrolleriga. Seejärel saame valida RTC-seadme funktsioonid sõltuvalt rakenduse nõudest, näiteks aku kasutusaeg, sobiv pakett ja kella sagedus. Mõelgem kahe juhtmega liidestamisele RTC 8051 mikrokontrolleriga, näiteks DS1307 .

2. samm: RTC-seadme sisemine register ja aadress

RTC tähistab reaalajas kella, mis pakub aastaid, kuid, nädalaid, päevi, tunde, minuteid ja sekundeid kristallide sageduse põhjal. RTC koosneb sisseehitatud RAM-mälu andmete salvestamiseks . Põhivarustuse rikke korral pakutakse aku varukoopia, ühendades aku RTC-seadmega.

RTC DB1307 seadistamine:

RTC sisemised plokid ja tihvtide skeem

RTC sisemised plokid ja tihvtide skeem

A0, A1, A2: on kiibi RTC DB1307 aadressnõelad, mida saab kasutada põhiseadmega suhtlemiseks. Saame juhtida kaheksa seadet, millel on RTC-liides 8051 mikrokontroller A0, A1, A2 bitti I2C protokolli abil.


VCC ja GND: VCC ja GND on vastavalt toiteallikad ja maapinnad. See seade töötas vahemikus 1,8–5,5 V.

VBT: VBT on aku toiteallika tihvt. Aku toiteallikat tuleb hoida vahemikus 2–3,5 V.

SCL: SCL on jadane kella tihvt ja seda kasutatakse jadaliidese andmete sünkroonimiseks.

SDL: See on jad- ja väljundnõel. Seda kasutatakse andmete edastamiseks ja vastuvõtmiseks jadaliideses.

Kell välja: See on valikuline ruutlaine väljundnõel.

OSC0 ja OSC1: Need on kristall-ostsillaatori tihvtid, mida kasutatakse kellasignaalide edastamiseks RTC-seadmesse. Kvartskristallide tavaline sagedus on 22,768KHzs.

Seadme aadress:

I2C siiniprotokoll võimaldab korraga palju alamseadmeid. Iga orja seade peab koosnema oma aadressist, mida sellel näidata. Põhiseade suhtleb konkreetse orjaseadmega aadressi kaudu. RTC-seadme aadress on '0xA2', kus '1010' annab tootja ja A0, A1, A2 on kasutaja määratletud aadress, mida kasutatakse kaheksa RTC-seadme edastamiseks I2C siini protokoll .

Seadme lisamine

Seadme lisamine

R / W bitti kasutatakse lugemise ja kirjutamise toimingute tegemiseks RTC-s. Kui R / W = 0, tehakse kirjutamistoiming ja R / W = 1 lugemistoimingu jaoks.

RTC lugemisoperatsiooni aadress = '0xA3'

RTC kirjutusoperatsiooni aadress = '0xA2'

Mäluregistrid ja aadress:

RTC registrid asuvad aadressikohtades vahemikus 00h kuni 0Fh ja RAM-i mäluregistrid asuvad aadresside kohtades 08h kuni 3Fh, nagu on näidatud joonisel. RTC registreid kasutatakse kalendri funktsionaalsuse ja sõidupäeva pakkumiseks ning nädalavahetuste kuvamiseks.

Mäluregistrid ja aadress

Mäluregistrid ja aadress

Kontroll / olekuregistrid:

DB1307 koosneb kahest lisaregistrist, näiteks kontroll / olek1 ja juht / olek2, mida kasutatakse reaalajas kella juhtimiseks ja katkestab .

Juhtimis- / olekuregister1:

Kontrolli olekuregister

Kontrolli olekuregister

  • TEST1 = 0 tavarežiim

= 1 EXT-kella testrežiim

  • STOP = 0 RTC algab

= 1 RTC peatus

  • TESTC = 0 toite lähtestamine on keelatud

= toite lähtestamine on lubatud

Juhtimis- / olekuregister2:

Kontrolli olekuregister2

Kontrolli olekuregister2

  • TI / TP = 0 INT kogu aeg aktiivne

= 1 aktiivne vajalik aeg

  • AF = 0 Alarm ei sobi

= 1 Alarmi vaste

  • TF = 0 Taimeri ülevoolu ei toimu

= 1 Taimeri ülevool toimub

  • ALE = 0 Alarmi katkestused keelatakse

= 1 Alarmi katkestused on lubatud

  • TIE = 0 Taimer katkestab keelamise

= 1 Taimer katkestab lubamise

3. samm: RTC ds1307 ja 8051 ühendamine

RTC võib olla liidetud mikrokontrolleriga kasutades erinevaid jadasiini protokolle nagu I2C ja SPI-protokollid mis pakuvad nende vahel sidet. Joonisel on näidatud reaalajas kella liides 8051 mikrokontrolleriga, kasutades I2C siini protokolli. I2C on kahesuunaline jadaprotokoll, mis koosneb kahest juhtmest, näiteks SCL ja SDA, et edastada andmeid siiniga ühendatud seadmete vahel. 8051 mikrokontrolleril pole sisseehitatud RTC-seadet, seetõttu oleme ühendanud a-ühenduse kaudu väliselt järjestikune suhtlus koosnevate andmete tagamiseks.

RTC liides 8051 mikrokontrolleriga

RTC liides 8051 mikrokontrolleriga

I2C-seadmetel on avatud äravoolu väljundid, seetõttu tuleb I2C-siini liinile pingeallikaga ühendada tõmbetakistid. Kui takistid ei ole ühendatud SCL- ja SDL-liinidega, siis buss ei tööta.

4. samm: RTC andmete raamistamise vorming

Kuna RTC-liides 8051 mikrokontrolleriga kasutab I2C-siini, toimub andmeedastus baitide või pakettide kujul ning igale baidile järgneb kinnitus.

Andmeraami edastamine:

Edastusrežiimis vabastab juht pärast algseadme valimist aadressibiti järgi algustingimuse. Aadressibitt sisaldab 7-bitist, mis tähistab alamseadmeid aadressina ds1307. Seeriandmed ja seeriakell edastatakse SCL- ja SDL-liinidel. Start- ja STOP-tingimusi tunnustatakse järjestikuse ülekande algusena ja lõpuna. Vastuvõtu- ja edastusoperatsioonidele järgneb R / W bit.

Andmeraami edastamine

Andmeraami edastamine

Algus: Peamiselt andmeedastusjärjestus, mille algataja on algtingimuse genereerinud.

7-bitine aadress: Pärast seda saadab juht orja aadressi kahes 8-bitises vormingus ühe 16-bitise aadressi asemel.

Juhtimis- / olekuregistri aadress: Juhtimis- / olekuregistri aadress peab võimaldama kontrolli oleku registreid.

Juhtimis- / olekuregister1: RTC-seadme lubamiseks kasutatud juhtimisregistri register1

Juhtimis- / olekuregister2: Seda kasutatakse katkestuste lubamiseks ja keelamiseks.

R / W: Kui lugemis- ja kirjutamisbit on vähe, siis kirjutamisoperatsioon viiakse läbi.

ALAS: Kui alamseadmes tehakse kirjutamistoiming, siis saadab vastuvõtja mikrokontrollerile 1-bitise ACK.

Peatus: Pärast orjaseadmes kirjutamistoimingu lõpetamist saadab mikrokontroller alamseadmele peatamise.

Andmeraami vastuvõtmine:

Andmeraami vastuvõtmine

Andmeraami vastuvõtmine

Algus: Peamiselt andmeedastusjärjestus, mille algataja on algtingimuse genereerinud.

7-bitine aadress: Pärast seda saadab juht orja aadressi kahes 8-bitises vormingus ühe 16-bitise aadressi asemel.

Juhtimis- / olekuregistri aadress: Juhtimis- / olekuregistri aadress peab võimaldama kontrolli olekuregistreid.

Juhtimis- / olekuregister1: Juhtimisolekuregister1, mida kasutatakse RTC-seadme lubamiseks

Juhtimis- / olekuregister2: Seda kasutatakse katkestuste lubamiseks ja keelamiseks.

R / W: Kui lugemis- ja kirjutamisbitt on kõrge, tehakse lugemisoperatsioon.

ALAS: Kui alamseadmes tehakse kirjutamistoiming, siis saadab vastuvõtja mikrokontrollerile 1-bitise ACK.

Peatus: Pärast orjaseadmes kirjutamistoimingu lõpetamist saadab mikrokontroller alamseadmele peatamise.

5. samm: RTC programmeerimine

Kirjutamine operatsioon isandalt orjale:

  1. Andke algtingimus ülemalt orjale
  2. Edastage orja aadress kirjutusrežiimis SDL-liinile
  3. Saada kontrollregistri aadress
  4. Saada kontroll / olekuregister1value
  5. Saada kontroll / olekuregistri2 väärtus
  6. Saatke sarnaste minutite, sekundite ja tundide kuupäev
  7. Saada stopp bitti

# kaasata

sbit SCL = P2 ^ 5
sbit SDA = P2 ^ 6
tühine algus ()
void hosts (märkimata märk)
viivitus (allkirjastamata tähis)

tühine main ()
{

algus ()
kirjuta (0xA2) // orja aadress //
kirjuta (0x00) // kontrollregistri aadress //
kirjuta (0x00) // kontrollregistri 1 väärtus //
kirjuta (0x00) // kontrollregiter2 vlaue //
kirjuta (0x28) // sek väärtus //
kirjuta (0x50) // minuti väärtus //
kirjuta (0x02) // tunni väärtus //
}

tühine algus ()
{

SDA = 1 // andmete töötlemine //
SCL = 1 // kell on kõrge //
viivitus (100)
SDA = 0 // saatis andmed //
viivitus (100)
SCL = 0 // kella signaal on madal //
}
tühine kirjutamine (allkirjastamata tähis d)
{

allkirjastamata täht k, j = 0 × 80
jaoks (k = 0k<8k++)
{
SDA = (d & j)
J = j >> 1
SCL = 1
viivitus (4)
SCL = 0
}
SDA = 1
SCL = 1
viivitus (2)
c = SDA
viivitus (2)
SCL = 0
}
tühine viivitus (int p)
{
allkirjastamata, sünd
Sest (a = 0a<255a++) //delay function//
Sest (b = 0b}

Operatsiooni lugemine orjast peremehele:

# kaasata
sbit SCL = P2 ^ 5
sbit SDA = P2 ^ 6
tühine algus ()
tühine kirjutamine (usigned char)
tühine loe ()
tühine ack ()
tühine viivitus (allkirjastamata tähis)
tühine main ()
{
algus ()
kirjuta (0xA3) // orja aadress lugemisrežiimis //
loe ()
Paraku ()
sec = väärtus
}
tühine algus ()
{

SDA = 1 // andmete töötlemine //
SCL = 1 // kell on kõrge //
viivitus (100)
SDA = 0 // saatis andmed //
viivitus (100)
SCL = 0 // kella signaal on madal //
}
tühine kirjutamine (allkirjastamata tähis d)
{

allkirjastamata täht k, j = 0 × 80
jaoks (k = 0k<8k++)
{
SDA = (d & j)
J = j >> 1
SCL = 1
viivitus (4)
SCL = 0
}
SDA = 1
SCL = 1
viivitus (2)
c = SDA
viivitus (2)
SCL = 0
}
tühine viivitus (int p)
{
allkirjastamata, sünd
Sest (a = 0a<255a++) //delay function//
Sest (b = 0b}
Kehtetu lugeda ()
{
Allkirjastamata täht j, z = 0 × 00, q = 0 × 80
SDA = 1
jaoks (j = 0j<8j++)
{
SCL = 1
viivitus (100)
lipp = SDA
kui (lipp == 1)

z = (z
tühine ack ()
{
SDA = 0 // SDA rida langeb madalale //
SCL = 1 // kell on madalast madalamani //
viivitus (100)
SCL = 0
}

Need on vajalikud toimingud RTC-liidestamiseks mikrokontrolleriga 8051. Nende sammude täiendustes käsitletakse käesolevas artiklis andmete edastamiseks ja vastuvõtmiseks kasutatavaid andmeraame ka kasutajate mõistmiseks koos sobiva programmeerimisega. Selle kontseptsiooni kohta lisateabe saamiseks võite jätta kommentaari allpool.