arduino与ds3234芯片制作时钟-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6493|回复: 3

arduino与ds3234芯片制作时钟

[复制链接]
发表于 2013-1-18 00:11 | 显示全部楼层 |阅读模式
本帖最后由 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双向总线串行传输。我的接线图
E41DAFFB-758B-4BE4-A15C-11EBB1AE54FA.png
官方线路
C73A7932-B9E9-4FC6-96B9-AEE3B6340B6B.png

[mw_shl_code=c,true]#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/10;
      int a=TimeDate-b*10;
      if(i==2){
        if(b==2)
          b=B00000010;
         else if(b==1)
           b=B00000001;
      }
     TimeDate=a+(b<<4);
     digitalWrite(cs, LOW);
     SPI.transfer(i+0x80);
     SPI.transfer(TimeDate);
     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=a+b;
}
    else if(i==4){
      int b=(n & B00110000)>>4;
      TimeDate=a+b*10;
    }
    else if(i==5){
      int b=(n & B00010000)>>4;
      TimeDate=a+b*10;
    }
    else if(i==6){
      int b=(n & B11110000)>>4;
       TimeDate=a+b*10;
     }
    else{
    int b=(n & B01110000)>>4;
    TimeDate=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);
}[/mw_shl_code]
发表于 2013-1-18 09:20 | 显示全部楼层
你的晶振呢????
 楼主| 发表于 2013-1-18 09:32 | 显示全部楼层
Randy 发表于 2013-1-18 09:20
你的晶振呢????

这个芯片 内置晶振吧
发表于 2013-1-24 06:13 | 显示全部楼层
求问,arduino必须要外置这类设备才能 做这种 时钟吗?

一般的单片机都有SFR,配合外部的晶振,应该可以写写代码就能实现时钟的功能吧?   求高手解答。。。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-12-27 23:55 , Processed in 0.096734 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表