RTC är en elektronisk enhet som spelar en viktig roll i realtidsinbäddad systemdesign . Det ger en exakt tid och datum i olika applikationer som systemklocka, elevdeltagarsystem och larm etc. som håller koll på aktuell tid och ger konsekvent resultat för respektive uppgift. Den här artikeln presenterar RTC-gränssnitt med 8051microcotroller och grundläggande åtkomst till interna register.
RTC-gränssnitt med 8051 mikrokontroller
RTC-programmering och gränssnitt
RTC-gränssnitt med 8051-mikrokontroller liknar alla andra typer av 'realtidsklockor' som är gränssnitt till den. Så låt oss titta på enkel RTC-gränssnitt med 8051 mikrokontroller och programmeringsförfarande som ingår i det.
Steg 1: Välj RTC-enhet
De olika typerna av RTC-chips finns i realtidsinbäddad värld, som klassificeras utifrån olika kriterier såsom pakettyp, matningsspänning och stiftkonfiguration etc. Några typer av RTC-enheter är
- Två-tråds seriellt gränssnitt (I2C-buss)
- Tre-tråds seriellt gränssnitt (USB BUS)
- Fyra trådars seriellt gränssnitt (SPI BUS)
Först måste vi välja typ av RTC-enhet efter kategori baserat på krav som I2C Bus RTC eller SPI Bus RTC eller annat, vilket passar för gränssnitt med respektive mikrokontroller. Sedan kan vi välja funktioner på RTC-enheter beroende på applikationskrav som batteritid, lämpligt paket och klockfrekvens. Låt oss överväga gränssnitt med två trådar RTC med 8051 mikrokontroller som DS1307 .
Steg 2: Internt register och adress för RTC-enheten
RTC står för realtidsklocka som ger år, månader, veckor, dagar, timmar, minuter och sekunder baserat på kristallfrekvens. RTC består av inbyggd RAM-minne för datalagring . En batteribackup kommer att tillhandahållas om huvudströmförsörjningen går sönder genom att ansluta ett batteri till RTC-enheten.
RTC DB1307-konfiguration:
RTC-interna block och stiftdiagram
A0, A1, A2: är adressnålar på RTC DB1307-chip, som kan användas för att kommunicera med masterenheten. Vi kan styra åtta enheter med RTC-gränssnitt 8051 mikrokontroller av A0, A1, A2 bitar med I2C-protokollet.
VCC och GND: VCC och GND är strömförsörjning respektive jordstift. Enheten drivs med ett intervall på 1,8 till 5,5 volt.
VBT: VBT är en strömförsörjningsstift. Batterikällan måste hållas mellan 2V och 3,5V.
SCL: SCL är en seriell klockstift och används för att synkronisera data på det seriella gränssnittet.
SDL: Det är en seriell in- och utgångsstift. Den används för att sända och ta emot data på seriellt gränssnitt.
Stämpla ut: Det är en valfri utgångsstift för fyrkantvåg.
OSC0 och OSC1: Dessa är kristalloscillatorstift som används för att ge klocksignalerna till RTC-enheten. Standardkvartskristallfrekvensen är 22.768KHz.
Enhetsadressering:
I2C-bussprotokollet tillåter många slavenheter åt gången. Varje slavapparat måste bestå av egen adress för att representera den. Huvudenheten kommunicerar med en viss slavenhet via en adress. RTC-enhetsadress är '0xA2' vari '1010' ges av tillverkaren och A0, A1, A2 är användardefinierad adress, som används för att kommunicera åtta RTC-enheter på I2C-bussprotokoll .
Enhetsadressering
R / W-bit används för att utföra läs- och skrivoperationer i RTC. Om R / W = 0 utförs skrivoperation och R / W = 1 för läsoperation.
Adress för avläsning av RTC = “0xA3”
Adress för skrivoperation av RTC = “0xA2”
Minnesregister och adress:
RTC-register finns i adressplatser från 00h till 0Fh och RAM-minnesregister finns i adressplatser från 08h till 3Fh som visas i figuren. RTC-register används för att tillhandahålla kalenderfunktioner och körtid på dagen och för att visa helgerna.
Minnesregister och adress
Kontroll / statusregister:
DB1307 består av ytterligare två register, såsom styrning / status1 och styrning / status2, som används för att styra realtidsklocka och avbryter .
Kontroll / statusregister1:
Kontrollstatusregister1
- TEST1 = 0 normalt läge
= 1 EXT-klocka testläge
- STOP = 0 RTC startar
= 1 RTC-stopp
- TESTC = 0 ström vid återställning avaktiverad
= ström vid återställning aktiverad
Kontroll / statusregister2:
Kontrollstatusregister2
- TI / TP = 0 INT aktiv hela tiden
= 1 INT aktiv erforderlig tid
- AF = 0 Larmet matchar inte
= 1 Larmmatchning
- TF = 0 Timeröverflöde sker inte
= 1 Timeröverflöde inträffar
- ALE = 0 Larmavbrott inaktivera
= 1 Larmavbrott aktiverat
- TIE = 0 Timern avbryter inaktiveringen
= 1 Timeravbrott aktiverat
Steg 3: Gränssnitt RTC ds1307 med 8051
RTC kan vara gränssnitt till mikrokontroller genom att använda olika seriella bussprotokoll som I2C och SPI-protokoll som ger kommunikationslänk mellan dem. Bilden visar realtidsklocka som gränssnitt med 8051 mikrokontroller med I2C-bussprotokoll. I2C är ett dubbelriktat seriellt protokoll, som består av två ledningar som SCL och SDA för att överföra data mellan enheter anslutna till buss. 8051 mikrokontroller har ingen inbyggd RTC-enhet, därför har vi anslutit externt via en seriell kommunikation för att säkerställa bestående data.
RTC-gränssnitt med 8051 mikrokontroller
I2C-enheter har öppna utloppsutgångar, därför måste ett uppdragningsmotstånd anslutas till I2C-bussledningen med en spänningskälla. Om motstånden inte är anslutna till SCL- och SDL-linjerna fungerar bussen inte.
Steg 4: RTC Data Framing Format
Eftersom RTC-gränssnitt med 8051 mikrokontroller använder I2C-buss är dataöverföringen därför i form av byte eller paket och varje byte följs av en bekräftelse.
Sänder dataram:
I sändningsläge släpper master startvillkoren efter att ha valt slavenhet efter adressbit. Adressbiten innehåller 7-bitars, som indikerar slavenheterna som ds1307-adress. Seriedata och seriell klocka överförs på SCL- och SDL-linjer. START- och STOP-villkor känns igen som början och slut på en serieöverföring. Mottagnings- och sändningsoperationer följs av R / W-biten.
Sänder dataram
Start: Primärt dataöverföringssekvensen initierad av mastern som genererar startvillkoret.
7-bitars adress: Därefter skickar mastern slavadressen i två 8-bitarsformat istället för en enda 16-bitarsadress.
Kontroll- / statusregisteradress: Kontroll / statusregisteradressen är att tillåta kontrollstatusregistren.
Kontroll / statusregister1: Kontrollstatusregistret1 som används för att aktivera RTC-enheten
Kontroll / statusregister2: Den används för att aktivera och inaktivera avbrott.
R / W: Om läs- och skrivbiten är låg utförs skrivoperationen.
ACK: Om skrivning utförs i slavenheten skickar mottagaren 1-bitars ACK till mikrokontrollern.
Sluta: Efter avslutad skrivoperation i slavenheten skickar mikrokontrollern stoppvillkor till slavenheten.
Ta emot dataram:
Ta emot dataram
Start: Primärt dataöverföringssekvensen initierad av mastern som genererar startvillkoret.
7-bitars adress: Därefter skickar mastern slavadressen i två 8-bitarsformat istället för en enda 16-bitarsadress.
Kontroll- / statusregisteradress: Kontroll / statusregisteradressen är att tillåta kontrollstatusregister.
Kontroll / statusregister1: Kontrollstatusregistret1 som används för att aktivera RTC-enheten
Kontroll / statusregister2: Den används för att aktivera och inaktivera avbrott.
R / W: Om läs- och skrivbiten är hög utförs läsoperationen.
ACK: Om skrivning utförs i slavenheten skickar mottagaren 1-bitars ACK till mikrokontrollern.
Sluta: Efter avslutad skrivoperation i slavenheten skickar mikrokontrollern stoppvillkor till slavenheten.
Steg 5: RTC-programmering
Skriv operation från Master till Slave:
- Utfärda startvillkor från mästare till slav
- Överför slavadressen i skrivläge på SDL-linjen
- Skicka kontrollregisteradressen
- Skicka kontroll- / statusregistret1värde
- Skicka kontroll- / statusregister2-värdet
- Skicka datumet för liknande minuter, sekunder och timmar
- Skicka stoppbit
#omfatta
sbit SCL = P2 ^ 5
sbit SDA = P2 ^ 6
ogiltig start ()
ogiltiga värdar (osignerad char)
fördröjning (osignerad röding)
ogiltigt huvud ()
{
Start()
skriv (0xA2) // slavadress //
skriv (0x00) // kontrollregisteradress //
skriv (0x00) // kontrollregister 1 värde //
skriv (0x00) // kontrollregiter2 vlaue //
skriv (0x28) // sek värde //
skriv (0x50) // minutvärde //
skriv (0x02) // timmar värde //
}
ogiltig start ()
{
SDA = 1 // bearbetning av data //
SCL = 1 // klockan är hög //
fördröjning (100)
SDA = 0 // skickade data //
fördröjning (100)
SCL = 0 // klocksignalen är låg //
}
ogiltig skrivning (osignerad char d)
{
osignerad char k, j = 0 × 80
för (k = 0k<8k++)
{
SDA = (d & j)
J = j >> 1
SCL = 1
fördröjning (4)
SCL = 0
}
SDA = 1
SCL = 1
fördröjning (2)
c = SDA
fördröjning (2)
SCL = 0
}
tomrumsfördröjning (int p)
{
unsignedinta, f
För (a = 0a<255a++) //delay function//
För (b = 0b
Läs operation från slav till mästare:
#omfatta
sbit SCL = P2 ^ 5
sbit SDA = P2 ^ 6
ogiltig start ()
ogiltig skrivning (usignerad char)
ogiltig läsning ()
ogiltig ack ()
ogiltig fördröjning (osignerad char)
ogiltigt huvud ()
{
Start()
skriv (0xA3) // slavadress i läsläge //
läsa()
ack()
sek = värde
}
ogiltig start ()
{
SDA = 1 // bearbetning av data //
SCL = 1 // klockan är hög //
fördröjning (100)
SDA = 0 // skickade data //
fördröjning (100)
SCL = 0 // klocksignalen är låg //
}
ogiltig skrivning (osignerad char d)
{
osignerad char k, j = 0 × 80
för (k = 0k<8k++)
{
SDA = (d & j)
J = j >> 1
SCL = 1
fördröjning (4)
SCL = 0
}
SDA = 1
SCL = 1
fördröjning (2)
c = SDA
fördröjning (2)
SCL = 0
}
tomrumsfördröjning (int p)
{
unsignedinta, f
För (a = 0a<255a++) //delay function//
För (b = 0b
Ogiltig läsning ()
{
Osignerad röd j, z = 0 × 00, q = 0 × 80
SDA = 1
för (j = 0j<8j++)
{
SCL = 1
fördröjning (100)
flagga = SDA
if (flagga == 1)
z = (z
ogiltig ack ()
{
SDA = 0 // SDA-linjen går till låg //
SCL = 1 // klockan är hög till låg //
fördröjning (100)
SCL = 0
}
Dessa är de nödvändiga stegen för RTC-gränssnitt med 8051 mikrokontroller. Utöver dessa steg diskuteras även dataramar som används för överföring och mottagning av data i den här artikeln för användarförståelse med lämplig programmering. För ytterligare hjälp med detta koncept kan du lämna en kommentar nedan.