本(běn)文(wén)为(wèi)明(míng)德揚原創文(wén)章(zhāng),轉(zhuǎn)载請注明(míng)出(chū)处!
呼吸燈(dēng)是(shì)指燈(dēng)光(guāng)在(zài)微電(diàn)腦的(de)控制之下(xià)完成(chéng)由(yóu)亮(liàng)到(dào)暗(àn)的(de)逐漸變(biàn)化(huà),感(gǎn)覺好(hǎo)像是(shì)人(rén)在(zài)呼吸。其廣泛應(yìng)用(yòng)于(yú)手(shǒu)機(jī)、電(diàn)腦等電(diàn)子産品之上(shàng),并成(chéng)为(wèi)各(gè)大品牌(pái)新款手(shǒu)機(jī)的(de)賣(mài)點(diǎn)之一(yī),起到(dào)一(yī)个(gè)通(tòng)知提(tí)醒的(de)作用(yòng)。每个(gè)人(rén)都應(yìng)該使用(yòng)过(guò)带(dài)有(yǒu)呼吸燈(dēng)的(de)手(shǒu)機(jī),看(kàn)着燈(dēng)光(guāng)由(yóu)暗(àn)淡逐漸一(yī)點(diǎn)點(diǎn)變(biàn)亮(liàng),繼而(ér)在(zài)最(zuì)亮(liàng)的(de)时(shí)刻開(kāi)始逐漸變(biàn)暗(àn)、熄滅最(zuì)後(hòu)歸于(yú)虛无,就(jiù)像酣睡中(zhōng)随着人(rén)的(de)呼吸而(ér)起伏的(de)胸膛。每當看(kàn)到(dào)手(shǒu)機(jī)屏幕上(shàng)的(de)呼吸燈(dēng)閃爍时(shí),你是(shì)否想(xiǎng)过(guò),如(rú)何自(zì)己設計(jì)一(yī)个(gè)呼吸燈(dēng),讓它(tā)伴随着你的(de)呼吸變(biàn)亮(liàng)變(biàn)暗(àn)。沒(méi)有(yǒu)做过(guò)呼吸燈(dēng)的(de)同(tóng)学不(bù)要(yào)緊,我(wǒ)将会(huì)为(wèi)大家(jiā)展(zhǎn)示一(yī)个(gè)使用(yòng)清(qīng)晰整潔的(de)代(dài)碼設計(jì)出(chū)来(lái)的(de)呼吸燈(dēng)。認真(zhēn)看(kàn)完这(zhè)篇(piān)文(wén)章(zhāng),我(wǒ)可(kě)以(yǐ)保證你能(néng)够真(zhēn)正(zhèng)了(le)解(jiě)呼吸燈(dēng)是(shì)使用(yòng)怎樣(yàng)的(de)原理設計(jì)的(de),并且可(kě)以(yǐ)自(zì)己独立設計(jì)出(chū)自(zì)己的(de)呼吸燈(dēng)。快(kuài)去(qù)點(diǎn)亮(liàng)它(tā)吧!
介紹一(yī)下(xià)呼吸燈(dēng)設計(jì)的(de)基本(běn)原理:
呼吸燈(dēng)是(shì)通(tòng)过(guò)控制led燈(dēng)閃爍的(de)頻率来(lái)控制其亮(liàng)度(dù)的(de)。什麼(me)是(shì)閃爍的(de)頻率?比如(rú)我(wǒ)们(men)讓led燈(dēng)在(zài)1s內(nèi)持(chí)續为(wèi)亮(liàng),那(nà)麼(me)这(zhè)个(gè)led燈(dēng)将会(huì)一(yī)直(zhí)以(yǐ)最(zuì)大的(de)亮(liàng)度(dù)閃亮(liàng),亮(liàng)的(de)頻率就(jiù)是(shì)1;當我(wǒ)们(men)讓led燈(dēng)在(zài)1s內(nèi)持(chí)續为(wèi)暗(àn),那(nà)麼(me)led燈(dēng)将会(huì)一(yī)直(zhí)熄滅,亮(liàng)的(de)頻率就(jiù)是(shì)0;若是(shì)我(wǒ)们(men)讓led燈(dēng)在(zài)1s中(zhōng)前(qián)0.5s內(nèi)为(wèi)亮(liàng)、後(hòu)0.5s內(nèi)为(wèi)滅,那(nà)麼(me)led燈(dēng)将会(huì)一(yī)直(zhí)一(yī)閃一(yī)滅,持(chí)續下(xià)去(qù)...我(wǒ)们(men)可(kě)以(yǐ)大膽(dǎn)的(de)想(xiǎng)象(xiàng)一(yī)下(xià),如(rú)果(guǒ)我(wǒ)们(men)能(néng)够控制led燈(dēng)在(zài)1s內(nèi)一(yī)開(kāi)始亮(liàng)的(de)頻率为(wèi)0,然後(hòu)一(yī)點(diǎn)一(yī)點(diǎn)的(de)增大亮(liàng)的(de)頻率直(zhí)至(zhì)为(wèi)1,那(nà)麼(me)led燈(dēng)是(shì)否就(jiù)可(kě)以(yǐ)由(yóu)暗(àn)慢(màn)慢(màn)變(biàn)到(dào)最(zuì)亮(liàng)。道(dào)理已經(jīng)明(míng)白了(le),那(nà)麼(me)我(wǒ)们(men)要(yào)怎樣(yàng)控制led燈(dēng)亮(liàng)的(de)頻率?通(tòng)过(guò)控制led燈(dēng)亮(liàng)的(de)时(shí)間(jiān)长度(dù)。怎樣(yàng)控制燈(dēng)亮(liàng)的(de)时(shí)間(jiān)?通(tòng)过(guò)計(jì)數FPGA的(de)时(shí)鐘(zhōng)个(gè)數。該怎樣(yàng)計(jì)數FPGA的(de)时(shí)鐘(zhōng)个(gè)數?
下(xià)面(miàn)講一(yī)下(xià)本(běn)設計(jì)的(de)基本(běn)思(sī)想(xiǎng):
我(wǒ)们(men)讓led燈(dēng)在(zài)1s內(nèi)由(yóu)暗(àn)慢(màn)慢(màn)點(diǎn)亮(liàng),那(nà)麼(me)我(wǒ)们(men)不(bù)妨将1s先(xiān)分(fēn)成(chéng)1000等份,每一(yī)等份就(jiù)是(shì)1ms,用(yòng)一(yī)个(gè)計(jì)數ms个(gè)數的(de)計(jì)數器cnt_ms来(lái)計(jì)數。1ms分(fēn)成(chéng)1000等份,每一(yī)等份就(jiù)是(shì)1us,用(yòng)計(jì)數器cnt_us来(lái)标(biāo)示。由(yóu)于(yú)MP801開(kāi)發(fà)板的(de)FPGA时(shí)鐘(zhōng)頻率是(shì)20ns,那(nà)麼(me)我(wǒ)们(men)就(jiù)将1us分(fēn)成(chéng)50份,每一(yī)份就(jiù)是(shì)20ns,即一(yī)个(gè)时(shí)鐘(zhōng)周期(qī)。通(tòng)过(guò)計(jì)數时(shí)鐘(zhōng)周期(qī)的(de)个(gè)數,計(jì)數到(dào)第(dì)50个(gè)时(shí),就(jiù)到(dào)达(dá)了(le)1us,計(jì)數器cnt_us就(jiù)開(kāi)始加1;cnt_us計(jì)數到(dào)1000个(gè)时(shí),就(jiù)到(dào)达(dá)了(le)1ms,接着計(jì)數到(dào)1s...时(shí)間(jiān)已經(jīng)劃(huà)分(fēn)好(hǎo)了(le),那(nà)麼(me)我(wǒ)们(men)該怎麼(me)控制led燈(dēng)亮(liàng)的(de)时(shí)間(jiān)?
通(tòng)过(guò)PWM原理来(lái)控制led亮(liàng)滅。不(bù)了(le)解(jiě)PWM原理不(bù)重(zhòng)要(yào),只(zhī)要(yào)能(néng)读(dú)懂下(xià)面(miàn)一(yī)句(jù)話(huà)即可(kě):
在(zài)0-1S內(nèi):讓led燈(dēng)在(zài)第(dì)0-1ms之間(jiān)亮(liàng)的(de)时(shí)間(jiān)为(wèi)0us;在(zài)第(dì)1-2ms內(nèi)亮(liàng)1us,在(zài)第(dì)2-3ms內(nèi)亮(liàng)2us...在(zài)第(dì)999-1000Ms內(nèi)亮(liàng)999us。
思(sī)路(lù)已經(jīng)很清(qīng)晰了(le),接下(xià)来(lái)我(wǒ)们(men)就(jiù)可(kě)以(yǐ)進(jìn)行電(diàn)路(lù)設計(jì)。
信(xìn)号(hào)列表(biǎo):
|
信(xìn)号(hào)名稱 |
信(xìn)号(hào)類(lèi)型 |
位宽(kuān) |
功能(néng)描述 |
|
clk |
I |
1 |
时(shí)鐘(zhōng)信(xìn)号(hào) |
|
rst_n |
I |
1 |
複位信(xìn)号(hào) |
|
led |
O |
1 |
輸出(chū)led信(xìn)号(hào) |
|
|
|||
|
led_bright |
wire |
1 |
控制led亮(liàng)滅 |
|
cnt_ns |
reg |
10 |
用(yòng)来(lái)計(jì)數20ns的(de)时(shí)鐘(zhōng)周期(qī)數,計(jì)數到(dào)50个(gè)即到(dào)达(dá)1us,計(jì)數器清(qīng)零(líng) |
|
add_cnt_ns |
wire |
1 |
計(jì)數器cnt_ns加一(yī)指示信(xìn)号(hào),一(yī)直(zhí)为(wèi)1 |
|
end_cnt_ns |
wire |
1 |
計(jì)數器cnt_ns清(qīng)零(líng)指示信(xìn)号(hào),當cnt_ns計(jì)數到(dào)第(dì)50时(shí)为(wèi)1 |
|
cnt_us |
reg |
10 |
用(yòng)来(lái)計(jì)數産生(shēng)1us的(de)个(gè)數 |
|
add_cnt_us |
wire |
1 |
計(jì)數器cnt_us加一(yī)指示信(xìn)号(hào),end_cnt_ns拉高(gāo)时(shí)有(yǒu)效 |
|
end_cnt_us |
wire |
1 |
計(jì)數器cnt_us清(qīng)零(líng)指示信(xìn)号(hào),cnt_us計(jì)數到(dào)第(dì)1000个(gè)时(shí)拉高(gāo) |
|
cnt_ms |
reg |
10 |
用(yòng)来(lái)計(jì)數1ms的(de)个(gè)數,加一(yī)条(tiáo)件(jiàn)是(shì)end_cnt_us有(yǒu)效 |
|
add_cnt_ms |
wire |
1 |
cnt_ms加一(yī)指示信(xìn)号(hào),end_cnt_us拉高(gāo)时(shí)有(yǒu)效 |
|
end_cnt_ms |
wire |
1 |
計(jì)數器cnt_ms清(qīng)零(líng)指示信(xìn)号(hào),當cnt_ms計(jì)數到(dào)第(dì)1000个(gè)时(shí)拉高(gāo) |
|
cnt_s |
reg |
1 |
用(yòng)来(lái)計(jì)數1s的(de)个(gè)數 |
|
cdd_cnt_s |
wire |
1 |
cnt_s加一(yī)指示信(xìn)号(hào),當end_cnt_ms拉高(gāo)有(yǒu)效 |
|
cnd_cnt_s |
wire |
1 |
計(jì)數器Cnt_s清(qīng)零(líng)指示信(xìn)号(hào),cnt_s計(jì)數到(dào)2拉高(gāo) |
計(jì)數us信(xìn)号(hào):
計(jì)數ms信(xìn)号(hào):
控制led亮(liàng)的(de)指示信(xìn)号(hào):
按照我(wǒ)上(shàng)面(miàn)的(de)設計(jì)思(sī)想(xiǎng),在(zài)100ms內(nèi),控制亮(liàng)的(de)时(shí)間(jiān)不(bù)大于(yú)100us;在(zài)200ms內(nèi),控制亮(liàng)的(de)时(shí)間(jiān)不(bù)大于(yú)200us。
led輸出(chū)信(xìn)号(hào):
在(zài)亮(liàng)的(de)时(shí)間(jiān)區(qū)域內(nèi)led給(gěi)低電(diàn)平,led亮(liàng);其他(tā)时(shí)間(jiān)給(gěi)led高(gāo)電(diàn)平,led滅。
OK,将工程綜合編譯,分(fēn)配好(hǎo)管(guǎn)脚,燒录(lù)到(dào)MP801開(kāi)發(fà)板中(zhōng),即可(kě)观察到(dào)屬于(yú)你自(zì)己的(de)呼吸燈(dēng)。
可(kě)以(yǐ)看(kàn)出(chū),使用(yòng)至(zhì)簡設計(jì)法設計(jì)出(chū)的(de)代(dài)碼,思(sī)路(lù)清(qīng)晰,代(dài)碼簡潔干(gàn)淨、有(yǒu)迹可(kě)循,只(zhī)要(yào)設計(jì)的(de)思(sī)路(lù)清(qīng)晰,設計(jì)出(chū)的(de)代(dài)碼也(yě)同(tóng)樣(yàng)是(shì)易读(dú)易懂,每个(gè)信(xìn)号(hào)都有(yǒu)其特(tè)定(dìng)的(de)功能(néng)。因(yīn)此(cǐ)FPGA設計(jì)的(de)核心(xīn)是(shì)設計(jì)思(sī)路(lù),而(ér)不(bù)是(shì)設計(jì)代(dài)碼,代(dài)碼只(zhī)是(shì)用(yòng)来(lái)告訴編譯器我(wǒ)们(men)的(de)設計(jì)思(sī)路(lù),再由(yóu)編譯器綜合成(chéng)硬(yìng)件(jiàn)電(diàn)路(lù)。使用(yòng)一(yī)種(zhǒng)規範簡潔的(de)代(dài)碼設計(jì)方(fāng)法可(kě)以(yǐ)幫助我(wǒ)们(men)更(gèng)好(hǎo)的(de)表(biǎo)現(xiàn)出(chū)我(wǒ)们(men)的(de)設計(jì)思(sī)路(lù),这(zhè)在(zài)我(wǒ)们(men)進(jìn)行FPGA設計(jì)过(guò)程中(zhōng)可(kě)以(yǐ)极(jí)大提(tí)高(gāo)我(wǒ)们(men)的(de)設計(jì)效率。
以(yǐ)上(shàng)就(jiù)是(shì)設計(jì)呼吸燈(dēng)的(de)思(sī)考與(yǔ)步驟,需要(yào)此(cǐ)工程明(míng)德揚設計(jì)的(de)源碼的(de)朋友可(kě)以(yǐ)加我(wǒ)的(de)QQ:3358622769无償獲取(qǔ),也(yě)欢迎大家(jiā)與(yǔ)我(wǒ)進(jìn)行深入(rù)讨論,期(qī)待與(yǔ)大家(jiā)一(yī)起学習進(jìn)步!








