畢業(yè)設(shè)計(jì)(論文)基于AVR單片機(jī)錄音筆的設(shè)計(jì)與制作_第1頁(yè)
畢業(yè)設(shè)計(jì)(論文)基于AVR單片機(jī)錄音筆的設(shè)計(jì)與制作_第2頁(yè)
畢業(yè)設(shè)計(jì)(論文)基于AVR單片機(jī)錄音筆的設(shè)計(jì)與制作_第3頁(yè)
畢業(yè)設(shè)計(jì)(論文)基于AVR單片機(jī)錄音筆的設(shè)計(jì)與制作_第4頁(yè)
畢業(yè)設(shè)計(jì)(論文)基于AVR單片機(jī)錄音筆的設(shè)計(jì)與制作_第5頁(yè)
已閱讀5頁(yè),還剩37頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、畢業(yè)設(shè)計(jì) 系 別:電子工程系專 業(yè):計(jì)算機(jī)控制班 級(jí):0802班姓 名: 設(shè)計(jì)課題:基于avr單片機(jī)錄音筆的設(shè)計(jì)與制作 指導(dǎo)老師: 前言前言avr單片機(jī)是一款功能十分強(qiáng)大,集成度非常高的數(shù)字處理系統(tǒng)。它集成了adc與pwm的模塊,而且還有硬件濾波器!它基本上能夠處理生活中實(shí)時(shí)性不太強(qiáng)的模擬信號(hào)與數(shù)字信號(hào),并實(shí)現(xiàn)通信!該課題設(shè)計(jì)基于atmega16單片機(jī),介紹和分析了錄音筆的基本原理,并做出了較為簡(jiǎn)單的錄音筆模型展示其原理!主要運(yùn)用了atmega16單片機(jī)內(nèi)部集成的adc轉(zhuǎn)換模塊以及pwm功能,將從外部接收的模擬信號(hào)轉(zhuǎn)化為數(shù)字信號(hào),并存儲(chǔ)在at45db041b存儲(chǔ)芯片中,再將從at45db041

2、b存儲(chǔ)芯片中讀取的數(shù)字信號(hào)轉(zhuǎn)化為模擬信號(hào),送到外部的喇叭中進(jìn)行播放。主要功能有錄音,存儲(chǔ),刪除,放音等!目錄i目 錄1課題分析11.1錄音筆簡(jiǎn)介11.2設(shè)計(jì)構(gòu)想12方案選擇32.1運(yùn)用專門的語(yǔ)音芯片32.2運(yùn)用avr自帶的adc以及pwm模塊33芯片簡(jiǎn)介43.1 atmega16芯片簡(jiǎn)介43.2 at45db041b芯片簡(jiǎn)介84總體設(shè)計(jì)134.1系統(tǒng)設(shè)計(jì)方框圖134.2硬件設(shè)計(jì)134.2.1硬件設(shè)計(jì)思想134.2.2聲音輸入模塊144.2.3聲音存儲(chǔ)模塊144.2.4聲音輸出模塊164.3軟件設(shè)計(jì)164.3.1軟件設(shè)計(jì)思想164.3.2程序流程圖184.3.3主函數(shù)方框圖204.4系統(tǒng)的調(diào)試與

3、總結(jié)215總結(jié)227附錄23附錄a:系統(tǒng)的總體設(shè)計(jì)原理圖23附錄b:系統(tǒng)軟件設(shè)計(jì)源程序清單24課題分析1課題分析1.1錄音筆簡(jiǎn)介數(shù)碼錄音筆,也稱為數(shù)碼錄音棒或數(shù)碼錄音機(jī),數(shù)字錄音器的一種,為了便于操作和提升錄音質(zhì)量造型并非以單純的筆型為主,攜帶方便,同時(shí)擁有多種功能,如激光筆功能、fm調(diào)頻、mp3播放等。與傳統(tǒng)錄音機(jī)相比,數(shù)碼錄音筆是通過數(shù)字存儲(chǔ)的方式來(lái)記錄音頻的。數(shù)碼錄音筆通過對(duì)模擬信號(hào)的采樣、編碼將模擬信號(hào)通過數(shù)模轉(zhuǎn)換器轉(zhuǎn)換為數(shù)字信號(hào),并進(jìn)行一定的壓縮后進(jìn)行存儲(chǔ)。而數(shù)字信號(hào)即使經(jīng)過多次復(fù)制,聲音信息也不會(huì)受到損失,保持原樣不變。1.2設(shè)計(jì)構(gòu)想 設(shè)計(jì)三個(gè)按鈕,分別實(shí)現(xiàn)錄音、刪除、放音的功能,

