极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: Ansifa

Arduino学习笔记A8 - Arduino 连接 DS1302时钟模块

  [复制链接]
发表于 2015-2-9 14:33:08 | 显示全部楼层
支持楼主啊
回复 支持 反对

使用道具 举报

发表于 2015-3-3 17:08:15 | 显示全部楼层
分与秒的显示是乱的,是芯片问题还是初始化问题
回复 支持 反对

使用道具 举报

发表于 2015-3-3 17:15:19 | 显示全部楼层
我用的这个芯片的模块,太诡异了,起初VCC接板子5V,显示乱跳,接收输入也偶尔不正解,换接板子上3.3V电源就正常了,资源上说宽电压2.5V-5.5V是骗人的?
回复 支持 反对

使用道具 举报

发表于 2015-3-26 10:37:11 | 显示全部楼层
为什么要阉割掉github上原作者源代码里对32byte RAM读写功能呢?
32字节空间再加上Arduino本身的EEPROM可算是锦上添花效果了
回复 支持 反对

使用道具 举报

发表于 2015-4-9 15:04:20 | 显示全部楼层
时间正常在走,但是通过串口设置时间没效果啊,有人和我遇到一样的问题吗?
回复 支持 反对

使用道具 举报

发表于 2015-4-10 08:48:03 | 显示全部楼层
flashria 发表于 2013-7-30 21:57
您好  我测试ds1302  也是这个问题 Saturday 2165-25-45 27:165:85  一直显示这个时间  请问您怎么解决的 ...

你的第一个问题解决:DS1302没有接上拉电阻,接好就可以了,第二个问题,是电源没的接好。
回复 支持 反对

使用道具 举报

发表于 2015-4-16 17:02:43 | 显示全部楼层
henhao ,very good
回复 支持 反对

使用道具 举报

发表于 2015-4-21 11:12:56 | 显示全部楼层
时钟模块显示的不是现在的时间是为什么啊
回复 支持 反对

使用道具 举报

发表于 2015-4-23 11:57:18 | 显示全部楼层
为什么我的会出现这样的情况。。。3.3V就正常,VCC1和VCC2不管哪个节电池,另一个接5V都是这样

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2015-4-23 16:04:47 | 显示全部楼层
肿么编译不过去呢
Arduino:1.5.5-r2 (Windows 7), 板:"Arduino Uno"

In file included from DS1302_Example.pde:8:
D:\Arduino\arduino_1.5.5\arduino-1.5.5-r2\libraries\DS1302/DS1302.h:31:22: error: WProgram.h: No such file or directory


回复 支持 反对

使用道具 举报

