<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于AVR單片機(jī)的高精度頻率調(diào)節(jié)器設(shè)計(jì)

          基于AVR單片機(jī)的高精度頻率調(diào)節(jié)器設(shè)計(jì)

          作者: 時(shí)間:2013-10-24 來(lái)源:網(wǎng)絡(luò) 收藏

            3 輸入設(shè)備與輸出設(shè)備

            3.1 鍵盤輸入設(shè)備與相應(yīng)軟件

            本設(shè)計(jì)采用了4×4鍵盤作為頻率輸入設(shè)備。由于按鍵個(gè)數(shù)少,只有16個(gè),需要表示從1Hz — 10MHz的廣泛頻率,故在軟件設(shè)計(jì)中采用了掃描方式。將端口A的8根I/O引腳全部作為掃描鍵盤使用。鍵盤定義除了0——9共10個(gè)數(shù)字之外,還定義了“退格”鍵、“全刪”鍵、“輸入”鍵、“+1Hz”鍵和“-1Hz”鍵,這樣就可以極大地方便用戶隨時(shí)修改頻率和微調(diào)頻率。讀入用戶輸入的頻率值時(shí),采用了延時(shí)防抖抗干擾的軟件程序。掃描變量的初始值設(shè)置為0xFE,以低電平0依次變化實(shí)現(xiàn)掃描。本單片機(jī)鍵盤掃描的C代碼如下所示:

            sccode=0xFE;/*every scan initiative value,11111110*/

            while(sccode!=0xEF)/*sccode is not 11101111,follow;or return 0*/

            {

            PORTA=sccode;/*send scan code 11111110 to portA*/

            PORTA=sccode;/*send scan code 11111110 to portA*/

            if((PINA0xF0)!=0xF0)/*read portA,if high 4 bits are not 1111,key pressed in this line*/

            {

            recode=(PINA0xF0)|0x0F;/*portA high 4 bits reserved,low 4 bits are 1111*/

            while((PINA0xF0)!=0xF0)

            {};

            /*read portA,if portA high 4 bits are not 1111,key pressed,

            if key pressed,we must wait,wait for key released*/

            return((~sccode)+(~recode));/*return row+column*/

            }

            else

            {

            sccode=(sccode1)|0x01;

            /*scan code left shift 1 bit, add 1 to right,11111101*/

            }

            }

            最終返回的掃描結(jié)果包括按鍵所在的行值和列值。判斷步驟是:先將端口A的高4比特記錄在掃描變量recode中,低4比特置為1111。再次讀入端口A的高4比特,由此判斷按鍵是否松開。用戶還未松開按鍵時(shí),高4比特當(dāng)中有低電平0存在,此時(shí)只能循環(huán)等待。只有當(dāng)用戶松開按鍵之后,才將高4比特與低4比特進(jìn)行按位反操作,并復(fù)合形成最終返回的掃描結(jié)果。如果沒(méi)有檢測(cè)到有按鍵按下,則將掃描變量sccode向左移位1比特,繼續(xù)進(jìn)行下一次掃描。

            3.2 液晶顯示模塊

            用戶在多次進(jìn)行輸入頻率以及“+1Hz”和“-1Hz”微調(diào)后,專注于觀察信號(hào)輸出對(duì)下一級(jí)電路的影響,往往忘了目前系統(tǒng)的輸出頻率。這樣導(dǎo)致在精確測(cè)試中要求微調(diào)時(shí)也不知該向高調(diào)整還是向低調(diào)整。為了告知用戶系統(tǒng)所處的當(dāng)前頻率,我們擴(kuò)展了液晶顯示模塊,實(shí)現(xiàn)了當(dāng)前頻率在液晶顯示模塊上實(shí)時(shí)顯示。液晶顯示模塊占用了單片機(jī)Atmega16L的PD0-PD7作為數(shù)據(jù)接口,采用了單片機(jī)的PB0-PB4作為控制端口。圖3給出了液晶顯示模塊與控制器電路設(shè)計(jì)電路圖。

            PB0引腳選擇液晶顯示模塊的數(shù)據(jù)存儲(chǔ)器或指令存貯器,PB1引腳表明此次操作是讀液晶顯示模塊還是寫液晶顯示模塊,PB2則構(gòu)成上升沿與下降沿完成讀寫時(shí)序。PB3負(fù)責(zé)選中液晶顯示模塊的左半部分,PB4負(fù)責(zé)選中右半部分,通常PB3與PB4都置為1。需要注意的是,在數(shù)據(jù)或指令準(zhǔn)備好了之后,再讓PB2進(jìn)行電平變化,否則讀寫會(huì)出錯(cuò)。

            本設(shè)計(jì)借助單片機(jī)Atmega16L的大容量程序存貯器,將英文字母和若干漢字的字型點(diǎn)陣作為數(shù)組存入單片機(jī)的程序存貯器中。需要顯示某字符時(shí)直接調(diào)用數(shù)組,從而簡(jiǎn)化了設(shè)計(jì),實(shí)現(xiàn)了英文、漢字以及圖形的顯示。本設(shè)計(jì)顯示界面友好,操作可控性強(qiáng)。
          基于AVR單片機(jī)的高精度頻率調(diào)節(jié)器設(shè)計(jì)
          圖3 液晶顯示模塊與控制器電路設(shè)計(jì)

            4 結(jié)論

            為了方便現(xiàn)代化工業(yè)生產(chǎn)與精確的頻率測(cè)試,我們?cè)O(shè)計(jì)了基于的高精度。在本設(shè)計(jì)中,可以使用小鍵盤上的“+1Hz”鍵和“-1Hz”鍵,方便地進(jìn)行頻率精確到1Hz的調(diào)節(jié)。此體積小而功能強(qiáng),由Atmel公司的Atmega16L作控制核心,用戶可隨時(shí)調(diào)整系統(tǒng)輸出頻率。采用了4×4鍵盤輸入用戶設(shè)定的頻率值,占位小而效率高,編制程序讓AVR單片機(jī)掃描即可得到頻率,省去了專用鍵盤接口芯片8279。液晶顯示模塊可實(shí)時(shí)顯示當(dāng)前頻率,顯示界面友好,操作可控性強(qiáng)。本系統(tǒng)可以產(chǎn)生方波和正弦波。

            本設(shè)計(jì)的硬件與軟件均已經(jīng)應(yīng)用在某頻率測(cè)試生產(chǎn)線中。工業(yè)生產(chǎn)與測(cè)試使用表明,本設(shè)計(jì)簡(jiǎn)化了頻率調(diào)節(jié)過(guò)程,用戶使用方便,具有節(jié)電、低成本、抗干擾能力強(qiáng)、精度高速度快的特點(diǎn)。


          上一頁(yè) 1 2 下一頁(yè)

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();