找回密码
 注册
关于网站域名变更的通知
查看: 449|回复: 1
打印 上一主题 下一主题

转——凔海笔记之FPGA(十):玩一玩DS1302 

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-4-3 11:18 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
转——凔海笔记之FPGA(十):玩一玩DS1302

- K* w8 I# \8 G5 B# h1 M( W

! M/ I2 Q5 t+ k; f
         现在这日子过得,一周四节课,没有考试没有作业更没有实验课,真不知道说什么好,还是来说说DS1302吧。(~ ̄▽ ̄)~   
0 L' @2 @% H9 O5 \' A       它生有八脚,电源分主备,晶振有要求,时序有讲究,可记年月日,可分闰是非,可显时分秒还有周。                     1 y7 Q9 C3 g0 @2 Q3 \
DS1302,资料漫天飞舞,多得就像现在的杨花柳絮,所以学起来到不怎么费劲,/ j! a/ d; C6 {+ y( d$ ^
但是为了学习,嗯,为了好好学习,我还是要认认真真干下面这些事、
2 d3 m. M7 [, m4 w0 O5 v1、了解DS1302时序
+ c; J, D% A! U4 s2、写Verilog代码( A* q$ ~9 |( P8 Y( v0 A
number one:
9 C$ t: H* b& Q7 x

9 D' R" b- q) b+ ~' _  t+ J看上图   
* E. s, s0 _$ L$ g! C" aX1、X2:晶振要求32.768kHz=2^15。只是选择晶振时,不同的晶振,误差也较大,估计32.768Khz晶振,分频后,能精确的分出秒信号脉冲吧。, t/ M# c9 N' K8 f* v
    CE:输入信号,在读、写数据期间,必须为高。2 \; ?6 l& _% s8 E% a
    SCLK:控制数据的输入与输出,上升沿写,下降沿读。
! n. k2 L% L/ |4 O4 y7 x0 E6 w8 Y2 t4 d    I/O:双向数据线
: |% r! v, ~  w% b& j* x3 @& ^就这些应该没了吧。其实,DS1302的操作,就是要整明白如何访问DS1302的寄存器,如何向DS1302写入数据和读出数据。+ q; j3 o3 n% C9 ?
下面就整吧。! j3 x# j! j9 U" Y% P6 M7 u
先看, DS1302单字节写操作的时序图
+ v2 `9 H1 M& V/ s+ n
( d% f' r" ~2 c9 G# o% r5 ]5 H
    第一个字节是“访问寄存器的地址”,第二字节是“要写入的数据”。在写操作的时候,都是“上升沿有效”,即不管是“地址字节”还是“数据字节”,都是在SCLK的上升沿被采集的。(数据都是从最低位开始发送至最高位结束)
3 Q0 G) H  S% N$ J5 }  P    接下来是读操作时序图
, s7 F; b* \8 ~: Q

1 v1 B# m/ ~' r2 J读操作基本上和写操作的时序图差不多,区别的地方就是在第二个字节时 “读的数据” 的动作。 第二字节读数据开始时, SCLK 信号都是 “下降沿有效” 。
( @3 j) ]1 S( g2 R    并且CE信号都是处于高电平状态的,所以在对DS1302进行读写操作前都要拉高CE信号开始,操作结束后拉低CE信号结束。+ T# E! i6 @: r1 ~% p; ]
这是访问寄存器地址的格式表:
- C. B- p( J5 ~) m
  D; ~* e6 G0 m- [1 l
   读和写操作,都是先发送一个字节的“访问寄存器的地址”。这些寄存器地址格式如上图所示:
: i0 ^3 a( }- q9 I3 P: z+ hBit 7   固定,为“1”
8 d* x1 \" |1 T  n# p6 KBit 6   表示是访问寄存器本身,还是访问 RAM 空间。
7 C3 K0 x. U9 h  h1 U  J注:为“1”表示访问RAM,为“0”表示访问寄存器本身" P$ Q% K! {  p9 ~  N4 k
Bit 5-1 表示是寄存器或者RAM 空间的地址。; x0 @# a* J( A0 f
注:表示具体的寄存器或者RAM地址,跟bit6相关4 r: _) S1 j/ Q
Bit 0   表示是访问寄存器本身是写操作,还是读操作,1读0写。
* f1 M% u% k( v% w% n: ]日历、时钟寄存器与控制字对照表如图:( a5 o8 `$ r; _( n" g- Q4 _; c
   

0 S% O: o1 W( P) t! R6 P( t对于写指令,黑金告诉我可以这样来表示这八位地址指令:& K( d5 L, \% N
{ 2'b10 , 5'd Addr, 1'b RD/W }说是可以提高些解读性。
  ?2 a: L1 G2 y: J) r5 K例如:{ 2'b10, 5'd0, 1'b0 }写秒、{ 2'b10, 5'd1, 1'b1 }读分。! q$ Y0 T6 y* K& N8 Z
9 U$ Z( V* ]& ?. S; B: `5 E4 Y
下图为DS1302各个寄存器的地址组成:# ^' v1 f/ A$ K) r) @) ]0 f) `
" T; g$ @( a' w% g( {2 c2 b
这个表述了每一个寄存器的字节配置,我们可以初始化时钟开始时的时间。( W" g- I5 c3 Z8 Y1 v
如果笔者要初始化分为33,那我就先写指令{ 2'b10, 5'd1, 1'b0 } ,接着写数据{ 4'h3, 4'h3 }。就这样
5 M! e8 n/ N- b: [: R; H7 v不过有三个寄存器值得一说,! Y' j. s* k$ N2 ?, \# z* k
1、“秒”最到位为0启动,1关闭
" m/ s6 B0 r( _$ }2、“时”最高位置一则十二进制,0为24.
! T' Z6 o9 ]$ p$ f! f2 W3、WP写0关闭写保护,写1打开写保护,所以重新设置时钟时间时需要将此关闭。
# W& {) l3 h/ i! o3 m那么,因为就6位数码管,所以我们要初始化DS1302位23时59分50秒怎么做?
. l3 p' f0 b" [4 A1、关闭写保护。
' t* g' q* |1 ]. f4 H2、改变时寄存器
! c( M  j' M& g4 u- n- a, |2、改变分寄存器" w( d- L: H' O0 _
3、改变秒寄存器
* G% G& F+ T* z4、不断读取时分秒寄存器。  G( F  L7 X' X) v: X% [3 ?, H4 s! R) D
用Verilog怎么来描述呢?
0 g/ r  O$ G* k/ t% l5 Qnumber two; c4 Y$ z) W3 F- f
    其实和IIC单字节的读写是差不多的,也是三个模块,
- J, v% }  }% \, L# A, g* ?7 }数码管显示模块:Smg_module
3 U, i& }/ ?' j3 x+ l$ x- DDS1302功能模块:DS1302_function_module
$ k  r7 o) w4 r. o. r7 h' C控制模块:DS1302
" d( k2 R; Q* l- {" G) E* f& j数码管显示模块就不说了,和IIC一样。. E2 D. k& |! f2 ~% j& ^# e/ o
DS1302功能模块:DS1302_function_module就是讲读写时序图描述出来,让我郁闷的是,读DS1302的读写时钟是多少呢?百度没找到,然后就参考人家的了。+ Z" W. G4 f+ S  \! |1 J
" L* r+ P+ v/ a! X( F9 C- x2 Q
+ J5 c# g) h, }6 j& ?/ ?7 V6 ?1 `2 D
' t+ E# `' _" c/ V. H2 t5 e2 \. K
写到这,我发现我真是闲得蛋疼,这表格画的,啧啧
) {: k+ T* @6 H3 }- R8 G) O3 D
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-8 23:00 , Processed in 0.171875 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表