4、當(dāng)按下不同的按鈕時(shí),可以實(shí)現(xiàn)不同的功能。 首先要實(shí)現(xiàn)聲音信號(hào)的采集,就需要一種聲敏傳感器,可以采用mic,再加上一些濾波電路,從而實(shí)現(xiàn)聲音信號(hào)的采集。但是我們都知道,計(jì)算機(jī)處理的是數(shù)字信號(hào),而采集的聲音信號(hào)是模擬信號(hào),因此,需要實(shí)現(xiàn)從模擬信號(hào)到數(shù)字信號(hào)的轉(zhuǎn)化,可以利用專門的adc轉(zhuǎn)換芯片或者是其他的某種方法,將模擬信號(hào)轉(zhuǎn)化為數(shù)字信號(hào)。接下來(lái)就是轉(zhuǎn)化后的聲音信號(hào)的存儲(chǔ),需要某種存儲(chǔ)芯片,將信號(hào)存儲(chǔ)在芯片中,以至于掉電之后,聲音信號(hào)1不丟失。最后就是聲音的還原,將信號(hào)從存儲(chǔ)芯片中讀取出來(lái),但是此時(shí)的信號(hào)是數(shù)字信號(hào),需要進(jìn)行dac轉(zhuǎn)換,可以利用專門的dac轉(zhuǎn)換芯片或者是其他的某種方法來(lái)實(shí)現(xiàn),將轉(zhuǎn)化后

5、的模擬信號(hào),送到外部的喇叭播放。刪除則直接將存儲(chǔ)芯片中的數(shù)據(jù)刪除就行了,當(dāng)然這中間還有許多的細(xì)節(jié)問題需要考慮,例如聲音的功率放大、去除雜波等等。2方案選擇2方案選擇2.1運(yùn)用專門的語(yǔ)音芯片采用單片機(jī)控制一個(gè)語(yǔ)音芯片,再接一個(gè)flash存儲(chǔ)器的結(jié)構(gòu)。單片機(jī)可以控制錄放時(shí)間,選取特定時(shí)間段的播放以及單多聲道的錄放,容易通過改變外接存儲(chǔ)flash改變錄放時(shí)間。此方法較為簡(jiǎn)單,但是這種語(yǔ)音芯片的價(jià)格較為昂貴,還有avr單片機(jī)的功能十分強(qiáng)大、資源也比較豐富,如果把它僅僅作為一種控制開關(guān)使用,太過于浪費(fèi)了。2.2運(yùn)用avr自帶的adc以及pwm模塊avr系列的單片機(jī)內(nèi)部,已經(jīng)集成了adc和pwm模塊,利用

6、這兩個(gè)模塊,可以實(shí)現(xiàn)數(shù)模轉(zhuǎn)換和模數(shù)轉(zhuǎn)換。只要從軟件上加以控制,就可以實(shí)現(xiàn)聲音的錄放功能。此方法很好的利用了單片機(jī)的內(nèi)部資源,不但可以節(jié)約大量的費(fèi)用而且還可以讓我們更進(jìn)一步的了解avr系列單片機(jī)的內(nèi)部結(jié)構(gòu),因此在本課題中采用了這種方法。3芯片簡(jiǎn)介39 3芯片簡(jiǎn)介3.1 atmega16芯片簡(jiǎn)介1atmega16 的封裝如圖3-1所示。圖3-1 atmega16 的引腳圖atmega16 的引腳說明:vcc 數(shù)字電路的電源 gnd 地 端口 a(pa7.pa0) 端口 a 做為 a/d 轉(zhuǎn)換器的模擬輸入端。 端口 a 為 8 位雙向 i/o 口,具有可編程的內(nèi)部上拉電阻。其輸出緩沖器具有對(duì)稱的驅(qū)動(dòng)

7、特性,可以輸出和吸收大電流。作為輸入使用時(shí),若內(nèi)部上拉電阻使能,端口被外部電路拉低時(shí)將輸出電流。在復(fù)位過程中,即使系統(tǒng)時(shí)鐘還未起振,端口 a 處于高阻狀態(tài)。端口 b(pb7.pb0) 端口 b 為 8 位雙向 i/o 口,具有可編程的內(nèi)部上拉電阻。其輸出緩沖器具有對(duì)稱的驅(qū)動(dòng)特性,可以輸出和吸收大電流。作為輸入使用時(shí),若內(nèi)部上拉電阻使能,端口被外部電路拉低時(shí)將輸出電流。在復(fù)位過程中,即使系統(tǒng)時(shí)鐘還未起振,端口 b 處于高阻狀態(tài)。端口 b 也可以用做其他不同的特殊功能。端口c(pc7.pc0) 端口 c 為 8 位雙向 i/o 口,具有可編程的內(nèi)部上拉電阻。其輸出緩沖器具有對(duì)稱的驅(qū)動(dòng)特 性,可以輸

8、出和吸收大電流。作為輸入使用時(shí),若內(nèi)部上拉電阻使能,端口被外部電路拉 低時(shí)將輸出電流。在復(fù)位過程中,即使系統(tǒng)時(shí)鐘還未起振,端口 c 處于高阻狀態(tài)。如果 jtag接口使能,即使復(fù)位出現(xiàn)引腳 pc5(tdi)、 pc3(tms) 與 pc2(tck) 的上拉電阻被激活。端口 d(pd7.pd0) 端口 d 為 8 位雙向 i/o 口,具有可編程的內(nèi)部上拉電阻。其輸出緩沖器具有對(duì)稱的驅(qū)動(dòng)特 性,可以輸出和吸收大電流。作為輸入使用時(shí),若內(nèi)部上拉電阻使能,則端口被外部電路拉低時(shí)將輸出電流。在復(fù)位過程中,即使系統(tǒng)時(shí)鐘還未起振,端口 d 處于高阻狀態(tài)。 端口 d 也可以用做其他不同的特殊功能。 reset

