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