DS3231 – povezivanje sata realnog vremena. Sat na DS3231 i AVR mikrokontroleru SDA i SCL pinovima na različitim Arduino pločama

31.01.2023 Pregledači

DS3231 čip je visokoprecizni RTC sat realnog vremena koji ima ugrađen kvarcni oscilator kompenzovan temperaturom, što rezultira vremenskim pomakom od samo ±2 minuta godišnje. Dodatno je implementirana funkcija alarma, a postoji i prekidni izlaz. Sat se može kupiti kao gotov Arduino modul sa elementima za vezivanje i odeljkom za baterije.

Modul sam naručio ovdje. Dijagram je prikazan na slici ispod:


Mikrokolo koristi široko rasprostranjeno . Podržava standardne (100 kHz) i visoke (400 kHz) brzine prenosa podataka. Adresa mikrokola (7 bita) na I2C magistrali je 1101000. Dodatno, modul ima I2C memoriju (24C32), koja nije prikazana na dijagramu.

Režimi napajanja

Napon napajanja mikrokola može biti u rasponu od 2,3...5,5V, postoje dva strujna voda, za eksterni izvor (Vcc linija), kao i za bateriju (Vbat). Napon eksternog izvora se stalno prati, a kada padne ispod praga Vpf=2.5V, prelazi na liniju baterije. Sljedeća tabela prikazuje uslove za prebacivanje između električnih vodova:

Točnost sata održava se praćenjem temperature okoline. Mikrokrug pokreće internu proceduru za podešavanje frekvencije generatora takta; količina podešavanja se određuje pomoću posebnog grafikona frekvencije u odnosu na temperaturu. Procedura počinje nakon uključivanja napajanja, a zatim se izvodi svake 64 sekunde.

U cilju očuvanja napunjenosti, kada je baterija priključena (napon se primenjuje na Vbat liniju), generator takta se ne pokreće sve dok napon na Vcc liniji ne pređe graničnu vrednost Vpf, ili se ispravna adresa mikrokola ne prenese preko I2C interfejs. Vrijeme pokretanja generatora takta je manje od jedne sekunde. Otprilike 2 sekunde nakon uključivanja napajanja (Vcc), ili primanja adrese preko I2C interfejsa, počinje procedura korekcije frekvencije. Jednom kada se generator takta pokrene, nastavlja da radi sve dok je prisutan Vcc ili Vbat. Kada se uključe prvi put, registri datuma i vremena se resetuju i imaju sledeće vrednosti: 01/01/00 – 01 – 00/00/00 (dan/mesec/godina/ – dan u nedelji – sat/minuti /sekunde).

Potrošnja struje kada se napaja baterijom od 3,63 V je 3 µA, u nedostatku prijenosa podataka preko I2C sučelja. Maksimalna potrošnja struje može doseći 300 µA kada se koristi eksterno napajanje od 5,5 V i visoka I2C brzina prijenosa podataka.

Eksterna funkcija resetovanja

RST linija se može koristiti za eksterno resetovanje i takođe ima funkciju alarma niskog napona. Linija se povlači visoko kroz unutrašnji otpornik; nije potrebno eksterno povlačenje. Da biste koristili eksternu funkciju resetovanja, dugme se može povezati između RST linije i zajedničke žice; mikrokolo ima zaštitu od odbijanja kontakta. Funkcija alarma se aktivira kada napon napajanja Vcc padne ispod granične vrijednosti Vpf, dok je RST linija postavljena na niski logički nivo.

Opis DS3231 registara

Tabela ispod prikazuje listu registara sata u realnom vremenu:

AdresaD7D6D5D4D3D2D1D0FunkcijaOgraničenja
0x000 10 sekundiSekundeSekunde00-59
0x010 10 minutaminutaminuta00-59
0x020 12/24 AM/PM10 satiSatGledaj1-12 + AM/PM ili 00-23
10 sati
0x030 0 0 0 0 DanDan u tjednu1-7
0x040 0 10Brojdatum01-31
0x05Century0 0 10 mjeseciMjesecMjeseci/stoljeće01-12 + vek
0x0610 godinaGodinaGodine00-99
0x07A1M110 sekundiSekundeSekunde, prvi alarm00-59
0x08A1M210 minutaminutaMinute, 1. alarm00-59
0x09A1M312/24 AM/PM10 satiSatSat, 1. alarm1-12 + AM/PM ili 00-23
10 sati
0x0AA1M4DY/DT10DanDan u sedmici, 1. alarm1-7
BrojDatum, 1. alarm01-31
0x0BA2M210 minutaminutaMinute, 2. alarm00-59
0x0CA2M312/24 AM/PM10 satiSatSat, 2. alarm1-12 + AM/PM ili 00-23
10 sati
0x0DA2M4DY/DT10DanDan u sedmici, 2. alarm1-7
BrojDatum, 2. alarm01-31
0x0EEOSCBBSQWCONVRS2RS1INTCNA2IEA1IERegistar postavki (Kontrola)
0x0FO.S.F.0 0 0 EN32kHzBSYA2FA1FStatus Register
0x10SIGNPODACIPODACIPODACIPODACIPODACIPODACIPODACIRegistar ofseta starenja
0x11SIGNPODACIPODACIPODACIPODACIPODACIPODACIPODACIRegistar temperature, visoki bajt
0x12PODACIPODACI0 0 0 0 0 0 Registar temperature, niži bajt

Informacije o vremenu pohranjuju se u binarnom decimalnom formatu, odnosno svaka cifra decimalnog broja (od 0 do 9) je predstavljena kao grupa od 4 bita. U slučaju jednog bajta, niži nibble broji jedinice, visoki nibble broji desetice itd. Vrijeme se računa u registrima sa adresama 0x00-0x06, za brojanje sati možete odabrati 12 ili 24-satni mod. Postavljanjem 6. bita registra sata (adresa 0x02) postavlja se 12-satni režim, u kojem 5. bit označava doba dana, vrijednost 1 odgovara poslijepodnevu (PM), vrijednost 0 odgovara poslijepodnevu (AM). Nulta vrijednost 6. bita odgovara 24-satnom režimu, ovdje je 5. bit uključen u brojanje sati (vrijednosti 20-23).

Registar dana u sedmici se povećava u ponoć, računajući od 1 do 7, registar mjeseci (adresa 0x05) sadrži bit Century (7. bit), koji se mijenja kada se registar za brojanje godina (adresa 0x06) prelije, sa 99 na 00 .

