AVR單片機(jī)專(zhuān)輯——定時(shí)器
第二講:AVR單片機(jī)的定時(shí)器
ATmega128有兩個(gè)8位定時(shí)器0和2,兩個(gè)16位定時(shí)器1和3。下面主要說(shuō)一下定時(shí)器的不同用法。
1. T/C0可以外接32768Hz的晶振,實(shí)現(xiàn)RTC(實(shí)時(shí)時(shí)鐘)。
2. T/C2 外部事件計(jì)數(shù)器(T2)。
3. 16位的T/C可以實(shí)現(xiàn)精確的程序定時(shí)、波形產(chǎn)生和信號(hào)測(cè)量。功能非常強(qiáng)。
本文主要以16位的T/C1為例介紹定時(shí)器的應(yīng)用,其它的定時(shí)器可以依葫蘆畫(huà)瓢。
1.采用T/C1的溢出中斷實(shí)現(xiàn)電子鐘的設(shè)計(jì)
定時(shí)器工作在普通模式,用數(shù)碼管顯示時(shí)間。這里問(wèn)題是如何得到1s的定時(shí)。若晶振采用12M,256分頻,則計(jì)數(shù)初值應(yīng)設(shè)為X,0xFFFF-X=12M/256 ==〉X=0x48E4。
2.用CTC模式產(chǎn)生4kHz的方波(4和12)
CTC模式可以用來(lái)輸出50%占空比的方波信號(hào),產(chǎn)生準(zhǔn)確的連續(xù)定時(shí)信號(hào)。在方波信號(hào)產(chǎn)生時(shí),首先需要將I/O中的OCnA/OCnB/OCnC設(shè)置為輸出,電平取反,無(wú)分頻,本文選擇模式4。使用公式fOCnA=fclk_I/O/2N(1+OCRnA)
來(lái)計(jì)算出OCRnA的值。在硬件的管腳上可以得到精確的4kHz方波。
3.快速PWM——占空比不定(5、6、7、14和15)
快速PWM和其他PWM不同之處是單邊諧波工作方式??梢则?qū)動(dòng)直流電機(jī),背光等。首先還是需要將I/O中的OCnA/OCnB/OCnC設(shè)置為輸出,比較匹配時(shí)OCnA電平取反,比較匹配時(shí)清零OCnB/OCnC,在TOP時(shí)置位。64分頻,本文選擇模式15。使用公式fOCnxPWM=fclk_I/O/N(1+TOP)來(lái)計(jì)算出TOP的值。
本文將TOP值賦給 OCR1A,OCR1B實(shí)現(xiàn)占空比為20%的100Hz的PWM信號(hào)。將OCR1A乘以20%得到OCR1B。在硬件管腳OCR1A上得到占空比為50%的50Hz的PWM信號(hào),OCR1B上得到占空比為20%的100Hz的PWM信號(hào)。
4.相位修正PWM(1、2、3、10和11)
首先還是需要將I/O中的OCnA/OCnB/OCnC設(shè)置為輸出,比較匹配時(shí)OCnA電平取反,比較匹配時(shí)清零OCnB/OCnC,在TOP時(shí)置位。64分頻,本文選擇模式11。使用公式fOCnxPCPWM=fclk_I/O/2NTOP來(lái)計(jì)算出TOP的值。
本文將TOP值賦給 OCR1A,OCR1B實(shí)現(xiàn)占空比為20%的100Hz的PWM信號(hào)。將OCR1A乘以20%得到OCR1B。在硬件管腳OCR1A上得到占空比為50%的50Hz的PWM信號(hào),OCR1B上得到占空比為20%的100Hz的PWM信號(hào)。
相關(guān)寄存器設(shè)置請(qǐng)看ATmega128的數(shù)據(jù)手冊(cè)。附件是定時(shí)器程序以及Proteus仿真圖。