RTC: n (DS1307) liitäntä mikrokontrolleriin ja sen ohjelmointiin

Kokeile Instrumenttia Ongelmien Poistamiseksi





RTC on elektroninen laite, jolla on keskeinen rooli reaaliaikainen sulautetun järjestelmän suunnittelu . Se tarjoaa tarkan ajan ja päivämäärän erilaisissa sovelluksissa, kuten järjestelmän kellossa, opiskelijoiden läsnäolojärjestelmässä ja hälytyksessä jne., Jotka seuraavat ajankohtaa ja antavat tasaisen tuloksen kyseiseen tehtävään. Tämä artikkeli esittelee RTC-liitännän 8051 mikropyörän kanssa ja sisäisten rekistereiden peruskäyttöä.

RTC-liitäntä 8051-mikrokontrolleriin

RTC-liitäntä 8051-mikrokontrolleriin



RTC-ohjelmointi ja rajapinta

RTC-liitäntä 8051-mikrokontrolleriin on samanlainen kuin kaikki muut siihen liitetyt 'reaaliaikakellot'. Katsotaan siis yksinkertaista RTC-liitäntää 8051-mikrokontrolleri ja siihen liittyvä ohjelmointimenettely.


Vaihe 1: Valitse RTC-laite

Reaaliaikaisessa sulautetussa maailmassa on saatavana erilaisia ​​RTC-siruja, jotka luokitellaan useiden kriteerien perusteella, kuten pakettityyppi, syöttöjännite ja pin-kokoonpano jne. Muutamia RTC-laitteita on



  • Kaksilankainen sarjaliitäntä (I2C-väylä)
  • Kolmilankainen sarjaliitäntä (USB-väylä)
  • Nelijohtiminen sarjaliitäntä (SPI-väylä)

Ensinnäkin meidän on valittava RTC-laitteen tyyppi luokittain vaatimusten perusteella, kuten I2C-väylä RTC tai SPI-väylä RTC tai muu, joka sopii käytettäväksi vastaavan mikrokontrollerin kanssa. Sitten voimme valita RTC-laitteen ominaisuudet sovelluksen vaatimusten mukaan, kuten akun kesto, sopiva paketti ja kellotaajuus. Tarkastellaan kahden johtimen liitäntää RTC 8051-mikrokontrollerilla, kuten DS1307 .

Vaihe 2: RTC-laitteen sisäinen rekisteri ja osoite

RTC tarkoittaa reaaliaikakelloa, joka tarjoaa vuosia, kuukausia, viikkoja, päiviä, tunteja, minuutteja ja sekunteja kristallitaajuuden perusteella. RTC koostuu sisäänrakennetuista RAM-muisti tietojen tallentamiseen . Akun varmuuskopio annetaan, jos päävirtalähde epäonnistuu, kytkemällä akku RTC-laitteeseen.

RTC DB1307 -määritykset:

RTC: n sisäiset lohkot ja piikkikaavio

RTC: n sisäiset lohkot ja piikkikaavio

A0, A1, A2: ovat RTC DB1307 -piirin osoitetappeja, joita voidaan käyttää kommunikointiin isäntälaitteen kanssa. Voimme ohjata kahdeksaa laitetta, joissa on RTC-liitäntä 8051-mikrokontrolleri A0-, A1-, A2-biteillä käyttämällä I2C-protokollaa.


VCC ja GND: VCC ja GND ovat virtalähde ja vastaavasti maadoitusnastat. Tämä laite toimi 1,8 V: n ja 5,5 V: n välillä.

VBT: VBT on akun virtalähde. Akun virtalähde on pidettävä välillä 2 V - 3,5 V.

SCL: SCL on sarjakellotappi ja sitä käytetään tietojen synkronointiin sarjaliitännässä.

SDL: Se on sarjaliitäntä ja ulostulotappi. Sitä käytetään tietojen lähettämiseen ja vastaanottamiseen sarjaliitännässä.

