• 方案介紹
  • 附件下載
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

ds1302數(shù)碼管顯示RTC時(shí)間設(shè)計(jì)Verilog代碼Quartus AX301開(kāi)發(fā)板

加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

2-241111201P6433.docx

共1個(gè)文件

名稱:ds1302數(shù)碼管顯示RTC時(shí)間設(shè)計(jì)Verilog代碼Quartus AX301開(kāi)發(fā)板

軟件:Quartus

語(yǔ)言:Verilog

代碼功能:

RTC(Real-Time Clock)實(shí)時(shí)時(shí)鐘為系統(tǒng)提供一個(gè)可靠的時(shí)間,并且在斷電的情況下,RTC 實(shí)時(shí)時(shí)鐘也可以通過(guò)電池供電,一直運(yùn)行下去。RTC 通過(guò)類 SPI 總線FPGA 傳送 8 位數(shù)據(jù)(BCD 碼)。

數(shù)據(jù)包括秒,分,小時(shí),日期,天,月和年。在本實(shí)驗(yàn)中我們將讀取 RTC 的時(shí),分,秒的數(shù)據(jù)并在數(shù)碼管中顯示時(shí)間

FPGA代碼Verilog/VHDL代碼資源下載:www.hdlcode.com

本代碼已在AX301開(kāi)發(fā)板驗(yàn)證,AX301開(kāi)發(fā)板如下,其他開(kāi)發(fā)板可以修改管腳適配:
AX301開(kāi)發(fā)板.png

設(shè)計(jì)文檔:

ds1302 數(shù)碼管顯示 RTC 時(shí)間實(shí)驗(yàn)

1 實(shí)驗(yàn)簡(jiǎn)介

實(shí)驗(yàn)通過(guò)閱讀 DS1302 芯片手冊(cè),了解 DS1302 操作時(shí)序和相關(guān)寄存器,然后設(shè)計(jì)程序?qū)S1302 RTC 時(shí)間通過(guò)數(shù)碼管顯示出來(lái),類似于一個(gè)電子鐘。

2 實(shí)驗(yàn)原理

RTC(Real-Time Clock)實(shí)時(shí)時(shí)鐘為系統(tǒng)提供一個(gè)可靠的時(shí)間,并且在斷電的情況下,RTC 實(shí)時(shí)時(shí)鐘也可以通過(guò)電池供電,一直運(yùn)行下去。RTC 通過(guò)類 SPI 總線向 FPGA 傳送 8 位數(shù)據(jù)(BCD 碼)。

數(shù)據(jù)包括秒,分,小時(shí),日期,天,月和年。在本實(shí)驗(yàn)中我們將讀取 RTC 的時(shí),分,秒的數(shù)據(jù)并在數(shù)碼管中顯示時(shí)間。

2.1 硬件介紹

AX301/AX4010 開(kāi)發(fā)板上 RTC 設(shè)計(jì)采用 DALLAS 公司的低功耗實(shí)時(shí)時(shí)鐘芯片 DS1302, DS1302 的VCC2 為主電源,VCC1 為后備電源。在主電源關(guān)閉的情況下,也能可以通過(guò)電池保持時(shí)鐘的連續(xù)運(yùn)行。DS1302 外接 32.768kHz 晶振為 RTC 電路提供振蕩源。 RTC 部分的原理圖如下圖所示:

2.2 DS1302 時(shí)序和控制

2.2.1 寫數(shù)據(jù)時(shí)序

DS1302 芯片寫操作的時(shí)序圖。第一個(gè)字節(jié)是“訪問(wèn)寄存器的地址”,第二字節(jié)是“寫數(shù)據(jù)”。 在寫操作的時(shí)候,都是“上升沿有效”,然而還有一個(gè)條件,就是 CE(/RST)信號(hào)必須拉高。

(數(shù)據(jù)都是從 LSB 開(kāi)始發(fā)送,亦即是最低位開(kāi)始至最高位結(jié)束)。

DS1302 寫時(shí)序

2.2.2 讀數(shù)據(jù)時(shí)序

基本上和寫操作的時(shí)序圖大同小異,區(qū)別的地方就是在第二個(gè)字節(jié)是“讀數(shù)據(jù)”的動(dòng)作。第 二字節(jié)讀數(shù)據(jù)開(kāi)始時(shí),SCLK 信號(hào)都是下降沿送出數(shù)據(jù),這個(gè)時(shí)候可以使用上升沿讀取數(shù)據(jù)。CE (/RST)信號(hào)同樣是必須拉高。(第一節(jié)數(shù)據(jù)是從 LSB 開(kāi)始輸出,第二節(jié)數(shù)據(jù)是從 LSB 開(kāi)始讀 入)。

