Interfață RTC (DS1307) cu microcontroler și programarea acestuia

Încercați Instrumentul Nostru Pentru Eliminarea Problemelor





RTC este un dispozitiv electronic care joacă un rol esențial în proiectarea sistemelor încorporate în timp real . Oferă o dată și o oră precise în diferite aplicații, cum ar fi ceasul sistemului, sistemul de prezență al elevilor și alarma etc., care urmăresc ora curentă și oferă rezultate consistente sarcinii respective. Acest articol prezintă interfața RTC cu 8051microcotroller și accesarea de bază a registrelor interne.

Interfață RTC cu microcontroler 8051

Interfață RTC cu microcontroler 8051



Programare RTC și interfațare

Interfața RTC cu microcontrolerul 8051 este similară cu toate celelalte tipuri de „Ceasuri în timp real” interfațate cu acesta. Deci, haideți să analizăm interfața RTC simplă cu 8051 microcontroler și procedura de programare care implică aceasta.


Pasul 1: Selectați dispozitivul RTC

Diferitele tipuri de cipuri RTC sunt disponibile în lumea încorporată în timp real, care sunt clasificate pe baza diferitelor criterii, cum ar fi tipul pachetului, tensiunea de alimentare și configurația pinului etc. Câteva tipuri de dispozitive RTC sunt



  • Interfață serială cu două fire (I2C Bus)
  • Interfață serială cu trei fire (USB BUS)
  • Interfață serial cu patru fire (SPI BUS)

În primul rând, trebuie să selectăm tipul de dispozitiv RTC pe categorii pe baza cerințelor precum I2C Bus RTC sau SPI Bus RTC sau altele, care se potrivește pentru interfața cu microcontrolerul respectiv. Apoi putem selecta caracteristicile dispozitivului RTC în funcție de cerințele aplicației, cum ar fi durata de viață a bateriei, pachetul adecvat și frecvența ceasului. Să luăm în considerare interfața cu două fire RTC cu 8051 microcontroler precum DS1307 .

Pasul 2: Registrul intern și adresa dispozitivului RTC

RTC înseamnă ceas în timp real, care oferă ani, luni, săptămâni, zile, ore, minute și secunde pe baza frecvenței cristalului. RTC constă din încorporat Memorie RAM pentru stocarea datelor . O copie de rezervă a bateriei va fi furnizată în caz de defectare a sursei principale de alimentare prin conectarea unei baterii la dispozitivul RTC.

Configurare RTC DB1307:

Blocuri interne RTC și diagramă pin

Blocuri interne RTC și diagramă pin

A0, A1, A2: sunt pini de adresă ai cipului RTC DB1307, care pot fi utilizați pentru a comunica cu dispozitivul master. Putem controla opt dispozitive cu interfață RTC cu 8051 microcontroler de A0, A1, A2 biți folosind protocolul I2C.


VCC și GND: VCC și GND sunt surse de alimentare și respectiv pini de masă. Acest dispozitiv funcționează cu o gamă de 1,8V până la 5,5V.

VBT: VBT este un pin de alimentare cu baterie. Sursa de alimentare a bateriei trebuie menținută între 2V și 3,5V.

SCL: SCL este un pin de ceas serial și este utilizat pentru a sincroniza date pe interfața serială.

SDL: Este un pin de intrare și ieșire serial. Este folosit pentru a transmite și primi date pe interfața serială.

Clock Out: Este un pin opțional de ieșire cu undă pătrată.

OSC0 și OSC1: Acestea sunt pini oscilatori de cristal care sunt utilizați pentru a furniza semnalele de ceas către dispozitivul RTC. Frecvența standard a cristalelor de cuarț este de 22,768 KHz.

Adresare dispozitiv:

Protocolul de bus I2C permite mai multe dispozitive slave simultan. Fiecare dispozitiv sclav trebuie să conțină o adresă proprie care să fie reprezentată pe el. Dispozitivul principal comunică cu un anumit dispozitiv sclav printr-o adresă. Adresa dispozitivului RTC este „0xA2” în care „1010” este dată de producător și A0, A1, A2 sunt adresa definită de utilizator, care este utilizată pentru a comunica opt dispozitive RTC pe Protocol bus I2C .

Adresare dispozitiv

Adresare dispozitiv

Bitul R / W este utilizat pentru a efectua operații de citire și scriere în RTC. Dacă R / W = 0, se efectuează operația de scriere și R / W = 1 pentru operația de citire.

Adresa operației de citire a RTC = „0xA3”

