DS1302应用电路

应用电路一:

DS1302的电路一个重点就是时钟电路,它所使用的晶振是一个32.768k的晶振,晶振外部也不需要额外添加其他的电容或者电阻电路了。时钟的精度,首先取决于晶振的精度以及晶振的引脚负载电容。如果晶振不准或者负载电容过大过小,都会导致时钟误差过大。在这一切都搞定后,最终一个考虑因素是晶振的温漂。随着温度的变化,晶振往往精度会发生变化,因此,在实际的系统中,其中一种方法就是经常校对。比如我们所用的电脑的时钟,通常我们会设置一个选项“将计算机设置于internet时间同步”。选中这个选项后,一般可以过一段时间,我们的计算机就会和internet时间校准同步一次。

应用电路二:

1脚VCC2是主电源正极的引脚,2脚X1和3脚X2是晶振输入和输出引脚,4脚GND是负极,5脚CE是使能引脚,接单片机的IO口,6脚I/O是数据传输引脚,接单片机的IO口,7脚SCLK是通信时钟引脚,接单片机的IO口,8脚VCC1是备用电源引脚。考虑到KST-51开发板是一套以学习为目的的板子,加上备用电池对航空运输和携带不方便,所以8脚没有接备用电池,而是接了一个10uF的电容,这个电容就相当于一个电量很小的电池,经过试验测量得出其可以在系统掉电后仍维持DS1302运行1分钟左右,如果大家想运行时间再长,可以加大电容的容量或者换成备用电池,如果掉电后不需要它再维持运行,也可以干脆悬空,如图15-7和图15-8所示。

涓流充电功能,基本也用不到,因为实际应用中很少会选择可充电电池作为备用电源,成本太高,本课程也不讲了,大家作为选学即可。我们使用的时候直接用5V电源接一个二极管,在主电源上电的情况下给电容充电,在主电源掉电的情况下,二极管可以防止电容向主电路放电,而仅用来维持DS1302的供电,这种电路的最大用处是在电池供电系统中更换主电池的时候保持实时时钟的运行不中断,1分钟的时间对于更换电池足够了。此外,通过我们的使用经验,在DS1302的主电源引脚串联一个1K电阻可以有效的防止电源对DS1302的冲击,R6就是这个电阻,而R9、R26、R32都是上拉电阻。

DS1302写入时序

通过命令的方式写入年月日时分秒信息。 命令格式为2字节。 第一字节为地址,第二字节为内容。

写入逻辑:

1 将RST先拉低

2 将SCLK拉低(如果不拉低,且本来是高电平,则瞬间就发出了一个bit,我们还没放数据呢)

3 再RST拉高。。 形成一个上升沿

4 在IO口放入一个bit(字节发送顺序,从低位到高位)

5 设SCLK为高电平,形成上升沿,这时候DS1302就会读取IO口的数据存入它的寄存器。

6 拉低SCLK,为下一个字节做准备。,跳转到5 ,直到发送完所有的16个字节

7 拉低RST,整个写入过程完成。

DS1302命令格式

虽然命令字节看起来很复杂,但编写程序很简单,比如你要设置秒为13秒。那么发送的两个字节的数据应该是什么?第一个字节是0x80(写入秒的命令,见上图)。第二个数据,第四位为3,高四位为1。就是(1<<4)|3,为0x13

其他的年月日类似。比较特殊的几个位说一下。

(1)如果想让表停下来

发送一个设置秒的命令,第二个字节最高位置为1,即,发送0x800x80即可。

(2)小时的第二个字节的最高位控制着12还是24进制

Arduino控制DS1302连线

Arduino控制DS1302程序

/* * 读写DS1302 时钟芯片

* @author Yangtf

* 很棒的文档 http://www.21ic.com/jichuzhishi/datasheet/DS1302/data/185858.html

* 时序图 http://www.21ic.com/d/file/201307/0a93263a0126e1580cc71c89dce1fda9.jpg

*

*/

#define RST 7

#define SCLK 6

#define IO 5

//#define L(item) digitalWrite((item),LOW)

//#define H(item) digitalWrite((item),HIGH)

#define uchar unsigned char

void setup() {

pinMode(RST,OUTPUT);

pinMode(SCLK,OUTPUT);

pinMode(IO,OUTPUT);

Serial.begin(9600);

attachInterrupt(0, settm, FALLING );

}