2.2.3 命令格式和寄存器

無(wú)論是讀操作還是寫操作,在時(shí)序圖中,第一個(gè)字節(jié)都是“訪問(wèn)寄存器的地址”,然而這一字 節(jié)數(shù)據(jù)有自己的格式。

BIT 7 固定。 BIT 6 表示是訪問(wèn)寄存器本身,還是訪問(wèn) RAM 空間。 BIT 5 到 BIT1 表示是寄存器 或 RAM 空間的地址。 BIT 0 表示是訪問(wèn)寄存器本身是寫操作,還是讀操作。

下圖是 DS1302 的寄存器地址和數(shù)據(jù)格式

3 程序設(shè)計(jì)

通過(guò)分析 DS1302 讀寫時(shí)序,可以看出和 SPI 時(shí)序類似,只不過(guò)數(shù)據(jù)輸出和輸入分時(shí)復(fù)用了,本實(shí)驗(yàn)利用 SPI Flash 讀寫實(shí)驗(yàn)中已經(jīng)使用過(guò)的 SPI Master 模塊來(lái)做為 DS1302 的底層讀寫控制模塊,然后再編寫一個(gè) RTC 讀寫模塊。

ds1302_io 模塊完成 DS1302 寄存器讀寫控制,狀態(tài)機(jī)如下圖所示。

狀態(tài)“S_IDLE”空閑狀態(tài),收到讀寫寄存器請(qǐng)求寫進(jìn)入“S_CE_HIGH”狀態(tài),將 CE 拉高,然后根據(jù)請(qǐng)求類型,進(jìn)入讀(S_READ)或?qū)憼顟B(tài)(S_WRITE)。

“S_WRITE”狀態(tài)下一個(gè)狀態(tài)進(jìn)入寫地址狀態(tài)“S_WRITE_ADDR”,再進(jìn)入寫數(shù)據(jù)狀態(tài)“S_WRITE_DATA”,完成一個(gè)寄存器的寫入,最后應(yīng)答,拉低 CE。

“S_READ”狀態(tài)下一個(gè)狀態(tài)進(jìn)入讀地址狀態(tài)“S_READ_ADDR”,再進(jìn)入讀數(shù)據(jù)狀態(tài)“S_READ_DATA”,完成一個(gè)寄存器的讀取,最后應(yīng)答,拉低 CE。

ds1302_io 狀態(tài)機(jī)

信號(hào)名稱

方向

說(shuō)明

clk

in

時(shí)鐘輸入

rst

in

異步復(fù)位輸入,高復(fù)位

ds1302_ce

out

DS1302 CE,高有效

ds1302_sclk

out

DS1302 串行時(shí)鐘

ds1302_io

inout

DS1302 數(shù)據(jù)

cmd_read

in

讀寄存器請(qǐng)求,發(fā)出請(qǐng)求時(shí)準(zhǔn)備好地址

cmd_write

in

寫寄存器請(qǐng)求,發(fā)出請(qǐng)求時(shí)準(zhǔn)備好地址和數(shù)據(jù)

cmd_read_ack

out

讀寄存器應(yīng)答,應(yīng)答時(shí)讀取數(shù)據(jù)有效

cmd_write_ack

out

寫寄存器應(yīng)答

read_addr

in

讀寄存器地址

write_addr

in

寫寄存器地址

read_data

out

讀出的數(shù)據(jù)

write_data

in

寫寄存器數(shù)據(jù)

ds1302_io 端口

ds1302 模塊主要完成時(shí)間寄存器的讀寫控制,狀態(tài)機(jī)狀態(tài)較為簡(jiǎn)單。

ds1302 模塊狀態(tài)機(jī)

信號(hào)名稱

方向

說(shuō)明

clk

in

時(shí)鐘輸入

rst

in

異步復(fù)位輸入,高復(fù)位

ds1302_ce

out

DS1302 CE,高有效

ds1302_sclk

out

DS1302 串行時(shí)鐘

ds1302_io

inout

DS1302 數(shù)據(jù)

write_time_req

in

ds1302 寫時(shí)間請(qǐng)求,請(qǐng)求發(fā)出時(shí),時(shí)間數(shù)據(jù) write_second、write_minute、write_hour、

write_date、write_month、write_week、write_year 要 有效

write_time_ack

out

寫時(shí)間請(qǐng)求應(yīng)答

write_second

in

寫時(shí)間:秒,BCD 碼,00-59

write_minute

in

寫時(shí)間:分,BCD 碼,,00-59

write_hour

in

寫時(shí)間:時(shí),BCD 碼,,00-23

write_date

in

寫時(shí)間:日,BCD 碼,,01-31

write_month

in

寫時(shí)間:月,BCD 碼,,01-12

write_week

in