DS3231 čip implementira dva budilnika, 1. budilnik je konfigurisan pomoću registara sa adresama 0x07-0x0A, 2. budilnik je konfigurisan pomoću registara 0x0B-0x0D. Bitovi A1Mx i A2Mx se mogu koristiti za konfiguriranje različitih načina za alarme; postavljanje bita isključuje odgovarajući registar iz operacije poređenja. Tablice u nastavku prikazuju kombinacije bitova za različite načine alarma:

Kombinacije bitova koje nisu navedene u tabelama dovode do nepravilnog funkcionisanja alarma. Ako je DY/DT bit obrisan, tada se prati podudaranje datuma (dan u mjesecu) za budilnik; kada je DY/DT bit postavljen, provjerava se podudaranje dana u sedmici.

Većina funkcija je konfigurisana u Control registru. EOSC bit kontrolira početak generatora takta, resetovanje bita pokreće generator takta. Postavljanje bita zaustavlja generator, samo za baterijski režim (Vbat). Kada se napaja iz vanjskog izvora (Vcc), oscilator uvijek radi bez obzira na stanje EOSC bita. Kada je omogućeno, zadana vrijednost bita je 0.

Podešavanje BBSQW bita omogućava INT/SQW izlazu (3. pin) da radi u načinu rada na bateriju, u nedostatku vanjskog napajanja. Kada je bit postavljen na nulu, INT/SQW izlaz prelazi u stanje 3 (deaktiviran) ako napon vanjskog izvora Vcc padne ispod granične vrijednosti Vpf. Nakon uključivanja napajanja, zadana vrijednost bita je 0.

CONV bit je odgovoran za prinudno mjerenje temperature; postavljanje bita pokreće proces konverzije, tokom kojeg se podešava i frekvencija generatora takta; rezultat mjerenja se nalazi u registrima sa adresama 0x11, 0x12. Pokretanje je moguće samo ako je prethodna konverzija završena; prije pokretanja potrebno je provjeriti oznaku zauzetosti BSY. Prisilna konverzija temperature ne utiče na interni ciklus podešavanja frekvencije od 64 sekunde. Podešavanje bita CONV ne utiče na BSY zastavicu tokom 2 ms. CONV i BSY bitovi se automatski brišu nakon završetka konverzije.

Bitovi RS2, RS1 postavljaju frekvenciju pravougaonih impulsa (kvadratni talas) na INT/SQW izlazu. Prema zadanim postavkama, kada je omogućeno, bitovi su postavljeni na 1. Tabela ispod prikazuje moguće kombinacije bitova:

INTCN bit kontrolira INT/SQW izlaz. Ako se bit resetira, na izlazu se pojavljuju pravokutni impulsi (kvadratni valovi), čija je frekvencija postavljena bitovima RS2, RS1. Kada je INTCN bit postavljen, izlaz se koristi za generiranje alarmnih prekida. Po defaultu, bitna vrijednost je 1. Tip izlaza je INT/SQW - otvoreni drein, stoga ga je potrebno povući kroz otpornik na visoki logički nivo, aktivni nivo je nizak.

Postavljanje bitova A1IE, A2IE omogućava prekide na 1. i 2. alarmnom signalu, respektivno. Resetujte bitove, onemogućava prekide. Zadana vrijednost je 0.

Statusni registar sadrži oznake događaja i kontroliše izlaz od 32 kHz. OSF zastavica odražava stanje generatora takta, vrijednost 1 znači da je generator takta zaustavljen, ovaj događaj se može dogoditi u sljedećim slučajevima:

  • Prvi put nakon uključivanja struje
  • Baterija ili vanjski napon nisu dovoljni za rad generatora takta
  • Generator se isključuje postavljanjem EOSC bita u baterijski način rada
  • Vanjski faktori koji utiču na kristalni oscilator (šum, curenje, itd.)

Jednom postavljena, vrijednost bita se ne mijenja; bit se mora ručno resetirati.

Postavljanje bita EN32kHz omogućava generisanje pravougaonih impulsa (kvadratnih talasa) na izlazu od 32kHz (1. pin), frekvencija impulsa je fiksna i jednaka je 32,768 kHz. Resetovanje bita onemogućava ovu funkciju i pomera izlaz u 3. stanje (visoka ulazna impedansa). Podrazumevano, bitna vrijednost je 1; nakon što se uključi napajanje, na izlazu se pojavljuju impulsi. Tip izlaza je 32kHz s otvorenim odvodom, tako da zahtijeva povlačenje do visokog logičkog nivoa.

Oznaka zauzetosti BSY postavlja se tokom procesa konverzije temperature i podešavanja sata. Oznaka se resetuje kada je konverzija završena.

Zastavice budilnika A1F, A2F se postavljaju kada se poklapaju vrijednosti registara za brojanje vremena i registara budilnika. Ako su alarmni prekidi A1IE, A2IE omogućeni, a izlaz prekida je dodijeljen (postavljen je INTCN bit), tada se na INT/SQW izlazu pojavljuje signal prekida (prijelaz sa visokog na niski logički nivo). Zastavice se moraju ručno resetirati upisivanjem vrijednosti 0.

Registar odstupanja starenja je dizajniran za podešavanje frekvencije generatora takta. Vrijednost registra se dodaje frekvenciji oscilatora tokom interne procedure podešavanja, ako se detektuje promjena temperature, kao i kada je konverzija temperature pokrenuta bitom CONV. Vrijednost pomaka je potpisana, odnosno pozitivne vrijednosti (1-127) smanjuju frekvenciju, negativne vrijednosti (128-255) je povećavaju. Za isti pomak, promjena frekvencije će se razlikovati ovisno o temperaturi. Na +25°C, promjena frekvencije će biti 0,1 ppm/LSB.

Trenutna vrijednost temperature se pohranjuje u registre sa adresama 0x11 i 0x12, visoki i donji bajt, respektivno, vrijednost temperature u registrima se periodično ažurira. Lijevo poravnanje je podešeno, rezolucija je 10 bita ili 0,25°C/LSB, odnosno, visoki bajt sadrži cijeli dio temperature, a 6., 7. bitovi u nižim registrima čine razlomak. U visokom bajtu, 7. bit označava predznak temperature, na primjer, vrijednost 00011011 01 odgovara temperaturi od +27,25 °C, vrijednost 11111110 10 odgovara temperaturi od -2,5 °C.

Prilikom čitanja vremenskih registara preporučuje se korištenje dodatnog bafera, odnosno čitanje više registara odjednom, a ne odvojeno, jer između pojedinačnih operacija čitanja vremenski registri mogu promijeniti svoju vrijednost. Ovo pravilo se također preporučuje da se pridržavate prilikom upisivanja novih podataka u registre računa. Upisivanje nove vrijednosti u registar sekundi pauzira sat na 1 sekundu, preostali registri moraju biti ponovo upisani za to vrijeme.