9、復(fù)位輸入引腳。持續(xù)時(shí)間超過最小門限時(shí)間的低電平將引起系統(tǒng)復(fù)位。持續(xù)時(shí)間小于門限間的脈沖不能保證可靠復(fù)位。xtal1 反向振蕩放大器與片內(nèi)時(shí)鐘操作電路的輸入端。xtal2 反向振蕩放大器的輸出端。 avcc avcc是端口a與a/d轉(zhuǎn)換器的電源。不使用adc 時(shí),該引腳應(yīng)直接與vcc連接。使用adc時(shí)應(yīng)通過一個(gè)低通濾波器與 vcc 連接。aref a/d 的模擬基準(zhǔn)輸入引腳。atmega16 的功能說明:avr 內(nèi)核具有豐富的指令集和 32 個(gè)通用工作寄存器。所有的寄存器都直接與算邏單元(alu) 相連接,使得一條指令可以在一個(gè)時(shí)鐘周期內(nèi)同時(shí)訪問兩個(gè)獨(dú)立的寄存器。這種結(jié)構(gòu)大大提高了代碼效率,并且

10、具有比普通的 cisc 微控制器最高至 10 倍的數(shù)據(jù)吞吐率。 atmega16 有如下特點(diǎn):16k字節(jié)的系統(tǒng)內(nèi)可編程flash(具有同時(shí)讀寫的能力,即rww) ,512 字節(jié) eeprom ,1k 字節(jié) sram ,32 個(gè)通用 i/o 口線,32 個(gè)通用工作寄存器,用于邊界掃描的 jtag 接口,支持片內(nèi)調(diào)試與編程,三個(gè)具有比較模式的靈活的定時(shí)器 / 計(jì)數(shù)器(t/c),片內(nèi)/外中斷,可編程串行usart ,有起始條件檢測(cè)器的通用串行接口,8路 10位具有可選差分輸入級(jí)可編程增益 (tqfp 封裝 ) 的 adc ,具有片內(nèi)振蕩器的可編程看門狗定時(shí)器,一個(gè) spi 串行端口,以及六個(gè)可以通過

11、軟件進(jìn)行選擇的省電模式。工作于空閑模式時(shí) cpu 停止工作,而 usart、兩線接口、 a/d 轉(zhuǎn)換器、 sram、 t/c、 spi 端口以及中斷系統(tǒng)繼續(xù)工作;掉電模式時(shí)晶體振蕩器停止振蕩,所有功能除了中斷和硬件復(fù)位之外都停止工作;在省電模式下,異步定時(shí)器繼續(xù)運(yùn)行,允許用戶保持一個(gè)時(shí)間基準(zhǔn),而其余功能模塊處于休眠狀態(tài); adc 噪聲抑制模式時(shí)終止 cpu 和除了異步定時(shí)器與 adc 以外所有 i/o 模塊的工作,以降低 adc 轉(zhuǎn)換時(shí)的開關(guān)噪聲; standby 模式下只有晶體或諧振振蕩器運(yùn)行,其余功能模塊處于休眠狀態(tài),使得器件只消耗極少的電流,同時(shí)具有快速啟動(dòng)能力;擴(kuò)展 standby 模

12、式下則允許振蕩器和異步定時(shí)器繼續(xù)工作本芯片是以 atmel 高密度非易失性存儲(chǔ)器技術(shù)生產(chǎn)的。片內(nèi) isp flash 允許程序存儲(chǔ)器通過 isp 串行接口,或者通用編程器進(jìn)行編程,也可以通過運(yùn)行于avr 內(nèi)核之中的引導(dǎo)程序進(jìn)行編程。引導(dǎo)程序可以使用任意接口將應(yīng)用程序下載到應(yīng)用flash存儲(chǔ)區(qū)(application flash memory)。在更新應(yīng)用flash存儲(chǔ)區(qū)時(shí)引導(dǎo)flash區(qū)(boot flash memory)的程序繼續(xù)運(yùn)行,實(shí)現(xiàn)了 rww 操作。 通過將 8 位 risc cpu 與系統(tǒng)內(nèi)可編程的 flash 集成在一個(gè)片內(nèi), atmega16 成為一個(gè)功能強(qiáng)大的單片機(jī),為許多

13、嵌入式控制應(yīng)用提供了靈活而成本的解決方案。 atmega16 具有一整套的編程與系統(tǒng)開發(fā)工具,包括:c 語(yǔ)言 編譯器、宏匯編、程序調(diào)試器 / 軟件仿真器、仿真器及評(píng)估板。3.2 at45db041b芯片簡(jiǎn)介at45db041b的封裝如圖3-2所示。圖3-2 at45db041b的引腳圖at45db041b的引腳說明:連續(xù)輸入(si):si 腳僅作為輸入腳且用于將數(shù)據(jù)寫入至器件中。所有的數(shù)據(jù)輸入包括操作碼,地址序列都用此引腳。 連續(xù)輸出(so):so 腳僅作為輸出腳且用于將器件內(nèi)的數(shù)據(jù)移出。 連續(xù)時(shí)鐘(sck):sck 僅作為輸入腳且用于控制流進(jìn)和流出器件的數(shù)據(jù)。數(shù)據(jù)總是隨著sck 腳上的上升沿