发表于 2015-5-17 10:23:20 | 显示全部楼层
哈哈......我做了个LCD时钟{:soso_e100:}带温度显示、星期显示。晒下代码:
  1. #include <Wire.h>
  2. #include <OneWire.h>
  3. #include <DallasTemperature.h>
  4. #include <LiquidCrystal_I2C.h>

  5. #include <stdio.h>
  6. #include <string.h>
  7. #include <DS1302.h>

  8. int Mode=0;
  9. int h = 0;
  10. int m = 0;
  11. int s = 0;
  12. int d = 12;
  13. int mo = 5;
  14. int y = 15;
  15. uint8_t CE_PIN   = 5;
  16. uint8_t IO_PIN   = 6;
  17. uint8_t SCLK_PIN = 7;
  18. float c = 0.00;
  19. String comdata = "";
  20. int numdata[7] ={0}, j = 0, mark = 0;
  21. char day[10];


  22. byte one[8] = {
  23.   B00000,
  24.   B00000,
  25.   B00000,
  26.   B11111,
  27.   B00000,
  28.   B00000,
  29.   B00000,
  30.   B00000,
  31. };

  32. byte two[8] = {
  33.   B00000,
  34.   B01110,
  35.   B00000,
  36.   B00000,
  37.   B00000,
  38.   B11111,
  39.   B00000,
  40.   B00000,
  41. };

  42. byte three [8] = {
  43.   B00000,
  44.   B01110,
  45.   B00000,
  46.   B01110,
  47.   B00000,
  48.   B11111,
  49.   B00000,
  50.   B00000,
  51. };

  52. byte four[8] = {
  53.   B00000,
  54.   B11111,
  55.   B10001,
  56.   B10101,
  57.   B11101,
  58.   B00001,
  59.   B01110,
  60.   B00000,
  61. };


  62. byte five [8] = {
  63.   B00000,
  64.   B11110,
  65.   B01000,
  66.   B11110,
  67.   B01010,
  68.   B01010,
  69.   B11111,
  70.   B00000,
  71. };

  72. byte six[8] = {
  73.   B00000,
  74.   B00100,
  75.   B00000,
  76.   B11111,
  77.   B00000,
  78.   B01010,
  79.   B10001,
  80.   B00000,
  81. };

  82. byte seven [8] = {
  83.   B11111,
  84.   B10001,
  85.   B10001,
  86.   B11111,
  87.   B10001,
  88.   B10001,
  89.   B11111,
  90.   B00000,
  91. };


  92. LiquidCrystal_I2C lcd(0x27, 16, 2);
  93. DS1302 rtc(CE_PIN, IO_PIN, SCLK_PIN);
  94. #define ONE_WIRE_BUS 2
  95. OneWire oneWire(ONE_WIRE_BUS);
  96. DallasTemperature sensors(&oneWire);



  97. void setup() {
  98.   sensors.begin();
  99.   lcd.init();
  100.   lcd.backlight();
  101.   lcd.createChar(0, one);
  102.   lcd.createChar(1, two);
  103.   lcd.createChar(2, three);
  104.   lcd.createChar(3, four);
  105.   lcd.createChar(4, five);
  106.   lcd.createChar(5, six);
  107.   lcd.createChar(6, seven);
  108.   lcd.home();
  109.   lcd.print("Welcome to use!");
  110.   delay(1000);
  111.   lcd.clear();
  112.   Serial.begin(9600);
  113.   Serial.println("Wait for set time");
  114.   rtc.write_protect(false);
  115.     rtc.halt(false);
  116. }


  117.   

  118. void Display(){
  119.   Time t = rtc.time();
  120.   memset(day, 0, sizeof(day));
  121.     switch (t.day)
  122.     {
  123.     case 1: lcd.setCursor(12,1); lcd.write((byte)0); break;
  124.     case 2: lcd.setCursor(12,1); lcd.write(1); break;
  125.     case 3: lcd.setCursor(12,1); lcd.write(2); break;
  126.     case 4: lcd.setCursor(12,1); lcd.write(3); break;
  127.     case 5: lcd.setCursor(12,1); lcd.write(4); break;
  128.     case 6: lcd.setCursor(12,1); lcd.write(5); break;
  129.     case 7: lcd.setCursor(12,1); lcd.write(6); break;
  130.     }
  131.   lcd.setCursor(0,0);
  132.   if(t.hr < 10)  lcd.print("0");
  133.   lcd.print(t.hr);
  134.   lcd.print(":");
  135.   if(t.min < 10)  lcd.print("0");
  136.   lcd.print(t.min);
  137.   lcd.print(":");
  138.   if(t.sec < 10)  lcd.print("0");
  139.   lcd.print(t.sec);
  140.   lcd.setCursor(0,1);
  141.   lcd.print(t.yr);
  142.   lcd.print("/");
  143.   if(t.mon < 10)  lcd.print("0");
  144.   lcd.print(t.mon);
  145.   lcd.print("/");
  146.   if(t.date < 10)  lcd.print("0");
  147.   lcd.print(t.date);
  148.   lcd.setCursor(9,0);
  149.   lcd.print(c);
  150.   lcd.write((char)223);
  151.   lcd.print("C");
  152.   lcd.print("     ");
  153. }


  154. void loop() {
  155.   sensors.requestTemperatures();
  156.   c = sensors.getTempCByIndex(12);
  157.   Display();
  158.   /* 当串口有数据的时候,将数据拼接到变量comdata */
  159.     while (Serial.available() > 0)
  160.     {
  161.         comdata += char(Serial.read());
  162.         delay(2);
  163.         mark = 1;
  164.     }
  165.     /* 以逗号分隔分解comdata的字符串,分解结果变成转换成数字到numdata[]数组 */
  166.     if(mark == 1)
  167.     {
  168.         Serial.print("You inputed : ");
  169.         Serial.println(comdata);
  170.         for(int i = 0; i < comdata.length() ; i++)
  171.         {
  172.             if(comdata[i] == ',' || comdata[i] == 0x10 || comdata[i] == 0x13)
  173.             {
  174.                 j++;
  175.             }
  176.             else
  177.             {
  178.                 numdata[j] = numdata[j] * 10 + (comdata[i] - '0');
  179.             }
  180.         }
  181.         /* 将转换好的numdata凑成时间格式,写入DS1302 */
  182.         Time t(numdata[0], numdata[1], numdata[2], numdata[3], numdata[4], numdata[5], numdata[6]);
  183.         rtc.time(t);
  184.         mark = 0;j=0;
  185.         /* 清空 comdata 变量,以便等待下一次输入 */
  186.         comdata = String("");
  187.         /* 清空 numdata */
  188.         for(int i = 0; i < 7 ; i++) numdata[i]=0;
  189.     }
  190. }