Povezivanje DS3231 na mikrokontroler

Spojio sam sat na PIC16F628A mikrokontroler i koristio . Dijagram povezivanja je prikazan ispod:


Nakon uključivanja napajanja, na indikatorima se prikazuju crtice (– – – – – –), zatim se sat inicijalizira, vrijednost vremena se pojavljuje na indikatorima sa kašnjenjem od 1 sekunde, što je potrebno za pokretanje generatora sata. Indikatori prikazuju sate, minute i sekunde, razdvojene decimalnim zarezom, a format vremena je 24-satni. Pomoću dugmeta SB1 „Indikacija“ možete promijeniti format prikaza, gdje će indikatori prikazati temperaturu, kao i vrijednost sati i minuta, razdvojenih decimalnim zarezom, koji treperi frekvencijom od 2 Hz. Temperatura se prikazuje bez razlomka, program čita samo visoki bajt memorije temperature na adresi 0x11.

Vrijednost vremena se očitava sa sata preko prekida na liniji SQW/INT, koji se kontrolira 1. alarmnim signalom; tokom inicijalizacije sata budilnik se postavlja na svaki drugi signal. HL1 LED služi kao indikator i treperi na signalu prekida svake sekunde. HL2 LED svijetli ako dođe do greške u prijenosu podataka preko I2C sučelja.

Dodatno, u program sam dodao i mogućnost podešavanja sata pomoću dugmadi SB2 “Postavke”, SB3 “Instalacija”. U mod podešavanja ulazi se pritiskom na dugme SB2; indikatori prikazuju 00 sati i crtice umjesto minuta i sekundi (00 – – – –). Koristeći dugme SB3, postavljate vrednost sata (porast sa svakim pritiskom), a zatim pritiskom na dugme SB2 prelazite na uređivanje minuta; umesto crtice biće prikazano 00 minuta. Dugme SB3 također postavlja potrebnu vrijednost i tako dalje. Nakon uređivanja sekundi i pritiska na dugme SB2, vreme na satu se ponovo upisuje, a ažurirano vreme se prikazuje na indikatorima.

Djelomični programski kod je dat u nastavku (puna verzija se može preuzeti na kraju članka):

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; #include LIST p=16F628A __CONFIG H"3F10" ;Nivo greške konfiguracije mikrokontrolera -302 ;ne prikazivati ​​poruke sa greškom 302 u listi Sec equ 0020h ;registri pomoćnih naloga Sec1 equ 0021h ; Sec2 equ 0022h ; scetbit equ 0024h;pomoćni registar za brojanje broja bitova perem equ 0025h;pomoćni registar za prijem/prenos bajtova preko spi, i2c temp equ 0026h;temperaturni registar perem_1 equ 0027h-decimalni registar za pretvarač bajtova. rezultat equ 0028h ;binarni-decimalni konvertor pomoćni registar dat_ind equ 0029h ;registar podataka za prijenos preko spi protokola adr_ind equ 002Ah ;adresni registar za prijenos putem spi protokola drugi equ 002Bh ;registr za pohranu sekundi za postavljanje vremena minuta equ 002Ch registrator vremena za pohranu 2 minuta 002Ch D ; registar sati skladištenja za postavke vremena adr_i2c equ 002Eh ;registri potprograma za prijenos podataka i2c sučelja tmp_i2c equ 002Fh slave_adr equ 0030h data_i2c equ 0031h flag equ 0031h flag equ 007 red INT; SQW DS3231 #DEFINE sda PORTB ,1 ;linija SDA za konekcije DS3231 #DEFINE scl PORTB,2 ;SCL linija za povezivanje DS3231 #DEFINE sda_io TRISB,1 ;smjer SDA linije #DEFINE scl_io TRISB,2 ;smjer SCL linije #DEFINE datai PORTB5, ;linija za unos podataka drajvera MAX7219 #DEFINE cs PORTB ,6 ;red za odabir drajvera MAX7219 #DEFINE clk PORTB,7 ; linija takta drajvera MAX7219 #DEFINE led PORTB,4 ;i2c greška LED #DEFINE led_sec PORTB,3 ; LED 1Hz #DEFINE regim PORTA,2 ;Taster za indikaciju - promjena načina prikaza #DEFINE nast PORTA,3 ;Taster za podešavanje - ulazak u mod podešavanja vremena #DEFINE ust PORTA,4 ;Taster za podešavanje - podešavanje vrijednosti sata;;;;; ;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;; org 0000h ;pokreni izvršavanje programa sa adrese 0000h idi na Start ;idi na oznaku Start ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Pokretanje glavnog programa movlw b"00000000" ;podešavanje vrijednosti izlaznih zasuna porta A movwf PORTA ; movlw b"01000000" ;podesite vrijednosti izlaznih zasuna porta B movwf PORTB ; movlw b"00000111" ;isključi komparatore movwf CMCON ; bsf STATUS,RP0 ;odaberite 1. banku movlw b"00000111" ;postavite ulazno/izlazne linije porta B movwf TRISB ;RB0-RB2 - za ulaz, ostatak za izlaz movlw b"11111111"/ ;postavite ulaz izlazne linije porta A movwf TRISA ;sve linije za ulaz bcf STATUS,RP0 ;odaberite banku 0 clrf flag ;resetirajte zastavicu registar poziv init_lcd ;pozovite potprogram za inicijalizaciju drajvera (MAX7219) poziv viv_not ;izlazni crtica simboli " ------ " ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;; movlw b"11010000" ;adresa uređaja (DS3231) movwf slave_adr ;Upišite 4 bajta u registre za prijem/prenos preko i2c;ovde je konfigurisan 1. alarm, piskajući svaki drugi movlw data_i2c ;postavite prvi i2 FcSRmov registar za prijem/prenos ; movlw b"10000000" ;podaci za registar sekundi prvog alarma movwf INDF ; incf FSR,F ; movlw b"10000000" ;podaci za zapisnik 1. alarma movwf INDF ; incf FSR,F ; movlw b"10000000" ;podaci za registar satova 1. budilnika movwf INDF ; incf FSR,F ; movlw b"10000000" ;podaci za registar datuma/dana u sedmici prvog alarma movwf INDF ; movlw. 4 ;prenesi 4 bajta putem i2c movwf tmp_i2c ; movlw 0x07 ;podešavanje adrese registra sekundi prvog budilnika movwf adr_i2c ; poziv write_i2c ;pozivanje potprograma za pisanje preko i2c interfejsa poziv err_prov ;provera grešaka pisanja/čitanja I2C movlw .1 ;prenos 1. bajta preko i2c movwf tmp_i2c ; movlw 0x0E ;podešavanje adrese kontrolnog registra movwf adr_i2c ; movlw data_i2c ;postavljanje prvog registra za slanje/prijem preko i2c movwf FSR ; movlw b"00000101" ;pokreni generator takta, zabrani rad INT/SQW pina za movwf INDF ;način rada baterije, frekvencija impulsa na INT/SQW izlazu je 1Hz, ;INT/SQW izlaz se koristi za generiranje alarma sat prekida, ;omogući budilnik prekida 1. poziv alarma write_i2c ;pozivanje potprograma za snimanje preko i2c interfejsa poziva err_prov ;provjera grešaka pisanja/čitanja I2C met_2 movlw .1 ;prenos 1. bajta preko i2c movwf movwf; movlw 0x0F ;podešavanje adrese statusnog registra movwf adr_i2c ; movlw data_i2c ;postavljanje prvog registra za slanje/prijem preko i2c movwf FSR ; movlw b"00000000" ;resetujte OSF bit, zabranite generisanje impulsa na EN32kHz izlazu, movwf INDF ;resetujte zastavice prekida alarma A2F, A1F poziv write_i2c ;pozovite potprogram za snimanje preko i2c interfejsa call write err_prov ; /read errors met_1 btfsc int ;pozivanje linije prekida alarma goto met_3; bsf led_sec ;uključite LED indikator napretka sata goto met_4; met_3 bcf led_sec ;isključuje LED indikator napredovanja sata btfsc nast ;poziva dugme za podešavanje sata goto met_5 ; pozvati nast_time ;pozvati potprogram za postavljanje vremena goto met_2 ; met_5 btfsc regim ;poziv dugmeta za režim indikacije goto met_1 ; met_6 poziv paus_knp ; btfss režim ; goto met_6 ; btfss flag,2 ;promijenite vrijednost zastavice načina indikacije goto met_7 ; bcf flag,2 ;reset indikacija zastavica, mod prikaza sata goto met_1 ; met_7 bsf flag,2 ;podešavanje zastavice indikacije, temperature i režima prikaza sata goto met_1 ; met_4 movlw .1 ;prenos 1. bajta preko i2c movwf tmp_i2c ; movlw 0x11 ;podešavanje adrese registra visoke temperature movwf adr_i2c ; poziv read_i2c ;pozivanje potprograma za čitanje preko I2C poziv err_prov ;provjera grešaka pisanja/čitanja I2C movf INDF,W ;kopiranje vrijednosti temperature u registar temperature movwf temp rd_time movlw .3 ;prenos 3 bajta preko i2c mp_wi2 movlw 0x00 ;podešavanje adrese registra sekundi movwf adr_i2c ; poziv read_i2c ;pozivanje potprograma za čitanje preko I2C poziva err_prov ;provjera grešaka pisanja/čitanja I2C btfsc zastavica,2 ;poziv zastavice načina indikacije goto met_8 ; call vivod ;pozivanje potprograma za prikaz vrijednosti sata na digitalnom displeju goto met_2 ; met_8 poziv vivod_temp ;pozivanje potprograma za prikaz temperature i sata na digitalnom displeju goto met_2 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