14、進(jìn)入而隨著sck 腳上的下降沿流出。 片選(cs):當(dāng)cs 腳為低電平時(shí)選通數(shù)字閃存。當(dāng)器件沒有被選通時(shí),數(shù)據(jù)無(wú)法被 si 腳所接收,而so 腳將會(huì)保持為高阻態(tài)。要進(jìn)行某個(gè)操作,cs 腳上必須有一個(gè)由高到低電平的躍變,要結(jié)束某個(gè)操作,cs 腳上必須有一個(gè)由低到高電平的躍變。寫保護(hù):如果wp 腳置為低電平,主存中的前256 頁(yè)就無(wú)法被重寫。要重寫前256頁(yè)的唯一方法就是將該引腳拉為高電平,然后用前面所提到的編寫命令。wp 腳是內(nèi)部拉高的;因此若非需要,wp 腳上不需連接其他引腳。然而,我們建議盡量通 過外部拉高wp 引腳。 復(fù)位:復(fù)位腳(reset)上的低電平將終止正在運(yùn)行中的操作并將內(nèi)部狀態(tài)置

15、為空閑狀態(tài)。只要reset 腳上一直為低電平,那么器件就一直處于復(fù)位狀態(tài)。一旦reset 腳上返回至高電平,器件就可以正常運(yùn)行了。本器件內(nèi)部整合了電源開啟重接電路,所以在開啟電源期間在reset 腳上并無(wú)何限制。reset 腳也是內(nèi)部拉高的;因此若非需要,reset 腳上不需連接其他引腳。然而,我建議盡量通過外部拉高reset 引腳。 準(zhǔn)備/忙:當(dāng)器件進(jìn)行某個(gè)內(nèi)部自同步操作而處于忙狀態(tài)時(shí),該漏極輸出引腳將被拉低。該引腳通常處于高電平狀態(tài)(通過1 個(gè)1 千歐外部上拉電阻),而在編寫,較和頁(yè)至緩存的傳送操作器件,將會(huì)被拉低。狀態(tài)表示著閃存陣列和其中一個(gè)緩存不能被訪問;但對(duì)于另一個(gè)緩存的讀寫操作仍可

16、進(jìn)行。at45db041b的功能說明:?jiǎn)坞娫?.5v-3.6v或2.7v-3.6v供電,兼容串行外設(shè)接口最高20mhz時(shí)鐘頻率頁(yè)編寫操作 單周期程序重調(diào)(擦除和編寫) l 2048頁(yè)(264字節(jié)/頁(yè))主內(nèi)存,支持頁(yè)和塊擦除操作,雙264字節(jié)sram數(shù)據(jù)緩存在非易失性存儲(chǔ)器中進(jìn)行程序重調(diào)時(shí)可接收數(shù)據(jù),能過連續(xù)地讀取整個(gè)存儲(chǔ)陣列,低功耗 有效讀取工作電流僅為4毫安 cmos待機(jī)電流僅為2微安,數(shù)據(jù)保護(hù)功能l 100%與at45db041及at45db041a兼容,5v輸入容限電壓:si,sck,cs,reset和wp引腳,商用及工業(yè)用溫度范圍描述 at45db041b僅需2.5v或2.7v供電,采

17、用串行接口閃存,能夠廣泛的適用于各種數(shù)字語(yǔ)音,圖像,編碼以及數(shù)據(jù)存儲(chǔ)應(yīng)用。其4,325,376位的內(nèi)存是由2048個(gè)頁(yè)構(gòu)成,每頁(yè)為264個(gè)字節(jié)。除了主存以外,at45db041b還有兩個(gè)容量為264字節(jié)的sram數(shù)據(jù)緩存。 當(dāng)在主內(nèi)存的某頁(yè)上進(jìn)行程序重調(diào)或者連續(xù)讀 寫數(shù)據(jù)流時(shí),數(shù)據(jù)緩存都可以接收數(shù)據(jù)。eeprom仿真(位或字節(jié)可變更)能夠容易地處理獨(dú)立的三步讀-修改-寫操作。不同于傳統(tǒng)的以多路地址線和并行接口隨機(jī)訪問的閃存芯片,本數(shù)字閃存是利用spi串行接口來(lái)順序存取其數(shù)據(jù)。該數(shù)字閃存支持spi模式0和模式3。其簡(jiǎn)單的串行接口使得外圍硬件設(shè)計(jì)變得容易,增強(qiáng)了系統(tǒng)的可靠性,最大化減小了開關(guān)噪聲,

18、降低了封裝尺寸和有效引腳數(shù)量。該器件能夠最優(yōu)化的運(yùn)用于以高密度,少引腳數(shù)量,低電壓和低功耗為基本要求的各類商業(yè)和工業(yè)場(chǎng)合。該器件的有效工作電流為4毫安,能運(yùn)行達(dá)到20mhz的時(shí)鐘頻率。 at45db041b不需要高輸入電壓就可以進(jìn)行簡(jiǎn)單在系統(tǒng)編寫。在進(jìn)行編寫和讀操作時(shí),本器件需要單獨(dú)的電源供電,電壓為2.5v至3.6v或者2.7v至3.6v。片選引腳cs和一個(gè)由連續(xù)輸入si,連續(xù)輸出so和連續(xù)時(shí)鐘sck組成的三線訪問接口使得at45db041b正常工作。 所有的編寫周期都是自同步的,因而在編寫之前都無(wú)需分開的擦除周期。 當(dāng)器件從atmel公司出廠后,存儲(chǔ)陣列中最高頁(yè)可能沒有被擦除凈。也就是說,

