极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: Ansifa

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

  [复制链接]
发表于 2012-1-1 12:08:54 | 显示全部楼层
悠然小调 发表于 2011-11-18 18:30
1302似乎很挑晶振,我买了2种32.768K的 晶振,一种不能起振,只有6PF的那种才能用。

DS1302时钟的产生基于外接的晶体振荡器,振荡器的频率为32768Hz。该晶振通过引脚X1、X2直接连接至DS1302,即DS1302是依靠外部晶振与其内部的电容配合来产生时钟脉冲的。由于DS1302在芯片本身已经集成了6pF的电容,所以,为了获得稳定可靠的时钟,必须选用具有6pF负载电容的晶振。
回复 支持 反对

使用道具 举报

发表于 2012-1-1 12:45:48 | 显示全部楼层
刚知道,我买的俩也不是跟6pf匹配的
回复 支持 反对

使用道具 举报

发表于 2012-1-1 14:56:04 | 显示全部楼层
Ansifa 发表于 2011-11-22 20:48
有空补全一个,哈哈。。

想弱弱地问下高手,您什么时候有空呀?哈哈。
回复 支持 反对

使用道具 举报

发表于 2012-1-6 01:12:50 | 显示全部楼层
Sunday 2000-01-01 00:11:37
Sunday 2000-01-01 00:11:38
Sunday 2000-01-01 00:11:40
Sunday 2000-01-01 00:11:41

中间有跳跃的,比如上面39秒就没有,这个是什么原因?焊接时烫坏了?
回复 支持 反对

使用道具 举报

发表于 2012-1-6 16:31:56 | 显示全部楼层
ardyPro 发表于 2012-1-6 01:12
Sunday 2000-01-01 00:11:37
Sunday 2000-01-01 00:11:38
Sunday 2000-01-01 00:11:40

换一个时钟芯片看看,因为现在1302芯片基本上都是假的,正品要10多块一片。假货里也分好坏。。。只能赌运气。
回复 支持 反对

使用道具 举报

发表于 2012-2-24 21:48:01 | 显示全部楼层
期待~~~~~~
回复 支持 反对

使用道具 举报

发表于 2012-2-25 01:21:46 | 显示全部楼层
xlsss 发表于 2012-2-24 21:48
期待~~~~~~

楼上213   
回复 支持 反对

使用道具 举报

发表于 2012-3-21 16:41:51 | 显示全部楼层
我用 arduino0018的IDE编写会显示“String does not name a type”换到0023里就正常了,但是0023里面不能添加中文。
回复 支持 反对

使用道具 举报

发表于 2012-3-21 17:18:09 | 显示全部楼层
赫赫 发表于 2012-3-21 16:41
我用 arduino0018的IDE编写会显示“String does not name a type”换到0023里就正常了,但是0023里面不能添 ...

是滴,0018那时不支持String~~可以外面写好程序,复制到0023里面编译。
回复 支持 反对

使用道具 举报

发表于 2012-3-22 09:10:38 | 显示全部楼层
弘毅 发表于 2012-3-21 17:18
是滴,0018那时不支持String~~可以外面写好程序,复制到0023里面编译。

谢谢 弘毅 大哥。今天着手做个试试,家里有块以前做的数码管板子。
回复 支持 反对

使用道具 举报

发表于 2012-3-22 16:07:07 | 显示全部楼层
程序中午抽空已经写完先发个图给大家欣赏一下 再次谢谢 弘毅 大哥给的库  晚些时候整理一下吧程序和图纸发上来。http://hiphotos.baidu.com/herohe ... 2119313b17e891b.jpg
回复 支持 反对

使用道具 举报

