您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > AVR-CTC模式实验
AVR单片机学习笔记--基于慧净HJ-2GAVR开发板第7.2章CTC模式7.2.17.2.17.2.17.2.1概述“CTC是什么?”如果借签叶老师的意思是:CTC是用于输出50%占空比的方波信号(0.5DutyCycle'sRectangleWaveform),除此之外它还用于产生准确的连续定时信号。在笔记中我依然也是跟着叶老师使用定时器1完成CTC的试验。新手打从一开始就看数据手册必定被它秒杀,事实上我也已经被秒杀了几次。在浏览手册和在google冲浪时可以很明显的看到,CTC工作模式不一定只是定时器1,其他的定时器也能完成,但是新手就要承认自己是新手,老师教什么自己就学什么。当明白基础了解原理后,再回头看|作也不迟。7.2.27.2.27.2.27.2.2CTCCTCCTCCTC模式·概念我们可以假设OCnA是PD4和PD5引脚输出的电平,红色圆点是最大值。当在初始的阶段中,OCnA输出低电平,而TCNTn的值从0开始就开始累加,当TCNTn的值到大红色圆点的时候,OCnA的电平立即发生变化~取反。这时候后就会产生所谓的“OCnA抵达最大值中断”或者“ICFn抵达最大值中断”(它们是什么?这个不重要,往后看就会明白了)。在这一瞬间TCNTn的值清零然后又从0开始累加。TCNTn的值抵达另一个最高点时之前,OCnA输出的电平一直保持上一次取反的结果,也就是会一直保持高电平,直到达到TCNTn到达另一个最高点,OCnA输出的电平就会再一次的取反,变成低电平。以上的动作会一直持续,直到永远。在电平取反的过程,每一次Period方波的占空比都是50%,而且Period的决定就是我们要输出的频率。(后面会介绍)除此之外,TCNTn的值是自动设置的,而OCnA|ICFn的最大值是人为赋值,该赋值动作涉及到,比较输出模式和方波输产生模式位。AVR单片机学习笔记--基于慧净HJ-2GAVR开发板7.2.37.2.37.2.37.2.3CTCCTCCTCCTC模式下有关的寄存器((((定时器1111为例))))第一:T/C1控制寄存器ATCCR1ACTC模式下仅针对后四位设置,也就是BIT4~BIT7。设置的结果就是用来决定CTC比较输出的模式,浏览以下的表格:当然,在试验中我们仅使用到第二种模式,就是当OC1A/OC1B比较匹配时电平就取反,很显然换句话说就是,你要OCxA,还是OCxB工作或者如何工作,全部取决于COM1A0:1,COM1B0:1的设置。在试验当中老师是以两个引脚同时工作最为实例。所以...E.g:TCCR1A=0x6*;注意:当使用定时器1时,OCxA也就是OC1A对应PD5引脚。OCxB也就是OX1B分别对应PD4引脚。AVR单片机学习笔记--基于慧净HJ-2GAVR开发板第一:T/C1控制寄存器BTCCR1B既然要进入CTC模式,还要而外的强调CTC的波形产生模式位,而寄存器TCCR1B的BIT3~BIT4用来决定了CTC的波形产生模式位。见以下图表:或者可以这样假设:模式4中CTC的比较匹配最大值是由OCCR1A这个寄存器来决定,相反的如果是模式12,CTC的比较匹配最大值则是由ICR1寄存器来决定。这样说比较明白了吗?试验中,叶老师是以模式四进行讲解。除此之外,定时器1用来产生CTC依然也是需要时钟源,而时钟源一般上取自内部的时钟(晶振),然后再来针对BIT0~BIT2设置分频。AVR单片机学习笔记--基于慧净HJ-2GAVR开发板AVR单片机学习笔记--基于慧净HJ-2GAVR开发板第三:输出比较寄存器1A|BOCRA|B上一页我们说了,试验中是以模式4进行,并且OC1A和OC1B引脚同时工作,所以我们必须为OCRA|B赋比较的最大值,但是这里产生这样一个问题:要为OCR1A赋值呢?还是为OCR1B赋值呢?又或者同时赋值?这个问题是不然的,在视频教程里老师曾经说过只要为OCR1A赋值就好了。那么OCR1A要赋什么值好呢?前面我们说过,OCR1A决定了一次电平互换的Period(中文是什么忘记了),所以OCR1A的初值与我们渴求的频率有关。那么看看以下的公式Fclk是晶振的频率,N为分频,Focn是渴求的频率,至于OCRN就是我们要赋得初值,由于我们使用的是定时器1,那么重新整理一下。Fout=Fxtal/(2·N·(1+OCR1A))OCR1A=(Fxtal/Fout·N·2)-1例题:HJ-2G开发板搭配的晶振为11.0592Mhz,而分频N为1,为了求出2Khz的频率,OCR1A应该付什么值呢?OCR1A=(Fxtal/Fout·N·2)-1=(11.0592Mhz/2khz·1·2)-1=275.46C语言:OCR1A=275;AVR单片机学习笔记--基于慧净HJ-2GAVR开发板7.2.47.2.47.2.47.2.4归纳整理说到这里基本上已经建立了大概的概念,当然还需要理清一下过程。在编程的时候,要执行的步骤如下:1.将PD4~PD5设置为输出(默认为低电平)。DDRD|=BIT(4)|BIT(5);2.决定比较输出模式,试验中为模式电平取反。TCCR1A=0x50;3.决定方波产生模式位,试验中是模式4,亦即WGM12=1。TCCR1B|=BIT(3);4.决定分频N,这里就假设去1吧,无预分频。TCCR1B|=BIT(0);5.在步骤3中,方波产生模式位为4,换句话说就是OCR1A决定匹配的最大值。这里就取例题的结果吧。OCR1A=275;7.2.57.2.57.2.57.2.5实验----利用定时器1111,以CTCCTCCTCCTC模式产生2khz2khz2khz2khz的方波。试验中需要用到示波器,学生拥有自己的示波器确实有点不现实,自己可以尝试将频率调低至1~10Hz左右,然后使用LED带电测试PD4~PD5引脚,LED会有节奏的一闪一闪。源码:==============================================================//0701-CTC.c//利用定时器1产生2khz的方波//当然也可以稍微修改以产生10Hz以下的方波,使测试LED更容易//akuei223-12-09#includeiom16v.h#includemacros.h//定时器1,CTC输出化函数voidCTC_Init(){DDRD|=BIT(4)|BIT(5);//PD4~5引脚为输出状态TCCR1A=0x50;//比较匹配输出模式,电平取反TCCR1B|=BIT(3);//方波产生模式位,模式4,OCR1A决定TOP值。TCCR1B|=BIT(0);//分频为1//TCCR1B|=BIT(2);//分频为256,如果不是256分频的话,无法实现输出1~10hz方波OCR1A=275;//分频为1时,OCR1A初值为275,输出2Khz方波//OCR1A=2159;//分频为256时,OCR1A初值为2159,输出10Hz方波//OCR1A=21599;//分频为256时,OCR1A初值为21599,输出1Hz方波}//主函数voidmain(){CTC_Init();//调用CTC_Init()函数while(1);//程式停止。}AVR单片机学习笔记--基于慧净HJ-2GAVR开发板以上的程式,只要照着公式,可以随意设置频率在1~10Hz之间,然后将LED的阳极带电,阴极则用来测试PD4~PD5引脚,LED会闪耀,频率越低LED闪耀程度就越少。以下的图片是从视频里载图的,没有钱作实物拍照,无法之下...人们常说作假也要做得像模像样,而且自己看着也快乐。PD4引脚PD5引脚
本文标题:AVR-CTC模式实验
链接地址:https://www.777doc.com/doc-5974407 .html