19、最后一個(gè)頁(yè)中的內(nèi)容可能并非是ffh。at45db041b的讀命令如表3-1所示。表3-1 at45db041b的讀命令命令sck模式操作碼連續(xù)陣列讀取未激活時(shí)鐘極低或高68hspi模式0或3e8h主存頁(yè)讀取未激活時(shí)鐘極低或高52hspi模式0或3d2h緩存1讀取未激活時(shí)鐘極低或高54hspi模式0或3d4h緩存2讀取未激活時(shí)鐘極低或高56hspi模式0或3d6h狀態(tài)寄存器讀取未激活時(shí)鐘極低或高57hspi模式0或3d7hat45db041b的編寫與擦除命令如表3-2所示。表3-2 at45db041b的編寫與擦除命令命令sck模式操作碼緩存1寫任意84h緩存2寫任意87帶內(nèi)置擦除的緩存1到主存

20、頁(yè)編寫任意83帶內(nèi)置擦除的緩存2到主存頁(yè)編寫任意86帶內(nèi)置擦除的緩存1到主存頁(yè)編寫任意88帶內(nèi)置擦除的緩存1到主存頁(yè)編寫任意89頁(yè)擦除任意81塊擦除任意50通過緩存1的主存頁(yè)編寫任意82通過緩存1的主存頁(yè)編寫任意85at45db041b的附加命令如表3-3所示。表3-3 at45db041b的附加命令命令sck模式操作碼主存頁(yè)至緩存1的傳送任意53h主存頁(yè)至緩存2的傳送任意55h主存頁(yè)至緩存1的比較任意60h主存頁(yè)至緩存2的比較任意61h通過緩存1的自動(dòng)頁(yè)重寫任意58h通過緩存2的自動(dòng)頁(yè)重寫任意59hat45db041b的寫操作時(shí)序如圖3-3所示。圖3-3 at45db041b的寫操作時(shí)序at

21、45db041b的讀操作時(shí)序如圖3-4所示。圖3-4 at45db041b的讀操作時(shí)序總體設(shè)計(jì)4總體設(shè)計(jì)4.1系統(tǒng)設(shè)計(jì)方框圖 系統(tǒng)總體設(shè)計(jì)如圖4-1所示。方框圖的相關(guān)說明:以avr單片機(jī)為核心,外接聲音的輸入電路、聲音的輸出電路、按鈕的輸入電路和聲音的存儲(chǔ)電路,其中聲音的輸入電路用于從外界接收聲音信號(hào),并且送到avr單片機(jī)中進(jìn)行處理,聲音的輸出電路用于接收avr單片機(jī)輸出的聲音信號(hào),并且送到speaker中進(jìn)行播放,聲音的存儲(chǔ)電路用于聲音信號(hào)的存放與取出,按鈕的輸入電路用于實(shí)現(xiàn)不同的功能,包括錄音、放音、刪除等。通過硬件電路和軟件程序的有機(jī)結(jié)合,從而實(shí)現(xiàn)了錄音筆的相關(guān)功能。 avr單片機(jī)聲音的

22、輸入按鈕的輸入聲音的輸出聲音的存儲(chǔ)圖4-1 系統(tǒng)設(shè)計(jì)方框圖4.2硬件設(shè)計(jì)4.2.1硬件設(shè)計(jì)思想用麥克風(fēng)采集音頻信號(hào),經(jīng)過一次功放,然后用電容進(jìn)行一次濾波,電容的大小采用4.7nf,濾波后進(jìn)行ad轉(zhuǎn)換,轉(zhuǎn)換后的信號(hào)存在at45db041b中,然后用單片機(jī)調(diào)出信號(hào),經(jīng)過三次放大,將信號(hào)傳到揚(yáng)聲器播放。電路圖上,atmega16以上的電路圖(見附錄a)就是用來(lái)采集信號(hào)的,放大信號(hào)用的是lm324集成功放芯片。atmega16以右的電路圖(見附錄a)用來(lái)放音,經(jīng)過三次信號(hào)放大,再放大信號(hào)的同時(shí)進(jìn)行過濾。4.2.2聲音輸入模塊2聲音輸入模塊原理圖如圖4-2所示。圖4-2 聲音輸入模塊原理圖模塊的功能說明

23、:mic與atmega16之間的電路模塊,用來(lái)采集語(yǔ)音信號(hào),并進(jìn)行一定的處理,為atmega16進(jìn)行adc轉(zhuǎn)換做好準(zhǔn)備。通過mic接收外部的語(yǔ)音信號(hào),通過功率放大器lm324進(jìn)行功率放大,并通過4.7nf的電容接地進(jìn)行濾波,這樣可以保證聲音信號(hào)完整和正確地送到atmega16的pd7引腳。4.2.3聲音存儲(chǔ)模塊3聲音存儲(chǔ)模塊原理圖如圖4-3所示。圖4-3 聲音存儲(chǔ)模塊原理圖模塊的功能說明:atmega16及緊密相連的這一部分電路模塊,是該系統(tǒng)的核心部分,adc轉(zhuǎn)換和dac轉(zhuǎn)換,都是在該部分進(jìn)行的,并通過該部分控制整個(gè)系統(tǒng),相應(yīng)的濾波,外部晶振和按鍵也屬于該部分。atmega16芯片與at45d

