lionelg 发表于 2012-4-1 16:51:56

弘毅 发表于 2012-4-1 16:48 static/image/common/back.gif
0022 IDE中的。。如果用1.0 IDE不知道是否还有这个了

刚下的1.0的...刚开始玩这个....新版之后怎么办?

弘毅 发表于 2012-4-1 17:19:01

lionelg 发表于 2012-4-1 16:51 static/image/common/back.gif
刚下的1.0的...刚开始玩这个....新版之后怎么办?

新版的。。。这个还没研究,1.0改动太大不好用,所以我们大部分还在用0022,0023

lionelg 发表于 2012-4-6 19:40:55

有个问题,显示的时间总是Friday 2165-25-44 27:00:24
也没办法设置,可以显示输入,但是时间还是不变,我已经换了5个芯片了,还是老样子,晶振6pF的,难道芯片是有问题?可是最后的秒数是在正常增加的。
没有外接后备电池,应该没有影响吧

lionelg 发表于 2012-4-18 23:38:32

悠然小调 发表于 2011-11-19 12:56 static/image/common/back.gif
去掉了年月日部分

用这个库,改了改原版的代码,结果总是报错,能帮忙看看什么问题么?刚开始研究,比较小白,谢谢。
我的代码如下#include <stdio.h>
#include <string.h>
#include "DS1302.h"

uint8_t CE_PIN   = 5;
uint8_t IO_PIN   = 6;
uint8_t SCLK_PIN = 7;


char buf;
int numdata ={0}, j = 0, mark = 0;
/* 创建 DS1302 对象 */
DS1302 rtc(CE_PIN, IO_PIN, SCLK_PIN);


void print_time()
{
   /* 从 DS1302 获取当前时间 */
    Time t = rtc.getTime();
    snprintf(buf, sizeof(buf), "%02d:%02d:%02d", t.hour, t.min, t.sec);
    Serial.println(buf);
}


void setup()
{
    Serial.begin(9600);
    rtc.writeProtect(false);
    rtc.halt(false);
}

void loop()
{
    print_time();
    delay(1000);
}

悠然小调 发表于 2012-4-20 17:12:20

本帖最后由 悠然小调 于 2012-4-20 17:13 编辑

lionelg 发表于 2012-4-18 23:38 static/image/common/back.gif
用这个库,改了改原版的代码,结果总是报错,能帮忙看看什么问题么?刚开始研究,比较小白,谢谢。
我的 ...

snprintf这个语句有问题吗?用的是1.0版不兼容?

lionelg 发表于 2012-4-20 18:14:45

忘记报什么错了,不过应该是库里面的错

