Koppeling van RTC (DS1307) met Microcontroller en zijn programmering

Probeer Ons Instrument Voor Het Oplossen Van Problemen





RTC is een elektronisch apparaat dat een essentiële rol speelt in realtime embedded systeemontwerp ​Het biedt een nauwkeurige tijd en datum in verschillende toepassingen zoals systeemklok, aanwezigheidssysteem voor studenten en alarm enz., Die de huidige tijd bijhouden en een consistent resultaat voor de betreffende taak bieden. Dit artikel presenteert RTC-interface met 8051microcotroller en basistoegang tot interne registers.

RTC-interface met 8051 Microcontroller

RTC-interface met 8051 Microcontroller



RTC-programmering en interface

De RTC-interface met de 8051-microcontroller is vergelijkbaar met alle andere soorten 'Real Time Clocks' die erop zijn aangesloten. Dus laten we kijken naar eenvoudige RTC-interface met 8051 microcontroller en programmeerprocedure die daarbij betrokken is.


Stap 1: Selecteer RTC-apparaat

De verschillende soorten RTC-chips zijn beschikbaar in de real-time embedded wereld, die zijn geclassificeerd op basis van verschillende criteria, zoals pakkettype, voedingsspanning en pinconfiguratie enz. Een paar soorten RTC-apparaten zijn



  • Tweedraads seriële interface (I2C-bus)
  • Driedraads seriële interface (USB-BUS)
  • Vierdraads seriële interface (SPI BUS)

Ten eerste moeten we het type RTC-apparaat per categorie selecteren op basis van vereisten zoals I2C Bus RTC of SPI Bus RTC of andere, die geschikt zijn voor koppeling met de respectieve microcontroller. Vervolgens kunnen we functies van het RTC-apparaat selecteren, afhankelijk van de vereisten van de toepassing, zoals batterijduur, geschikt pakket en klokfrequentie. Laten we eens kijken naar tweedraads interfacing RTC met 8051 microcontroller zoals DS1307

Stap 2: Intern register en adres van het RTC-apparaat

RTC staat voor real-time klok die jaren, maanden, weken, dagen, uren, minuten en seconden aangeeft op basis van kristalfrequentie. RTC bestaat uit ingebouwde RAM-geheugen voor gegevensopslag ​Een batterijback-up wordt geboden in geval van uitval van de hoofdvoeding door een batterij op het RTC-apparaat aan te sluiten.

RTC DB1307 Configuratie:

Interne RTC-blokken en pin-diagram

Interne RTC-blokken en pin-diagram

A0, A1, A2: zijn adrespinnen van de RTC DB1307-chip, die kunnen worden gebruikt om te communiceren met het masterapparaat. We kunnen acht apparaten bedienen met RTC-interface 8051 microcontroller door A0, A1, A2 bits met behulp van het I2C-protocol.


VCC en GND: VCC en GND zijn respectievelijk voeding- en aardingspennen. Dit apparaat werkte met een bereik van 1,8 V tot 5,5 V.

VBT: VBT is een pin voor batterijvoeding. De voedingsbron van de batterij moet tussen 2V en 3,5V worden gehouden.

SCL: SCL is een seriële klokpen en wordt gebruikt om gegevens op een seriële interface te synchroniseren.

SDL: Het is een seriële invoer- en uitvoerpin. Het wordt gebruikt om de gegevens op seriële interface te verzenden en te ontvangen.

Uit klokken: Het is een optionele blokgolf-uitgangspen.

OSC0 en OSC1: Dit zijn kristaloscillatorpennen die worden gebruikt om de kloksignalen aan het RTC-apparaat te leveren. De standaard frequentie van kwartskristallen is 22,768 kHz.

Apparaatadressering:

Met het I2C-busprotocol kunnen veel slaafapparaten tegelijk worden gebruikt. Elk slaafapparaat moet een eigen adres hebben om erop te vertegenwoordigen. Het masterapparaat communiceert met een bepaald slaafapparaat via een adres. Het adres van het RTC-apparaat is '0xA2', waarbij '1010' wordt gegeven door de fabrikant en A0, A1, A2 het door de gebruiker gedefinieerde adres is, dat wordt gebruikt om acht RTC-apparaten op de I2C-busprotocol

Apparaatadressen

Apparaatadressen

R / W-bit wordt gebruikt om lees- en schrijfbewerkingen uit te voeren in RTC. Als R / W = 0, wordt een schrijfbewerking uitgevoerd en R / W = 1 voor leesbewerking.

Adres van leesbewerking van RTC = '0xA3'