24、b041b相連,實(shí)現(xiàn)對(duì)信號(hào)的讀寫操作,從而實(shí)現(xiàn)了信號(hào)的儲(chǔ)存與取出,擦除等。電路中有三個(gè)按鍵和三個(gè)指示燈,當(dāng)不同的按鍵按下時(shí),會(huì)執(zhí)行不同的程序,并且會(huì)點(diǎn)亮相應(yīng)的指示燈。當(dāng)從引腳pd7接收到外部語(yǔ)音信號(hào)后,經(jīng)過處理,存儲(chǔ)在芯片at45db041b中,需要放音時(shí),從芯片at45db041b中讀取信號(hào),經(jīng)過處理,送到引腳pa0。4.2.4聲音輸出模塊聲音輸出模塊原理圖如圖4-4所示。圖4-4 聲音輸出模塊原理圖模塊的功能說明:耳機(jī)與atmega16之間的電路模塊,用來(lái)將存儲(chǔ)在atmega16的數(shù)字信號(hào)通過模擬語(yǔ)音信號(hào)還原出來(lái),之前還進(jìn)行了一系列的功放,用于信號(hào)的放大與相關(guān)處理。接收到芯片引腳pa0輸出

25、的信號(hào)后,經(jīng)過三個(gè)功率放大器lm324進(jìn)行功率放大,并且有接地電容進(jìn)行濾波,這樣可以保證聲音信號(hào)完整和不失真地送到speaker中進(jìn)行播放。4.3軟件設(shè)計(jì)4.3.1軟件設(shè)計(jì)思想4首先是設(shè)備初始化,但是初始化程序中,用于adc轉(zhuǎn)換的定時(shí)器等并沒有進(jìn)行初始化,只是將pa0設(shè)置為輸入模式,不上拉使能(作為ad轉(zhuǎn)換的輸入通道),用于spi通信1的各個(gè)引腳的模式進(jìn)行了設(shè)置。初始化完成之后,就進(jìn)入主程序中進(jìn)行鍵盤掃描,速度極其的快,無(wú)鍵盤按下時(shí)甚至只用不到1微秒的時(shí)間。一旦檢測(cè)到哪個(gè)鍵按下就進(jìn)入相應(yīng)的程序中去。錄音程序的設(shè)計(jì)思想:檢測(cè)到錄音鍵按下后進(jìn)入錄音程序,然后adc初始化同時(shí)開始一次ad轉(zhuǎn)換,延時(shí)一

26、小會(huì)兒,等待ad轉(zhuǎn)換結(jié)束。接著spi、定時(shí)器初始化,從此就靠定時(shí)器來(lái)主導(dǎo)整個(gè)錄音程序的運(yùn)行了。定時(shí)器有中斷,其中有要求tcnt0設(shè)置這個(gè)基本的操做,還有一個(gè)就是adsc置位要求進(jìn)行下一次轉(zhuǎn)換。至于ad轉(zhuǎn)化的值則在ad中斷中寫入一個(gè)已經(jīng)建好循環(huán)隊(duì)列中。定時(shí)器定時(shí)80微秒,一次ad轉(zhuǎn)換是在定時(shí)一開始就進(jìn)行,需要時(shí)間52微秒,也就是說定時(shí)器溢出時(shí)ad中斷一定結(jié)束了,下一次中斷之前數(shù)據(jù)一定已經(jīng)進(jìn)入了隊(duì)列中,如此循環(huán)。而在這期間有大量的時(shí)間向dataflash中寫數(shù)據(jù)。dataflash有2048頁(yè),每一頁(yè)有264字節(jié),在每一頁(yè)寫滿之前,程序不會(huì)再檢測(cè)按鍵,一直到一頁(yè)寫滿了,才檢測(cè)按鍵,如果仍舊是按下則

27、繼續(xù)錄音,否則退出。退出后如果存儲(chǔ)空間未滿則存儲(chǔ)位置的參數(shù)會(huì)保留,下次錄音可以接著向下寫。如果滿了,則錄音工作指示燈永遠(yuǎn)都不會(huì)亮了,除非重啟。但是在退出錄音程序時(shí),adc、spi、定時(shí)器會(huì)全部關(guān)閉,再進(jìn)入程序時(shí)再初始化開啟。放音程序的設(shè)計(jì)思想:與錄音程序相同,進(jìn)入程序之后才開啟所需要的功能。不同的是先開錄音工作指示燈,spi,然后向dataflash要一次數(shù)據(jù),再開timer2的快速pwm功能。一次pwm時(shí)間是16微秒,每五次更新一次,通過調(diào)節(jié)占空比來(lái)實(shí)現(xiàn)da轉(zhuǎn)換的功能。同樣的每五次中斷期間都有足夠的時(shí)間向dataflash要數(shù)據(jù)。放音程序最大的特點(diǎn)是那些控制參數(shù)雖然是全局變量,但是它們?cè)谶M(jìn)入

