PMODAD1 實現模擬資料的採集 時序篇

2021-08-03 05:46:34 字數 2139 閱讀 4464

ad7476是採用類似spi的序列介面實現接入主控裝置。

我們看資料手冊,這裡有三根線 sclk,cs,sdata。我們看看時序:

其中cs和sclk是主控端(fpga或者微控制器),sdata是7476的輸出。這個波形一看,我們就知道可以使用計數器實現。

根據我們圖上標註的紅色的數字,可以做乙個計數器,數值從0-34迴圈。cs在0時候開始輸出0,在33時候開始輸出1,而當計數器數值是8,10,這些時鐘的上公升邊緣時,sdata資料已經ready可以被打入暫存器。這裡注意上第一紅線位置我們看到是8,9之間,那應該取8還是9呢,我們看到資料db11和8同時就緒的,所以應該取吧,他們是時鐘對齊的。

這樣乙個採集週期用了35時鐘週期,而乙個採集週期是1us(因為7476是1m 的取樣速率),這樣就要求我們採集器的時鐘週期是35m。有了以上分析,**呼之欲出。我們簡單寫寫。

module ad7476_sample(

input clk,rst,

input adc_sdata,

output reg adc_sclk,adc_csn,

output reg [11:0] adc_res,

output reg adc_valid

);reg [7:0] cntr ;

always @ (posedge clk) //clk 35mhz

if (rst)cntr<=0;else if (cntr == 34) cntr<=0;else cntr<=cntr+1;

always @ (posedge clk)

case (cntr )

0: adc_csn <= 0;

33: adc_csn <= 1;

endcase

always @ (posedge clk)

case (cntr)

//0,1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,34 : 

34,0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,33 :adc_sclk<=1;

default adc_sclk<=0;

endcase 

always @ (posedge clk)

case (cntr )

8: adc_res[11] <= adc_sdata ;

10:adc_res[10] <= adc_sdata ;

12:adc_res[9] <= adc_sdata ;

14:adc_res[8] <= adc_sdata ;

16:adc_res[7] <= adc_sdata ;

18:adc_res[6] <= adc_sdata ;

20:adc_res[5] <= adc_sdata ;

22:adc_res[4] <= adc_sdata ;

24:adc_res[3] <= adc_sdata ;

26:adc_res[2] <= adc_sdata ;

28:adc_res[1] <= adc_sdata ;

30:adc_res[0] <= adc_sdata ;

endcase

always @ (posedge clk)adc_valid <= cntr == 32 ;

endmodule

上述**信手拈來,沒有編譯可能存在筆誤。

這裡用到了乙個adc_valid來採集的資料已經更新了,可以用來做下游資料控制的寫訊號。

我們看到根據時序來構造控制邏輯是很簡單的,讀者可以列印下時序圖,之後用筆在上面畫畫,確定一下計數器的分配,思路明細之後就可以程式設計了。

這裡思路其實是狀態機,但是有由於幾乎沒有輸入訊號控制狀態的轉移,實際上也就成了計數器。於是設定乙個主計數器迴圈運轉,其他always塊根據當前計數器數值決定自己具體做點什麼。

資料結構(1) 使用物件導向模擬陣列

陣列是一種常用的資料結構,陣列具有不可變性,建立後的陣列的長度固定,通過索引訪問陣列中的元素,訪問速度快,刪除新增效率低。通過物件導向模擬陣列,模擬的陣列具有以下功能 新增新元素 展示查詢元素所在位置 根據索引獲取元素 根據索引刪除元素 修改指定位置的元素 同時使用兩個演算法對陣列進行操作 有序新增...

python實現模擬數字的魔術遊戲

在遊戲中,魔術師要每位觀眾心裡想乙個三位數abc a b c分別是百位 十位和個位數字 然後魔術師讓觀眾心中記下acb bac bca cab cba五個數以及這5個數的和值。只要觀眾說出這個和是多少,則魔術師一定能猜出觀眾心裡想的原數abc是多少。例如,觀眾甲說他計算的和值是1999,則魔術師立即...

localstorage模擬資料庫的簡化版本

使用localstorage模擬乙個資料庫的操作 簡化版本 localstorage的每一項就是模擬的每一張二維表 目前僅支援cmd規範,vue等前端框架可以自己對下面的 做一些修改.function window json字串轉化為物件 function json2obj jsonstr retu...