发表于 2012-3-22 16:11:57 | 显示全部楼层
直接发代码好了,硬件连接已经写在里面了数码管是用595驱动的6级串联。
  1. /*Arduino 连接 DS1302
  2. 代码来源:http://quadpoint.org/projects/arduino-ds1302
  3. 增加了串口调整时间代码*/
  4. #include <stdio.h>
  5. #include <string.h>
  6. #include <DS1302.h>
  7. /* 接口定义
  8. CE(DS1302 pin5) -> Arduino D5
  9. IO(DS1302 pin6) -> Arduino D6
  10. SCLK(DS1302 pin7) -> Arduino D7*/
  11. uint8_t CE_PIN   = 5;
  12. uint8_t IO_PIN   = 6;
  13. uint8_t SCLK_PIN = 7;
  14. /**************************************************************
  15. GND(pin 8) to ground,
  16. VCC(pin 16) to 5V
  17. OE (pin 13) to ground
  18. MR (pin 10) to 5V
  19. latchPin = 13; to 595 pin 12
  20. clockPin = 12; to 595 pin 11
  21. dataPin = 11;  to 595 pin 14
  22. ****************************************************************/
  23. char latchPin = 13;//Pin connected to ST_CP of 74HC595
  24. char clockPin = 12;//Pin connected to SH_CP of 74HC595
  25. char dataPin = 11;//Pin connected to DS of 74HC595
  26. int FIR,SEC,THI,FOR,FIF,SIX;
  27. ///////////////////0////1///2////3/////4////5////6/////7////8///9////
  28. byte segcode[10]={0X40,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X00,0X10};
  29. /* 日期变量缓存 */
  30. char buf[50];
  31. char day[10];
  32. /* 串口数据缓存 */
  33. String comdata = "";
  34. int numdata[7] ={0}, j = 0, mark = 0;
  35. /* 创建 DS1302 对象 */
  36. DS1302 rtc(CE_PIN, IO_PIN, SCLK_PIN);


  37. void print_time()
  38. {
  39.     /* 从 DS1302 获取当前时间 */
  40.     Time t = rtc.time();
  41.     /* 将星期从数字转换为名称 */
  42.     memset(day, 0, sizeof(day));
  43.     switch (t.day)
  44.     {
  45.     case 1: strcpy(day, "Sunday"); break;
  46.     case 2: strcpy(day, "Monday"); break;
  47.     case 3: strcpy(day, "Tuesday"); break;
  48.     case 4: strcpy(day, "Wednesday"); break;
  49.     case 5: strcpy(day, "Thursday"); break;
  50.     case 6: strcpy(day, "Friday"); break;
  51.     case 7: strcpy(day, "Saturday"); break;
  52.     }
  53.     FIR = t.hr/10;
  54.     SEC = t.hr%10;
  55.     THI = t.min/10;
  56.     FOR = t.min%10;
  57.     FIF = t.sec/10;
  58.     SIX = t.sec%10;
  59.     /* 将日期代码格式化凑成buf等待输出 */
  60.     snprintf(buf, sizeof(buf), "%s %04d-%02d-%02d %02d:%02d:%02d", day, t.yr, t.mon, t.date, t.hr, t.min, t.sec);
  61.     /* 输出日期到串口 */
  62.     Serial.println(buf);
  63. }
  64. void setup()
  65. {
  66.     pinMode(latchPin, OUTPUT);
  67.     pinMode(clockPin, OUTPUT);
  68.     pinMode(dataPin, OUTPUT);
  69.     Serial.begin(9600);
  70.     rtc.write_protect(false);
  71.     rtc.halt(false);
  72. }
  73. void loop()
  74. {
  75.     /* 当串口有数据的时候,将数据拼接到变量comdata */
  76.     while (Serial.available() > 0)
  77.     {
  78.         comdata += char(Serial.read());
  79.         delay(2);
  80.         mark = 1;
  81.     }
  82.     /* 以逗号分隔分解comdata的字符串,分解结果变成转换成数字到numdata[]数组 */
  83.     if(mark == 1)
  84.     {
  85.         Serial.print("You inputed : ");
  86.         Serial.println(comdata);
  87.         for(int i = 0; i < comdata.length() ; i++)
  88.         {
  89.             if(comdata[i] == ',' || comdata[i] == 0x10 || comdata[i] == 0x13)
  90.             {
  91.                 j++;
  92.             }
  93.             else
  94.             {
  95.                 numdata[j] = numdata[j] * 10 + (comdata[i] - '0');
  96.             }
  97.         }
  98.         /* 将转换好的numdata凑成时间格式,写入DS1302 */
  99.         Time t(numdata[0], numdata[1], numdata[2], numdata[3], numdata[4], numdata[5], numdata[6]);
  100.         rtc.time(t);
  101.         mark = 0;j=0;
  102.         /* 清空 comdata 变量,以便等待下一次输入 */
  103.         comdata = String("");
  104.         /* 清空 numdata */
  105.         for(int i = 0; i < 7 ; i++) numdata[i]=0;
  106.     }  
  107.           digitalWrite(latchPin, LOW);
  108.           shiftOut(dataPin, clockPin, MSBFIRST,segcode[FIR]);
  109.           shiftOut(dataPin, clockPin, MSBFIRST,segcode[SEC]);
  110.           shiftOut(dataPin, clockPin, MSBFIRST,segcode[THI]);
  111.           shiftOut(dataPin, clockPin, MSBFIRST,segcode[FOR]);
  112.           shiftOut(dataPin, clockPin, MSBFIRST,segcode[FIF]);
  113.           shiftOut(dataPin, clockPin, MSBFIRST,segcode[SIX]);
  114.           digitalWrite(latchPin, HIGH);
  115.     /* 打印当前时间 */
  116.     print_time();
  117.     delay(1000);//refresh time
  118. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2012-3-23 22:53:15 | 显示全部楼层
实用性强大啊!学习中。。。。
回复 支持 反对

使用道具 举报

发表于 2012-4-1 15:40:55 | 显示全部楼层
WProgram.h是哪里的文件??编译的时候报错
回复 支持 反对

使用道具 举报

发表于 2012-4-1 16:48:45 | 显示全部楼层
lionelg 发表于 2012-4-1 15:40
WProgram.h是哪里的文件??编译的时候报错

0022 IDE中的。。如果用1.0 IDE不知道是否还有这个了
回复 支持 反对

使用道具 举报

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

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

Archiver|联系我们|极客工坊

GMT+8, 2024-4-20 23:36 , Processed in 0.045302 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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