Prispevki
Modul realnega časa DS3234
Uvod
Modul visokoprecizne realnega časa DS3234 je nizkocenovni, izjemno natančni realni časovni ura (RTC) s SPI™ vodilom, ki vključuje temperaturno kompenziran kristalni oscilator (TCXO) in kristal.
DS3234 vključuje natančen, temperaturno-kompenziran napetostni referenčni in komparatorni vezje za spremljanje VCC. Naprava se preklopi na vhod za rezervno napajanje in ohranja natančen čas, ko je glavno napajanje za napravo prekinjeno.
Vgradnja kristalnega resonatorja izboljšuje dolgoročno natančnost naprave in zmanjšuje število sestavnih delov na proizvodni liniji. DS3234 je na voljo v komercialnih in industrijskih temperaturnih razponih ter je na voljo v industrijsko-standardnem 300-milimetrskem 20-pin SO ohišju.
Specifikacije
- Natančnost ±2ppm od 0°C do +40°C
- Natančnost ±3,5ppm od -40°C do +85°C
- Vhod za baterijsko vzdrževanje kontinuiranega časovnega merjenja
- Območje delovne temperature: 0°C to +70°C
- Nizka poraba energije
- Realni časovni ura šteje sekunde, minute, ure, dan, datum, mesec in leto z obveznim izračunom prestopnega leta. Veljavnost kompenzacije do leta 2099
- Dve časovni budilki
- Programabilni izhod kvadratnega signala
- Digitalni izhod senzorja temperature: natančnost ±3°C
- 300-milimetrsko 20-pin SO ohišje
- Priznanje Underwriters Laboratories
Programska koda
#include
const int cs=8; //chip select
void setup() {
Serial.begin(9600);
RTC_init();
//day(1-31), month(1-12), year(0-99), hour(0-23), minute(0-59), second(0-59)
SetTimeDate(16,5,2,14,15,16);
}
void loop() {
Serial.println(ReadTimeDate());
delay(1000);
}
//=====================================
int RTC_init(){
pinMode(cs,OUTPUT); // chip select
// start the SPI library:
SPI.begin();
SPI.setBitOrder(MSBFIRST);
SPI.setDataMode(SPI_MODE3); // both mode 1 & 3
//set control register
digitalWrite(cs, LOW);
SPI.transfer(0x8E);
SPI.transfer(0x60); //60= disable Osciallator and Battery
digitalWrite(cs, HIGH);
delay(10);
}
//=====================================
int SetTimeDate(int d, int mo, int y, int h, int mi, int s){
int TimeDate [7]={s,mi,h,0,d,mo,y};
for(int i=0; i<=6;i++){
if(i==3)
i++;
int b= TimeDate[i]/10;
int a= TimeDate[i]-b*10;
if(i==2){
if (b==2)
b=B00000010;
else if (b==1)
b=B00000001;
}
TimeDate[i]= a+(b<<4);
digitalWrite(cs, LOW);
SPI.transfer(i+0x80);
SPI.transfer(TimeDate[i]);
digitalWrite(cs, HIGH);
}
}
//=====================================
String ReadTimeDate(){
String temp;
int TimeDate [7]; //second,minute,hour,null,day,month,year
for(int i=0; i>4; //24 hour mode
if(b==B00000010)
b=20;
else if(b==B00000001)
b=10;
TimeDate[i]=a+b;
}
else if(i==4){
int b=(n & B00110000)>>4;
TimeDate[i]=a+b*10;
}
else if(i==5){
int b=(n & B00010000)>>4;
TimeDate[i]=a+b*10;
}
else if(i==6){
int b=(n & B11110000)>>4;
TimeDate[i]=a+b*10;
}
else{
int b=(n & B01110000)>>4;
TimeDate[i]=a+b*10;
}
}
temp.concat(TimeDate[4]);
temp.concat("/") ;
temp.concat(TimeDate[5]);
temp.concat("/") ;
temp.concat(TimeDate[6]);
temp.concat(" ") ;
temp.concat(TimeDate[2]);
temp.concat(":") ;
temp.concat(TimeDate[1]);
temp.concat(":") ;
temp.concat(TimeDate[0]);
return(temp);
}
Rezultat
Odprite serijski monitor, kjer boste lahko videli prikaz časa, kot je prikazano spodaj:
Viri
Koda in knjižnice: https://fs.keyestudio.com/KS0166