




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、基于 AVR 的單片系統(tǒng)原理與實(shí)踐應(yīng)用第 11 章 綜合實(shí)踐(二)本章的綜合實(shí)踐將綜合前幾章的內(nèi)容,指導(dǎo)讀者完成以下的實(shí)踐:如何實(shí)現(xiàn)頻率測(cè)量和簡(jiǎn)單頻率計(jì)的設(shè)計(jì)實(shí)現(xiàn)。使用 T/C1 的輸入捕捉功能實(shí)現(xiàn)高精度的頻率周期測(cè)量完成一個(gè)比較完善的實(shí)時(shí)時(shí)鐘的設(shè)計(jì)和實(shí)現(xiàn)。11.1 頻率測(cè)量和簡(jiǎn)單頻率計(jì)的設(shè)計(jì)11.1.1 頻率測(cè)量原理單片機(jī)應(yīng)用系統(tǒng)中,經(jīng)常要對(duì)續(xù)的脈沖波頻率進(jìn)量。在實(shí)際應(yīng)用中,對(duì)于轉(zhuǎn)速,位移、速度、流量等物理量的測(cè)量,一般也是由傳感器轉(zhuǎn)換成脈沖電信號(hào),采用測(cè)量頻率段實(shí)現(xiàn)。使用單片機(jī)測(cè)量頻率或周期,通常是利用單片機(jī)的定時(shí)計(jì)數(shù)器來(lái)完成的,測(cè)量的基本方法和原理有兩種:測(cè)頻法:在限定的時(shí)間內(nèi)(如 1
2、秒鐘)檢測(cè)脈沖的個(gè)數(shù)。測(cè):測(cè)試限定的脈沖個(gè)數(shù)之間的時(shí)間。這兩種方法盡管原理是相同的,但在實(shí)際使用時(shí),需要根據(jù)待測(cè)頻率的范圍、系統(tǒng)的時(shí)鐘周期、計(jì)數(shù)器的長(zhǎng)度、以及所要求的測(cè)量精度等出適合具體要求的測(cè)量方法。在具體頻率的測(cè)量中,需要考慮和注意的進(jìn)行全面和具體的考慮,尋找和設(shè)計(jì)有以下幾點(diǎn)。系統(tǒng)的時(shí)鐘。首先測(cè)量頻率的系統(tǒng)時(shí)鐘本身精度要高,因?yàn)椴还苁窍薅y(cè)量時(shí)間還是測(cè)量限定脈沖個(gè)數(shù)的周期,其基本的時(shí)間基準(zhǔn)是系統(tǒng)本身時(shí)鐘產(chǎn)生的。其次是系統(tǒng)時(shí)鐘的頻率值,因?yàn)橄到y(tǒng)時(shí)鐘頻率越高,能夠?qū)崿F(xiàn)頻率測(cè)量的精度也越高。因此使用 AVR 測(cè)量頻率時(shí),建議使用由外部晶體組成的系統(tǒng)的振蕩電路,不使用其內(nèi)部的 RC 振蕩源,同時(shí)盡
3、量使用頻率比較高的系統(tǒng)時(shí)鐘。所使用定時(shí)計(jì)數(shù)器的位數(shù)。測(cè)量頻率要使用定時(shí)計(jì)數(shù)器,定時(shí)計(jì)數(shù)器的位數(shù)越長(zhǎng),可以產(chǎn)生的限定時(shí)間越長(zhǎng),或在限定時(shí)間里的脈沖個(gè)數(shù)越多,因此也提高了頻率測(cè)量的精度。所以對(duì)頻率測(cè)量精度有一定要求時(shí),盡量采用 16 位的定時(shí)計(jì)數(shù)器。被測(cè)頻率的范圍。頻率測(cè)量需要根據(jù)被測(cè)頻率的范圍選擇測(cè)量的方式。當(dāng)被測(cè)頻率的范圍比較低時(shí),最好采用測(cè)周期的方法測(cè)量頻率。而被測(cè)頻率比較高時(shí),使用測(cè)頻法比較合適。需要注意的是,被測(cè)頻率的最高值一般過(guò)測(cè)頻 MCU 系統(tǒng)時(shí)鐘頻率的 1/2,因?yàn)楫?dāng)被測(cè)頻率高于 MCU 時(shí)鐘 1/2 后,MCU 往往不能正確檢測(cè)被測(cè)脈沖的電平變化了。除了以上三個(gè)外,還要考慮頻率測(cè)
4、量的頻度(每秒內(nèi)測(cè)量的次數(shù)),如何與系統(tǒng)中其它任務(wù)處理之間的協(xié)調(diào)工作等。頻率測(cè)量精度要求高時(shí),還應(yīng)該考慮其它中斷以及中斷響應(yīng)時(shí)間的影響,甚至需要在中考慮采用多次測(cè)量取平均的算法等。在“AVR-51 多功能實(shí)驗(yàn)開(kāi)發(fā)板”的 K 區(qū)有一個(gè)信號(hào)源。該區(qū)模塊使用一個(gè) 2.048MHz的晶體振蕩器,經(jīng)過(guò) CD4060 的分頻后,提供了占空比為 50%,125Hz128KHz 之間 10 種不同頻率的標(biāo)準(zhǔn)脈沖信號(hào)。下面介紹 2 個(gè)基本的頻率測(cè)量實(shí)例,實(shí)現(xiàn)對(duì)這些不同頻率的信號(hào)進(jìn)量。華東師范大學(xué) 電子科學(xué)技術(shù)系 馬 潮11-1第 11 章 實(shí)戰(zhàn)練習(xí)二11.1.2 測(cè)頻法測(cè)量頻率測(cè)頻法的基本,就是采用在已知限定的
5、時(shí)間內(nèi)對(duì)被測(cè)信號(hào)輸入的脈沖個(gè)數(shù)進(jìn)行計(jì)數(shù)的方法來(lái)實(shí)現(xiàn)對(duì)信號(hào)頻率的測(cè)量。當(dāng)被測(cè)信號(hào)的頻率比較高時(shí),采用這種方法比較適合,因?yàn)樵谝欢〞r(shí)間內(nèi),頻率越高,計(jì)數(shù)脈沖的個(gè)數(shù)也越多,測(cè)量也越準(zhǔn)確。例 11.1 采用測(cè)頻法的頻率計(jì)設(shè)計(jì)與實(shí)現(xiàn)1) 硬件電路硬件電路的顯示部分與圖 9-7 相同,PA 口為 8 個(gè) LED 數(shù)碼管的段輸出,PC 口控制 8 個(gè) LED 數(shù)碼管的位掃描。使用 T/C0 對(duì)被測(cè)信號(hào)輸入的脈沖個(gè)數(shù)進(jìn)行計(jì)數(shù),被測(cè)頻率信號(hào)由 PB0(T0)輸入。2)設(shè)計(jì)首先給出系統(tǒng)程序,然后做必要的說(shuō)明。/*File name Chip type Program typeClock frequency Mem
6、ory mExternal SRAM sizeData Stack size: demo_11_1.c: ATmega16: Application: 4.000000 MHz: Small: 0: 256*/#include flash char led_710=0 x3F,0 x06,0 x5B,0 x4F,0 x66,0 x6D,0 x7D,0 x07,0 x7F,0 x6F;flash charition8=0 x7f,0 xbf,0 xdf,0 xef,0 xf7,0 xfb,0 xfd,0 xfe;char dis_buff8;/ 顯示緩沖區(qū),存放要顯示的 8 個(gè)字符的段碼值cha
7、rit;bit time_1ms_ok,display_ok=0;char time0_old,time0_new,freq_time;unsignedfreq;void display(void)PORTC = 0 xff;PORTA = led_7dis_buff/ 8 位 LED 數(shù)碼管動(dòng)態(tài)掃描函數(shù)it;if (it=5) PORTA = PORTA | 0 x80;PORTC =itionit;it = 0;if (+it =8 )/ Timer 2 outp errupt ompareP voiderrupt service routinep_isr(void)華東師范大學(xué) 電子科學(xué)
8、技術(shù)系 馬 潮11-2基于 AVR 的單片系統(tǒng)原理與實(shí)踐應(yīng)用time0_new = TCNT0; time_1ms_ok = 1; display_ok = display_ok;if (display_ok) display();/1ms 到,當(dāng)前 T/C0 的計(jì)數(shù)值voidfreq_to_disbuff(void)/ 將頻率值轉(zhuǎn)化為 BCD 碼并送入顯示緩沖區(qū)char i,j=7;for (i=0;i=4;i+)dis_buffj-i = freq % 10; freq = freq / 10;dis_buff2 = freq;voidmain(void)char i; DDRA=0 xF
9、F; DDRC=0 xFF;/ T/C0 初始化,外部計(jì)數(shù)方式 TCCR0=0 x06;TCNT0=0 x00; OCR0=0 x00;/ T/C2 初始化 TCCR2=0 x0B; TCNT2=0 x00;OCR2=0 x7C;/ LED 數(shù)碼管驅(qū)動(dòng)/ 外部 T0 腳下降沿觸發(fā)計(jì)數(shù),普通模式/ 內(nèi)部時(shí)鐘,32 分頻(4M/32=125KHz),CTC 模式/ OCR2 = 0 x7C(124),(124+1)/125=1msTIMSK=0 x80;/ 允許 T/C2 比較匹配中斷for (i=0;i= time0_old) freq = freq + (time0_new - time0_o
10、ld); else freq = freq + (256 - time0_old + time0_new);華東師范大學(xué) 電子科學(xué)技術(shù)系 馬 潮11-3第 11 章 實(shí)戰(zhàn)練習(xí)二time0_old = time0_new; if (+freq_time = 100)freq_time = 0; freq_to_disbuff(); freq = 0;time_1ms_ok = 0;/ 100ms 到,/ 將 100ms 內(nèi)的脈沖計(jì)數(shù)值送顯示;程序中 LED 掃描形式函數(shù) desplay(),以及脈沖計(jì)數(shù)值轉(zhuǎn)換成 BCD 碼并送顯示緩沖區(qū)函數(shù) freq_to_disbuff()比較簡(jiǎn)單,請(qǐng)讀者自己
11、分析。在該程序中,使用了兩個(gè)定時(shí)計(jì)數(shù)器。T/C0 工作在計(jì)數(shù)器方式,對(duì)外部 T0 引腳輸入的脈沖信號(hào)計(jì)數(shù)(下降沿觸發(fā))。T/C2 工作在 CTC 方式,每隔 1ms 中斷一次,該定時(shí)時(shí)間即作為 LED 的顯示掃描,同時(shí)也是限定時(shí)間的基時(shí)。每一次 T/C2 的中斷中,都首先下 T/C0寄存器 TCNT0 當(dāng)前的計(jì)數(shù)值,因此前后兩次 TCNT0 的差值(time0_new time0_old)或(256- time0_old + time0_new)就是 1ms 時(shí)間內(nèi) T0 腳輸入的脈沖個(gè)數(shù)。為了提高測(cè)量精度,程序?qū)?100 個(gè) 1ms 的脈沖個(gè)數(shù)進(jìn)行了累計(jì)(在變量 freq 中),即已知限定的
12、時(shí)間為 100ms。讀者還應(yīng)該注意頻率的連續(xù)測(cè)量與 LED 掃描、BCD 碼轉(zhuǎn)換之間的協(xié)調(diào)問(wèn)題。T/C2 中斷間隔為 1ms,因此在 1ms 時(shí)間內(nèi),程序必須將脈沖個(gè)數(shù)進(jìn)行的累計(jì)、BCD 碼轉(zhuǎn)換和送入顯示緩沖區(qū),以及 LED 的掃描工作完成掉,否則就會(huì)影響到下一次中斷到來(lái)后的處理。在本實(shí)例的 T/C2 中斷中,使用了 display_ok 標(biāo)志,將 LED 掃描分配在奇數(shù) ms(1、3、 5、7、),而將 1ms 的 TCNT0 差值計(jì)算、累積和轉(zhuǎn)換等處理放在主程序中完成。另外由于計(jì)算量大的 BCD 碼轉(zhuǎn)換是在偶數(shù) ms(100ms)處理,所以程序中 LED 的掃描處理和 BCD 碼轉(zhuǎn)換處理不
13、會(huì)同時(shí)進(jìn)行(不會(huì)在兩次中斷間隔的 1ms 內(nèi)同時(shí)處理 LED 掃描和 BCD 碼轉(zhuǎn)換),這就保證了在下一次中斷到達(dá)時(shí),前一次的處理已經(jīng)全部完成,使頻率的連續(xù)測(cè)量不受影響。該實(shí)例程序的性能和指標(biāo)為(假定系統(tǒng)時(shí)鐘沒(méi)有誤差 = 4MHz):頻率測(cè)量絕對(duì)誤差:10Hz。由于限定的時(shí)間為 100ms,而且T/C0 的計(jì)數(shù)值有1的誤差,換算成頻率為10Hz。被測(cè)最高頻率值:255KHz。由于 T/C0 的長(zhǎng)度 8 位,所以在 1ms 中,TO 輸入的脈沖個(gè)數(shù)應(yīng)小于 255 個(gè),大于 255 后造成 T/C0 的自動(dòng)清另,丟失脈沖個(gè)數(shù)。測(cè)量頻度:10 次/秒。限定的時(shí)間為 100ms,連續(xù)測(cè)量,所以為 10
14、 次/秒。使用資源:兩個(gè)定時(shí)器,一個(gè)中斷。3) 思考與實(shí)踐根據(jù)上面采用測(cè)頻法的思路,如何修改程序提高測(cè)量精度和被測(cè)最高頻率?參考提示如下:延長(zhǎng)限定的時(shí)間,如采用 1s,可提高頻率的測(cè)量精度。但測(cè)量頻度減小,同時(shí)注意變量 freq 應(yīng)定義為長(zhǎng)整型變量。將 T/C0 換成 16 位的 T/C1,可以提高被測(cè)最高頻率值。注意此時(shí) time0_new、 time0_old 應(yīng)定義為整型變量。11.1.3 測(cè)測(cè)量頻率,就是測(cè)量在限定的脈沖個(gè)數(shù)之間的時(shí)間間隔,然后測(cè)的基本算成頻率(需要時(shí))。當(dāng)被測(cè)信號(hào)的頻率比較低時(shí),采用這種方法比較適合,因?yàn)轭l率越低,在限定的脈華東師范大學(xué) 電子科學(xué)技術(shù)系 馬 潮11-4
15、基于 AVR 的單片系統(tǒng)原理與實(shí)踐應(yīng)用沖個(gè)數(shù)之間的時(shí)間間隔也也長(zhǎng),因此定時(shí)計(jì)數(shù)的個(gè)數(shù)也越多,測(cè)量也越準(zhǔn)確。例 11.2 采用測(cè)1) 硬件電路的頻率計(jì)設(shè)計(jì)與實(shí)現(xiàn)硬件電路的顯示部分與圖 9-7 相同,PA 口為 8 個(gè) LED 數(shù)碼管的段輸出,PC 口控制 8 個(gè)LED 數(shù)碼管的位掃描。被測(cè)頻率信號(hào)由 PB0(T0)輸入。2)設(shè)計(jì)首先給出系統(tǒng)程序,然后做必要的說(shuō)明。/*File name Chip type Program typeClock frequency Memory mExternal SRAM sizeData Stack size: demo_11_2.c: ATmega16: Ap
16、plication: 4.000000 MHz: Small: 0: 256*/#include flash char led_710=0 x3F,0 x06,0 x5B,0 x4F,0 x66,0 x6D,0 x7D,0 x07,0 x7F,0 x6F;flash charition8=0 x7f,0 xbf,0 xdf,0 xef,0 xf7,0 xfb,0 xfd,0 xfe;char dis_buff8;/ 顯示緩沖區(qū),存放要顯示的 8 個(gè)字符的段碼值charit;bit freq_ok = 0;char time2_new;unsignedunsigned longfreq;freq
17、_temp;void display(void)PORTC = 0 xff;PORTA = led_7dis_buff/ 8 位 LED 數(shù)碼管動(dòng)態(tài)掃描函數(shù)it;if (it=5) PORTA = PORTA | 0 x80;PORTC =itionit;it = 0;if (+it =8 )/ T/C0 比較匹配中斷服務(wù),250 個(gè)計(jì)數(shù)脈沖中斷一次errupt P voidp_isr(void)time2_new =TCNT2 = 0;TCNT2;TIFR |= 0 x02;freq_temp = freq; freq = 0;freq_ok = 1;/ T/C2 比較匹配中斷服務(wù),500u
18、s 一次華東師范大學(xué) 電子科學(xué)技術(shù)系 馬 潮11-5第 11 章 實(shí)戰(zhàn)練習(xí)二errupt P voidp_isr(void)freq+; #asm(sei)display();/ 開(kāi)中斷,允許中斷嵌套,T/C0 中斷可打斷該中斷服務(wù)voidfreq_to_disbuff(void)/ 頻率值轉(zhuǎn)化為 BCD 碼送顯示緩沖區(qū)char i,j=7;for (i=0;i=7;i+)dis_buffj-i = freq_temp % 10; freq_temp = freq_temp / 10;voidmain(void)char i; DDRA=0 xFF; DDRC=0 xFF;/ T/C2 初始化
19、 TCCR2=0 x0A; TCNT2=0 x00; OCR2=0 xF9;/ T/C0 初始化 TCCR0=0 x0E; TCNT0=0 x00;OCR0=0 xF9;/ LED 數(shù)碼管/ 內(nèi)部時(shí)鐘,8 分頻(4M/8=500KHz),CTC 模式,/ 基時(shí)為 2us/ OCR2 = 0 xF9(249),(249+1)/500 = 0.5ms/ 外部 T0 腳下降沿觸發(fā)計(jì)數(shù),CTC 模式/ OCR0 = 0 xF9(249),(249 + 1) = 250TIMSK=0 x82;/ 允許 T/C2、T/C0 比較匹配中斷for (i=0;i=7;i+)dis_buffi=0;#asm(se
20、i)/ 開(kāi)放全局中斷while (1)if (freq_ok)freq_temp = freq_temp * 250 + time2_new; freq_temp = 12500000000/freq_temp; freq_to_disbuff();freq_ok = 0;/ 累計(jì) 250 個(gè)脈沖的時(shí)間間隔/ 換算成頻率/ 頻率值送顯示程序中 LED 掃描形式函數(shù) desplay(),以及脈沖計(jì)數(shù)值轉(zhuǎn)換成 BCD 碼并送顯示緩沖區(qū)函華東師范大學(xué) 電子科學(xué)技術(shù)系 馬 潮11-6基于 AVR 的單片系統(tǒng)原理與實(shí)踐應(yīng)用數(shù) freq_to_disbuff()比較簡(jiǎn)單,請(qǐng)讀者自己分析。在該程序中,同樣使
21、用了兩個(gè)定時(shí)計(jì)數(shù)器。T/C2 仍舊工作在 CTC 方式,每隔 500us 中斷一次,該定時(shí)時(shí)間即作為 LED 的顯示掃描,同時(shí)也用于時(shí)間累計(jì)。在每一次 T/C2 的中斷中,將累計(jì)中斷的次數(shù)(在 freq 中),然后馬上開(kāi)放全局中斷(由于在進(jìn)入 T/C0 中斷時(shí),系統(tǒng)硬件已經(jīng)自動(dòng)關(guān)閉了全局中斷允許),保證系統(tǒng)響應(yīng) T/C0 的中斷。該程序的是 T/C0 的中斷。T/C0 工作在 CTC 方式,它負(fù)責(zé)對(duì)外部 T0 引腳輸入的脈沖信號(hào)計(jì)數(shù)(下降沿觸發(fā)),一旦計(jì)數(shù)值(限定脈沖個(gè)數(shù))到達(dá) 250 產(chǎn)生中斷。進(jìn)入 T/C0中斷后,立即當(dāng)前 T/C2 寄存器TCNT2 的值(在 time2_new 中),然
22、后清零 TCNT2 和 T/C2的中斷標(biāo)志位,為下一次計(jì)時(shí)做初始化準(zhǔn)備。接下來(lái)同樣需要把 T/C2 產(chǎn)生中斷的次數(shù)累計(jì)值備份到 freq_temp 中,此時(shí)變量 freq_temp 和 time2_new 中的值就是 T0 輸入的 250 個(gè)限定脈沖之間的時(shí)間間隔。當(dāng) T/C0 中斷產(chǎn)生后,系統(tǒng)應(yīng)該立即響應(yīng),馬上T/C2 的值。由于 T/C2 的計(jì)時(shí)過(guò)程不會(huì)停止,所以拖延 T/CO 中斷的響應(yīng)時(shí)間就會(huì)影響測(cè)量的精度。因此需要把 T/C2 的中斷服務(wù)程序設(shè)計(jì)成能夠支持中斷嵌套的方式,使系統(tǒng)盡可能的立即響應(yīng) T/C0 中斷。計(jì)算 250 個(gè)限定脈沖之間的時(shí)間間隔是在主程序中完成的。計(jì)算公式為:25
23、0 個(gè)脈沖之間的時(shí)間間隔 = T/C2 中斷次數(shù) * 250 + T/C2 當(dāng)前值(計(jì)時(shí)時(shí)基個(gè)數(shù));1 計(jì)時(shí)時(shí)基個(gè)數(shù) = 2us(注:T/C2 計(jì)時(shí)時(shí)基 = 4M/8)。換算成頻率值:1000000/(250 個(gè)脈沖之間的時(shí)間間隔 *2us/250)* 100 = 12500000000/250 個(gè)脈沖之間的時(shí)間間隔,為 Hz。乘上 100 是為了保留 2 位小數(shù)。程序中全部使用了整數(shù)運(yùn)算,它比采用浮點(diǎn)數(shù)運(yùn)算的速度要快的多,同時(shí)也保證了在 T/C0 兩次中斷的間隔中,能全部完成頻率換算、LED 掃描等處理任務(wù),不造成對(duì)頻率連續(xù)測(cè)量的影響。該實(shí)例程序的性能和指標(biāo)為(假定系統(tǒng)時(shí)鐘沒(méi)有誤差 = 4M
24、Hz):周期測(cè)量絕對(duì)誤差為(2us/250)。如果不考慮中斷響應(yīng)時(shí)間的影響,由于 T/C2的計(jì)數(shù)值有1 的誤差,所以周期測(cè)量絕對(duì)誤差為(2us/250)。如果考慮中斷響應(yīng)時(shí)間的影響時(shí),周期測(cè)量絕對(duì)誤差在(25/250)us。被測(cè)最低頻率值為 8Hz??紤] freq 的長(zhǎng)度為 16 位,最大計(jì)數(shù)值為 65535,所以可以 的 250 個(gè)脈沖之間的時(shí)間間隔最大為 65535*250*2us = 32767500us。那么最長(zhǎng) 1 個(gè)脈沖周期為 32767500us/250 = 131070us,換算成頻率為 1/131070 = 7.63Hz。測(cè)量頻度:與被測(cè)頻率有關(guān)。如被測(cè)頻率為 125Hz,測(cè)
25、量頻度 = 1 次/2 秒;被測(cè)頻率為 250Hz,測(cè)量頻度 = 1 次/秒;被測(cè)頻率為 2K,測(cè)量頻度 = 8 次/秒。使用資源:兩個(gè)定時(shí)器,兩個(gè)中斷,其中一個(gè)支持中斷嵌套。下面進(jìn)一步測(cè)量的精度問(wèn)題,在測(cè)頻法中,由于頻率測(cè)量的絕對(duì)誤差是10Hz,因此被測(cè)頻率越高(僅受系統(tǒng)時(shí)鐘限制),測(cè)量精度也就越好,這一點(diǎn)是明顯的。而在測(cè)周法中,由于其周期測(cè)量絕對(duì)誤差是固定的,因此被測(cè)頻率越低,精度越好。這一特點(diǎn)不容易直接看出,以測(cè)量 1K 頻率和 4K 頻率為例,分別計(jì)算出它們的精度結(jié)果,并進(jìn)行比較。首先取測(cè)的周期測(cè)量絕對(duì)誤差為(2us/250),即0.008us。對(duì)于 1K 頻率,其標(biāo)準(zhǔn)周期為 1000
26、us。考慮測(cè)量誤差:1000.008us999.992us,對(duì)應(yīng)頻率為:999.992Hz 1000.008Hz,有效位數(shù)為 6 位。而對(duì)于 4K 頻率,其標(biāo)準(zhǔn)周期為 250us??紤]測(cè)量誤差:250.008us249.992us,對(duì)應(yīng)頻率為:3999.872Hz4000.128Hz,此時(shí)有效位數(shù)降為 5 位了??梢?jiàn),當(dāng)被測(cè)頻率越高時(shí),有效位數(shù)越少,測(cè)量的精度也越差了。11.1.4 頻率測(cè)量小結(jié)以上介紹了兩種頻率的測(cè)量方法,通過(guò)分析知道,頻率的測(cè)量還是比較復(fù)雜的。華東師范大學(xué) 電子科學(xué)技術(shù)系 馬 潮11-7第 11 章 實(shí)戰(zhàn)練習(xí)二如果設(shè)計(jì)制作一個(gè)頻率計(jì),要能滿足在被測(cè)頻率范圍比較寬,變化大時(shí)使
27、用的話,單一的使用某一種測(cè)量方法都是不能達(dá)到需要的。所以,一個(gè)完善的頻率計(jì),要設(shè)計(jì)一個(gè)智能的測(cè)量過(guò)程,即其系統(tǒng)程序能夠根據(jù)每次的測(cè)試數(shù)據(jù),自動(dòng)轉(zhuǎn)換使用正確的測(cè)量方法,以及能夠自動(dòng)調(diào)節(jié)限定的時(shí)間(測(cè)頻法),或調(diào)節(jié)限定脈沖數(shù)(測(cè)),或調(diào)整計(jì)時(shí)的時(shí)間基時(shí)等。這樣經(jīng)過(guò)幾次自動(dòng)的調(diào)整后,系統(tǒng)測(cè)出的頻率達(dá)到最高的測(cè)量精度。此外,上面的頻率測(cè)量方法都必須占用 MCU 的 2 個(gè)硬件資源,這也是一般單片機(jī)測(cè)頻所采用的方法(或采用 1 個(gè)T/C 加 1 個(gè)外部中斷,同樣占用 2 個(gè)硬件資源)。AVR 單片機(jī)的 T/C1增加了捕捉功能,利用該功能進(jìn)行頻率的測(cè)量時(shí),不但只需要使用 1 個(gè)硬件資源 T/C1 就能完成
28、周期的測(cè)量,而且還能獲得更好的測(cè)量的精度。11.2 基于T/C1 捕捉功能實(shí)現(xiàn)高精度的周期測(cè)量在第8章第4節(jié)中介紹了AVR定時(shí)計(jì)數(shù)器的一個(gè)非常有特點(diǎn)的功能T/C1的輸入捕捉功能。該功能可以應(yīng)用于精確捕捉一個(gè)外部事件的發(fā)生,事件發(fā)生的時(shí)間印記(Time-stamp)。當(dāng)一個(gè)輸入捕捉事件發(fā)生,如外部引腳ICP1上的邏輯電平變化時(shí),T/C1計(jì)數(shù)器TCNT1中的計(jì)數(shù)值被實(shí)時(shí)的寫入到輸入捕捉寄存器ICR1中,并置位輸入捕獲標(biāo)志位ICF1,產(chǎn)生中斷申請(qǐng)。因此,利用輸入捕捉功能可以實(shí)現(xiàn)對(duì)周期的精確測(cè)量。采用輸入捕捉功能進(jìn)行精確周期測(cè)量的基本原理比較簡(jiǎn)單,實(shí)際上就是將被測(cè)信號(hào)作為ICP1 的輸入,被測(cè)信號(hào)的上
29、升(下降)沿作為輸入捕捉的觸發(fā)信號(hào)。T/C1 工作在常規(guī)計(jì)數(shù)器方式,對(duì)設(shè)定的已知系統(tǒng)時(shí)鐘脈沖進(jìn)行計(jì)數(shù)。在計(jì)數(shù)器正常工作過(guò)程中,一旦 ICP1 上的輸入信號(hào)由低變高(假定上升沿觸發(fā)輸入捕捉事件)時(shí),TCNT1 的計(jì)數(shù)值被同步到了寄存器 ICR1 中。換句話將,當(dāng)每一次 ICP1 輸入信號(hào)由低變高時(shí),TCNT1 的計(jì)數(shù)值都會(huì)再次同步到 ICR1 中。如果的將兩次連續(xù)的 ICR1 中數(shù)據(jù)下來(lái),那么 2 次ICR1 的差值乘上已知的計(jì)數(shù)器計(jì)數(shù)脈沖的周期就是輸入信號(hào)一個(gè)周期的時(shí)間。由于在整個(gè)過(guò)程中,計(jì)數(shù)器的計(jì)數(shù)工作沒(méi)有受到任何影響,捕捉事件發(fā)生的時(shí)間印記也是由硬件自動(dòng)同步所得到的周期值是非常精確的。到
30、ICR1 中的,因此下面,把“AVR-51 多功能實(shí)驗(yàn)開(kāi)發(fā)板”K 區(qū)提供有占空比為 50%、125Hz128KHz之間 10 種不同頻率的標(biāo)準(zhǔn)脈沖信號(hào)作為被測(cè)信號(hào)源,給出僅采用一個(gè) T/C1,配合輸入捕捉功能的應(yīng)用,實(shí)現(xiàn)一個(gè)高精度的周期(頻率)測(cè)試計(jì)的設(shè)計(jì)應(yīng)用。例 11.3 基于 T/C1 捕捉功能的可變量程頻率計(jì)的設(shè)計(jì)與實(shí)現(xiàn)1) 硬件電路圖 11-1 基于 T/C1 捕捉功能的可變量程頻率計(jì)電路圖本例的硬件電路如圖 11-1 所示,PA 口為 6 個(gè) LED 數(shù)碼管的段輸出,PC 口是 6 個(gè) LED數(shù)碼管的位掃描控制口。6 位 LED頻率計(jì)的結(jié)果顯示。被測(cè)脈沖信號(hào)由 ICP1(PD6)輸華
31、東師范大學(xué) 電子科學(xué)技術(shù)系 馬 潮11-8基于 AVR 的單片系統(tǒng)原理與實(shí)踐應(yīng)用入。需要注意的是,為了提高測(cè)量的精度,系統(tǒng)時(shí)鐘應(yīng)該采用外部晶體,同時(shí)系統(tǒng)時(shí)鐘頻率原則上越高越好。本例中采用外部 4M 晶體,因此系統(tǒng)時(shí)鐘頻率為 4M,周期為 0.25us(圖中未畫出外部晶體部分的電路和 8 個(gè)段限流電阻)。2)設(shè)計(jì)盡管采用輸入捕捉功能進(jìn)行精確周期測(cè)量的基本原理比較簡(jiǎn)單,但是實(shí)際實(shí)現(xiàn)起來(lái)卻不是那么簡(jiǎn)單的。因?yàn)橄到y(tǒng)中需要 LED 掃描顯示,頻率值的換算也需要大量的計(jì)算,而且在系統(tǒng)的運(yùn)行的過(guò)程中,還必須確保 T/C1 每次捕捉中斷產(chǎn)生后馬上把寄存器 ICR1 中的時(shí)間印記讀出,以及 T/C1 計(jì)數(shù)過(guò)程是
32、否溢出等等。另外由于被測(cè)信號(hào)的頻率范圍在 125Hz 到 128KHz之間,差128000/125 = 1024 倍,所以還要考慮使用量程的自動(dòng)轉(zhuǎn)換。下面首先給出系統(tǒng)程序,然后做必要的說(shuō)明。/*File name Chip type Program typeClock frequency Memory mExternal SRAM sizeData Stack size: demo_11_3.c: ATmega16: Application: 4.000000 MHz: Small: 0: 256*/#include sfrw ICR1=0 x26;/ 補(bǔ)充定義 16 位寄存器 ICR1 地址
33、為 0 x26(mega16.h 中未定義)flash char led_711=0 x3F,0 x06,0 x5B,0 x4F,0 x66,0 x6D,0 x7D,0 x07,0 x7F,0 x6F,0 x00;flash charition6=0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf;char dis_buff6;/ 顯示緩沖區(qū),存放要顯示的 6 個(gè)字符的段碼值unsignedicp_v1,icp_v2;char icp_n,max_icp;bit icp_ok,time_4ms_ok,f_2_d,begin_m,full_ok;void display(vo
34、id)/ 6 位 LED 數(shù)管動(dòng)態(tài)掃描函數(shù)sic charit;PORTC = 0 xff;PORTA = led_7dis_buffit;PORTC =itionit;it = 0;if (+it = 6)/ Timer 2 比較匹配中斷服務(wù),4ms 定時(shí)errupt P voidp_isr(void)#asm(sei)display();/ 開(kāi)放全局中斷,允許中斷嵌套華東師范大學(xué) 電子科學(xué)技術(shù)系 馬 潮11-9第 11 章 實(shí)戰(zhàn)練習(xí)二time_4ms_ok = 1;/ Timer 1 溢出中斷服務(wù)errupt TIM1_OVF void timer1_ovf_isr(void)full_o
35、k = 1;/ Timer 1 輸入捕捉中斷服務(wù)errupt TIM1_CAPT void timer1_capt_isr(void)if (icp_n = max_icp)icp_v2 = ICR1; TIMSK = 0 x80;icp_ok = 1;else if (icp_n = 0)icp_v1 = ICR1;icp_n+;/ 第 N 個(gè)上升沿到/第 N 個(gè)上升沿時(shí)間T/CI 輸入捕捉和溢出中斷/第 1 個(gè)上升沿時(shí)間void f_to_disbuf(long v)char i;for (i=0;i0;i-)if (dis_buffi =/ 頻率值送顯示緩沖區(qū)函數(shù)/ 轉(zhuǎn)換成 6 位BCD
36、 碼送顯示緩沖區(qū)/零不顯示0)dis_buffi = 10;elsebreak;void main(void)華東師范大學(xué) 電子科學(xué)技術(shù)系 馬 潮11-10基于 AVR 的單片系統(tǒng)原理與實(shí)踐應(yīng)用unsignedlong fv;icp_1,icp_2;DDRA=0 xFF; PORTC=0 xFF; DDRC=0 x3F;PORTD=0 x40;/ LED 段碼輸出/ LED 位控輸出/ PD6(icp)輸入方式,上拉有效/ T/C2 初始化 TCCR2=0 x0C;OCR2=0 xf9;/7c;/ T/C1 初始化 TCCR1B = 0 x41; TIMSK = 0 xA4;/ 內(nèi)部時(shí)鐘,64
37、 分頻(4M/64=62.5KHz),CTC 模式/ OCR2 = 0 xf9(249),(249+1)/62.5=4ms/ T/C1 正常計(jì)數(shù)方式,上升沿觸發(fā)輸入捕捉,4M/1 計(jì)數(shù)時(shí)鐘/ 允許 T/C2 比較匹配中斷,允許 T/C1 輸入捕捉、溢出中斷icp_n = 0;max_icp =1; #asm(sei)/ 開(kāi)放全局中斷while (1)if (icp_ok = 1)/ 完成一次測(cè)量if (icp_v2 = icp_v1)icp_2 = icp_v2 - icp_v1;else/ 計(jì)算 N 個(gè)上升沿的時(shí)鐘脈沖個(gè)數(shù),icp_2 = 65536 - icp_v1 + icp_v2;if
38、 (!(icp_v2 = icp_v1 & full_ok) / 有溢出,數(shù)據(jù)無(wú)效if (icp_2 = icp_1)/ 兩次個(gè)數(shù)相等,測(cè)量有效fv = 4000000 * (long)max_icp / icp_2;/ 換算成頻率值f_2_d = 1;/ 允許新頻率送顯示if (fv 4000)max_icp = 64;elsemax_icp = 1;/ 如果頻率大于 4Khz,N=64/ N=1Elsemax_icp = 1;icp_1 = icp_2;/ 有溢出,N=1華東師范大學(xué) 電子科學(xué)技術(shù)系 馬 潮11-11第 11 章 實(shí)戰(zhàn)練習(xí)二icp_ok = 0;begin_m = 1;if
39、 (time_4ms_ok)if (f_2_d)f_to_disbuf(fv); f_2_d = 0;else if (begin_m)icp_n = 0;full_ok = 0;/ 新頻率送顯示/ 開(kāi)始新的一次測(cè)量,/ 清除溢出標(biāo)志TIFR = 0 x24; TIMSK = 0 xa4;begin_m = 0;/ 清除可能存在的輸入捕捉、溢出中斷標(biāo)志位/ 開(kāi)啟 T/C1 輸入捕捉、溢出中斷允許time_4ms_ok = 0;程序中 LED 動(dòng)態(tài)掃描函數(shù) desplay(),以及頻率值轉(zhuǎn)換成 BCD 碼后送顯示緩沖區(qū)函數(shù)f_to_disbuf()已經(jīng)面多次出現(xiàn)了,請(qǐng)讀者自己分析。在該程序中,使
40、用了兩個(gè)定時(shí)計(jì)數(shù)器。T/C2 工作在 CTC 方式,每隔 4ms 定時(shí)中斷一次,定時(shí)服務(wù)中執(zhí)行 LED 顯示掃描。掃描定時(shí)時(shí)間的設(shè)計(jì)考慮了 2 個(gè)方面,設(shè)置 4ms 為L(zhǎng)ED 顯示掃描間隔,即能達(dá)到每秒 40 次的掃描頻率,也盡量減少了 T/C2 中斷對(duì) T/C1 中斷及時(shí)響應(yīng)的影響。同時(shí)為了確保不影響 T/C1 的工作,在 T/C2 的中斷服務(wù)中還必須再次開(kāi)放全局中斷,實(shí)現(xiàn)中斷嵌套,使得 T/C1 的中斷的得到響應(yīng)。本例中僅使用了一個(gè) 16 位的 T/C1 進(jìn)行周期的測(cè)量。T/C1 工作在計(jì)數(shù)器方式,對(duì) 4M 系統(tǒng)時(shí)鐘進(jìn)行計(jì)數(shù),因此每 1 個(gè)數(shù)的時(shí)間為 0.25us。T/C1 設(shè)置為引腳 I
41、CP1 的上升沿為外部事件的觸發(fā)。一旦 ICP1 上出現(xiàn)上跳變,T/C1 的硬件將自動(dòng)同步的把當(dāng)前 TCNT1 的值到ICR1中,并申請(qǐng)捕捉中斷。在 T/C1 捕捉中斷服務(wù)程序中下兩個(gè) ICR1 的值:一個(gè)為第 0 次觸發(fā)時(shí)的 T/C1 值,另一次為第 1(N)次觸發(fā)時(shí) T/C1 值。當(dāng)?shù)?2 個(gè)值也下來(lái)后,隨即關(guān)閉T/C1 所有的中斷,將 2 個(gè)的數(shù)據(jù)交給主程序進(jìn)行有效性的判斷和周期頻率的換算。程序中還使用了 T/C1 的溢出中斷,該中斷主要用于判斷第二次 ICR1 的值是否比第一次 ICR1的值超出了 65536 個(gè),如果超出,則需要調(diào)整量程。T/C1 的兩個(gè)中斷服務(wù)都是非常重要的(等級(jí)相
42、同),任何一個(gè)一旦發(fā)生,都應(yīng)該立即響應(yīng),不能延誤。在實(shí)際情況中這點(diǎn)是不容易做到的,但應(yīng)盡量精心設(shè)計(jì),盡量做到?jīng)]有延誤,或減少延誤。另外,這兩個(gè)中斷服務(wù)程序的執(zhí)行時(shí)間也必須越短越好。在系統(tǒng)主程序中,對(duì)每一組的兩個(gè) ICR1 值進(jìn)行判斷,將其相減,得到差值,然后判斷其是否溢出。這里的溢出不是單指 TCNT1 的值從 65535 變到 0 的溢出,其條件應(yīng)是當(dāng)?shù)?2個(gè) ICR1 值大于第 1 個(gè) ICR1 的值,且 TCNT1 的值出現(xiàn)過(guò)從 65536 變到 0 的現(xiàn)象。一旦出現(xiàn)了這種情況,說(shuō)明兩次 ICR1 的差值超出了 16 位 65536 的長(zhǎng)度,數(shù)據(jù)無(wú)效,需要改變量程了。華東師范大學(xué) 電子科
43、學(xué)技術(shù)系 馬 潮11-12基于 AVR 的單片系統(tǒng)原理與實(shí)踐應(yīng)用另外,在程序中還采取了連續(xù) 2 次有效的差值相等才作為一次真正有效的周期測(cè)量的限定,更有效的把受到各種干擾以及由于中斷響應(yīng)不及時(shí)造成的錯(cuò)誤數(shù)據(jù)剔除掉了。另外在系統(tǒng)主程序中,把頻率值送顯示緩沖區(qū)的調(diào)用放置在剛剛掃描過(guò)一位 LED 數(shù)碼管后執(zhí)行,這是由于頻率值送入顯示緩沖區(qū)的工作需要比較長(zhǎng)的執(zhí)行時(shí)間,更重要的是要改變顯示緩沖區(qū)的數(shù)值。而在這個(gè)期間,f_to_disbuf()函數(shù)一旦被 LED 掃描中斷打斷的話,就會(huì)造成個(gè)別數(shù)字顯示的不穩(wěn)定以及跳動(dòng)的現(xiàn)象??紤]到 LED 掃描的間隔時(shí)間有 4ms,所以把頻率值送入顯示緩沖區(qū)的工作放置在剛
44、剛掃描過(guò)一位 LED 數(shù)碼管后立即執(zhí)行,就能充分利用 4ms 的間隔,可以使整個(gè)函數(shù)的執(zhí)行過(guò)程不會(huì)被中斷打斷了(4M 系統(tǒng)時(shí)鐘條件下,4ms 可以執(zhí)行約 16000 條指令!)。同時(shí),在主程序的處理中,只有在一次周期測(cè)量過(guò)程的數(shù)據(jù)全部處理完成,并將新的轉(zhuǎn)換頻率值送顯后,才重新開(kāi)啟 T/C1 的中斷,開(kāi)始新的一次周期測(cè)量。這就使周期測(cè)量和數(shù)據(jù)處理是完全分開(kāi)(分時(shí))進(jìn)行的,兩者之間沒(méi)有相互的干擾,不會(huì)形成這邊數(shù)據(jù)還沒(méi)處理完,那邊又來(lái)了新的測(cè)量數(shù)據(jù)所造成的數(shù)據(jù)的現(xiàn)象。在本例中,周期的測(cè)量采用了比較簡(jiǎn)單的量程自動(dòng)轉(zhuǎn)換方式。量程的確定受到 T/C1 的長(zhǎng)度和計(jì)數(shù)器的計(jì)數(shù)脈沖頻率和被測(cè)頻率的制約。對(duì)于 1
45、25Hz 到 4K 的頻率測(cè)量,采用的是間隔為 1(N = 1)的兩個(gè)相鄰上升沿之間的時(shí)間差,也就測(cè)量被測(cè)信號(hào)一個(gè)周期的時(shí)間。對(duì)于 4M 的計(jì)數(shù)時(shí)鐘,1/125 的時(shí)間內(nèi)可以的脈沖個(gè)數(shù)為 32000 個(gè),而 1/4000 的時(shí)間內(nèi)可以的脈沖個(gè)數(shù)為 1000 個(gè),均不超出 65536,T/C1 的長(zhǎng)度。對(duì)于 4KHz 到 128K 的頻率測(cè)量,采用的是間隔為連續(xù) 64(N = 64)個(gè)上升沿之間的時(shí)間差,也就測(cè)量被測(cè)信號(hào) 64 個(gè)周期的時(shí)間。對(duì)于 4M 的計(jì)數(shù)時(shí)鐘,64/4000 的時(shí)間內(nèi)可以的脈沖個(gè)數(shù)為 64000個(gè),而 64/128000 的時(shí)間內(nèi)可以的脈沖個(gè)數(shù)為 2000 個(gè),都不超出 6
46、5536,T/C1 的長(zhǎng)度。因此,當(dāng)測(cè)量信號(hào)的頻率值大于 4K 時(shí),自動(dòng)轉(zhuǎn)換成 N=64 的量程,而一旦頻率小于 4K,或出現(xiàn)測(cè)量數(shù)據(jù)溢出情況時(shí),量程自動(dòng)轉(zhuǎn)換成 N=1。下面對(duì)該實(shí)例程序的周期測(cè)量性能和指標(biāo)進(jìn)行評(píng)估(假定系統(tǒng)時(shí)鐘沒(méi)有誤差 = 4MHz):周期測(cè)量絕對(duì)誤差:(0.25us)/(0.25us/64)。需要注意的是,為了能簡(jiǎn)潔的說(shuō)明主要的設(shè)計(jì),本例程做了簡(jiǎn)化,采用整形數(shù)計(jì)算處理,所以頻率值僅顯示到個(gè)位的Hz,小數(shù)點(diǎn)后的數(shù)值已經(jīng)丟卻了,真正的精度沒(méi)有體現(xiàn)出來(lái)。下面128K 頻率為例,分別計(jì)算出它們的精度結(jié)果,并進(jìn)行比較。以測(cè)量 125Hz 頻率和對(duì)于 125Hz 頻率,其標(biāo)準(zhǔn)周期為 8
47、000us,測(cè)量絕對(duì)誤差為0.25us,那么測(cè)量誤差: 8000.25us7999.75us,對(duì)應(yīng)頻率為:124.9961Hz125.0039Hz,有效位數(shù)為 5 位。而對(duì)于128K 頻率,其標(biāo)準(zhǔn)周期為 7.8125us,測(cè)量絕對(duì)誤差為0.25us/64,那么測(cè)量誤差為:7.81640625us7.80859375us,對(duì)應(yīng)頻率為:127936.0Hz128064.0Hz,有效位數(shù)為 4 位??梢?jiàn),當(dāng)被測(cè)頻率越高時(shí),有效位數(shù)越少,測(cè)量的精度也越差了。讀者也許會(huì)有疑問(wèn),這個(gè)例子好像沒(méi)有上面的例子精度高。其實(shí),在例程 11-2 中的評(píng)估條件是在不考慮中斷影響下進(jìn)行的,而在本例中,中斷處理是不影響精
48、度的。另外在上面的例子中是測(cè)量 250 個(gè)脈沖的周期,而在本例中只是 1 個(gè)和 64 個(gè)。被測(cè)最低頻率值:62.5KHz。由于 T/C1 的長(zhǎng)度 16 位,1/62.5 時(shí)間內(nèi)可以的個(gè)數(shù)為 64000 個(gè)。當(dāng)頻率值再低的話,一個(gè)周期內(nèi)的計(jì)數(shù)值將超出 65536,造成溢出。被測(cè)最高頻率值:128KHz??赡苡械淖x者認(rèn)為只要增加 N 的值,就能提高測(cè)量頻率的上限,這只是在一定條件下才可以這樣考慮的。實(shí)際上被測(cè)頻率的上限是由 T/C1 捕捉中斷服務(wù)程序的執(zhí)行時(shí)間限定的,因?yàn)楸粶y(cè)信號(hào)每一個(gè)脈沖的上升沿時(shí)都要進(jìn)入中斷處理程序的,而中斷處理的時(shí)間必須在下一個(gè)上升沿到來(lái)前完成,否則將會(huì)丟失掉一次中斷,造成數(shù)
49、據(jù)確。在 4M 時(shí)鐘系統(tǒng)下,128K 的被測(cè)信號(hào)每隔 7.8125us 就產(chǎn)生一次中斷,而在這個(gè)時(shí)間內(nèi),MCU 最多可以執(zhí)行 31.25 條指令!考慮到 T/C1 的中斷服務(wù)還有嵌在 T/C2 的LED 定時(shí)掃描中斷中執(zhí)行的情況,所以每次 T/C1 的中斷服務(wù)程序執(zhí)行的指令應(yīng)該小于 25 條指令!華東師范大學(xué) 電子科學(xué)技術(shù)系 馬 潮11-13第 11 章 實(shí)戰(zhàn)練習(xí)二從這點(diǎn)可以看出,在本例中,最關(guān)鍵的一環(huán)是中斷服務(wù)程序的設(shè)計(jì)和編寫。在真正產(chǎn)品的設(shè)計(jì)中,這樣的中斷服務(wù)程序建議最好采用匯編編寫,當(dāng)然這就要求程序員具備更高的水平了。測(cè)量頻度:40 次/秒。T/C1 計(jì)滿一次需要 65535 個(gè)系統(tǒng)時(shí)鐘
50、,約 65535 * 0.25us =16.34ms,附加上 2 次 LED 定時(shí)時(shí)間間隔 8ms 的計(jì)算處理時(shí)間,一次測(cè)量完成時(shí)間約為 25ms,所以測(cè)量頻度為 40 次/秒。使用資源:一個(gè) 16 位定時(shí)器,兩個(gè)中斷(T/C2 中斷對(duì)測(cè)周期沒(méi)有貢獻(xiàn))。3) 思考與實(shí)踐根據(jù)上面采用測(cè)頻法的思路,在 MCU 的設(shè)置選擇和上限值?方面如何能提高被測(cè)頻率的參考上面測(cè)頻法的思路,在方面如何能降低被測(cè)頻率的下限值?(參考提示:T/C1 溢出中斷中溢出的次數(shù))參考上面測(cè)頻法的思路,在的值,T/C1 溢出中斷中方面如何能提高測(cè)量精度?(參考提示:增加 N溢出的次數(shù))如果程序在一次測(cè)量中,得到的兩次 ICR1
51、 的有效差值為 234,那么此時(shí)的測(cè)量的有效位數(shù)是多少?相對(duì)精度為多少?為什么?11.3 帶校時(shí)和音樂(lè)報(bào)時(shí)功能實(shí)時(shí)時(shí)鐘的設(shè)計(jì)與實(shí)現(xiàn)面的章節(jié)中分別介紹了 I/O 口輸入/出的應(yīng)用、中斷的應(yīng)用、T/C 的應(yīng)用,以及基于狀態(tài)機(jī)的系統(tǒng)分析和系統(tǒng)程序設(shè)計(jì)方法等。在本節(jié)里,將給出一個(gè)功能比較完整的“帶校時(shí)和音樂(lè)報(bào)時(shí)功能的實(shí)時(shí)時(shí)鐘”系統(tǒng),作為上面各種基本應(yīng)用的綜合設(shè)計(jì)示例。例 11.4 帶校時(shí)和音樂(lè)報(bào)時(shí)功能實(shí)時(shí)時(shí)鐘的設(shè)計(jì)與實(shí)現(xiàn)1) 硬件電路硬件電路如圖 11-2 所示,PA 口為 LED 數(shù)碼管的 8 段碼輸出,PC0-PC5 共 6 個(gè) I/O 口,作為控制時(shí)間顯示的 6 個(gè) LED 數(shù)碼管的位掃描線。P
52、C6、PC7 分別接連接兩個(gè)按鍵,用于設(shè)置時(shí)鐘的工作狀態(tài)和校時(shí)時(shí)間的設(shè)置。圖中音樂(lè)報(bào)時(shí)電路部分(未畫出)與第 8 章中的圖8-20 相同,由端口 PD5 輸出產(chǎn)生音樂(lè)的脈沖信號(hào),經(jīng)三極管驅(qū)動(dòng)蜂鳴器。圖 11-2 帶校時(shí)功能的實(shí)時(shí)時(shí)鐘電路圖定義兩個(gè)按鍵的功能為:K1 用于設(shè)置轉(zhuǎn)換時(shí)鐘工作狀態(tài),K2 用于設(shè)置校時(shí)時(shí)間(加 1操作)。時(shí)鐘工作狀態(tài)轉(zhuǎn)換圖如圖 11-3 所示,具體每個(gè)狀態(tài)的定義和功能如下:平時(shí)時(shí)鐘工作在時(shí)鐘顯示狀態(tài),每按一下 K1 鍵,時(shí)鐘依次進(jìn)入校時(shí)時(shí)間的設(shè)置狀態(tài)。時(shí)“時(shí)鐘顯示”進(jìn)入“秒低位設(shè)置”時(shí),校時(shí)時(shí)間的初始值為轉(zhuǎn)換時(shí)刻的時(shí)鐘華東師范大學(xué) 電子科學(xué)技術(shù)系 馬 潮11-14基于
53、AVR 的單片系統(tǒng)原理與實(shí)踐應(yīng)用值。時(shí)“時(shí)設(shè)置”回到(K1 作用下)“時(shí)鐘顯示”時(shí),時(shí)鐘時(shí)間由校時(shí)時(shí)間代替,確認(rèn)完成校時(shí)的設(shè)置。當(dāng)時(shí)鐘處在時(shí)間設(shè)置的 6 個(gè)狀態(tài)時(shí),每按一次 K2 鍵,相應(yīng)的位上的數(shù)值加 1,并且要能根據(jù)具體所在的位置自動(dòng)做相應(yīng)的調(diào)整。如秒的數(shù)字只能在 0-5 之間,而時(shí)的數(shù)值要限制在 0、1、2(時(shí)個(gè)位數(shù)小于 3 時(shí)),或時(shí)的數(shù)值要限制在 0、1(時(shí)個(gè)位數(shù)大于 3 時(shí))。當(dāng)時(shí)鐘處在時(shí)間設(shè)置的 6 個(gè)狀態(tài)時(shí),在 20 秒內(nèi)無(wú)任何鍵按下,系統(tǒng)自動(dòng)返回“時(shí)間顯示”狀態(tài),設(shè)置的時(shí)間無(wú)效,不改變?cè)瓡r(shí)鐘的計(jì)時(shí)時(shí)間。在效時(shí)時(shí)間設(shè)置的操作過(guò)程中,時(shí)鐘不停止其前時(shí)間的計(jì)時(shí)過(guò)程,除非當(dāng)時(shí)時(shí)設(shè)置”
54、回到(K1 作用下)“時(shí)鐘顯示”時(shí),時(shí)鐘的計(jì)時(shí)時(shí)間由確認(rèn)的校時(shí)時(shí)間代替而改變。時(shí)鐘顯示亮度均勻、無(wú)閃爍。當(dāng)設(shè)置相應(yīng)時(shí)間位時(shí),該位應(yīng)閃爍提示。K1K1K1K1K1K1超時(shí)K1圖 11-3 時(shí)鐘工作狀態(tài)轉(zhuǎn)換圖2)設(shè)計(jì)本示例的程序是幾章所給例子的綜合應(yīng)用基礎(chǔ)上實(shí)現(xiàn)的,代碼中也給出了相應(yīng)的解釋,因此本節(jié)中不再做的說(shuō)明,留給讀者去自行分析。希望能在真正掌握了前幾章內(nèi)容的基礎(chǔ)上,慢慢的去品味和體會(huì),掌握如何更好的綜合使用 AVR 硬件的功能,以及程序設(shè)計(jì)的方法與技巧。/*File name Chip type Program typeClock frequency Memory mExternal SRA
55、M sizeData Stack size: demo_11_4.c: ATmega16: Application: 1.000000 MHz: Small: 0: 256*/#include flash char led_710=0 x3F,0 x06,0 x5B,0 x4F,0 x66,0 x6D,0 x7D,0 x07,0 x7F,0 x6F;flash charition6=0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf;flassignedt9 = 0,956,865,759,716,638,568,506,470;華東師范大學(xué) 電子科學(xué)技術(shù)系 馬 潮11-1
56、5時(shí)高位設(shè)置時(shí)低位設(shè)置分高位設(shè)置分低位設(shè)置秒高位設(shè)置秒低位設(shè)置時(shí)鐘顯示第 11 章 實(shí)戰(zhàn)練習(xí)二flassigned char d9 = 0,105,116,132,140,157,176,198,209;#define Max_note32flassigned char musicMax_note =5,2,8,2,5,2,4,2,3,2,2,2,1,4,1,2,1,2,2,2,3,2,3,2,1,2,3,2,4,2,5,8;unsigned char note_n;unsignedbit play_on;_n;char time3,time_set3; char dis_buff6;char time_counter,key_stime_counter;/ 時(shí)、分、秒計(jì)數(shù)和設(shè)置單元/ 顯示緩沖區(qū),存放要顯示的 6 個(gè)字符的段碼值/ 時(shí)間計(jì)數(shù)單元,char clock_se = 6,return_time;bit po_on,set_on,time_1s_ok,key_stime_ok;void display(void)/ 6 位 LED 數(shù)管動(dòng)態(tài)掃描函數(shù)sic charit=0;PORTC = 0 xff;PORTA = led_7dis_buffit;if (set_on &
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司和運(yùn)營(yíng)合同范例
- 2025天津市安全員考試題庫(kù)及答案
- 買賣冷凍食品合同范本
- 2025年福建省安全員-A證考試題庫(kù)附答案
- 占用房屋合同范本
- 神經(jīng)調(diào)控睡眠改善系統(tǒng)合同
- 債務(wù)贈(zèng)與房產(chǎn)合同范本
- 供水公司合同范本
- 出租小型家具合同范本
- 做私人水電合同范本
- 小學(xué)生防性侵安全教育主題班會(huì)課件
- 幸福心理學(xué)智慧樹(shù)知到答案2024年浙江大學(xué)
- 人教版一年級(jí)數(shù)學(xué)下冊(cè)教案全冊(cè)(完整版下載打印)
- 2024至2030年全球及中國(guó)消費(fèi)電子磁阻隨機(jī)存取存儲(chǔ)器(MRAM)行業(yè)深度研究報(bào)告
- 聯(lián)合體施工雙方安全生產(chǎn)協(xié)議書(shū)范本
- 云南省2023年秋季學(xué)期期末普通高中學(xué)業(yè)水平考試信息技術(shù)(含答案解析)
- 氣血津液(中醫(yī)理論)
- 2024年2型糖尿病中醫(yī)防治指南解讀課件
- 2024-2030年中國(guó)螺旋藻行業(yè)市場(chǎng)發(fā)展分析及發(fā)展趨勢(shì)與投資研究報(bào)告
- MOOC 中外鐵路文化之旅-華東交通大學(xué) 中國(guó)大學(xué)慕課答案
- CJJ 82-2012 園林綠化工程施工及驗(yàn)收規(guī)范
評(píng)論
0/150
提交評(píng)論