您的位置:網(wǎng)站首頁(yè) > 電器維修資料網(wǎng) > 正文 >
AVR單片機(jī)入門----C語(yǔ)言高效設(shè)計(jì)實(shí)踐(七)
來源: 日期:2013-11-1 14:21:40 人氣:標(biāo)簽:
由于模擬開關(guān)的輸入端同porta口相連復(fù)用,當(dāng)一個(gè)應(yīng)用系統(tǒng)不需要或者只需要少數(shù)的模/數(shù)轉(zhuǎn)換器時(shí),這個(gè)端口的其他引腳可以當(dāng)作普通的1/0口使用。但是要注意,盡量不要在用到/vd轉(zhuǎn)換器時(shí),再將porta口作為普通i/o口使用,因?yàn)檫@會(huì)影響到a/d的轉(zhuǎn)換精度。
模/數(shù)轉(zhuǎn)換器可將輸入的模擬電壓信號(hào)轉(zhuǎn)換成一個(gè)10位的數(shù)字量信號(hào)。它以某一個(gè)參考電壓為基準(zhǔn)(如內(nèi)部標(biāo)準(zhǔn)參考電壓2.56v或者外部輸入電壓源),將指定引腳上的輸入電壓量轉(zhuǎn)換為數(shù)字信號(hào)量,寫入到avr處理器的adc寄存器中。輸入模擬電壓的范圍介于agnd和avcc之間,atmeag16l的模,數(shù)轉(zhuǎn)換器的精度 高為10位,當(dāng)參考電壓為5v時(shí), 小的分辨電壓是5v/2'o一0.o05v。另外,atmeag16l內(nèi)部帶有前置放大器,放大倍數(shù)為10倍和200倍,我們可將微弱的輸入信號(hào)進(jìn)行適當(dāng)放大后再進(jìn)行模/數(shù)轉(zhuǎn)換。
模/數(shù)轉(zhuǎn)換器相關(guān)寄存器
atmeag16l與模/數(shù)轉(zhuǎn)換相關(guān)的寄存器主要有admux、adcsra、adch和adclo1.admux admux負(fù)責(zé)控制模/數(shù)轉(zhuǎn)換輸入通道的選擇以及參考電壓源的選取。
mux4—muxo;控制選擇a/d輸入通道、放大倍數(shù)選取及差模輸入方式選取。
adlar:adch和adcl輸出格式控制位,當(dāng)該位置1時(shí),輸出結(jié)果左對(duì)齊;當(dāng)該位置0時(shí),輸出結(jié)果右對(duì)齊。
refs1、refso:為控制參考電壓的選擇。下表為refs1、refso的設(shè)置及對(duì)應(yīng)的參考電壓。
2.adcsra adcsra為adc控制和狀態(tài)寄存器。
adps2—adpso:adc預(yù)分頻選擇,這3位決定adc分頻器的值,如下表所示。
adie;adc中斷使能。adie為“1”,則adc轉(zhuǎn)換結(jié)束中斷即被使能;否則,中斷禁止。
adif:.adc中斷標(biāo)志。adc轉(zhuǎn)換完成,并且數(shù)據(jù)更新后,adc中斷標(biāo)志(adif)置“1”。此時(shí)若adc的中斷使能位(adie)和全局中斷使能位(sreg)都為“1”,則單片機(jī)產(chǎn)生一個(gè)adc完成中斷。當(dāng)單片機(jī)執(zhí)行相應(yīng)的中斷后,adif被清“o”。adif也可通過寫入“0”來清除。
adate:adc自動(dòng)觸發(fā)使能。adate置位將啟動(dòng)adc自動(dòng)觸發(fā)功能。觸發(fā)信號(hào)的上跳沿啟動(dòng)adc轉(zhuǎn)換。
觸發(fā)信號(hào)源通過sfior寄存器的adc觸發(fā)信號(hào)源選擇位adts設(shè)置。
adsc:模數(shù)轉(zhuǎn)換啟動(dòng)。當(dāng)adc工作于單次轉(zhuǎn)換模式時(shí),該位必須寫入“1”才能啟動(dòng)每次轉(zhuǎn)換過程;adc工作于自由轉(zhuǎn)換模式時(shí),adsc也必須在第一次轉(zhuǎn)換時(shí)寫入“1”。注意:adc在上電后,必須首先進(jìn)行一次初始化轉(zhuǎn)換,這個(gè)轉(zhuǎn)換值無效。
aden:模數(shù)轉(zhuǎn)換使能。aden為“1”時(shí),單片機(jī)的模數(shù)轉(zhuǎn)換使能;否則禁止。
3.adch和adcladch和adcl兩個(gè)寄存器用于存儲(chǔ)adc的轉(zhuǎn)換結(jié)果。
為了確保數(shù)據(jù)讀取的正確性,adcl寄存器的內(nèi)容應(yīng)當(dāng)首先被讀取,一旦用戶開始對(duì)adcl讀取,adc對(duì)數(shù)據(jù)寄存器的寫操作就被禁止,這就意味著,如果用戶讀取了adcl,那么即便另一次adc轉(zhuǎn)換過程在讀adch之前結(jié)束了,兩個(gè)數(shù)據(jù)寄存器中的內(nèi)容也不會(huì)被更新。當(dāng)用戶對(duì)adch的讀操作完成后,adc才可以更新adch和adcl。
模/數(shù)轉(zhuǎn)換器的使用atmeag16l單片機(jī)的adc模塊由adcsra寄存器中的aden位使能。當(dāng)aden為“1”時(shí),adc功能有效,并且輸入通道同模擬電壓的輸入引腳相連。此時(shí),若adsc置“1”,則adc啟動(dòng)一次模數(shù)轉(zhuǎn)換過程,這個(gè)模數(shù)轉(zhuǎn)換過程用于初始化adc(轉(zhuǎn)換結(jié)果無效)。
當(dāng)adc模塊被啟動(dòng)以后,用戶可以通過adate位選擇adc的兩種轉(zhuǎn)換模式,即單次轉(zhuǎn)換模式和自由轉(zhuǎn)換模式。若adate為“0”時(shí),則adc工作在單次轉(zhuǎn)換模式,此時(shí),每個(gè)轉(zhuǎn)換過程都需要置位adsc,若adate為“1”時(shí),則adc工作在自由轉(zhuǎn)換模式,此時(shí),adc連續(xù)采樣模擬輸入端并將轉(zhuǎn)換得到的數(shù)據(jù)輸出至adc的數(shù)據(jù)寄存器adch和adcl中。當(dāng)一次轉(zhuǎn)換過程結(jié)束后,adif位被置“1”,此時(shí),若adie和全局中斷使能位(sreg)都為“1”,則單片機(jī)產(chǎn)生一個(gè)adc中斷。
atmeag16l的模/數(shù)轉(zhuǎn)換器編程實(shí)踐1.簡(jiǎn)易數(shù)字式o~5v直流電壓表實(shí)驗(yàn)用電位器rv1作模擬量的輸入,右邊4位數(shù)碼管顯示輸入電壓值。我們使用pa端口的第7位進(jìn)行模擬量輸入,而pa端口的第o—6位作數(shù)碼管的段驅(qū)動(dòng),這樣,顯示的數(shù)字中小數(shù)點(diǎn)不能被點(diǎn)亮。因此,“千”位數(shù)碼管相當(dāng)于顯示整數(shù),而“個(gè)”、“十”、“百”位數(shù)碼管相當(dāng)于顯示小數(shù),例如:
顯示3265相當(dāng)于3.265v電壓。
在我的文檔中新建一個(gè)ac12的文件夾。建立一個(gè)ac12.prj的工程項(xiàng)目, 后建立源程序文件ac12.c。輸入程序1:
編譯通過后,將ac12.hex文件下載到avr單片機(jī)綜合試驗(yàn)板上。注意,標(biāo)示“ledmod_com”、“ad”的雙排針應(yīng)插上短路塊,另外標(biāo)示“ledmod_disp”
的雙排針的上面7位也應(yīng)插上短路塊( 下面1位不要2.“窗口”電壓識(shí)別與控制實(shí)驗(yàn)在自動(dòng)化控制中,有些設(shè)備需要在一定的條件下工作。超出此條件后,可以控制設(shè)備停機(jī),也可以發(fā)出報(bào)警信號(hào)。現(xiàn)在我們使用atmega16l單片機(jī)的adc模塊實(shí)現(xiàn)輸入模擬量的監(jiān)控,輸入電壓小于2.ooov時(shí)燈d1點(diǎn)亮報(bào)警,輸入電壓大干插短路塊)。我們用一枝小螺絲刀(或電筆)調(diào)節(jié)電位器rv1,改變輸入的模擬電壓,我們可看到數(shù)碼管的顯示從0000~5000(相當(dāng)于o.000—5.ooov)會(huì)變化。
3.ooov時(shí)燈d2點(diǎn)亮報(bào)警,輸入電壓在2,000—3.ooov之間時(shí)報(bào)警燈不亮。
在我的文檔中新建~個(gè)ac13的文件夾。建立一個(gè)ac13.prj的工程項(xiàng)目, 后建立源程序文件ac13.c。輸入程序2:
編譯通過后,將ac13.hex文件下載到avr單片機(jī)綜合試驗(yàn)板上。注意,標(biāo)示“ledmod_com”、“ad”的雙排針應(yīng)插上短路塊,另外標(biāo)示“ledmod_disp”
的雙排針的上面7位也應(yīng)插上短路塊( 下面1位不要插短路塊)。我們用一枝小螺絲刀(或電筆)調(diào)節(jié)電位器rv1,改變輸入的模擬電壓,我們看到數(shù)碼管顯示小于2000時(shí),燈dl點(diǎn)亮;數(shù)碼管顯示大干3000時(shí),燈d2點(diǎn)亮:數(shù)碼管顯示在2000—3000之間時(shí),燈不亮。達(dá)到實(shí)驗(yàn)的目的。
【看看這篇文章在百度的收錄情況】