Leimata itsensä ulos: Se on valinnainen neliöaaltotulostappi.

OSC0 ja OSC1: Nämä ovat kideoskillaattorinastoja, joita käytetään tarjoamaan kellosignaalit RTC-laitteelle. Kvartsikiteen vakiotaajuus on 22,768 kHz.

Laitteen osoite:

I2C-väyläprotokolla sallii useita orjalaitteita kerrallaan. Jokaisen orjalaitteen on muodostettava oma osoite edustamaan sitä. Päälaite kommunikoi tietyn orjalaitteen kanssa osoitteella. RTC-laitteen osoite on ”0xA2”, jossa ”1010” on valmistajan antama ja A0, A1, A2 ovat käyttäjän määrittelemää osoitetta, jota käytetään kahdeksan RTC-laitteen kommunikointiin. I2C-väyläprotokolla .

Laitteen lisäys

Laitteen lisäys

R / W-bittiä käytetään luku- ja kirjoitusoperaatioiden suorittamiseen RTC: ssä. Jos R / W = 0, suoritetaan kirjoitusoperaatio ja R / W = 1 lukutoimintoa varten.

RTC: n lukutoiminnon osoite = “0xA3”

RTC: n kirjoitusoperaation osoite = “0xA2”

Muistirekisterit ja osoitteet:

RTC-rekisterit sijaitsevat osoitteiden välillä 00h - 0Fh ja RAM-muistirekisterit sijaitsevat osoitteissa 08h - 3Fh, kuten kuvassa on esitetty. RTC-rekistereitä käytetään tarjoamaan kalenteritoimintoja ja kellonaikaa sekä näyttämään viikonloppuja.

Muistirekisterit ja osoite

Muistirekisterit ja osoite

Ohjaus- / tilarekisterit:

DB1307 koostuu kahdesta lisärekisteristä, kuten ohjaus / tila1 ja ohjaus / tila2, joita käytetään reaaliaikakellon ohjaamiseen ja keskeyttää .

Ohjaus- / tilarekisteri1:

Valvontatilarekisteri 1

Valvontatilarekisteri 1

  • TEST1 = 0 normaalitila

= 1 EXT-kellotestitila

  • STOP = 0 RTC käynnistyy

= 1 RTC-pysäytys

  • TESTC = 0 virran palautus nollattu

= virran kytkeminen palautettu

Ohjaus- / tilarekisteri2:

Ohjauksen tilarekisteri 2

Ohjauksen tilarekisteri 2

  • TI / TP = 0 INT aktiivinen koko ajan

= 1 aktiivinen vaadittu aika

  • AF = 0 Hälytys ei täsmää

= 1 hälytysottelu

  • TF = 0 Ajastimen ylivuotoa ei tapahdu

= 1 Ajastimen ylivuoto tapahtuu

  • ALE = 0 Hälytyksen keskeytys pois käytöstä

= 1 Hälytyksen keskeytys käytössä

  • TIE = 0 Ajastin keskeyttää käytöstä

= 1 Ajastimen keskeytykset käytössä

Vaihe 3: RTC ds1307: n ja 8051: n liitäntä

RTC voi olla liitetty mikro-ohjaimeen käyttämällä erilaisia ​​sarjaväyläprotokollia, kuten I2C ja SPI-protokollat jotka tarjoavat yhteyden niiden välille. Kuvassa näkyy reaaliaikainen kelloyhteys 8051-mikrokontrolleriin käyttäen I2C-väyläprotokollaa. I2C on kaksisuuntainen sarjaprotokolla, joka koostuu kahdesta johtimesta, kuten SCL ja SDA, tiedonsiirtoon väylään kytkettyjen laitteiden välillä. 8051-mikrokontrollerissa ei ole sisäänrakennettua RTC-laitetta, joten olemme liittyneet ulkoisesti a: n kautta sarjaliikenne koostuvien tietojen varmistamiseksi.