寫時(shí)間:周,BCD 碼,,01-07

write_year

in

寫時(shí)間:年,BCD 碼,,00-99

read_time_req

in

讀時(shí)間請(qǐng)求

read_time_ack

out

讀時(shí)間請(qǐng)求應(yīng)答

read_second

out

讀時(shí)間:秒,BCD 碼,00-59

read_minute

out

讀時(shí)間:分,BCD 碼,,00-59

read_hour

out

讀時(shí)間:時(shí),BCD 碼,,00-23

read_date

out

讀時(shí)間:日,BCD 碼,,01-31

read_month

out

讀時(shí)間:月,BCD 碼,,01-12

read_week

out

讀時(shí)間:周,BCD 碼,,01-07

read_year

out

讀時(shí)間:年,BCD 碼,,00-99

ds1302 模塊端口

ds1302_test 模塊主要 CH 狀態(tài)檢測(cè),CH 位于秒寄存器的 BIT7 位,上電后首先讀取時(shí)間,判斷秒寄存器的 CH 狀態(tài),如果為高,表示 DS1302 暫停,狀態(tài)機(jī)進(jìn)入“S_WRITE_CH”,將 CH 寫 0, 并將一個(gè)初始時(shí)間寫入,然后循環(huán)不斷的讀取時(shí)間寄存器。

ds1302_test 狀態(tài)機(jī)

信號(hào)名稱

方向

說(shuō)明

clk

in

時(shí)鐘輸入

rst

in

異步復(fù)位輸入,高復(fù)位

ds1302_ce

out

DS1302 CE,高有效

ds1302_sclk

out

DS1302 串行時(shí)鐘

ds1302_io

inout

DS1302 數(shù)據(jù)

read_second

out

時(shí)間:秒,BCD 碼,00-59

read_minute

out

時(shí)間:分,BCD 碼,00-59

read_hour

out

時(shí)間:時(shí),BCD 碼,00-23

read_date

out

時(shí)間:日,BCD 碼,01-31

read_month

out

時(shí)間:月,BCD 碼,01-12

read_week

out

時(shí)間:周,BCD 碼,01-07

read_year

out

時(shí)間:年,BCD 碼,00-99

ds1302_test 端口

4 實(shí)驗(yàn)現(xiàn)象

將程序下載到開(kāi)發(fā)板以后,可以看到數(shù)碼管一個(gè)初始時(shí)間,然后每秒時(shí)間改變一次,如果裝有紐扣電池,這個(gè)時(shí)間會(huì)持續(xù)走下去,不會(huì)因?yàn)閿嚯姾笸V?;如果沒(méi)有紐扣電池,可以在不斷電的情況下重新下載程序,時(shí)間不會(huì)因?yàn)槌绦蛑袛喽V?。也可以斷電后等待一分鐘左右,重新上電,RTC 保存的時(shí)間即會(huì)消失,可以重新下載程序。

紐扣電池型號(hào)為 CR1220,安裝時(shí)注意正極朝上,取下時(shí)用鑷子撥動(dòng)黃色彈片,即可彈出電池。

部分代碼展示:

//*************************************************************************
//Copyright (c) 2017,ALINX(shanghai) Technology Co.,Ltd,All rights reserved
//
//                   File Name  :  seg_bcd.v
//                Project Name  :  
//                      Author  :  meisq
//                       Email  :  msq@qq.com
//                     Company  :  ALINX(shanghai) Technology Co.,Ltd
//                         WEB  :  http://www.alinx.cn/
//==========================================================================
//   Description:   
//
//   
//==========================================================================
//  Revision History:
//  Date          By            Revision    Change Description
//--------------------------------------------------------------------------
//  2017/6/19     meisq         1.0         Original
//*************************************************************************/
module seg_bcd(
input clk,
input rst_n,
output[5:0] seg_sel,
output[7:0] seg_data,
input [23:0]seg_bcd
);
/*Four bits represent a decimal number*/
wire[6:0] seg7_data_0;
seg_decoder seg_decoder_m0(
.bin_data(seg_bcd[23:20]),
.seg_data(seg7_data_0)
);
wire[6:0] seg7_data_1;
seg_decoder seg_decoder_m1(
.bin_data(seg_bcd[19:16]),
.seg_data(seg7_data_1)
);
wire[6:0] seg7_data_2;
seg_decoder seg_decoder_m2(
.bin_data(seg_bcd[15:12]),
.seg_data(seg7_data_2)
);
wire[6:0] seg7_data_3;
seg_decoder seg_decoder_m3(
.bin_data(seg_bcd[11:8]),
.seg_data(seg7_data_3)
);

點(diǎn)擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=1346

  • 2-241111201P6433.docx
    下載

相關(guān)推薦