suoma 发表于 2016-12-17 19:19:21

小试DS1302时钟芯片

最近设计了一款板子,带有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;
char day;
String comdata = "";
int numdata ={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 == ',' || comdata == 0x10 || comdata == 0x13)
            {
                j++;
            }
            else
            {
                numdata = numdata * 10 + (comdata - '0');
            }
      }
      Time t(numdata, numdata, numdata, numdata, numdata, numdata, numdata);
      rtc.time(t);
      mark = 0;j=0;
      comdata = String("");
      for(int i = 0; i < 7 ; i++) numdata=0;
    }
    print_time();
    delay(1000);
}

最后有两个问题提醒一下:
1、1302很挑晶振,只有6PF的那种才能用。由于DS1302在芯片本身已经集成了6pF的电容,所以,为了获得稳定可靠的时钟,必须选用具有6pF负载电容的晶振。我的芯片是5块钱一片,调试完发现没有问题


2、有人说3.3V供电,Ds1302会正常工作,开始我先5V工作一段时间后断电转为3.3V,输出如下,之前分钟确实记忆了,但是日期又返回了初始化阶段
日期,且秒数会超过59,手册上说宽电压2.5V-5.5V是骗人的

suoma 发表于 2016-12-17 19:20:08

我的IDE版本1.0,如果程序编译不过,请换版本

单片机菜鸟 发表于 2016-12-17 20:49:54

意图何在表示看不懂

suoma 发表于 2016-12-17 21:05:33

单片机菜鸟 发表于 2016-12-17 20:49
意图何在表示看不懂

            学习记录

Paderboy 发表于 2016-12-17 21:11:07

:loveliness:

lt321 发表于 2018-4-14 16:57:21

受教了:handshake
页: [1]
查看完整版本: 小试DS1302时钟芯片