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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

30、ack()開led開spi向databuffer()要一次數(shù)據(jù)開timer2進入循環(huán)放音鍵按下?下一頁到下一個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編譯器中,輸入程序,并且進行編譯,生成test.hex文件,通過編程器下載到avr單片機中,上電運行6。按下錄音按鍵,對著mic講話,講完以后放開按鍵。按下放音按鍵,仔細(xì)聽speaker中的聲音。放出的聲音失真,對定時器的定時時間做一下微調(diào),然后再進行測試。按下刪除按鍵,無法再

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

32、真分析它們的使用方法,這樣在進行設(shè)計時可以達到事半功倍的效果。參考文獻附錄7附錄附錄a:系統(tǒng)的總體設(shè)計原理圖如圖7-1所示圖7-1 系統(tǒng)的總體設(shè)計原理圖附錄b:系統(tǒng)設(shè)計源程序清單/ 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 左對齊acsr= 0x80;adcsra = 0xc6; /剛進入就進行一次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);/拉高一下,以免開始時因特殊原因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);/拉高一下,以免開始時因特殊原因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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論