|
本帖最后由 flashria 于 2013-1-18 22:36 编辑
这本来是提问贴,因为我第一次焊贴片的芯片 焊的时间长了些第一块芯片搞坏了 我重新焊了块 没问题了 所以该成教程贴 供大家参考把。
概述
DS3234是一款低成本、超高精度、采用SPI™总线的实时时钟(RTC),集成了温度补偿晶体振荡器(TCXO)和晶体。DS3234内置经过温度补偿的精密电压基准和比较器电路用来监视VCC。当VCC跌落至低于电源失效电压(VPF)时,器件产生/RST输出;当VCC跌落至同时低于VPF和VBAT时,器件将禁止读/写访问。器件还对/RST引脚进行监视,可作为按钮输入以产生μP复位。当器件的主电源中断时,器件切换至备用电源输入以保持精确的计时。集成的晶体谐振器增强了器件的长期精度同时减少了生产线上的零件数量。DS3234提供商业级和工业级温度范围,并采用工业标准300mil、20引脚SO封装。
DS3234还集成了采用电池备份的256字节SRAM。当主电源掉电时,通过连接至VBAT引脚的电源,内存上的内容得以保持。RTC可以计数秒、分、时、星期、日期、月份和年份信息。对于少于31天的月份,器件能够在月末自动调整日期,同时带有闰年修正功能。该时钟可以工作在24小时或带/AM/PM指示的12小时制式。器件提供每天两个可编程定时闹钟和一路可编程方波输出。地址和数据通过SPI双向总线串行传输。
我的接线图
官方线路
代码 - #include <SPI.h>
- const int cs=8; //chip select
- void setup(){
- Serial.begin(9600);
- RTC_init();
- SetTimeDate(05,10,12,14,15,16);
- }
- void loop(){
- Serial.println(ReadTimeDate());
- }
- int RTC_init(){
- pinMode(cs,OUTPUT);
- SPI.begin();
- SPI.setBitOrder(MSBFIRST);
- SPI.setDataMode(SPI_MODE3);
- digitalWrite(cs,LOW);
- SPI.transfer(0x8E);
- SPI.transfer(0x60);
- 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];
- for(int i=0; i<=6;i++){
- if(i==3)
- i++;
- digitalWrite(cs, LOW);
- SPI.transfer(i+0x00);
- unsigned int n = SPI.transfer(0x00);
- digitalWrite(cs, HIGH);
- int a=n & B00001111;
- if(i==2){
- int b=(n & B00110000)>>4; //24 hour mode if(b==B00000010)
- 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);
- }
复制代码 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|