Adresa operației de scriere a RTC = „0xA2”

Registre de memorie și adresă:

Registrele RTC sunt situate în locații de adrese de la 00h la 0Fh, iar registrele de memorie RAM sunt localizate în locații de adrese de la 08h la 3Fh așa cum se arată în figură. Registrele RTC sunt utilizate pentru a oferi funcționalitatea calendarului și ora de conducere a zilei și pentru a afișa weekendurile.

Registre de memorie și adresă

Registre de memorie și adresă

Registre de control / stare:

DB1307 constă din două registre suplimentare, cum ar fi control / status1 și control / status2, care sunt utilizate pentru a controla ceasul în timp real și întrerupe .

Registrul de control / stare1:

Registrul stării de control

Registrul stării de control

  • TEST1 = 0 mod normal

= 1 modul de testare a ceasului EXT

  • STOP = 0 începe RTC

= 1 oprire RTC

  • TESTC = 0 pornire resetare dezactivată

= resetarea la pornire activată

Registrul de control / stare2:

Registrul stării de control2

Registrul stării de control2

  • TI / TP = 0 INT activ tot timpul

= 1 INT necesar timp activ

  • AF = 0 Alarma nu se potrivește

= 1 meci de alarmă

  • TF = 0 Revărsarea temporizatorului nu are loc

= 1 Se produce depășirea temporizatorului

  • ALE = 0 Alarmă întrerupe dezactivare

= 1 Întreruperi de alarmă activate

  • TIE = 0 Timer întrerupe dezactivare

= 1 Temporizator activează activarea

Pasul 3: interfațarea RTC ds1307 cu 8051

RTC poate fi interfațat la microcontroler prin utilizarea diferitelor protocoale de magistrală serială precum I2C și Protocoale SPI care oferă o legătură de comunicare între ele. Figura arată interfața ceasului în timp real cu microcontrolerul 8051 folosind protocolul de bus I2C. I2C este un protocol serial bidirecțional, care constă din două fire, cum ar fi SCL și SDA pentru a transfera date între dispozitivele conectate la magistrală. Microcontrolerul 8051 nu are dispozitiv RTC încorporat, prin urmare ne-am conectat extern printr-un comunicare în serie pentru asigurarea datelor constante.

Interfață RTC cu microcontroler 8051

Interfață RTC cu microcontroler 8051

Dispozitivele I2C au ieșiri de scurgere deschise, prin urmare, o rezistență de tracțiune trebuie conectată la linia de magistrală I2C cu o sursă de tensiune. Dacă rezistențele nu sunt conectate la liniile SCL și SDL, magistrala nu va funcționa.

Pasul 4: Format RTC de încadrare a datelor

Deoarece interfața RTC cu microcontrolerul 8051 folosește magistrala I2C, transferul de date este sub formă de octeți sau pachete și fiecare octet este urmat de o confirmare.

Transmiterea cadrului de date:

În modul de transmisie, masterul eliberează condiția de pornire după ce a selectat dispozitivul slave după bitul de adresă. Bitul de adresă conține 7 biți, care indică dispozitivele slave ca adresă ds1307. Datele seriale și ceasul serial sunt transmise pe liniile SCL și SDL. Condițiile START și STOP sunt recunoscute ca începutul și sfârșitul unui transfer serial. Operațiile de recepție și transmitere sunt urmate de bitul R / W.

Transmiterea cadrului de date

Transmiterea cadrului de date

Start: În primul rând, secvența de transfer de date inițiată de master generând condiția de pornire.

Adresă pe 7 biți: După aceea, masterul trimite adresa slave în două formate de 8 biți în loc de o singură adresă de 16 biți.

Adresa registrului de control / stare: Adresa registrului de control / stare trebuie să permită registrele de stare a controlului.

Registrul de control / stare1: Registrul de stare de control1 utilizat pentru a activa dispozitivul RTC

Registrul de control / stare2: Este folosit pentru a activa și dezactiva întreruperile.

R / W: Dacă bitul de citire și scriere este scăzut, atunci se efectuează operația de scriere.

VAI: Dacă operația de scriere se efectuează pe dispozitivul slave, atunci receptorul trimite ACK de 1 bit pe microcontroler.

Stop: După finalizarea operației de scriere în dispozitivul slave, microcontrolerul trimite starea de oprire dispozitivului slave.

Primirea cadrului de date:

Primirea cadrului de date

Primirea cadrului de date

Start: În primul rând, secvența de transfer de date inițiată de master generând condiția de pornire.