#include

CONFIG H"3F10" ;Konfiguracija mikrokontrolera

errorlevel -302 ;ne prikazuj 302 poruke o grešci na listi

Sec equ 0020h ;registri pomoćnih računa

Sec1 equ 0021h ;

Sec2 equ 0022h ;

scetbit equ 0024h ;brojenje broja bitova pomoćnog registra

perem equ 0025h ;registar prijema/prijenosa pomoćnog bajta preko spi, i2c

temp equ 0026h ;registar temperature

perem_1 equ 0027h ;BCD pomoćni registar

rezultat equ 0028h ;binarni-decimalni konvertor pomoćni registar

dat_ind equ 0029h ;registar podataka za prijenos putem spi protokola

adr_ind equ 002Ah ;adresni registar za prijenos putem spi protokola

drugi equ 002Bh ;registar memorije sekundi za podešavanje vremena

minuta equ 002Ch ;registar memorije minuta za podešavanje vremena

sat equ 002Dh ;satni registar memorije za podešavanje vremena

adr_i2c equ 002Eh ;registri potprograma za prijenos podataka i2c interfejsa

tmp_i2c equ 002Fh

slave_adr equ 0030h

data_i2c equ 0031h

flag equ 007Fh ;registar zastave

#DEFINE int PORTB,0 ;prekidna linija INT/SQW DS3231

#DEFINE sda PORTB,1 ;SDA linija za povezivanje DS3231

#DEFINE scl PORTB,2 ;SCL linija za povezivanje DS3231

#DEFINE datai PORTB,5 ; linija za unos podataka MAX7219 drajvera

#DEFINE cs PORTB,6 ;red za odabir drajvera MAX7219

#DEFINE clk PORTB,7 ;takt linija MAX7219 drajvera

#DEFINE LED PORTB,4 ;i2c LED dioda za grešku

#DEFINE led_sec PORTB,3 ;LED indikator napretka sata 1Hz

#DEFINE regim PORTA,2 ;Taster za indikaciju - mijenja način prikaza

#DEFINE nast PORTA,3 ;Dugme za podešavanja - ulazi u mod podešavanja vremena

#DEFINE ust PORTA,4 ;Taster za postavljanje - podesite vrijednost sata

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

org 0000h ;pokreni izvršavanje programa sa adrese 0000h

idite na Start ;idite na oznaku Start

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;Glavni program

Pokrenite movlw b"00000000" ; postavite vrijednosti izlaznih zasuna porta A

movlw b"01000000" ;podesite vrijednosti izlaznih zasuna porta B

movlw b"00000111" ;isključiti komparatore

bsf STATUS,RP0 ;odaberite 1. banku

movlw b"00000111" ;konfiguriranje ulazno/izlaznih linija porta B

movwf TRISB ;RB0-RB2 - na ulaz, ostatak na izlaz

movlw b"11111111" ;podešavanje ulazno/izlaznih linija porta A

movwf TRISA ;svi redovi za unos

bcf STATUS,RP0 ;odaberite banku 0

clrf flag ;resetirajte registar zastavice

pozvati init_lcd ;pozvati rutinu inicijalizacije drajvera (MAX7219)

pozvati viv_not ;izlazne crtice simbole " ------ " na indikatore

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