RTC-liitäntä 8051-mikrokontrolleriin

RTC-liitäntä 8051-mikrokontrolleriin

I2C-laitteilla on avoimet tyhjennyslähdöt, joten I2C-väylälinjaan on kytkettävä vetovastukset jännitelähteellä. Jos vastuksia ei ole kytketty SCL- ja SDL-linjoihin, väylä ei toimi.

Vaihe 4: RTC-tietojen kehystysmuoto

Koska RTC-liitäntä 8051-mikrokontrolleriin käyttää I2C-väylää, tiedonsiirto tapahtuu tavujen tai pakettien muodossa ja kutakin tavua seuraa kuittaus.

Tietokehyksen lähettäminen:

Lähetystilassa päällikkö vapauttaa alkuehdon valittuaan orjalaitteen osoitebitin mukaan. Osoitebitti sisältää 7-bittisen, joka ilmoittaa orjalaitteet ds1307-osoitteeksi. Sarjatiedot ja sarjakello lähetetään SCL- ja SDL-linjoilla. KÄYNNISTYS- ja PYSÄYTYS-olosuhteet tunnustetaan sarjaliikenteen alkamis- ja lopetusjaksoiksi. Vastaanotto- ja lähetystoimintoja seuraa R / W-bitti.

Tietokehyksen lähettäminen

Tietokehyksen lähettäminen

Alkaa: Ensisijaisesti tiedonsiirtosekvenssi, jonka master aloittaa generoimalla alkuehdot.

7-bittinen osoite: Sen jälkeen isäntä lähettää orjaosoitteen kahdessa 8-bittisessä muodossa yhden 16-bittisen osoitteen sijaan.

Ohjaus- / tilarekisterin osoite: Ohjauksen / tilarekisterin osoitteen on sallittava ohjauksen tilarekisterit.

Ohjaus- / tilarekisteri1: Ohjauksen tilarekisteri1, jota käytetään RTC-laitteen käyttöönottoon

Ohjaus- / tilarekisteri2: Sitä käytetään keskeytysten ottamiseen käyttöön ja poistamiseen käytöstä.

R / W: Jos luku- ja kirjoitusbittiä on vähän, kirjoitusoperaatio suoritetaan.

VALITETTAVASTI: Jos orjalaitteessa suoritetaan kirjoitusoperaatio, vastaanotin lähettää 1-bittisen ACK: n mikrokontrollerille.

Lopettaa: Kun orjalaite on kirjoittanut kirjoitusoperaation, mikrokontrolleri lähettää pysäytysolosuhteet orjalaitteelle.

Tietokehyksen vastaanottaminen:

Tietokehyksen vastaanottaminen

Tietokehyksen vastaanottaminen

Alkaa: Ensisijaisesti tiedonsiirtosekvenssi, jonka master aloittaa generoimalla alkuehdot.

7-bittinen osoite: Sen jälkeen isäntä lähettää orjaosoitteen kahdessa 8-bittisessä muodossa yhden 16-bittisen osoitteen sijaan.

Ohjaus- / tilarekisterin osoite: Ohjauksen / tilarekisterin osoitteen on sallittava ohjauksen tilarekisterit.

Ohjaus- / tilarekisteri1: Ohjauksen tilarekisteri1, jota käytetään RTC-laitteen käyttöönottoon

Ohjaus- / tilarekisteri2: Sitä käytetään keskeytysten ottamiseen käyttöön ja poistamiseen käytöstä.

R / W: Jos luku- ja kirjoitusbitti on suuri, lukuoperaatio suoritetaan.

VALITETTAVASTI: Jos orjalaitteessa suoritetaan kirjoitusoperaatio, vastaanotin lähettää 1-bittisen ACK: n mikrokontrollerille.

Lopettaa: Kun orjalaite on kirjoittanut kirjoitusoperaation, mikrokontrolleri lähettää pysäytysolosuhteet orjalaitteelle.

Vaihe 5: RTC-ohjelmointi