Adresă pe 7 biți: După aceea, masterul trimite adresa slave în două formate de 8 biți în loc de o singură adresă de 16 biți.

Adresa registrului de control / stare: Adresa registrului de control / stare trebuie să permită registrele de stare de control.

Control / Status Register1: Registrul status control1 utilizat pentru a activa dispozitivul RTC

Registrul de control / stare2: Este folosit pentru a activa și dezactiva întreruperile.

R / W: Dacă bitul de citire și scriere este ridicat, atunci se efectuează operația de citire.

VAI: Dacă operația de scriere se efectuează pe dispozitivul slave, atunci receptorul trimite ACK de 1 bit pe microcontroler.

Stop: După finalizarea operației de scriere în dispozitivul slave, microcontrolerul trimite starea de oprire dispozitivului slave.

Pasul 5: Programare RTC

Scrieți operațiunea de la stăpân la sclav:

  1. Emiteți condiția de pornire de la stăpân la sclav
  2. Transferați adresa slave în modul de scriere pe linia SDL
  3. Trimiteți adresa registrului de control
  4. Trimiteți controlul / starea register1value
  5. Trimiteți valoarea controlului / registrului de stare2
  6. Trimiteți data acelorași minute, secunde și ore
  7. Trimiteți bitul de oprire

#include

sbit SCL = P2 ^ 5
sbit SDA = P2 ^ 6
start nul ()
gazde nule (caracter nesemnat)
întârziere (caracter nesemnat)

void main ()
{

start()
scrie (0xA2) // adresa sclavului //
scrie (0x00) // adresa registrului de control //
write (0x00) // control registru 1 valoare //
scrie (0x00) // control regiter2 vlaue //
scrie (0x28) // valoare sec //
scrie (0x50) // valoare minut //
write (0x02) // valoarea orelor //
}

start nul ()
{

SDA = 1 // prelucrarea datelor //
SCL = 1 // ceasul este mare //
întârziere (100)
SDA = 0 // a trimis datele //
întârziere (100)
SCL = 0 // semnalul ceasului este scăzut //
}
scriere nulă (caracter nesemnat d)
{

caracter nesemnat k, j = 0 × 80
pentru (k = 0k<8k++)
{
SDA = (d & j)
J = j >> 1
SCL = 1
întârziere (4)
SCL = 0
}
SDA = 1
SCL = 1
întârziere (2)
c = SDA
întârziere (2)
SCL = 0
}
întârziere nulă (int p)
{
unsignedinta, b
Pentru (a = 0a<255a++) //delay function//
Pentru (b = 0b}

Citiți Operațiunea de la sclav la stăpân:

#include
sbit SCL = P2 ^ 5
sbit SDA = P2 ^ 6
start nul ()
scriere nulă (caracter semnat)
citire nulă ()
void ack ()
întârziere nulă (caractere nesemnate)
void main ()
{
start()
write (0xA3) // adresa slave în modul de citire //
citit()
Vai()
sec = valoare
}
start nul ()
{

SDA = 1 // prelucrarea datelor //
SCL = 1 // ceasul este mare //
întârziere (100)
SDA = 0 // a trimis datele //
întârziere (100)
SCL = 0 // semnalul ceasului este scăzut //
}
scriere nulă (caracter nesemnat d)
{

caracter nesemnat k, j = 0 × 80
pentru (k = 0k<8k++)
{
SDA = (d & j)
J = j >> 1
SCL = 1
întârziere (4)
SCL = 0
}
SDA = 1
SCL = 1
întârziere (2)
c = SDA
întârziere (2)
SCL = 0
}
întârziere nulă (int p)
{
unsignedinta, b
Pentru (a = 0a<255a++) //delay function//
Pentru (b = 0b}
Citire nulă ()
{
Char nesemnat j, z = 0 × 00, q = 0 × 80
SDA = 1
pentru (j = 0j<8j++)
{
SCL = 1
întârziere (100)
flag = SDA
if (flag == 1)

z = (z
void ack ()
{
SDA = 0 // Linia SDA merge la minim //
SCL = 1 // ceasul este mare la mic //
întârziere (100)
SCL = 0
}

Aceștia sunt pașii necesari pentru interfața RTC cu microcontrolerul 8051. În plus față de acești pași, cadrele de date utilizate pentru transferul și primirea datelor sunt, de asemenea, discutate în acest articol pentru înțelegerea utilizatorului cu o programare adecvată. Pentru mai multe informații cu privire la acest concept, puteți lăsa un comentariu mai jos.