28、程序的第一時(shí)間就被初始化了,在就要退出程序的最后時(shí)刻再次被初始化。這樣就使得整個(gè)程序可以進(jìn)行循環(huán)放音,但是每次都是從頭開始,放開按鍵時(shí)停止,再按下時(shí)又從頭開始。由于放開按鍵的同時(shí)按下按鍵的可能性很小,所以放音鍵按下的狀態(tài)會(huì)在主程序按鍵檢測(cè)循環(huán)中被檢測(cè)到,并進(jìn)入放音程序。擦除程序設(shè)計(jì)思想:擦除程序就簡(jiǎn)單多了。首先,如前面提到的,它有延時(shí)去抖的時(shí)間。其次,由于查找資料時(shí)找到的資料并沒有芯片的塊擦除命令,所以決定先往芯片的buffer1中寫滿0,然后順次往每一個(gè)主頁(yè)存儲(chǔ)空間中進(jìn)行先擦除再寫的操作(即buffer to main memory with built-in erase),這樣消耗的時(shí)間會(huì)

29、長(zhǎng)很多,大約為70秒鐘。4.3.2程序流程圖系統(tǒng)主程序如圖4-5所示。開始端口初始化是否有按鍵按下?延時(shí)去抖是否是抖動(dòng)?擦除程序返回錄音程序放音程序擦除鍵錄音鍵放音鍵否是圖4-5 程序流程圖4.3.3主函數(shù)方框圖主函數(shù)方框圖如圖4-6所示。方框圖的相關(guān)說明5:這里主要說明了放音函數(shù)具體的操作過程,當(dāng)按下放音按鍵時(shí),進(jìn)入放音函數(shù)playback(),進(jìn)行相關(guān)變量和器件的的初始化操作,當(dāng)放音按鍵放開時(shí),返回到主函數(shù)進(jìn)行按鍵的掃描,否則,進(jìn)入聲音的播放程序。從buffer中讀取數(shù)據(jù)并且根據(jù)數(shù)據(jù)改變ocr變量,利用timer的pwm功能,實(shí)現(xiàn)數(shù)字信號(hào)的模擬輸出,即聲音信號(hào)的還原。main()playb

30、ack()開led開spi向databuffer()要一次數(shù)據(jù)開timer2進(jìn)入循環(huán)放音鍵按下?下一頁(yè)到下一個(gè)bufferbuffer完?等待5次timer溢出更新標(biāo)記ocr變量關(guān)spi關(guān)timer2 關(guān)led返回main()是是否否圖4-6 主函數(shù)方框圖4.4系統(tǒng)的調(diào)試與總結(jié)按照電路原理圖,連接好電路。在icc avr編譯器中,輸入程序,并且進(jìn)行編譯,生成test.hex文件,通過編程器下載到avr單片機(jī)中,上電運(yùn)行6。按下錄音按鍵,對(duì)著mic講話,講完以后放開按鍵。按下放音按鍵,仔細(xì)聽speaker中的聲音。放出的聲音失真,對(duì)定時(shí)器的定時(shí)時(shí)間做一下微調(diào),然后再進(jìn)行測(cè)試。按下刪除按鍵,無(wú)法再

31、進(jìn)行播放,達(dá)到了刪除已存儲(chǔ)信息的目的。通過對(duì)系統(tǒng)的微小調(diào)節(jié),基本上可以實(shí)現(xiàn)錄音、放音和刪除等功能。總結(jié)5總結(jié)本課題使用的是avrmage16高速單片機(jī)6,利用其內(nèi)部的adc模塊和pwm功能,實(shí)現(xiàn)了聲音的錄放功能,揭開了錄音筆的神秘面紗。當(dāng)然這與現(xiàn)實(shí)生活中運(yùn)用的錄音筆相比,還有很多的不足之處。此設(shè)計(jì)充分利用的單片機(jī)內(nèi)部的資源,通過硬件和軟件的緊密結(jié)合,基本上實(shí)現(xiàn)了聲音的錄放功能。在聲音的處理上,硬件設(shè)計(jì)和軟件設(shè)計(jì),也許考慮的不夠周全,可能造成聲音的失真。隨著科技的不斷發(fā)展,芯片的集成度越來(lái)越高,可以用最簡(jiǎn)單的外圍電路,來(lái)實(shí)現(xiàn)非常復(fù)雜的功能。所以,在我們?cè)谙到y(tǒng)設(shè)計(jì)時(shí),應(yīng)該充分利用芯片內(nèi)部的資源,認(rèn)

32、真分析它們的使用方法,這樣在進(jìn)行設(shè)計(jì)時(shí)可以達(dá)到事半功倍的效果。參考文獻(xiàn)附錄7附錄附錄a:系統(tǒng)的總體設(shè)計(jì)原理圖如圖7-1所示圖7-1 系統(tǒng)的總體設(shè)計(jì)原理圖附錄b:系統(tǒng)設(shè)計(jì)源程序清單/ target : m16/ crystal: 16.000mhz#include #include #define buffer1_read 0x54#define buffer2_read 0x56#define main_to_buffer1 0x53#define main_to_buffer2 0x55#define buffer1_write 0x84#define buffer2_write 0x87#

