最近设计了一款板子,带有DS1302,打样回来焊接好,正好arduino开发板调一下,P板硬件连接有MCU、DS1302、电源插座等,这次单独调试DS1302,所以不使用外接电源给MCU供电,只使用arduino电源给DS1302回路供电,如下,P板其他的功能大家去猜吧
我用导线引出了DS1302和arduino通信连接的三个脚:SCK、IO、RST。因为该导线属于硬导线,一碰就会掉或者接触不良,所以和arduino实物连接图没拍,底端蓝线就是电源,拿万用表量了10遍,确保和DS1302电源通路。大家一看程序也就对接线一目了然
程序随后,下载,通过串口查看,显示初始时间2000-00-00 00:00:00,然后每秒输出一次,但是第一次发现通过串口输入设置时间无反应,秒数超过60,输入格式是年月日时分秒星期数,星期日是1、星期六是7,这一次也没接纽扣电池
将接线重新插了一遍好了,时间设置输出正确
后面接上纽扣电池,再设置当天时间,中间输入是之前把星期数设置错了
下午再上电看到时间已被记忆,自动更新
程序见下
- uint8_t CE_PIN = 5;
- uint8_t IO_PIN = 6;
- uint8_t SCLK_PIN = 7;
- char buf[50];
- char day[10];
- String comdata = "";
- int numdata[7] ={0}, j = 0, mark = 0;
- DS1302 rtc(CE_PIN, IO_PIN, SCLK_PIN);
- void print_time()
- {
- Time t = rtc.time();
- memset(day, 0, sizeof(day));
- switch (t.day)
- {
- case 1: strcpy(day, "Sunday"); break;
- case 2: strcpy(day, "Monday"); break;
- case 3: strcpy(day, "Tuesday"); break;
- case 4: strcpy(day, "Wednesday"); break;
- case 5: strcpy(day, "Thursday"); break;
- case 6: strcpy(day, "Friday"); break;
- case 7: strcpy(day, "Saturday"); break;
- }
- snprintf(buf, sizeof(buf), "%s %04d-%02d-%02d %02d:%02d:%02d", day, t.yr, t.mon, t.date, t.hr, t.min, t.sec);
- Serial.println(buf);
- }
- void setup()
- {
- Serial.begin(9600);
- rtc.write_protect(false);
- rtc.halt(false);
- }
- void loop()
- {
- while (Serial.available() > 0)
- {
- comdata += char(Serial.read());
- delay(2);
- mark = 1;
- }
- if(mark == 1)
- {
- Serial.print("You inputed : ");
- Serial.println(comdata);
- for(int i = 0; i < comdata.length() ; i++)
- {
- if(comdata[i] == ',' || comdata[i] == 0x10 || comdata[i] == 0x13)
- {
- j++;
- }
- else
- {
- numdata[j] = numdata[j] * 10 + (comdata[i] - '0');
- }
- }
- Time t(numdata[0], numdata[1], numdata[2], numdata[3], numdata[4], numdata[5], numdata[6]);
- rtc.time(t);
- mark = 0;j=0;
- comdata = String("");
- for(int i = 0; i < 7 ; i++) numdata[i]=0;
- }
- print_time();
- delay(1000);
- }
复制代码
最后有两个问题提醒一下:
1、1302很挑晶振,只有6PF的那种才能用。由于DS1302在芯片本身已经集成了6pF的电容,所以,为了获得稳定可靠的时钟,必须选用具有6pF负载电容的晶振。我的芯片是5块钱一片,调试完发现没有问题
2、有人说3.3V供电,Ds1302会正常工作,开始我先5V工作一段时间后断电转为3.3V,输出如下,之前分钟确实记忆了,但是日期又返回了初始化阶段
日期,且秒数会超过59,手册上说宽电压2.5V-5.5V是骗人的 |