zoukankan      html  css  js  c++  java
  • 「雕爷学编程」Arduino动手做(29)——DS1302时钟模块

    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试做实验,不管成功与否,都会记录下来---小小的进步或是搞不定的问题,希望能够抛砖引玉。 

    【Arduino】108种传感器模块系列实验(资料+代码+图形+仿真)

    实验二十九:DS1302实时时钟模块(带电池CR2032 掉电走时)

    DS1302 是DALLAS 公司推出的涓流充电时钟芯片,内含有一个实时时钟/日历和31 字节静态RAM ,通过简单的串行接口与单片机进行通信。实时时钟/日历电路提供秒、分、时、日、周、月、年的信息,每月的天数和闰年的天数可自动调整。时钟操作可通过AM/PM 指示决定采用24 或12 小时格式。DS1302 与单片机之间能简单地采用同步串行的方式进行通信,仅需用到三个口线:(1)RST 复位(2)I/O 数据线(3)SCLK串行时钟。时钟/RAM 的读/写数据以一个字节或多达31 个字节的字符组方式通信。DS1302 工作时功耗很低保持数据和时钟信息时功率小于1mW。

    DS1302的内部结构

    DS1302管脚描述
    X1 X2 32.768KHz 晶振管脚
    GND 地
    RST 复位脚
    I/O 数据输入/输出引脚
    SCLK 串行时钟
    Vcc1,Vcc2 电源供电管脚

    DS1302主要性能指标:
    ★ 实时时钟具有能计算2100 年之前的秒、分、时、日、星期、月、年的能力,还有闰年调整的能力
    ★ 31 8 位暂存数据存储RAM
    ★ 串行 I/O 口方式使得管脚数量最少
    ★ 宽范围工作电压2.0 5.5V
    ★ 工作电流 2.0V 时,小于300nA
    ★ 读/写时钟或RAM 数据时有两种传送方式单字节传送和多字节传送字符组方式
    ★ 8 脚DIP 封装或可选的8 脚SOIC 封装根据表面装配
    ★ 简单 3 线接口
    ★ 与 TTL 兼容Vcc=5V
    ★ 可选工业级温度范围-40 +85
    ★ 双电源管用于主电源和备份电源供应

    很多DS1302 存在时钟精度不高,是因为选用的晶振易受环境影响,出现时钟混乱等缺点。DS1302可以用于数据记录,特别是对某些具有特殊意义的数据点的记录,能实现数据与出现该数据的时间同时记录。这种记录对长时间的连续测控系统结果的分析及对异常数据出现的原因的查找具有重要意义。传统的数据记录方式是隔时采样或定时采样,没有具体的时间记录,因此,只能记录数据而无法准确记录其出现的时间;若采用单片机计时,一方面需要采用计数器,占用硬件资源,另一方面需要设置中断、查询等,同样耗费单片机的资源,而且,某些测控系统可能不允许。但是,如果在系统中采用时钟芯片DS1302,则能很好地解决这个问题。

    DS1302实时时钟模块

    模块参数
    1.PCB为单面板,尺寸:44mm*23mm*1.6mm
    2.带4个定位孔,直径3.1mm
    3.备用电池为正品天球CR2032,电压3V,电流260mAh,非可充电电池。理论数据保持时间大于10年!
    4.晶振32.768KHz,日本原装进口晶振,匹配电容为6pF,尺寸2*6mm
    5.DS1302为8脚直插国产大芯片,芯片下面有IC座,方便更换及插拔芯片
    6.模块工作电压兼容3.3V/5V,可与5V及3.3V单片机连接
    7.工作温度:0°---70°

    模块电原理图

    接线方法(以提供的程序为准,可以接任意IO口,在程序中修改端口定义即可):
    VCC→+5V/3.3V
    GND→GND
    CLK →7
    DAT→6
    RST →5

    /*
    
    【Arduino】108种传感器模块系列实验(资料+代码+图形+仿真)
    
    实验二十九:DS1302实时时钟模块(带电池CR2032 掉电走时)
    
    */
    
    #include <DS1302.h>
    
    DS1302 rtc(5, 6, 7);
    
    void setup()
    
    {
    
     rtc.halt(false);
    
     rtc.writeProtect(false);
    
     Serial.begin(9600);
    
     rtc.setDOW(FRIDAY);    
    
     rtc.setTime(20, 49, 0);   
    
     rtc.setDate(19, 6, 2019); 
    
    }
    
    void loop()
    
    {
    
     Serial.print(rtc.getDOWStr());
    
     Serial.print(" ");
    
     Serial.print(rtc.getDateStr());
    
     Serial.print(" -- ");
    
     Serial.println(rtc.getTimeStr());
    
     delay (1000);
    
    }
    

      

  • 相关阅读:
    LeetCode——打家劫舍问题
    LeetCode——无重叠区间
    LeetCode——岛屿数量
    LeetCode——石子游戏
    LeetCode——最长回文子序列
    LeetCode——高层扔鸡蛋*
    LeetCode——零钱兑换
    LeetCode刷题之BFS和DFS
    没有学历,四步加入谷歌
    坚持编程
  • 原文地址:https://www.cnblogs.com/eagler8/p/11522799.html
Copyright © 2011-2022 走看看