查看: 281|回复: 2

[技术] 【赚周年币】技术贴-----(5)Fireduino RTC测试

[复制链接]

56

主题

1

好友

2486

积分

进士

Rank: 5Rank: 5

  • TA的每日心情
    奋斗
    昨天 09:43
  • 签到天数: 738 天

    连续签到: 31 天

    [LV.9]以坛为家II

    爱板会员勋章 活跃会员勋章 发帖机器勋章 在线达人勋章

    发表于 2016-12-9 20:02:33 |显示全部楼层
    本帖最后由 wambob 于 2016-12-9 20:18 编辑

    看了wu工的RTC测试,我也忍不住了,到官网看了下资料。
    Fireduino RTC 使用外接设备为I2C 接口的HYM5863,挂接在Wire1 接口。
    RTC使用了一个结构体
    1. typedef struct
    2. {
    3.     unsigned short year;//year (1900 ~ 2099)
    4.     unsigned char  mon;//month,begin from 1 to 12
    5.     unsigned char  week;//week (0:Sunday 1:Monday ... 6:Saturday)
    6.     unsigned char  day;//day,begin from 1 to 31
    7.     unsigned char  hour;//hour,24-hour
    8.     unsigned char  min;//minute
    9.     unsigned char  sec;//second
    10. }RTCTime;
    复制代码
    给了两个API用来设置和读取结构体值。getTime(RTCTime *time)setTime(RTCTime *time)官网给出了一个串口打印的例子
    1. #include "Arduino.h"
    2. #include "Wire.h"
    3. #include "RTC.h"
    4. RTCTime time;
    5. void setup(void)
    6. {
    7.         Serial.begin(115200);
    8.         Serial.print("\r\n FireDuino Setup ...\r\n");
    9.         time.year  = 2016;//year (1900 ~ 2099)
    10.         time.mon   = 3;//month,begin from 1 to 12
    11.         time.week  = 1 ;//week (0:Sunday 1:Monday ... 6:Saturday)
    12.         time.day   = 14;//day,begin from 1 to 31
    13.         time.hour  = 23;//hour,24-hour
    14.         time.min   = 59;//minute
    15.         time.sec   = 50;//second
    16.         Wire1.begin();
    17.         RTC.setTime(&time);
    18. }
    19. void loop(void)
    20. {
    21.         delay(100);
    22.         RTC.getTime(&time);
    23.         Serial.println();
    24.         Serial.print("Y:");
    25.         Serial.print(time.year,DEC);
    26.         Serial.print(" M:");
    27.         Serial.print(time.mon,DEC);
    28.         Serial.print(" W:");
    29.         Serial.print(time.week,DEC);
    30.         Serial.print(" d:");
    31.         Serial.print(time.day,DEC);
    32.         Serial.print(" h:");
    33.         Serial.print(time.hour,DEC);
    34.         Serial.print(" m:");
    35.         Serial.print(time.min,DEC);
    36.         Serial.print(" s:");
    37.         Serial.print(time.sec,DEC);
    38.         Serial.println();
    39. }
    复制代码
    打开从官网下载的IDE1.6.8版本,因为使用6.1.13版本配置的问题,读不出数,oled也不显示。
    1.JPG

    编译下载代码到板子上打开串口助手,可以看到读出了例程里的时间。
    这个RTC例程在IDE目录下D:\arduino-1.6.8\portable\packages\Firefly\hardware\arm\1.3.0\libraries\RTC
    2.JPG

    红色框中是自己准备的oled和字库。第三方的库不支持,什么都要从来,挺费力啊。
    其中的I2C协议文件在D:\arduino-1.6.8\portable\packages\Firefly\hardware\arm\1.3.0\libraries\Wire下,里面有数字加速度传感器ADXL345例程。
    添加头文件和代码到例程里。编译的时候会提示只读文件,需要另存个路径,点OK吧。
    我的主代码如下
    1. /**
    2. * @file RTC_set_get.ino
    3. * @brief Definitions RTC_set_get Demo for Fireduino
    4. * @author jiang<jdz@t-chip.com.cn>
    5. * @version V1.0
    6. * @date 2016.02
    7. *
    8. * @par Copyright:
    9. * Copyright (c) 2016 T-CHIP INTELLIGENCE TECHNOLOGY CO.,LTD. \n\n
    10. *
    11. * For more information, please visit website <http://www.t-firefly.com/>, \n\n
    12. * or email to <service@t-firefly.com>.
    13. */
    14. #include "Arduino.h"
    15. #include "Wire.h"
    16. #include "RTC.h"
    17. #include "ssd1306.h"

    18. RTCTime time;
    19. char year1[100];
    20. char month1[100];
    21. char day1[100];
    22. char hour1[100];
    23. char minute1[100];
    24. char second1[100];
    25. char week1[100];

    26. void setup(void)
    27. {
    28.         Serial.begin(115200);
    29.         time.year  = 2016;//year (1900 ~ 2099)
    30.         time.mon   = 12;//month,begin from 1 to 12
    31.         time.week  = 5 ;//week (0:Sunday 1:Monday ... 6:Saturday)
    32.         time.day   = 9;//day,begin from 1 to 31
    33.         time.hour  = 19;//hour,24-hour
    34.         time.min   = 35;//minute
    35.         time.sec   = 50;//second
    36.         Wire1.begin();
    37.         RTC.setTime(&time);
    38.   OLED_pin_Init();  
    39.   oled_init();   
    40. }

    41. void loop(void)
    42. {
    43.   OLED_Clear();  
    44.         //delay(1000);
    45.         OLED_ShowString(10,0,"RTC test!",12);
    46.         RTC.getTime(&time);

    47.   sprintf(year1,"%d" ,time.year);
    48.   sprintf(month1,"%d" ,time.mon);
    49.   sprintf(day1,"%d" ,time.day);

    50.   sprintf(hour1,"%d" ,time.hour);
    51.   sprintf(minute1,"%d" ,time.min);
    52.   sprintf(second1,"%d" ,time.sec);

    53.   sprintf(week1,"%d" ,time.week);  
    54.   
    55.   OLED_ShowString(10,16,year1,12);
    56.   OLED_ShowChar(34,16,'-',12,1);
    57.   OLED_ShowString(40,16,month1,12);
    58.   OLED_ShowChar(52,16,'-',12,1);
    59.   OLED_ShowString(58,16,day1,12);  

    60.   OLED_ShowString(10,32,hour1,12);
    61.   OLED_ShowChar(22,32,':',12,1);
    62.   OLED_ShowString(28,32,minute1,12);
    63.   OLED_ShowChar(40,32,':',12,1);
    64.   OLED_ShowString(46,32,second1,12);
    65.    
    66.   OLED_ShowString(10,48,"week:",12);  
    67.   OLED_ShowString(40,48,week1,12);
    68.   OLED_Refresh_Gram();//
    69.   delay(3000);
    70. }


    复制代码
    编译后下载到板子上,显示出读取的时间,+上延迟,刷新一屏要用5秒看来需要修改下显示API,部分刷新了。

    未命名.JPG
    2.JPG




    已有 1 人评分 收起 理由
    loveeeboard + 20

    总评分:  + 20   查看全部评分

    回复

    使用道具 举报

    5

    主题

    1

    好友

    1294

    积分

    进士

    Rank: 5Rank: 5

  • TA的每日心情
    擦汗
    2017-7-11 13:55
  • 签到天数: 180 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2016-12-13 18:03:43 |显示全部楼层
    谢谢分享                                    
    回复

    使用道具 举报

    44

    主题

    0

    好友

    1253

    积分

    进士

    Rank: 5Rank: 5

  • TA的每日心情
    开心
    2017-6-10 09:13
  • 签到天数: 169 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2016-12-16 16:15:33 |显示全部楼层
    慢慢学习学习
    回复

    使用道具 举报

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

    关闭

    站长推荐上一条 /4 下一条

    手机版|爱板网 |网站地图  

    GMT+8, 2017-7-21 10:35 , Processed in 0.131894 second(s), 16 queries , Memcache On.

    苏公网安备 32059002001056号

    Powered by Discuz!

    回顶部