您尚未登录,请登录后浏览更多内容! 登录 | 立即注册

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

为树莓派 添加一个 实时时钟DS1302

查看数: 22951 | 评论数: 6 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2020-7-20 22:10

正文摘要:

1、在系统中安装wiringPi(这个就不多说了很简单) : v# E/ U* z' P" i" O2、连接ds1302模块和树莓派引脚& j' D5 Z  _1 ~' F 连接前需要在ds1302的DTA引脚上添加一个10K的上拉电阻, 4 _2 x6 g5 |- [9 ~VCC ...

回复

admin 发表于 2020-7-21 15:27:02
gpio readall 调出接口图
6 X7 a0 j  \, N& q8 i$ O5 a6 f/ R/ R0 `' A2 k% x
  1. +-----+-----+---------+------+---+---Pi A+--+---+------+---------+-----+-----+
    0 b' T9 L4 i& h8 z
  2. | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |) j/ |. c8 W: P( H6 j
  3. +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+& `; H% k* J( z% k( O
  4. |     |     |    3.3v |      |   |  1 || 2  |   |      | 5v      |     |     |
    5 o5 B! q: g$ N. x" a7 A
  5. |   2 |   8 |   SDA.1 |   IN | 1 |  3 || 4  |   |      | 5v      |     |     |
    ; x6 i7 P6 l4 A1 y9 g3 ^  y( ^% a
  6. |   3 |   9 |   SCL.1 |   IN | 1 |  5 || 6  |   |      | 0v      |     |     |
    " S% F2 E; R( J0 q
  7. |   4 |   7 | GPIO. 7 |   IN | 1 |  7 || 8  | 1 | ALT0 | TxD     | 15  | 14  |1 H4 Y1 v. X% r8 q) D
  8. |     |     |      0v |      |   |  9 || 10 | 1 | ALT0 | RxD     | 16  | 15  |
    6 U! M+ \" Y5 e, `' Q' z" J
  9. |  17 |   0 | GPIO. 0 |   IN | 0 | 11 || 12 | 0 | IN   | GPIO. 1 | 1   | 18  |
    ; x4 g( \6 O3 q: y, J; [. N
  10. |  27 |   2 | GPIO. 2 |   IN | 0 | 13 || 14 |   |      | 0v      |     |     |7 D% K( m0 n5 g% D+ M: e8 C4 c
  11. |  22 |   3 | GPIO. 3 |   IN | 0 | 15 || 16 | 0 | IN   | GPIO. 4 | 4   | 23  |
    & @  k! W# Z: y' V$ ~
  12. |     |     |    3.3v |      |   | 17 || 18 | 0 | IN   | GPIO. 5 | 5   | 24  |. f  d  L8 u" i8 W) E/ k
  13. |  10 |  12 |    MOSI |   IN | 0 | 19 || 20 |   |      | 0v      |     |     |4 Q; a+ }8 G( V7 T' \* `! ]
  14. |   9 |  13 |    MISO |   IN | 0 | 21 || 22 | 0 | IN   | GPIO. 6 | 6   | 25  |
    # W' @1 W) J+ N$ t" W$ v6 x8 d
  15. |  11 |  14 |    SCLK |  OUT | 0 | 23 || 24 | 1 | IN   | CE0     | 10  | 8   |
    ' K1 L, `6 L# \9 e$ Q2 o) f. F
  16. |     |     |      0v |      |   | 25 || 26 | 1 | IN   | CE1     | 11  | 7   |
    / D+ b+ T: i+ }! Y
  17. |   0 |  30 |   SDA.0 |  OUT | 0 | 27 || 28 | 1 | IN   | SCL.0   | 31  | 1   |
    # b/ ^% _/ G# V# o: J
  18. |   5 |  21 | GPIO.21 |   IN | 1 | 29 || 30 |   |      | 0v      |     |     |
    3 |3 L9 V; v/ E6 o2 e/ M
  19. |   6 |  22 | GPIO.22 |   IN | 1 | 31 || 32 | 0 | IN   | GPIO.26 | 26  | 12  |
    4 U8 w( Y* X; d! k) H7 H. H6 ]6 K
  20. |  13 |  23 | GPIO.23 |   IN | 0 | 33 || 34 |   |      | 0v      |     |     |
    5 p3 u" X4 A' u' Q: [
  21. |  19 |  24 | GPIO.24 |   IN | 0 | 35 || 36 | 0 | IN   | GPIO.27 | 27  | 16  |# _! }6 c4 x; |) {0 w1 M
  22. |  26 |  25 | GPIO.25 |   IN | 0 | 37 || 38 | 0 | IN   | GPIO.28 | 28  | 20  |
    $ u/ G5 p: B. X5 j* Q7 g. X
  23. |     |     |      0v |      |   | 39 || 40 | 0 | IN   | GPIO.29 | 29  | 21  |, R% ?7 e9 B/ t0 p
  24. +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
    ; p$ p+ t$ `. g$ O1 j
  25. | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
    7 g& q3 r7 j3 L* ]
  26. +-----+-----+---------+------+---+---Pi A+--+---+------+---------+-----+-----+% N$ ]( B1 g% X. E2 @& i2 ~' T
复制代码
admin 发表于 2020-7-21 00:29:14
解决小时无法同步问题: l  i' M# K1 d: N4 C( {
% }3 D1 Z' \: G5 w
  1. static int setDSclock (void)
    & H4 g& }1 L$ C! e) l
  2. {
    2 A$ h- m8 D8 x+ l
  3.   //struct tm t ;
    . V6 ]7 z! k0 _( D% O! B
  4.   struct tm* t = NULL;" ]: g/ b5 C3 U/ Z: ~8 `
  5.   time_t now ;0 a% m0 p) F' Y6 v- s! x
  6.   int clock [8] ;# v. i+ E; P1 o
  7. 3 z9 n4 ~' @1 o7 b
  8.   printf ("Setting the clock in the DS1302 from Linux time... ") ;1 }0 T! a& k6 r: T" J

  9. + Z7 R3 z2 ?5 t" j
  10.   now = time (NULL) ;1 e" E+ d( S  }7 V% |5 ~# s1 ?
  11.   //gmtime_r (&now, &t) ;
    $ g9 t3 N' q5 U9 H, _
  12.   t = localtime(&now);" W2 P" Y% T1 _1 Z7 _8 e( q
  13.   ) Y1 `8 h  E( q$ y2 G
  14.   //clock [ 0] = dToBcd (t.tm_sec) ;        // seconds
    % l. I3 R6 f8 v2 o3 R1 v
  15.   //clock [ 1] = dToBcd (t.tm_min) ;        // mins5 I" K' Q6 e/ u) ]2 l( w7 Z
  16.   //clock [ 2] = dToBcd (t.tm_hour) ;        // hours' i* d/ \- w4 }/ k4 k
  17.   //clock [ 3] = dToBcd (t.tm_mday) ;        // date6 V# `' C5 U% n5 Q% R/ T
  18.   //clock [ 4] = dToBcd (t.tm_mon + 1) ;        // months 0-11 --> 1-128 s% ^, T: b9 f9 m: M
  19.   //clock [ 5] = dToBcd (t.tm_wday + 1) ;        // weekdays (sun 0)
    ' g5 R! Y& O2 {7 b0 n1 Z
  20.   //clock [ 6] = dToBcd (t.tm_year - 100) ;       // years
    " K% [  A9 j' S2 F" H8 V
  21.   //clock [ 7] = 0 ;                        // W-Protect off
    ; }/ I- P& {3 S7 F
  22.   
    ( y* V& F- x& ^# {1 N& U
  23.   clock [ 0] = dToBcd (t->tm_sec) ;        // seconds$ p9 Q3 ]% ~) A0 v. @+ x
  24.   clock [ 1] = dToBcd (t->tm_min) ;        // mins
    ! c1 a( E* O" _8 I$ g; y
  25.   clock [ 2] = dToBcd (t->tm_hour) ;        // hours
    ' t" L% _" a/ u& F/ r
  26.   clock [ 3] = dToBcd (t->tm_mday) ;        // date
    ( t, L. T' a0 e; v( Q" ~" {
  27.   clock [ 4] = dToBcd (t->tm_mon + 1) ;        // months 0-11 --> 1-121 d: j7 Z4 \+ A3 t6 _
  28.   clock [ 5] = dToBcd (t->tm_wday + 1) ;        // weekdays (sun 0)* k- u, d' Q! w( P
  29.   clock [ 6] = dToBcd (t->tm_year - 100) ;       // years
    % Y+ v. u) S: |' y5 y9 B
  30.   clock [ 7] = 0 ;                        // W-Protect off
    1 F" r6 B, U; J  k8 C; `% b

  31. & v  g% ?+ b  Y' y
  32.   ds1302clockWrite (clock) ;
    6 r! ?8 F  l/ B4 w1 W& H& Q

  33. & {6 }2 b" k/ W- b! G/ A, I* U) p& |9 F
  34.   printf ("OK\n %2d:%02d\n %2d:%02d\n",t->tm_hour,t->tm_min,dToBcd (t->tm_hour),dToBcd (t->tm_min) ) ;
复制代码
admin 发表于 2020-7-21 00:14:23
七、开机同步时间
将树莓派的时间与网络同步后,就可以写入到DS1302中,这样DS1302具有准确的当前时间,就算掉电也不会丢失,在树莓派离线时,可以在每次开机时将DS1302的时间写入到树莓派中,从而使得树莓派实现了实时时钟的功能。
获得可执行文件ds1302的目录
  1. pi@raspberrypi:~/wiringPi/examples $ pwd
    5 C6 f4 e8 H& M
  2. /home/pi/wiringPi/examples
复制代码
然后修改 /etc/rc.local 文件,在exit 0前面添加时间同步命令,这样在树莓派开机时就会自动将DS1302的时间同步到树莓派上。添加以下命令:
  1. sudo /home/pi/wiringPi/examples/ds1302 -slc
复制代码
保存后退出。我们将树莓派断网,然后树莓派关机,过一会开机,使用date命令读取时间,可以看到树莓派的走时和当前时间一致,说明时间自动同步成功!

2 C1 {& B: I; U8 C2 @/ N4 o
admin 发表于 2020-7-21 00:10:20
VCC:模块的电源引脚,接树莓派的1号引脚(3.3V)
% p& k% c0 }2 l8 h7 S; T* f
( u/ O  z1 j% CGND:模块的地,接树莓派的6号引脚(Grand)
$ h- o% l7 n( F( {0 F/ b) G/ ]& u1 E0 N5 h3 ?6 r, K
CLK:SCLK 串行时钟,接树莓派wiringPi 0(物理编号:11号); ^6 `' W6 i3 r
% f6 s3 Q9 x  l' ]5 N9 L: l
DAT:I/O 数据线,接树莓派wiringPi 1(物理编号:12号)
7 @. r. ?% c3 R4 C& y
9 ?" X! v- v. b! y; T+ l9 nRST:复位引脚,接树莓派wiringPi 2(物理编号:13号)
admin 发表于 2020-7-20 23:34:22
如果出现报错
2 v' j: N: ^6 v$ A6 }DS1302 RAM TEST FAILURE. 433 errors.
9 U0 S& B  _4 Z' |5 JDS1302 RAM TEST FAILURE. 465 errors.
2 Z; {- s4 S$ t! S. d$ w+ i等错误 那就是你接了三角 并没有接vcc和gnd接地

GMT+8, 2026-9-21 03:14 , Processed in 0.061601 second(s), 23 queries .

Copyright © 2001-2026 Powered by cncml! X3.2. Theme By cncml!