movlw b"11010000" ;adresa uređaja (DS3231)

;Upišite 4 bajta u registre za prijem/prenos preko i2c

movlw data_i2c ;postavljanje prvog registra za prijem/prenos putem i2c

movlw b"10000000" ;podaci za registar sekundi prvog alarma

movlw b"10000000" ;podaci za zapisnik 1. alarma

movlw b"10000000" ;podaci za 1. registar budilnika

movlw b"10000000" ;podaci za registar datuma/dana u sedmici prvog alarma

movlw .4 ;prenesi 4 bajta preko i2c

movlw 0x07 ;podešavanje adrese registra sekundi prvog budilnika

Prepoznatljive karakteristike:

  • Preciznost ±2 ppm u temperaturnom opsegu od 0°C do +40°C
  • Preciznost ±3,5 ppm u temperaturnom opsegu -40°C do +85°C
  • Ulaz za povezivanje autonomnog izvora napajanja kako bi se osigurao kontinuirani rad
  • Raspon radne temperature komercijalni: od 0°C do +70°C industrijski: -40°C do +85°C
  • Niska potrošnja
  • Sat u realnom vremenu koji broji sekunde, minute, sate, dane u nedelji, dane u mjesecu, mjesecu i godini sa korekcijom prijestupne godine do 2100
  • Dva dnevna alarma
  • Izlaz kvadratnog talasa sa programabilnom frekvencijom
  • Brzi (400 kHz) I 2 C interfejs
  • 3.3V snaga
  • Digitalni temperaturni senzor sa preciznošću merenja ±3°C
  • Registar koji sadrži podatke o potrebnom prilagođavanju
  • nonRST reset ulaz/izlaz

primjena:

  • Serveri
  • Elektronska brojila električne energije
  • Telematska oprema
  • GPS sistemi

Tipični dijagram povezivanja za DS3231:

Opći opis:

DS3231 je visokoprecizan sat realnog vremena (RTC) sa ugrađenim I 2 C interfejsom, temperaturno kompenzovanim kristalnim oscilatorom (TCXO) i kvarcnim rezonatorom. Uređaj ima ulaz za povezivanje rezervnog autonomnog izvora napajanja, koji omogućava mjerenje vremena i temperature čak i kada je glavni napon napajanja isključen. Ugrađeni kvarcni rezonator produžava vijek trajanja uređaja i smanjuje potreban broj vanjskih elemenata. DS3231 je dostupan u komercijalnim i industrijskim temperaturnim verzijama i upakovan je u 300 mil 16 pin SO paket.

RTC omogućava brojanje sekundi, minuta, sati, dana u sedmici, dana u mjesecu i godini. Datum završetka mjeseca se određuje automatski uzimajući u obzir prijestupne godine. Sat realnog vremena radi u formatu od 24 ili 12 sati sa indikacijom trenutne polovine dana (AM/PM). Uređaj ima dva dnevna alarma i pravokutni izlaz sa programabilnom frekvencijom. Razmjena podataka sa uređajem se vrši preko ugrađenog serijskog I 2 C kompatibilnog interfejsa.

". Hajde da se upoznamo sa DS3231 modulom sata realnog vremena. Članak sadrži video upute, liste programa, svrhu i metode povezivanja modula iz DS porodice na Arduino.

DS3231 Modul sata realnog vremena

Šta je DS3231 modul sata realnog vremena?

Modul sata realnog vremena- ovo je elektronsko kolo dizajnirano za snimanje hronometrijskih podataka (trenutno vrijeme, datum, dan u sedmici, itd.), a predstavlja sistem koji se sastoji od autonomnog izvora napajanja i uređaja za snimanje.

DS3231 modul To je u suštini običan sat. Arduino ploče već imaju ugrađeni senzor vremena Millis, međutim, radi samo kada je napajanje priključeno na ploču. Ako isključite, a zatim uključite Arduino, Millis vrijeme će se resetirati na nulu. A DS3231 ima bateriju na ploči, koja, čak i kada je Arduino ploča isključena, nastavlja da "napaja" modul, omogućavajući mu da mjeri vrijeme.

Modul se može koristiti kao sat ili budilnik baziran na Arduino pločama. Ili kao upozorenje za različite sisteme, na primjer u pametnom domu.

DS3231 Specifikacije:

  • modul računa sate, minute, sekunde, datume, mjesece, godine (u obzir se uzimaju prijestupne godine do 2100);
  • Za povezivanje sa raznim uređajima, sat je povezan preko I2C interfejsa.

32K— Izlaz dizajniran za napajanje eksternog napajanja >12V.

S.Q.W.— Programabilni izlaz signala kvadratnog talasa.

SCL– Preko ovog pina, podaci se razmjenjuju sa satom preko I2C sučelja.

S.D.A.– Podaci sa sata se prenose preko ovog pina.

VCC– Napajanje za sat realnog vremena, potrebno 5 volti. Ako na ovaj pin nema napona, sat prelazi u stanje mirovanja.

GND- Zemlja.

Dijagram povezivanja za DS3231 sat realnog vremena i jednostavan program

SDA i SCL pinovi na različitim Arduino pločama:

S.D.A. SCL
UNO A4 A5
Mini A4 A5
Nano A4 A5
Mega2560 20 21
Leonardo 2 3

Povežimo modul sata realnog vremena na Arduino UNO. SDA - pin A4, SCL - pin A5.

Sljedeći program je pogodan za rad modela (možete jednostavno kopirati program u Arduino IDE):

#include

void setup() (
kašnjenje (300);
Serial.begin(9600);
time.begin();
}
void loop()



}
}

U ovoj skici vrijeme se jednostavno odbrojava.

Prije svega, u sktechu, povežite biblioteku iarduino_RTC.h.

Tamo navedite tačan naziv vašeg modula da biste ispravno radili s njim.

Kao rezultat, dobijamo izlaz vremena od DS3231 modula do port monitora. Prikazuju se sati, minute, sekunde.

U sljedećoj skici ćemo dodati funkciju settime, što vam omogućava da postavite početno vrijeme odbrojavanja.

#include
iarduino_RTC vrijeme(RTC_DS3231);
void setup() (
kašnjenje (300);
Serial.begin(9600);
time.begin();
time.settime(0,0,18,24,04,17,1); // 0 sec, 0 min, 18 sati, 24. april 2017., ponedjeljak
}
void loop()
if(millis()%1000==0)( // ako je prošla 1 sekunda
Serial.println(time.gettime("d-m-Y, H:i:s, D")); // prikaz vremena
kašnjenje(1); // pauziraj 1 ms kako se vrijeme ne bi prikazalo nekoliko puta u 1 ms
}
}