复制代码
注意,设置法有点不一样。如:2015年10月17日10时18分0秒星期天,
输入:2015,10,17,10,18,0,7即可。

用LCD1602不带I2C模块的,代码如下:
  1. #include <OneWire.h>
  2. #include <DallasTemperature.h>
  3. #include <LiquidCrystal.h>

  4. #include <stdio.h>
  5. #include <string.h>
  6. #include <DS1302.h>

  7. int Mode=0;
  8. int h = 0;
  9. int m = 0;
  10. int s = 0;
  11. int d = 12;
  12. int mo = 5;
  13. int y = 15;
  14. uint8_t CE_PIN   = 5;
  15. uint8_t IO_PIN   = 6;
  16. uint8_t SCLK_PIN = 7;
  17. float c = 0.00;
  18. String comdata = "";
  19. int numdata[7] ={0}, j = 0, mark = 0;
  20. char day[10];


  21. byte one[8] = {
  22.   B00000,
  23.   B00000,
  24.   B00000,
  25.   B11111,
  26.   B00000,
  27.   B00000,
  28.   B00000,
  29.   B00000,
  30. };

  31. byte two[8] = {
  32.   B00000,
  33.   B01110,
  34.   B00000,
  35.   B00000,
  36.   B00000,
  37.   B11111,
  38.   B00000,
  39.   B00000,
  40. };

  41. byte three [8] = {
  42.   B00000,
  43.   B01110,
  44.   B00000,
  45.   B01110,
  46.   B00000,
  47.   B11111,
  48.   B00000,
  49.   B00000,
  50. };

  51. byte four[8] = {
  52.   B00000,
  53.   B11111,
  54.   B10001,
  55.   B10101,
  56.   B11101,
  57.   B00001,
  58.   B01110,
  59.   B00000,
  60. };


  61. byte five [8] = {
  62.   B00000,
  63.   B11110,
  64.   B01000,
  65.   B11110,
  66.   B01010,
  67.   B01010,
  68.   B11111,
  69.   B00000,
  70. };

  71. byte six[8] = {
  72.   B00000,
  73.   B00100,
  74.   B00000,
  75.   B11111,
  76.   B00000,
  77.   B01010,
  78.   B10001,
  79.   B00000,
  80. };

  81. byte seven [8] = {
  82.   B11111,
  83.   B10001,
  84.   B10001,
  85.   B11111,
  86.   B10001,
  87.   B10001,
  88.   B11111,
  89.   B00000,
  90. };


  91. LiquidCrystal_I2C lcd(3,4,5,6,7,8);
  92. DS1302 rtc(CE_PIN, IO_PIN, SCLK_PIN);
  93. #define ONE_WIRE_BUS 2
  94. OneWire oneWire(ONE_WIRE_BUS);
  95. DallasTemperature sensors(&oneWire);



  96. void setup() {
  97.   sensors.begin();
  98.   lcd.init();
  99.   lcd.backlight();
  100.   lcd.createChar(0, one);
  101.   lcd.createChar(1, two);
  102.   lcd.createChar(2, three);
  103.   lcd.createChar(3, four);
  104.   lcd.createChar(4, five);
  105.   lcd.createChar(5, six);
  106.   lcd.createChar(6, seven);
  107.   lcd.home();
  108.   lcd.print("Welcome to use!");
  109.   delay(1000);
  110.   lcd.clear();
  111.   Serial.begin(9600);
  112.   Serial.println("Wait for set time");
  113.   rtc.write_protect(false);
  114.     rtc.halt(false);
  115. }


  116.   

  117. void Display(){
  118.   Time t = rtc.time();
  119.   memset(day, 0, sizeof(day));
  120.     switch (t.day)
  121.     {
  122.     case 1: lcd.setCursor(12,1); lcd.write((byte)0); break;
  123.     case 2: lcd.setCursor(12,1); lcd.write(1); break;
  124.     case 3: lcd.setCursor(12,1); lcd.write(2); break;
  125.     case 4: lcd.setCursor(12,1); lcd.write(3); break;
  126.     case 5: lcd.setCursor(12,1); lcd.write(4); break;
  127.     case 6: lcd.setCursor(12,1); lcd.write(5); break;
  128.     case 7: lcd.setCursor(12,1); lcd.write(6); break;
  129.     }
  130.   lcd.setCursor(0,0);
  131.   if(t.hr < 10)  lcd.print("0");
  132.   lcd.print(t.hr);
  133.   lcd.print(":");
  134.   if(t.min < 10)  lcd.print("0");
  135.   lcd.print(t.min);
  136.   lcd.print(":");
  137.   if(t.sec < 10)  lcd.print("0");
  138.   lcd.print(t.sec);
  139.   lcd.setCursor(0,1);
  140.   lcd.print(t.yr);
  141.   lcd.print("/");
  142.   if(t.mon < 10)  lcd.print("0");
  143.   lcd.print(t.mon);
  144.   lcd.print("/");
  145.   if(t.date < 10)  lcd.print("0");
  146.   lcd.print(t.date);
  147.   lcd.setCursor(9,0);
  148.   lcd.print(c);
  149.   lcd.write((char)223);
  150.   lcd.print("C");
  151.   lcd.print("     ");
  152. }


  153. void loop() {
  154.   sensors.requestTemperatures();
  155.   c = sensors.getTempCByIndex(12);
  156.   Display();
  157.   /* 当串口有数据的时候,将数据拼接到变量comdata */
  158.     while (Serial.available() > 0)
  159.     {
  160.         comdata += char(Serial.read());
  161.         delay(2);
  162.         mark = 1;
  163.     }
  164.     /* 以逗号分隔分解comdata的字符串,分解结果变成转换成数字到numdata[]数组 */
  165.     if(mark == 1)
  166.     {
  167.         Serial.print("You inputed : ");
  168.         Serial.println(comdata);
  169.         for(int i = 0; i < comdata.length() ; i++)
  170.         {
  171.             if(comdata[i] == ',' || comdata[i] == 0x10 || comdata[i] == 0x13)
  172.             {
  173.                 j++;
  174.             }
  175.             else
  176.             {
  177.                 numdata[j] = numdata[j] * 10 + (comdata[i] - '0');
  178.             }
  179.         }
  180.         /* 将转换好的numdata凑成时间格式,写入DS1302 */
  181.         Time t(numdata[0], numdata[1], numdata[2], numdata[3], numdata[4], numdata[5], numdata[6]);
  182.         rtc.time(t);
  183.         mark = 0;j=0;
  184.         /* 清空 comdata 变量,以便等待下一次输入 */
  185.         comdata = String("");
  186.         /* 清空 numdata */
  187.         for(int i = 0; i < 7 ; i++) numdata[i]=0;
  188.     }
  189. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2015-5-17 10:37:54 | 显示全部楼层
哈哈......我做了个LCD时钟带温度显示、星期显示......

注意,三个库忘记贴上去了,补一下:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2015-5-18 14:08:34 | 显示全部楼层
我今天尝试了一下,什么都正常,不过最后需要加个逗号,日期始终不对,输入18号,显示是10号
回复 支持 反对

使用道具 举报

发表于 2015-5-18 14:13:45 | 显示全部楼层
我去
接到3.3V一切正常了,这种小电流直接接板子的3.3V就OK了
回复 支持 反对

使用道具 举报

发表于 2015-6-7 15:26:04 | 显示全部楼层
非常感谢!!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-28 04:19 , Processed in 0.049357 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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