Adres van schrijfbewerking van RTC = '0xA2'

Geheugenregisters en adres:

RTC-registers bevinden zich op adreslocaties van 00h tot 0Fh en RAM-geheugenregisters bevinden zich op adreslocaties van 08h tot 3Fh, zoals weergegeven in de afbeelding. RTC-registers worden gebruikt om kalenderfunctionaliteit en rijtijd te bieden en om de weekenden weer te geven.

Geheugenregisters en adres

Geheugenregisters en adres

Controle / statusregisters:

DB1307 bestaat uit twee extra registers zoals controle / status1 en controle / status2 die worden gebruikt om de realtime klok en onderbreekt

Controle / statusregister1:

Controlestatusregister 1

Controlestatusregister 1

  • TEST1 = 0 normale modus

= 1 EXT-klok testmodus

  • STOP = 0 RTC start

= 1 RTC-stop

  • TESTC = 0 power on reset uitgeschakeld

= power on reset ingeschakeld

Controle / statusregister2:

Controlestatusregister 2

Controlestatusregister 2

  • TI / TP = 0 INT altijd actief

= 1 INT actieve vereiste tijd

  • AF = 0 Alarm komt niet overeen

= 1 Alarm match

  • TF = 0 Timeroverloop treedt niet op

= 1 Timeroverloop treedt op

  • ALE = 0 Alarm onderbreekt uitgeschakeld

= 1 Alarmonderbrekingen ingeschakeld

  • TIE = 0 Timer onderbrekingen uitschakelen

= 1 Timer onderbrekingen inschakelen

Stap 3: RTC ds1307 koppelen aan 8051

RTC kan zijn gekoppeld aan microcontroller door verschillende seriële busprotocollen te gebruiken, zoals I2C en SPI-protocollen die een communicatieverbinding tussen hen bieden. De afbeelding toont een realtime klok die is gekoppeld aan de 8051-microcontroller met behulp van het I2C-busprotocol. I2C is een bidirectioneel serieel protocol, dat bestaat uit twee draden, zoals SCL en SDA, om gegevens over te dragen tussen apparaten die op de bus zijn aangesloten. 8051 microcontroller heeft geen ingebouwd RTC-apparaat, daarom hebben we extern aangesloten via een seriële communicatie voor het waarborgen van de bestaande gegevens.

RTC-interface met 8051 Microcontroller

RTC-interface met 8051 Microcontroller

I2C-apparaten hebben open drain-uitgangen, daarom moeten pull-up-weerstanden worden aangesloten op de I2C-buslijn met een spanningsbron. Als de weerstanden niet zijn aangesloten op de SCL- en SDL-lijnen, werkt de bus niet.

Stap 4: RTC Data Framing-indeling

Aangezien de RTC-interface met de 8051-microcontroller de I2C-bus gebruikt, vindt de gegevensoverdracht plaats in de vorm van bytes of pakketten en wordt elke byte gevolgd door een bevestiging.

Dataframe verzenden:

In de verzendmodus geeft de master de startvoorwaarde vrij na het selecteren van het slaafapparaat op adresbit. De adresbit bevat 7-bits, die de slaveapparaten aangeven als ds1307-adres. Seriële gegevens en seriële klok worden verzonden op SCL- en SDL-lijnen. START- en STOP-condities worden herkend als begin en einde van een seriële overdracht. Ontvangen en verzenden worden gevolgd door de R / W-bit.

Dataframe verzenden

Dataframe verzenden

Begin: In de eerste plaats de gegevensoverdrachtsequentie geïnitieerd door de master die de startvoorwaarde genereert.

7-bits adres: Daarna verstuurt de master het slave-adres in twee 8-bit formaten in plaats van een enkel 16-bit adres.

Controle / status Registeradres: Het controle- / statusregisteradres is bedoeld om de controlestatusregisters mogelijk te maken.

Controle / statusregister1: Het controlestatusregister1 dat wordt gebruikt om het RTC-apparaat in te schakelen

Controle / statusregister2: Het wordt gebruikt om interrupts in en uit te schakelen.

R / W: Als de lees- en schrijfbit laag is, wordt de schrijfbewerking uitgevoerd.

HELAAS: Als er een schrijfbewerking wordt uitgevoerd in het slave-apparaat, stuurt de ontvanger 1-bit ACK naar de microcontroller.

Hou op: Nadat de schrijfbewerking in het slaafapparaat is voltooid, stuurt de microcontroller de stopconditie naar het slaafapparaat.

Dataframe ontvangen:

Dataframe ontvangen

Dataframe ontvangen

