網上類似的標題很多,有一些呼吸燈的設計是基於微控制器的,還有一部分設計是基於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的呼吸燈設計
//***********************************===//
cnt_ms&&flag==1'b1)//==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
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次,但是我們覺得燈是一直亮著的。但是亮和暗的程度取決於發光和不發...