U primjeru, vrijeme počinje da se računa od 0 sekundi, 0 minuta, 18 sati, 24. aprila 2017., ponedjeljak.

Postovi sa lekcija:

  1. Prva lekcija: .
  2. Druga lekcija: .
  3. Treća lekcija: .
  4. Četvrta lekcija: .
  5. Peta lekcija: .
  6. Šesta lekcija: .
  7. Sedma lekcija: .
  8. Osma lekcija: .
  9. Deveta lekcija:

Danas ćemo nastaviti našu potragu za savršenim čipom za sat realnog vremena (RTC). Pravićemo satove na osnovu . Ekran će biti pogodniji za razvoj - LCD displej, koji će prikazati sve informacije odjednom osim postavki. U ovom obliku, sat je pogodan za korištenje kao desktop opcija.

Dakle, pogledajmo sam DS3231 čip. DS3231 je sat u realnom vremenu sa izuzetno preciznim kretanjem (proizvođači su izabrali tu reč) zahvaljujući ugrađenom kvarcnom rezonatoru sa temperaturnom kompenzacijom. Interfejs za prijenos podataka je I 2 C. Ovo mikrokolo također ima ulaz za napon rezervne baterije; kada se glavno napajanje isključi, mikrokolo automatski prelazi na rad sa rezervne baterije, tačnost rada iz rezervne baterije nije pogođeni. Veoma je prijatno, zar ne? DS3231 podržava brojanje sekundi, minuta, sati, dana u mjesecu (datum), dana u sedmici, mjeseci i godina (uključujući prijestupnu godinu za mjesece). Podržava rad u 12 i 24-satnom formatu. Postoje 2 budilnika sa mogućnošću konfigurisanja i praćenja njihovog statusa. Podešavanje točnosti temperaturne kompenzacije. I takođe dva izlaza - na 32 kHz (izlaz je 32,768 kHz) i programabilni izlaz od 1 Hz do 8,192 kHz. Tu je i pin za resetovanje - RST. Čip za sat realnog vremena dostupan je u paketu SO-16. Kućište je dosta veliko, ali ako uzmete u obzir da je unutra već kvarc, a i temperaturno je kompenzovan, onda mi se čini da je sve u redu sa dimenzijama. DS3231 ima blizanca u obliku DS3232, koji, međutim, ima još 2 noge. Sve ovo jako podsjeća na NXP proizvode - PCA2129 i PCF2129 taktne čipove. Sličan ugrađeni kvarcni rezonator s kompenziranom temperaturom, oba su isti blizanci samo sa različitim brojem n.c. igle i slične funkcije u odnosu na DS3231 pored mjerenja vremena.

RTC DS3231 su dostupni za prodaju u obliku modula sa potrebnim ožičenjem, kao i u kompletu sa EEPROM čipom, koji najčešće nije potreban, samo dodaje težinu:

Osim potrebnih dijelova, na ploči modula nalazi se i LED dioda čija je funkcija da ukaže na priključak napajanja na terminale. Verovatno su ga isporučili samo zbog lepote.

Ono što je važno znati kada radite sa takvim čipom sata u realnom vremenu je kako iz njega izdvojiti podatke ili ih upisati. Sat ima I 2 C interfejs. Da biste pisali podatke (a to je neophodno i za čitanje podataka), potrebno je da prođete uslov pokretanja (ove komande se izvode pomoću hardvera ili softvera I 2 C za mikrokontroler), zatim prosledite adresu čipa sa zapisom bitova, zatim prosledite adresu registra kome ćemo pristupiti i zatim prenesite bajt podataka u ovaj registar, ako zatim prenesete još jedan bajt podataka, biće upisuje se u sljedeći registar, i tako dalje. Kada završite, morate proći uslov zaustavljanja. Grafički prikaz gore navedenog na slici:

Snimanje podataka je potrebno za početno podešavanje kao i za podešavanje trenutnog vremena. Zatim, moramo stalno primati podatke o trenutnom vremenu i datumu. Da biste to učinili, potrebno je čitati iz registara koji čuvaju ove informacije. Čitanje se sastoji od dva postupka - postavljanja pokazivača na željeni registar i čitanja. Da biste postavili pokazivač na željeni registar, potrebno je da prođete početni uslov, zatim da prosledite adresu čipa sa bitom za upisivanje i bajt sa adresom registra. Sljedeći je ili uslov zaustavljanja, a zatim uvjet pokretanja, ili samo ponovno pokretanje. Sada je drugi postupak direktno čitanje iz registara. Početak se prenosi, zatim morate poslati adresu mikrokola sa bitom za čitanje i zatim pročitati registre u potrebnom broju, a po završetku prenijeti stanje zaustavljanja. Ako je informacija iz registra pročitana, pokazivač automatski prelazi na sljedeći registar bez nepotrebnih radnji od strane mikrokontrolera (master uređaja). Slika ilustruje sve što je gore rečeno u vezi čitanja registara pomoću I 2 C interfejsa:

Adresa čipa:

  • za snimanje - 0b11010000
  • za čitanje - 0b11010001

C kod će izgledati ovako:

// funkcije sa satom ============================================== =============== ==================================== ================== ======== // inicijalizacija početnih postavki void RTC_init(void)( i2c_start_cond(); // pokretanje i2c i2c_send_byte(RTC_adr_write); // prijenos adrese uređaja, način snimanja i2c_send_byte(0x0E); // prijenos memorijske adrese i2c_send_byte(0b00100000); // početak konverzije temperature i izlaz na 1 Hz i2c_send_byte(0b00001000); // omogući 32 kHz_con output i2c_stop); // zaustavljanje i2c ) // dobivanje vremena i datuma void RTC_read_time(void)( i2c_start_cond() ; // pokretanje i2c i2c_send_byte(RTC_adr_write); // prijenos adrese uređaja, način pisanja i2c_send_byte(0x00); // prijenos memorijske adrese i2c_stop_cond(); // zaustavljanje i2c i2c_start_cond(); // pokretanje i2c i2c_send_byte(RTC_adr_read); / / adresa uređaja za prijenos, način čitanja sec = bcd(i2c_get_byte(0)); // čitanje sekundi, ACK min = bcd(i2c_get_by (0)); // čitanje minuta, ACK sat = bcd(i2c_get_byte(0)); // čitanje sata, ACK wday = bcd(i2c_get_byte(0)); // čitanje dana u sedmici, ACK dan = bcd(i2c_get_byte(0)); // čitanje broja, ACK mjesec = bcd(i2c_get_byte(0)); // mjesec čitanja, ACK godina = bcd(i2c_get_byte(1)); // godina čitanja, NACK i2c_stop_cond(); // zaustavi i2c ) // postavi vrijeme void RTC_write_time(unsigned char hour1, unsigned char min1, unsigned char sec1)( i2c_start_cond(); // start i2c i2c_send_byte(RTC_adr_write); // prenesi adresu uređaja, način snimanja i2c_s 0x00) ; // prijenos memorijske adrese i2c_send_byte(bin(sec1)); // 0x00 sekundi (da li je preporučljivo navesti i sekunde?) i2c_send_byte(bin(min1)); // 0x01 minuta i2c_send_byte(bin(hour1)) ; // 0x02 sat i2c_stop_cond(); // zaustavi i2c ) // postavi datum void RTC_write_date(unsigned char wday, unsigned char day, unsigned char day, unsigned char year)( i2c_start_cond(); // start i2c i2c_RTSend_byte() ); // prijenos adresa uređaja, način snimanja i2c_send_byte(0x03); // prijenos memorijske adrese i2c_send_byte(bin(wday)); // 0x03 dan u sedmici (nedjelja - 1, pon 2, uto 3, sri 4, čet 5, pet 6, sub 7 ) i2c_send_byte(bin(dan)); // 0x04 dan mjesec i2c_send_byte(bin(mjesec)); // 0x05 mjesec i2c_send_byte(bin(godina)); // 0x06 godina i2c_stop_cond(); // zaustavljanje i2c ) // čitanje temperature void RTC_read_temper(void)( i2c_start_cond(); // pokretanje i2c i2c_send_byte(RTC_adr_write); // prijenos adrese uređaja, način pisanja i2c_send_byte(0x11); // prijenos memorijske adrese i2c_stop_cond (); // zaustavljanje i2c i2c_start_cond(); // pokretanje i2c i2c_send_byte(RTC_adr_read); // prijenos adrese uređaja, način čitanja t1 = i2c_get_byte(0); // čitanje MSB temperature t2 = i2c_get_byte(1); // čitanje LSB temperatura i2c_stop_cond (); // zaustavi i2c t2=(t2/128); // pomak za 6 - preciznost 0,25 (2 bita) // pomak za 7 - preciznost 0,5 (1 bit) t2=t2*5; )

Ovo je sav izvorni kod koji se koristi za rad s mikrokolo; podešavanje brzine takta nije utjecalo, jer sat nije izgubio ni sekundu u nekoliko dana.

Da - odlična karakteristika DS3231 je da isti čip obavlja funkcije termometra (inače kako drugačije izvršiti temperaturnu kompenzaciju) i mogućnost očitavanja trenutne temperature. Maksimalna temperaturna rezolucija je 0,25 stepeni Celzijusa. Takođe, period ažuriranja temperature je prilično dug - oko 1 minut. Da, nemamo potrebe da ga brzo ažuriramo.

Dijagram cjelokupne strukture sata izgleda ovako:

Atmega8 je odabrao mikrokontroler zbog njegove široke dostupnosti i niske cijene. Ovaj mikrokontroler se može koristiti i u DIP-28 paketu iu SMD verziji u TQFP-32 paketu. Otpornik R3 je neophodan za sprečavanje spontanog ponovnog pokretanja mikrokontrolera u slučaju slučajnog šuma na PC6 pinu. Otpornik R3 povlači snagu plus na ovaj pin, pouzdano stvarajući potencijal preko njega. Za prikaz se koristi ekran sa tečnim kristalima (LCD). Koristio sam displej iz 2004A - 4 reda od 20 karaktera su više za lepotu, tako da možete koristiti poznatiji ekran - 2 reda od 16 karaktera. LCD ekran je povezan sa mikrokontrolerom pomoću četvorobitnog sistema. Varijabilni otpornik R2 je neophodan za podešavanje kontrasta znakova na displeju. Okretanjem klizača ovog otpornika postižemo najjasnija očitanja na ekranu za nas. Pozadinsko osvetljenje LCD ekrana je organizovano preko pinova “A” i “K” na displeju. Pozadinsko osvjetljenje se uključuje kroz otpornik koji ograničava struju - R1. Što je veća vrijednost, to će displej imati pozadinsko osvjetljenje. Međutim, ovaj otpornik ne treba zanemariti kako bi se izbjeglo oštećenje pozadinskog osvjetljenja. Dugmad S1 - S4 kontrolišu postavke sata. LED indikator pokazuje da se alarm ugasio. LED se može zamijeniti nekom vrstom zvučnog kruga. Otpornici R5 - R8 su pull-up i neophodni su za formiranje pravokutnih impulsa na terminalima čipa sata. Ovo je takođe neophodno za ispravan rad I2C protokola. Za napajanje kruga koristi se čip linearnog stabilizatora L7805; može se zamijeniti domaćim analogom pet-voltnog linearnog stabilizatora KR142EN5A, ili možete koristiti drugi čip stabilizatora napona u skladu s njegovom vezom u krugu (na primjer, LM317 ili prekidački stabilizatori LM2576, LM2596, MC34063 i tako dalje). Zatim, 5 volti stabilizira drugi mikro krug - AMS1117 u verziji koja daje izlaz od 3,3 volta. Čip sata, prema podacima, napaja se naponom od 3,3 volta. Međutim, maksimalni napon je 5,5 volti. Stoga se ovaj stabilizator može koristiti ili ne, prema vlastitom nahođenju. Stabilizator napona AMS1117 se također može zamijeniti ADJ verzijom (AMS1117ADJ) - odnosno podesivom verzijom, ovim izborom ćete morati podesiti potreban naponkoristeći dva otpornika spojena na mikrokolo u skladu sa njegovim podacima.

Kolo je sastavljeno i otklonjeno pomoću razvojne ploče za ATmega8 mikrokontroler:

Namjena dugmadi:

  • S1 - isključuje signal alarma, ili izlazi u glavni meni iz bilo kojeg menija podešavanja
  • S2- resetovanje mikrokontrolera
  • S3 - menja vreme ili datum u meniju podešavanja
  • S4 - uđite u meni podešavanja i skrolujte kroz meni

Pin od 32 kHz se može koristiti za kontrolu frekvencije kristala. Na ovaj pin povezujemo frekvencijski mjerač ili osciloskop i kontroliramo frekvenciju:

Kao što se može vidjeti sa snimka ekrana oscilograma, frekvencija približno odgovara 32,768 kHz (otprilike zbog ograničenja u rezoluciji mjerenja frekvencije, a teško je tako precizno odrediti "na oko").