void writeData(unsigned char addr,unsigned char dat)

{

pinMode(IO,OUTPUT);

digitalWrite(RST,LOW); //下拉低,再拉高

digitalWrite(SCLK,LOW) ; //SCLK的上升沿, 芯片会读取IO端口 d

elayMicroseconds(1);

digitalWrite(RST,HIGH);

int i;

for(i =0;i《8;i++)

{

digitalWrite(SCLK,LOW);

digitalWrite(IO, addr&1);

addr =addr》》1;

digitalWrite(SCLK,HIGH);

delayMicroseconds(1);

}

for(i =0;i《8;i++){

digitalWrite(SCLK,LOW);

digitalWrite(IO, dat&1);

dat =dat》》1;

digitalWrite(SCLK,HIGH);

delayMicroseconds(1);

}

digitalWrite(RST,LOW);

}

uchar readData(uchar addr){

addr = addr | 1; //读操作最低位置为1

pinMode(IO,OUTPUT);

digitalWrite(RST,LOW); //下拉低,再拉高

digitalWrite(SCLK,LOW) ; //SCLK的上升沿, 芯片会读取IO端口

delayMicroseconds(1);

digitalWrite(RST,HIGH);

int i;

for(i =0;i《8;i++){

digitalWrite(SCLK,LOW);

digitalWrite(IO, addr&1);

addr =addr》》1;

digitalWrite(SCLK,HIGH);

delayMicroseconds(1);

}

pinMode(IO,INPUT);

int dat = 0;

for(i =0;i《8;i++){

digitalWrite(SCLK,LOW);

delayMicroseconds(10);

uchar b = digitalRead(IO);

dat = dat 》》1; //先向右平移

dat = dat | (b《《7); //将所得放入最高位

digitalWrite(SCLK,HIGH);

delayMicroseconds(1);

}

digitalWrite(RST,LOW);

return dat ;

}

#define SECOND 0x80

#define MIN 0x82

#define HOUR 0x84

#define DAY 0x86

#define MONTH 0x88

#define YEAR 0x8C

#define WEEK 0x8A

void writeTImeUnit(

uchar TYPE,uchar data){

uchar high = data / 10;

uchar low = data % 10;

uchar d = ((data /10) 《《 4) | (data % 10);

writeData(TYPE,data);

}

uchar readTImeUnit(uchar TYPE){

uchar r = readData(TYPE);

r = 10*(r 》》 4)+ (r & 0xf);

return r;

}

void writeAllTm(uchar tm[]){

uchar s = SECOND;

for(uchar i=0;i《5;i++){

writeTImeUnit(s,tm[5-i]);

s+=2; } writeTImeUnit(YEAR,tm[0]);

} void readAllTm(uchar tm[]){

uchar s = SECOND;

for(uchar i=0;i《5;i++){

tm[5-i] = readTimeUnit(s);

s+=2;

}

tm[0] = readTimeUnit(YEAR);

tm[6] = readTimeUnit(WEEK);

}

void printTm(uchar tm[]){

Serial.print(tm[0]);

Serial.print(“-”);

Serial.print(tm[1]);

Serial.print(“-”);

Serial.print(tm[2]);

Serial.print(“ ”);

Serial.print(tm[3]);

Serial.print(“:”);

Serial.print(tm[4]);

Serial.print(“:”);

Serial.print(tm[5]);

Serial.print(“ week ”);

Serial.print(tm[6]);

Serial.println();

}

uchar st = 0;

void loop() {

uchar tm[7] = {0};

readAllTm(tm);

printTm(tm);

delay(1000);

}

void settm()//中断函数

{

uchar tm[] = {11,12,13,4,5,6 ,0}; // 2011-12-22 3:4:1

Serial.println(“set tm 。。.”);

writeAllTm(tm);

}