MicroCao 发表于 2012-4-30 22:42:52

    while (Serial.available() > 0)
    {
      comdata += char(Serial.read());
      delay(2);
      mark = 1;
    }
    /* 以逗号分隔分解comdata的字符串,分解结果变成转换成数字到numdata[]数组 */
    if(mark == 1)
    {arduino的串口收数据是一次读一个字符,而不是一次整个字符串收的。那为什么上面的代码中,当Serial.available() > 0为真时,会一直往comdata上加字符,直到全部加完那执行下面的if(mark == 1)。
想不明白啊,为什么不是读了第一个字符后就直接继续执行下面的if语句呢

MicroCao 发表于 2012-4-30 23:31:28

MicroCao 发表于 2012-4-30 22:42 static/image/common/back.gif
arduino的串口收数据是一次读一个字符,而不是一次整个字符串收的。那为什么上面的代码中,当Serial.availa ...

哈哈,弄明白了。我把while看成if了.................

thomas 发表于 2012-5-1 01:15:34

lionelg 发表于 2012-4-6 19:40 static/image/common/back.gif
有个问题,显示的时间总是Friday 2165-25-44 27:00:24
也没办法设置,可以显示输入,但是时间还是不变,我 ...

这个我遇到过,如果和我情况一样的话,是程序中初始化的数据有误。

MicroCao 发表于 2012-5-1 01:21:47

thomas 发表于 2012-5-1 01:15 static/image/common/back.gif
这个我遇到过,如果和我情况一样的话,是程序中初始化的数据有误。

但闻其详,不吝赐教。

thomas 发表于 2012-5-1 02:26:52

MicroCao 发表于 2012-5-1 01:21 static/image/common/back.gif
但闻其详,不吝赐教。

用这个段代码刷一下看看行不行,如果不行,换下附件的库试试。
/*
Example sketch for interfacing with the DS1302 timekeeping chip.

Copyright (c) 2009, Matt Sparks
All rights reserved.

http://quadpoint.org/projects/arduino-ds1302
*/
#include <stdio.h>
#include <string.h>
#include <DS1302.h>

/* Set the appropriate digital I/O pin connections */
uint8_t CE_PIN   = 5;
uint8_t IO_PIN   = 6;
uint8_t SCLK_PIN = 7;

/* Create buffers */
char buf;
char day;

/* Create a DS1302 object */
DS1302 rtc(CE_PIN, IO_PIN, SCLK_PIN);

void setup()
{
Serial.begin(9600);

/* Initialize a new chip by turning off write protection and clearing the
   clock halt flag. These methods needn't always be called. See the DS1302
   datasheet for details. */
rtc.write_protect(false);
rtc.halt(false);

/* Make a new time object to set the date and time */
/*   Tuesday, May 19, 2009 at 21:16:37.            */
Time t(2012, 2, 24, 21, 16, 37, 3);

/* Set the time and date on the chip */
rtc.time(t);
}

MicroCao 发表于 2012-5-2 00:09:53

报告 一个问题,arduino1.0 IDE环境,NANO328。使用1楼的代码
在ARDUINO IDE的串口窗口中输入"2012,5,1,23,55,23,2"加车或send后,查询DS1302时间时返回的结果中星期有问题(只显示年月日时分秒,没有星期),但若输入"2012,5,1,23,55,23,2,"(即设置时间的字符串结尾加上逗号)则星期能正常显示,说明目前代码中对串口字符串结束符的判断仍有问题,即如下这句代码还有待改善。
if(comdata == ',' || comdata == 0x10 || comdata == 0x13)

MicroCao 发表于 2012-5-2 00:39:42

thomas 发表于 2012-5-1 02:26 static/image/common/back.gif
用这个段代码刷一下看看行不行,如果不行,换下附件的库试试。

一、
前面的代码中主要在于rtc.write_protect(false);与rtc.halt(false);试过后仍然无效

二、
使用这个26 Jan 2012最新2.2版的库,用DS1302_Serial_Easy与DS1302_Serial_Hard两个例子都试过,仍然不正常。
比如用DS1302_Serial_Easy显示的串口结果为
xxxxxxxxx 85.85.2165 -- 27:85:85
xxxxxxxxx 85.85.2165 -- 27:85:85
xxxxxxxxx 85.85.2165 -- 27:85:85
xxxxxxxxx 85.85.2165 -- 27:85:85
xxxxxxxxx 85.85.2165 -- 27:85:85

我的试验条件
DS1302 DIP,晶振不详(不知道是否6pf的32.768),NANO328。

三、
这几天试了多个从同卖家买的DS1302芯片,也试了从多家购买的晶振,仍然有问题。
奇怪的是其中一个DS1302与晶振在两年多前在自己搭建的最简系统里是正常的,只是两年时候,时间大概走快了3小时。可是如今怎么整都不正常,可惜的是这个最系统拆掉了,没法再去重复了。
最后试验了从其中一个DS1302卖家那买的DS1302成品模块(DS1302为贴片,晶振引脚等焊好,还带3V钮扣电池),结果正常了。
于是想不明白问题出在哪了

thomas 发表于 2012-5-2 09:14:11

晶振外壳接地是个极为必要的问题。但要小心别焊坏

lionelg 发表于 2012-5-2 11:57:57

经过测试,不管是国产还是所谓进口的DS1302(价格几角至几元不等),不加0.1uF的电容在正负极之间能用的有限,我测了20多个芯片,就1个能不带电容直接用的,另外晶振接地影响时间的准确性,其他的倒是没什么影响,之前有人说加个二极管的问题,只在我使用5V2A的电源驱动的情况下发生过,1A一下的没问题。
页: 1 2 [3] 4 5 6 7 8 9 10 11
查看完整版本: Arduino学习笔记A8 - Arduino 连接 DS1302时钟模块