Rezultat je bio sat sa sljedećim karakteristikama:

  • indikacija vremena
  • prikaz datuma
  • indikacija dana u sedmici
  • indikacija aktivnosti budilnika
  • 1 budilnik sa izlazom signala iz mikrokontrolera
  • indikacija temperature okoline (samo pozitivna temperatura je implementirana u softveru; negativna temperatura, mislim, nije od koristi za nas)
  • postavke alarma
  • podešavanja vremena
  • postavke datuma
  • LCD displej sa pozadinskim osvetljenjem
  • čuvanje postavki i nastavak rada sata kada je glavno napajanje isključeno

Hajde da sumiramo. DS3231 čip za sat realnog vremena je odlično rješenje. Preciznost je uporediva sa nekim DS1307 ili višim, ali PCA/PCF2129 se i dalje može takmičiti s njim. Među čipovima za sat realnog vremena koje sam pregledao, ovaj primjerak trenutno zauzima prvo mjesto u smislu funkcionalnosti i preciznosti.

Da biste programirali Atmega8 mikrokontroler, morate znati konfiguraciju bitova osigurača (snimak ekrana napravljen u programu):

Članak je popraćen firmverom za Atmega8 mikrokontroler, dizajnom kola u programu, kao i video zapisom rada sata (na samom početku alarm će se ugasiti - LED će se upaliti).

Spisak radioelemenata

Oznaka Tip Denominacija Količina BilješkaProdavnicaMoja beležnica
IC1 MK AVR 8-bit

ATmega8

1 U notes
IC2 Sat realnog vremena (RTC)

DS3231

1 U notes
VR1 Linearni regulator

L7805AB

1 U notes
VR2 Linearni regulator

AMS1117-3.3

1 U notes
VD1 Ispravljačka dioda

1N4148

1 U notes
C1 470 µF1 U notes
C2, C3, C5, C7 Kondenzator100 nF4 U notes
C4 Elektrolitički kondenzator220 µF1 U notes
C6, C8 Elektrolitički kondenzator10 µF2 U notes
R1 Otpornik

22 Ohm

1 U notes
R2 Trimer otpornik10 kOhm1 3296W-1-103LF

Mnogi uređaji zahtijevaju stalno snimanje hronometrijskih podataka (datum, vrijeme); ovu funkciju obavljaju posebna elektronska kola koja se nazivaju satovi realnog vremena. Trenutno je sat realnog vremena implementiran u obliku zasebnog mikrokruga, kojem trebate dodati kvarcni rezonator i autonomno napajanje. U nekim mikro krugovima unutra je ugrađen kvarcni rezonator. Jedan od ovih satova na čipu DS3231SN Kupio sam ga za svoj projekti . U primjeru ću povezati sat realnog vremena na kineski analog Arduino UNO.

Oni su kompletan ZS-042 modul koji se može povezati na različite uređaje, ne samo na Arduino platformu.


Modul je izgrađen na mikrokolu DS3231SN koji je u suštini sat realnog vremena. Za razliku od starog modela sata, na primjer na DS1307 čipu, ovaj sat sadrži interni kvarcni rezonator, zbog čega sat ima tačno vrijeme.

Možete implementirati sat na Arduino bez DS3231SN, ali tada ako se napajanje izgubi, vrijednosti tajmera se resetuju.Ovi isti satovi imaju rezervno napajanje, tako da ako struja nestane, oni nastavljaju da rade.

Sat može brojati sate, minute, sekunde, datume, mjesece, godine (u obzir se uzimaju prijestupne godine do 2100). Rade u 12 ili 24-satnom režimu rada, sadrže dva budilnika, a imaju i interni termometar sa rasponom od -40°C do +85°C. Za povezivanje sa različitim uređajima, sat je povezan preko I2C interfejs.


Lokacija i namjena pinova na modulu ZS-042:

S.Q.W.- Programabilni izlaz signala kvadratnog talasa.

SCLPreko ovog pina, podaci se razmjenjuju sa satom preko I2C interfejsa.

S.D.A.Podaci sa sata se prenose preko ovog pina.

VCCNapajanje za sat realnog vremena, potrebno 5 volti. Ako na ovaj pin nema napona, sat prelazi u stanje mirovanja.

GND- Zemlja.

Za povezivanje na Arduino UNO, Povezujemo SDA pin sata na pin A4, a SCL pin na A5. GND(-) i VCC(+5v) pinovi se koriste za napajanje.

SDA i SCL pinovi na različitim Arduino pločama:

S.D.A. SCL
UNO A4 A5
Mini A4 A5
Nano A4 A5
Mega2560 20 21
Leonardo 2 3

Ugradimo CR2032 bateriju u sat, takvi elementi se koriste za napajanje BIOS-a u računarima.

Kada spojite USB kabel na Arduino, LED na satu bi trebao zasvijetliti POWER"(crvena LED dioda).

Da biste programirali sat preko Arduino IDE, morate instalirati biblioteke.

Preuzmite biblioteku Vrijeme i DS1307RTC.

Poslednja biblioteka je napisana za sat na DS1307 čipu, ali njeni protokoli interakcije su kompatibilni sa DS3231, tako da će biblioteka odgovarati našem satu.

Biblioteke je potrebno preuzeti, raspakirati i staviti u folder "biblioteke" Prilikom pokretanja Arduino IDE, oni sa primjerima trebaju se pojaviti u " Uzorci».

Postavite datum i vrijeme.

Da biste to učinili, kopirajte ovaj kod u Arduino IDE.

Za ispravne postavke potrebno je promijeniti podatke u liniji

setTime(13,35,0,22,12,2016);



U zagradama, odvojenim zarezima, postavite ispravne: sati, minute, sekunde, dan, mjesec, godina. U mom primjeru, postavljeno je na 13 sati 35 minuta 0 sekundi, 22. decembra 2016. Prenesite skicu na Arduino.

Sada, da biste očitali očitanja sa sata, možete koristiti primjer: “ File» - « Uzorci» - « DS1307RTC» - « ReadTest" I iza prenesite ga na Arduino.

Prozor koji se otvori će prikazati trenutni datum i vrijeme. Ako isključite napajanje modula sata sa Arduina, Arduino neće moći pratiti vrijednosti i nakon nekog vremena će se pojaviti poruka " ...greška čitanja!"(označeno crvenom bojom). Nakon što se napajanje vrati, datum i vrijeme će nastaviti da odbrojavaju. Datum i vrijeme nisu poništeni jer je sat bio napajan pomoću CR2032 baterije.