ds1302模块 树莓派_Arduino控制DS1302时钟芯片(ds1302引脚图及功能和应用电路)相关推荐

  1. 事无巨细,时钟芯片DS1302

    第13/15原创:事无巨细,时钟芯片DS1302 原文地址:: http://bbs.eeworld.com.cn/thread-99612-1-1.html 事无巨细,时钟芯片DS1302 我们继续 ...

  2. 电脑罗盘时钟代码_轻松吃透实时时钟芯片DS1302软硬件设计

    今天我们来讨论一款老掉牙的实时时钟芯片DS1302.什么是实时时钟(RealTime Clock, RTC)呢?为什么我们需要它呢?假设你使用单片机实现万年历应用,一般的做法是这样的:设置中断后判断1 ...

  3. 单片机外设系列之一时钟芯片DS1302

    标题 单片机外设之一(时钟芯片DS1302) 何为DS1302? DS1302是由美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟芯片.它可以对年.月.日.周.时.分.秒进行计时,且具有 ...

  4. 基于STM32F1的时钟芯片DS1302驱动

    目录 DS1302.h源代码 DS1302.c源代码 DS1302.h源代码 /************************************************************ ...

  5. 74ls161中rco是什么_芯片74ls160十进制计数器引脚图及功能_真值表_设计进制计数器方法...

    芯片74ls160十进制计数器中文资料 本文将为大家详细介绍芯片74ls160十进制计数器的中文资料信息,包括74ls160引脚图及功能.真值表.功能表.及设计24进制计数器等.希望能帮助大家更好认识 ...

  6. 如何认识网络变压器芯片引脚图及网络变压器外围BOB-SMITH电路

    华强盛电子导读:如何认识网络变压器芯片引脚图及网络变压器外围BOB-SMITH电路 下图,是一副典型的百兆网络变压器芯片引脚图,图左是RJ45网口,图右连接到PHY驱动芯片,我们要认识并理解到本副百兆 ...

  7. ds1302模块 树莓派_(16)给树莓派B+ 安装一个实时时钟芯片DS1302

    在这里首先感谢glgoo在google被墙的情况下提供搜索功能,还要感谢 http://wiringpi.com/ 以及github,尽管自己眼瞎,几经波折还是发现了尘封已久的少林"七十二绝 ...

  8. STM32使用库函数控制时钟芯片DS1302提供时间

    DS1302简介 DS1302是由美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟芯片.它可以对年.月.日.周.时.分.秒进行计时,并且具有闰年补偿等多种功能: 每天的天数和闰年的天数可 ...

  9. 51单片机15单片机 时钟芯片DS1302

    目录 前言 一.DS18B20芯片介绍 二.芯片引脚定义与应用电路 三.寄存器定义 四.命令字 五.数据流 六.时序图与数据读写 6.1 单字节写(Write) 6.2 单字节读(Read) 6.3 ...

最新文章

  1. php字符串数组访问,php – 按字符串键x访问数组,其中x是“123”
  2. 关于 ESP,EBP,EIP
  3. u-boot-2012.07 for FL2440
  4. 完善Library的管理方式
  5. 分布式部署携程Apollo构建配置中心
  6. Visual studio代码行数统计
  7. oracle rac alter日志,ORACLE 11G RAC 增加日志组及增大日志文件
  8. vue 父传子_Vue.js教程Vue基本指令
  9. bangteng文件夹各种方式尝试后删除不了的解决办法
  10. (转载)委托与函数指针辨析
  11. json and .net
  12. C#导入导出Excele数据
  13. 数据库版本管理工具Flyway应用
  14. Ms08067 de 阿青姐姐告诉你为什么要学Python内网开发,不看是你的损失!
  15. 赵小楼《天道》《遥远的救世主》深度解析(6)为什么肖亚文说丁元英是魔是鬼都可以,就是不是人?
  16. Myeclipse提示MyEclipse Trial Expired
  17. mysql notifier什么_MySQLNotifier这个东西有什么作用?
  18. free -m 命令详解
  19. 看着窗户外行走的路人,始终看不见你
  20. HBS服务器什么样装系统,GitHub - unclay/hbs-test: hbs入门测试

热门文章

  1. 平板上pyto软件_在安卓平板上利用随航功能——Twomon SE
  2. DALSA Xtium系列MX4采集卡和AVAL GLOBAL APX-3324A采集卡参数对比
  3. 什么样的PDF转换成PPT转换器比较好
  4. 5款提高工作效率的无广告软件
  5. 安装Mcafee EASI需要启用8.3 Naming Convention的解决办法
  6. cocos2dx 4.0入门之泡泡龙项目的分解(二)
  7. 【算法----->Locker Doors】
  8. JAVA程序设计:祖玛游戏(LeetCode:488)
  9. GET 和 POST安全性比较与讨论
  10. 2022届考研-机械工程专硕择校信息汇总(西安交大、西北工大、西安电子科技大、浙江工大、南京理工)