基於FPGA的呼吸燈設計

2021-07-23 06:30:37 字數 3937 閱讀 2079

網上類似的標題很多,有一些呼吸燈的設計是基於微控制器的,還有一部分設計是基於fpga的,我也一時手癢,將這兩天自己重新寫的verilog描述語句曬出來,免得壓箱底放久了,出現發霉點。

為什麼說重新寫的呢,之前有老師教過,講過呼吸燈,並且畫出了 波形圖和框圖,這段時間,略有閒暇,就將之前學習的程式,重新再寫一遍,看看自己是不是真的掌握了,還是說僅僅停留在 知道 這一層面上。

如果哪一天,我的大腦在看到某一課題專案時,能夠立刻在腦海裡構建出 框圖,並且瞬時構思出 波形圖,哈哈,那就真的達到了我內心期盼的高峰;

我目前參加的培訓班在上海,報的是週末班課程,培訓班的老師上課認真、細緻的,而且還很熱情,有什麼問題能夠快速給你解惑,我是我所最看重的。其他的培訓班老師怎麼樣我不知道了,也無權置評;沒有經歷是沒有發言權嘛!

言歸正傳,咱們講講呼吸燈方面的知識;

呼吸燈最早是被蘋果公司開發出來的,已經面世,立刻吸引眾多科技公司效仿;

呼吸燈,顧名思義,就是模仿人的呼吸,由亮變暗===》再===》由暗變亮===》由亮變暗.......,如此迴圈往復。

1:呼吸燈分為兩個部分,乙個部分是 由亮變暗,

乙個部分是 由暗變亮,

2:當由亮變暗,也就是: 

首先,占空比100%為零,

然後,占空比99%為零,1%為1;等於占空比100%

然後,占空比98%為零,2%為1;等於占空比100%

然後,占空比2%為零,98%為1;等於占空比100%

然後,占空比1%為零,99%為1;等於占空比100%

3:當由暗變亮,也就是:

首先,占空比100%為1,

然後,占空比99%為1,1%為零;等於占空比100%

然後,占空比98%為1,2%為零;等於占空比100%

然後,占空比2%為1,98%為零;等於占空比100%

然後,占空比1%為1,99%為零;等於占空比100%

01)定義:乙個完整的呼吸燈時間為2s,也就是,由亮變暗需要1s,由暗變亮需要1s;

02)將    1s分為1000等份,也就是 由亮變暗,需要1000次的變化,每次為1ms

03)將1ms分為1000等份,占空比100%過渡到0%,需要1000次的變化,每次為1us;

(  借鑑霧盈網友的圖,我們的方法是相同的 ,都是乙個老師教授的,估計是我之前幾屆的)

呼吸燈是之前led顯示案例相關思路的乙個彙總整合,屬於一次昇華;解題的思路很重要,思路清晰了,描述起來會如有神助,很快就能結束這個課題專案。

有的人覺得可能很簡單,技術層面的事情如果捅破窗戶紙,本就是很簡單。夯實基礎真的很重要,在基礎厚實的過程中,你的感覺或者多次的鍛鏈形成的一直解題直覺會形成,這是極為重要的。

會者不難,難者不會;懂的人再接再厲,不懂的人埋頭趕路,哪天抬頭時,或許你會驚訝於自己已然成熟悟道。

01)霧盈fpga筆記之(一):基於fpga的呼吸燈簡單實驗程式

02)「流水燈」公升級,基於fpga的呼吸燈設計

//***********************************===//

//==fosc : 50mhz

//==timescale : 1ns/1ns

//==file name : huxideng.v

//==date : 2016-09-27

//==author : cy

//==function : huxideng,由滅到亮再到滅....迴圈往復

//==description:

////

//***********************************===//

module huxideng(

input wire sclk,

input wire rst_n,

output reg huxideng_out

); //***************===//

parameter t_s=10'd999; //1000

parameter t_ms=10'd999; //1000

parameter t_us=6'd49; //1us

// parameter t_2us=10'd999;

//***************===//

// reg [25:0] cnt_2s;

// reg [15:0] cnt_2ms;

// reg [6:0] cnt_2us;

/*w我想的是錯的,我一直囿於以前的印象,cnt_2s, 需要嗎?

你是不是用不到,只是將2是分為100份,你寫的是啥?需要自己的想法*/

reg [9:0] cnt_s;

reg [9:0] cnt_ms;

reg [5:0] cnt_us;

// reg [5:0] cnt_sclk;

reg flag;

//*****=cnt_1us*****=//

always@(posedge sclk or negedge rst_n)

if(!rst_n)

cnt_us <=6'd0;

else if(cnt_us==t_us)

cnt_us <=6'd0;

else

cnt_us <= cnt_us+1'b1;

//*****cnt_1ms*****===//

always@(posedge sclk or negedge rst_n)

if(!rst_n)

cnt_ms <=10'd0;

else if(cnt_us==t_us&&cnt_ms==t_ms)

cnt_ms <=10'd0;

else if(cnt_us==t_us)

cnt_ms <= cnt_ms+1'b1;

//*****cnt_1s*****====//

always@(posedge sclk or negedge rst_n)

if(!rst_n)

cnt_s <=10'd0;

else if(cnt_s==t_s&&cnt_ms==t_ms&&cnt_us==t_us)

cnt_s <=10'd0;

else if(cnt_ms==t_ms&&cnt_us==t_us)

cnt_s <= cnt_s+1'b1;

//*****=flag*****===//

always@(posedge sclk or negedge rst_n)

if(!rst_n)

flag <=1'b0;

else if(cnt_s==t_s&&cnt_ms==t_ms&&cnt_us==t_us)

flag <= ~flag;

else

flag <= flag;

//*****control*****==//

always@(posedge sclk or negedge rst_n)

if(!rst_n)

huxideng_out <=1'b1;

else if(cnt_scnt_ms&&flag==1'b1)

huxideng_out <=1'b0;

else

huxideng_out <=1'b1;

endmodule

cnt_ms&&flag==1'b1)

huxideng_out <=1'b0;

else

huxideng_out <=1'b1;

endmodule

基於FPGA的VHDL語言呼吸燈設計

網上的各種資料講解地不是很全,希望能把自己的思考分享給大家,一同學習。有不足的地方希望大家能指出,共同進步!本設計在alteracyclone ii ep2c35 平台上,利用鎖相環 計數器等數位電路,產生占空比可隨時間自動變化的pwm波形,從而控制led燈的亮度變化,實現以2s為週期的led燈的呼...

基於Verilog實現呼吸燈

首先掌握秒的單位換算,這裡總結一些。因為筆者目前用的大多為50mhz,所以介紹以此為例。但關於秒的轉換全世界都是一樣的。1mhz 1,000khz 1,000,000hz 頻率 是用單位時間內完成的週期性變化的次數,是描述週期運動頻繁程度的量。因此結合以上內容,50mhz,就是說,兩個相鄰時鐘上公升...

基於51微控制器的呼吸燈

原理 由於人眼的視覺殘留特性 人眼在觀察景物時,光訊號傳入大腦神經,需經過一段短暫的時間,光的作用結束後,視覺形象並不立即消失,這種殘留的視覺稱 後像 視覺的這一現象則被稱為 視覺暫留 舉例 我們家裡使用的燈是50hz,一秒鐘會亮滅50次,但是我們覺得燈是一直亮著的。但是亮和暗的程度取決於發光和不發...