Kirjoitustoiminto isännältä orjalle:

  1. Antaa alkuehto isännältä orjalle
  2. Siirrä orjaosoite kirjoitusmuodossa SDL-linjalle
  3. Lähetä ohjausrekisterin osoite
  4. Lähetä control / status register1value
  5. Lähetä control / status register2 -arvo
  6. Lähetä vastaavien minuuttien, sekuntien ja tuntien päivämäärä
  7. Lähetä pysäytyskappale

#sisältää

sbit SCL = P2 ^ 5
sbit SDA = P2 ^ 6
mitätön alku ()
void hosts (allekirjoittamaton merkki)
viive (allekirjoittamaton merkki)

void main ()
{

alkaa()
kirjoita (0xA2) // orjaosoite //
kirjoita (0x00) // ohjausrekisterin osoite //
kirjoita (0x00) // ohjausrekisterin 1 arvo //
kirjoita (0x00) // control regiter2 vlaue //
kirjoita (0x28) // sekunnin arvo //
kirjoita (0x50) // minuutin arvo //
kirjoita (0x02) // tuntien arvo //
}

mitätön alku ()
{

SDA = 1 // tietojen käsittely //
SCL = 1 // kello on korkea //
viive (100)
SDA = 0 // lähetti tiedot //
viive (100)
SCL = 0 // kellosignaali on matala //
}
void write (allekirjoittamaton merkki d)
{

allekirjoittamaton merkki k, j = 0 × 80
(k = 0k<8k++)
{
SDA = (d & j)
J = j >> 1
SCL = 1
viive (4)
SCL = 0
}
SDA = 1
SCL = 1
viive (2)
c = SDA
viive (2)
SCL = 0
}
tyhjä viive (int p)
{
allekirjoittamaton, b
Sillä (a = 0a<255a++) //delay function//
Sillä (b = 0b}

Lue operaatio orjalta isännälle:

#sisältää
sbit SCL = P2 ^ 5
sbit SDA = P2 ^ 6
mitätön alku ()
void write (tunnusmerkki)
void read ()
void ack ()
void delay (allekirjoittamaton merkki)
void main ()
{
alkaa()
kirjoita (0xA3) // orjaosoite lukutilassa //
lukea()
Valitettavasti()
sec = arvo
}
mitätön alku ()
{

SDA = 1 // tietojen käsittely //
SCL = 1 // kello on korkea //
viive (100)
SDA = 0 // lähetti tiedot //
viive (100)
SCL = 0 // kellosignaali on matala //
}
void write (allekirjoittamaton merkki d)
{

allekirjoittamaton merkki k, j = 0 × 80
(k = 0k<8k++)
{
SDA = (d & j)
J = j >> 1
SCL = 1
viive (4)
SCL = 0
}
SDA = 1
SCL = 1
viive (2)
c = SDA
viive (2)
SCL = 0
}
tyhjä viive (int p)
{
allekirjoittamaton, b
Sillä (a = 0a<255a++) //delay function//
Sillä (b = 0b}
Tyhjä luku ()
{
Allekirjoittamaton merkki j, z = 0 × 00, q = 0 × 80
SDA = 1
(j = 0j<8j++)
{
SCL = 1
viive (100)
lippu = SDA
jos (lippu == 1)

z = (z
void ack ()
{
SDA = 0 // SDA-rivi laskee matalaksi //
SCL = 1 // kello on korkeasta matalaan //
viive (100)
SCL = 0
}

Nämä ovat tarvittavat vaiheet RTC-liitäntää varten 8051-mikrokontrollerin kanssa. Näiden vaiheiden lisäyksissä tässä artikkelissa käsitellään myös datan siirtämiseen ja vastaanottamiseen käytettyjä datakehyksiä, jotta käyttäjä ymmärtäisi ne asianmukaisella ohjelmoinnilla. Jos haluat lisätietoja tästä konseptista, voit jättää kommentin alla.