Begin: In de eerste plaats de gegevensoverdrachtsequentie geïnitieerd door de master die de startvoorwaarde genereert.

7-bits adres: Daarna stuurt de master het slaafadres in twee 8-bits formaten in plaats van een enkel 16-bits adres.

Controle / status Registeradres: Het controle- / statusregisteradres is bedoeld om registers van controlestatus mogelijk te maken.

Control / Status Register1: Het control status register1 dat wordt gebruikt om het RTC-apparaat in te schakelen

Controle / statusregister2: Het wordt gebruikt om interrupts in en uit te schakelen.

R / W: Als de lees- en schrijfbit hoog is, wordt de leesbewerking uitgevoerd.

HELAAS: Als er een schrijfbewerking wordt uitgevoerd in het slave-apparaat, stuurt de ontvanger 1-bit ACK naar de microcontroller.

Hou op: Nadat de schrijfbewerking in het slaafapparaat is voltooid, stuurt de microcontroller de stopconditie naar het slaafapparaat.

Stap 5: RTC-programmering

Schrijfbewerking van master naar slave:

  1. Geef de startvoorwaarde van master naar slave op
  2. Breng het slave-adres over in de schrijfmodus op de SDL-lijn
  3. Stuur het adres van het controleregister
  4. Stuur de controle / status register1value
  5. Verzend de waarde van controle / statusregister2
  6. Stuur de datum van dergelijke minuten, seconden en uren
  7. Stuur het stopbit

#inclusief

sbit SCL = P2 ^ 5
sbit SDA = P2 ^ 6
leegte start ()
ongeldige hosts (unsigned char)
vertraging (unsigned char)

leegte main ()

begin()
schrijven (0xA2) // slaafadres //
write (0x00) // adres van het besturingsregister //
write (0x00) // besturingsregister 1 waarde //
write (0x00) // control regiter2 vlaue //
write (0x28) // sec waarde //
write (0x50) // minuutwaarde //
write (0x02) // uurwaarde //

leegte start ()

SDA = 1 // verwerking van de gegevens //
SCL = 1 // klok is hoog //
vertraging (100)
SDA = 0 // verzonden de gegevens //
vertraging (100)
SCL = 0 // kloksignaal is laag //

void write (unsigned char d)

ongetekend teken k, j = 0 × 80
voor (k = 0k<8k++)

SDA = (d & j)
J = j >> 1
SCL = 1
vertraging (4)
SCL = 0

SDA = 1
SCL = 1
vertraging (2)
c = SDA
vertraging (2)
SCL = 0

ongeldige vertraging (int p)

unsignedinta, b
Voor (a = 0a<255a++) //delay function//
Voor (b = 0b

Leesoperatie van slave naar master:

#inclusief
sbit SCL = P2 ^ 5
sbit SDA = P2 ^ 6
leegte start ()
void write (usigned char)
leegte lezen ()
leegte ack ()
ongeldige vertraging (unsigned char)
leegte main ()

begin()
write (0xA3) // slaafadres in leesmodus //
lezen()
Helaas()
sec = waarde

leegte start ()

SDA = 1 // verwerking van de gegevens //
SCL = 1 // klok is hoog //
vertraging (100)
SDA = 0 // verzonden de gegevens //
vertraging (100)
SCL = 0 // kloksignaal is laag //

void write (unsigned char d)

ongetekend teken k, j = 0 × 80
voor (k = 0k<8k++)

SDA = (d & j)
J = j >> 1
SCL = 1
vertraging (4)
SCL = 0

SDA = 1
SCL = 1
vertraging (2)
c = SDA
vertraging (2)
SCL = 0

ongeldige vertraging (int p)

unsignedinta, b
Voor (a = 0a<255a++) //delay function//
Voor (b = 0b
Ongeldig lezen ()

Unsigned char j, z = 0 × 00, q = 0 × 80
SDA = 1
voor (j = 0j<8j++)

SCL = 1
vertraging (100)
vlag = SDA
if (vlag == 1)

z = (z
leegte ack ()

SDA = 0 // SDA-lijn gaat te laag //
SCL = 1 // klok is van hoog naar laag //
vertraging (100)
SCL = 0

Dit zijn de noodzakelijke stappen voor RTC-koppeling met 8051-microcontroller. Naast deze stappen worden dataframes die worden gebruikt voor het overdragen en ontvangen van de gegevens, ook in dit artikel besproken, zodat de gebruiker het begrijpt met de juiste programmering. Voor verdere hulp met betrekking tot dit concept kunt u hieronder een opmerking achterlaten.