33、define buffer1_to_main_with 0x83#define buffer2_to_main_with 0x86#define buffer1_to_main_without 0x88#define buffer2_to_main_without 0x89#define main_program_buffer1 0x82#define main_program_buffer2 0x85 /給spi定義的portb的引腳#define df_cs 3#define ddr_mosi 5#define ddr_miso 6#define ddr_sck 7 /給工作狀態(tài)指示燈le

34、d的引腳定義/pa70b01111111#define record_led 0x7f#define play_led 0xbf#define erase_led 0xdf#define unit8 unsigned char#define unit16 unsigned int volatile unit8 over_times=0,play_buffer_number=1,updata_ocr=0;volatile unsigned char new_ocr=0;volatile unit16 play_buffer_counter=0,play_page_counter=0;volati

35、le unsigned char record_buffer264=0;volatile unit8 new_turn=0,record_buffer_number=1;volatile unit16 record_page_counter=0,record_buffer_counter=0,data_position=0,send_position=0;void port_init(void)porta = 0xe0;ddra= 0xe0;portb = 0x00;ddrb= 0xb8;portc = 0x43; /m103 output onlyddrc= 0x00;portd = 0x0

36、0;ddrd= 0x80;void timer0_init(void)tccr0 = 0x00; /stoptcnt0 = 0x60; /set counttccr0 = 0x02; /start timer8分頻timsk|=0x01; /timer0 interrupt sources 溢出中斷sei();void timer2_init(void)tccr2 = 0x00; /stopassr= 0x00; /set async modetcnt2 = 0x01; /setupocr2= 0xff;tccr2 = 0x69; /starttimsk|=0x40;/timer2 inter

37、rupt sources /call this routine to initialize all peripheralsvoid init_devices(void)/stop errant interrupts until set upcli(); /disable all interruptsport_init(); mcucr = 0x00;gicr= 0x00;timsk = 0x00; /timer interrupt sourcessei(); /re-enable interrupts/all peripherals are now initializedvoid adc_in

38、it(void)adcsra = 0x00; /disable adcadmux = 0x60; /select adc input 0 and avcc 左對(duì)齊acsr= 0x80;adcsra = 0xc6; /剛進(jìn)入就進(jìn)行一次a/d轉(zhuǎn)換while(!(adcsra&0x40);/等待轉(zhuǎn)換結(jié)束void timer0_stop(void)tccr0=0x00;/stoptimsk&=0x01; /stop timer0 overflow interruptvoid delay_ms(unsigned int n)unsigned int i;for(;n!=0;n-)for(i=2665;i

39、!=0;i-);void send_spi(unsigned char data)spdr=data;while(!(spsr&0x80);void erase(void)int erase_page_counter=0,erase_buffer_counter=264;spcr=0x5c;/enable spispsr=0x00;portb|=(1df_cs);/拉高一下,以免開始時(shí)因特殊原因df_cs是低portb&=(10;erase_buffer_counter-)send_spi(0x00);portb|=(1df_cs);doportb&=(17);/4 bits reserved

40、 and 4 bits addresssend_spi(unit8)(erase_page_counter1);/7 bits address and 1 dont caresend_spi(0x00);/8 dont careportb|=(1df_cs);delay_ms(22);/等待數(shù)據(jù)轉(zhuǎn)移結(jié)束+erase_page_counter;while(erase_page_counter=2047);spcr=0x00;/disable spivoid record(void) /porta&=record_led;/不應(yīng)該從這兒開始開燈,開錄音指示燈adc_init();/調(diào)用timer0

41、_init();/調(diào)用spcr=0x5c;/enable spispsr=0x00;portb|=(1df_cs);/拉高一下,以免開始時(shí)因特殊原因df_cs是低,保證安全while(!(pinc&0x01) & record_page_counter2048)porta&=record_led;/開錄音指示燈record_buffer_counter=0;while(record_buffer_counter264)if(new_turn=0 & send_positiondata_position)portb&=(18);/7 bits dont care+ 1 bit addressse

42、nd_spi(unit8)record_buffer_counter);/8 bits addresssend_spi(record_buffersend_position);portb|=(1df_cs);send_position+;record_buffer_counter+;if(new_turn=1)if(send_position=264)send_position=0;new_turn=0;portb&=(18);/7 bits dont care+ 1 bit addresssend_spi(unit8)record_buffer_counter);/8 bits addres

43、ssend_spi(record_buffersend_position);portb|=(1df_cs);send_position+;record_buffer_counter+;portb&=(17);/4 bits reserved and 4 bits addresssend_spi(unit8)(record_page_counter1);/7 bits address and 1 dont caresend_spi(0x00);/8 dont careportb|=(1df_cs); if(record_buffer_number=1)record_buffer_number+;

44、elserecord_buffer_number-; record_page_counter+;timer0_stop();adcsra = 0x00; /disable adc porta|=record_led;/關(guān)錄音指示燈 #pragma interrupt_handler timer2_ovf_isr:iv_timer2_ovfvoid timer2_ovf_isr(void)tcnt2 = 0x01; /reload counter value if(over_times=0)ocr2=new_ocr;updata_ocr=1;if(over_times=4)over_times=0;elseover_times+; #pragma interrupt_handler timer0_ovf_isr:iv_timer0_ovfvoid timer0_ovf_isr(void)tcnt0 = 0x60; /reload counter valueif(data_position264)record_buffe

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論