搜索
bottom↓
回复: 95

AVR定时器的使用要点介绍,请各位指正及补充

[复制链接]

出0入0汤圆

发表于 2005-9-22 16:48:24 | 显示全部楼层 |阅读模式
AVR定时器的要点介绍  (大部分摘自 M16中文手册,未能一一测试)



  M16的T1 16位定时器一共有15种工作模式,其他2个8位定时器(T0/T2)相对简单,除了T2有异步工作模式用于RTC应用外

                       (可以利用溢出中断和比较匹配中断作定时功能)

符号定义:

BOTTOM 计数器计到0x0000 时即达到BOTTOM

MAX    计数器计到0xFFFF ( 十进制的65535) 时即达到MAX

TOP    计数器计到计数序列的最大值时即达到TOP。

       TOP 值可以为固定值0x00FF、0x01FF或 0x03FF,或是存储于寄存器 OCR1A或ICR1里的数值,具体有赖于工作模式

------注意MAX和TOP是不同的,在表格[波形产生模式的位描述]可以看到它们的作用



  分5种工作类型

  1  普通模式 WGM1=0

    跟51的普通模式差不多,有TOV1溢出中断标志,发生于MAX(0xFFFF)时

    1 采用内部计数时钟     用于 ICP捕捉输入场合---测量脉宽/红外解码

        (捕捉输入功能可以工作在多种模式下,而不单单只是普通模式)

    2 采用外部计数脉冲输入  用于 计数,测频

    其他的应用,采用其他模式更为方便,不需要像51般费神

     

  2 CTC模式 [比较匹配时清零定时器模式] WGM1=4,12

     跟51的自动重载模式差不多

     1 用于输出50%占空比的方波信号

     2 用于产生准确的连续定时信号

     WGM1=4时, 最大值由OCR1A设定,TOP时产生OCF1A比较匹配中断标志

     WGM1=12时,最大值由ICF1设定, TOP时产生ICF1输入捕捉中断标志

           ------如果TOP=MAX,TOP时也会产生TOV1溢出中断标志

     注:WGM=15时,也能实现从OC1A输出方波,而且具备双缓冲功能

     计算公式: fOCn=fclk_IO/(2*N*(1+TOP))

                   变量N 代表预分频因子(1、8、64、256、1024),T2多了(32、128)两级。      

      

  3 快速PWM模式 WGM1=5,6,7,14,15  

    单斜波计数,用于输出高频率的PWM信号(比双斜波的高一倍频率)

    都有TOV1溢出中断,发生于TOP时[不是MAX,跟普通模式,CTC模式不一样]

    比较匹配后可以产生OCF1x比较匹配中断.

      WGM1=5时, 最大值为0x00FF, 8位分辨率

      WGM1=6时, 最大值为0x01FF, 9位分辨率

      WGM1=7时, 最大值为0x03FF,10位分辨率  

     WGM1=14时,最大值由ICF1设定, TOP时产生ICF1输入捕捉中断 (单缓冲)

     WGM1=15时,最大值由OCR1A设定,TOP时产生OCF1A比较匹配中断(双缓冲,但OC1A将没有PWM能力,最多只能输出方波)

     改变TOP值时必须保证新的TOP值不小于所有比较寄存器的数值

    注意,即使OCR1A/B设为0x0000,也会输出一个定时器时钟周期的窄脉冲,而不是一直为低电平

    计算公式:fPWM=fclk_IO/(N*(1+TOP))



  4 相位修正PWM模式 WGM1=1,2,3,10,11  

    双斜波计数,用于输出高精度的,相位准确的,对称的PWM信号

    都有TOV1溢出中断,但发生在BOOTOM时

    比较匹配后可以产生OCF1x比较匹配中断.

      WGM1=1时, 最大值为0x00FF, 8位分辨率

      WGM1=2时, 最大值为0x01FF, 9位分辨率

      WGM1=3时, 最大值为0x03FF,10位分辨率  

     WGM1=10时,最大值由ICF1设定, TOP时产生ICF1输入捕捉中断 (单缓冲)

     WGM1=11时,最大值由OCR1A设定,TOP时产生OCF1A比较匹配中断(双缓冲,但OC1A将没有PWM能力,最多只能输出方波)

    改变TOP值时必须保证新的TOP值不小于所有比较寄存器的数值

    可以输出0%~100%占空比的PWM信号

    若要在T/C 运行时改变TOP 值,最好用相位与频率修正模式代替相位修正模式。若TOP保持不变,那么这两种工作模式实际没有区别

    计算公式:fPWM=fclk_IO/(2*N*TOP)



  5 相位与频率修正PWM模式 WGM1=8,9  

    双斜波计数,用于输出高精度的、相位与频率都准确的PWM波形

    都有TOV1溢出中断,但发生在BOOTOM时

    比较匹配后可以产生OCF1x比较匹配中断.

     WGM1=8时,最大值由ICF1设定, TOP时产生ICF1输入捕捉中断 (单缓冲)

     WGM1=9时,最大值由OCR1A设定,TOP时产生OCF1A比较匹配中断(双缓冲,但OC1A将没有PWM能力,最多只能输出方波)

    相频修正修正PWM 模式与相位修正PWM 模式的主要区别在于OCR1x 寄存器的更新时间

    改变TOP值时必须保证新的TOP值不小于所有比较寄存器的数值

    可以输出0%~100%占空比的PWM信号

    使用固定TOP 值时最好使用ICR1 寄存器定义TOP。这样OCR1A 就可以用于在OC1A输出PWM 波。

    但是,如果PWM 基频不断变化(通过改变TOP值), OCR1A的双缓冲特性使其更适合于这个应用。

    计算公式:fPWM=fclk_IO/(2*N*TOP)

   

快速参考见 Table 47. 波形产生模式的位描述







T/C 的时钟源

   T/C 的时钟源可以有多种选择,由CS12:0控制,分别用于高速(低分频)/长时间(高分频)/外部计数场合

   一个16位定时器,在8MHz系统时钟驱动下,可以实现uS级的高速定时和长达8秒的超长定时,这可是标准51的弱点



   CS12 CS11 CS10 说明

       0    0    0  无时钟源     (T/C 停止)

       0    0    1  clkIO/1    ( 无预分频)  

       0    1    0  clkIO/8    ( 来自预分频器)

       0    1    1  clkIO/64   ( 来自预分频器)

       1    0    0  clkIO/256  ( 来自预分频器)  

       1    0    1  clkIO/1024 ( 来自预分频器)

       1    1    0  外部T1 引脚,下降沿驱动

       1    1    1  外部T1 引脚,上升沿驱动

  分频器复位

        在高预分频应用时,通过复位预分频器来同步T/C 与程序运行,可以减少误差。

   但是必须注意另一个T/C是否也在使用这一预分频器,因为预分频器复位将会影响所有与其连接的T/C。

   

  外部时钟源

   由于使用了引脚同步逻辑,建议外部时钟的最高频率不要大于fclk_IO/2.5。

   外部时钟源不送入预分频器

   选择使用外部时钟源后,即使T1引脚被定义为输出,其T1引脚上的逻辑信号电平变化仍然会驱动T/C1 计数,这个特性允许用户通过软件来控制计数。

   

输入捕捉单元

   T/C 的输入捕捉单元可用来捕获外部事件,并为其赋予时间标记以说明此时间的发生时刻。

   外部事件发生的触发信号由引脚ICP1 输入,也可通过模拟比较器单元来实现。

   时间标记可用来计算频率、占空比及信号的其它特征,以及为事件创建日志。

   

   输入捕捉单元可以工作在多种工作模式下

   (使用ICR1定义TOP的(WGM1=12,14,10,8)波形产生模式时,ICP1与输入捕捉功能脱开,从而输入捕捉功能被禁用。)

   在任何输入捕捉工作模式下都不推荐在操作过程中改变TOP值

   

   当引脚ICP1 上的逻辑电平( 事件) 发生了变化,或模拟比较器输出ACO 电平发生了变化,并且这个电平变化为边沿检测器所证实,输入捕捉即被激发:

   16位的TCNT1 数据被拷贝到输入捕捉寄存器ICR1,同时输入捕捉标志位ICF1 置位。

   如果此时ICIE1 = 1,输入捕捉标志将产生输入捕捉中断。

   中断执行时ICF1 自动清零,或者也可通过软件在其对应的I/O 位置写入逻辑"1” 清零。

   

   注意,改变触发源有可能造成一次输入捕捉。因此在改变触发源后必须对输入捕捉标志执行一次清零操作以避免出现错误的结果

   

   除去使用ICR1定义TOP的波形产生模式外, T/C中的噪声抑制器与边沿检测器总是使能的。

   (其实就是永远使能??)

   使能噪声抑制器后,在边沿检测器前会加入额外的逻辑电路并引入4个系统时钟周期的延迟.

   噪声抑制器使用的是系统时钟,因而不受预分频器的影响

   

   使用输入捕捉中断时,中断程序应尽可能早的读取ICR1 寄存器

   如果处理器在下一次事件出现之前没有读取ICR1 的数据, ICR1 就会被新值覆盖,从而无法得到正确的捕捉结果。

   

   测量外部信号的占空比时要求每次捕捉后都要改变触发沿。

   因此读取ICR1 后必须尽快改变敏感的信号边沿。改变边沿后,ICF1 必须由软件清零( 在对应的I/O 位置写"1”)。

   若仅需测量频率,且使用了中断发生,则不需对ICF1 进行软件清零。

   

输出比较单元

   16位比较器持续比较TCNT1与OCR1x的内容,一旦发现它们相等,比较器立即产生一个匹配信号。

   然后OCF1x 在下一个定时器时钟置位。

   如果此时OCIE1x = 1, OCF1x 置位将引发输出比较中断。

   (就是说输出比较可以工作在所有工作模式下,但PWM模式下更好用,功能更强)

   

   输出比较单元A(OCR1A) 的一个特质是定义T/C 的TOP 值( 即计数器的分辨率)。

   TOP 值还用来定义通过波形发生器产生的波形的周期。

   

   由于在任意模式下写TCNT1 都将在下一个定时器时钟周期里阻止比较匹配,在使用输出比较时改变TCNT1就会有风险,不管T/C是否在运行

   这个特性可以用来将OCR1x初始化为与TCNT1 相同的数值而不触发中断。



  强制输出比较(FOC)

   工作于非PWM 模式时,可以通过对强制输出比较位FOC1x 写”1” 的方式来产生比较匹配。

   强制比较匹配不会置位 OCF1x 标志,也不会重载/ 清零定时器,

   但是OC1x 引脚将被更新,好象真的发生了比较匹配一样(COMx1:0 决定OC1x 是置位、清零,还是交替变化)。

   

比较匹配输出单元

   比较匹配模式控制位COM1x1:0 具有双重功能。

   1 波形发生器利用COM1x1:0 来确定下一次比较匹配发生时的输出比较OC1x 状态;

   2 COM1x1:0 还控制OC1x 引脚输出的来源。

   只要COM1x1:0 不全为零,波形发生器的输出比较功能就会重载OC1x 的通用I/O 口功能。

   但是OC1x 引脚的方向仍旧受控于数据方向寄存器 (DDR)。

   从OC1x 引脚输出有效信号之前必须通过数据方向寄存器的DDR_OC1x 将此引脚设置为输出。

   

   波形发生器利用COM1x1:0 的方法在普通模式、CTC 模式和PWM 模式下有所区别。

   对于所有的模式,设置COM1x1:0=0 表明比较匹配发生时波形发生器不会操作OC1x寄存器



访问16位寄存器

   写16 位寄存器时,应先写入该寄存器的高位字节.

      usigned int k;

      k=0x1234;

      TCNT1H=(unsigned char)(k>>8);

      TCNT1L=(unsigned char) k;

   而读16 位寄存器时应先读取该寄存器的低位字节.

      usigned int k;

       k=TCNT1L;

       k+=(unsigned int)(TCNT1H<<8);

   使用“C” 语言时,编译器会自动处理16位操作.

      usigned int k;

      k=0x1234;

      TCNT1=k;

      k=TCNT1;





这里举例 如何用16位定时器T1实现高精度1秒连续定时,精准度跟所用晶振一样

T1 CTC模式,8MHz外部晶振,定时1秒的话,选256分频,刚好整步距,非常准确TOP=1000000/(0.125*256)-1=31249=0x7A11。



作连续定时,必用CTC/PWM模式作,没有累积误差,稳定度跟时钟是一样,手动重装受中断影响是很难达到的。

不过定时步距和最长定时间取决于时钟,分频系数和模式。

对于非整步距的定时时间要求,就会存在小于一个步距的偏差。

例如 T1,CTC模式,8MHz

fOCn=fclk_IO/(2*N*(1+TOP))

定时时间 T= 0.125uS*N*(1+TOP)

分频系数     定时步距    最长定时时间

   1(无分频)   0.125uS      8192us     8毫秒

   8               1uS     65536us    65毫秒

  64               8uS       524ms   0.5秒

256              32uS      2097ms     3秒

1024             128uS      8388ms   超8秒了

定时1秒的话,选256分频,刚好整步距,非常准确,TOP=1000000/(0.125*256)-1=31249=0x7A11。

-----------当然了,时钟必须是高精度的晶振之类,不要用内部RC振荡器来瞎搞。



由于精度取决于晶振的精度,配合软件做RTC实时时钟是完全可行的。

用+/-20PPM的晶振,跑一个月误差1分钟 [60*60*24*30=2592000秒*20ppm=52秒]。



作RTC用专门为32.768KHz时钟优化的T2定时器更合适,这里只是举例T1的实现方法

如果用+/-2.5PPM的DS32KHz(MAXIM的业界最准确的32.768KHz单片稳补时钟芯片TXCO)做时钟源,超准确

指标: -40~+85度全温度范围,年误差<4分钟,0~40度温度范围内+/-1PPM,年误差<1分钟

出0入0汤圆

发表于 2005-9-26 10:24:10 | 显示全部楼层
支持~

为pwm犯愁很久了,呵呵

出0入0汤圆

发表于 2005-10-28 14:30:23 | 显示全部楼层
好贴~! 收藏

出0入0汤圆

发表于 2005-11-3 12:19:59 | 显示全部楼层
辛苦!

出0入0汤圆

发表于 2005-11-12 10:40:34 | 显示全部楼层
好贴,辛苦了,谢谢!

出0入0汤圆

发表于 2006-1-15 13:44:43 | 显示全部楼层
辛苦了,谢谢!

出0入0汤圆

发表于 2006-1-15 20:04:26 | 显示全部楼层
谢谢HJJourAVR大哥!!

出0入0汤圆

发表于 2006-2-20 20:08:36 | 显示全部楼层
辛苦了,谢谢!

出0入0汤圆

发表于 2006-2-20 20:09:25 | 显示全部楼层
辛苦了,谢谢!

出0入0汤圆

 楼主| 发表于 2006-3-23 10:11:34 | 显示全部楼层
更新添加了 如何用16位定时器T1实现高精度1秒连续定时。

体现AVR定时器的优势,虽然复杂,但复杂得有意义。

出0入0汤圆

发表于 2006-3-23 21:32:12 | 显示全部楼层
谢谢HJJouravr大哥,这么好的贴子,收藏是唯一的选择啊!

出0入0汤圆

发表于 2006-3-23 22:02:43 | 显示全部楼层
全面

出0入0汤圆

发表于 2006-3-23 22:15:11 | 显示全部楼层
我已经使用了CTC方式了。还是HJJ说的详细,谢谢!

出0入0汤圆

发表于 2006-3-23 22:18:10 | 显示全部楼层
以前 一直没用过PWM ,早几天 用M16控制 4路PWM,驱动 24分步的 步进电机(每步1/12度),算是调通了。

出0入0汤圆

发表于 2006-3-26 10:47:59 | 显示全部楼层
我刚学单片机的。

TOP=1000000/(0.125*256)-1能详细说明一下吗?

不是应该这样吗?(0xffff-TOP)*(256/8)=1s吗?算出来TOP=85ED.

各位我错在哪儿了?

出0入0汤圆

 楼主| 发表于 2006-3-26 12:40:04 | 显示全部楼层
不同模式的计算公式不一样,见前面的描述。

CTC模式 8MHz

fOCn=fclk_IO/(2*N*(1+TOP))  

T= 0.125uS*N*(1+TOP)  

TOP=1000000/(0.125*256)-1=31249=0x7A11

上面的公式变换好像才小学水平啊?除了16进制转换外。

出0入0汤圆

发表于 2006-4-19 16:17:04 | 显示全部楼层
也不知道为什么,我用的是M48,OC1A总是出不来PWM啊

出0入0汤圆

发表于 2006-4-19 16:56:03 | 显示全部楼层
呵呵,16楼的兄弟,大概你是PORT设置或Timer设置不对造成的吧

出0入0汤圆

发表于 2006-4-20 16:17:20 | 显示全部楼层
在芯片的PDF上都有的

不过还是要谢谢楼主啊》

呵呵,我是新手,看了一个星期了,大家可以共同讨论,共同进步啊。

出0入0汤圆

发表于 2006-4-20 16:17:36 | 显示全部楼层
在芯片的PDF上都有的

不过还是要谢谢楼主啊》

呵呵,我是新手,看了一个星期了,大家可以共同讨论,共同进步啊。

出0入0汤圆

发表于 2006-4-26 17:01:50 | 显示全部楼层
m64中,

T2用外部时钟,

下降沿触发,

该怎么设置?

是不是只需TCCR2设置为00000110即可呢?

其他计数器会不会对他有什么影响?

出0入0汤圆

发表于 2006-4-27 22:24:20 | 显示全部楼层
真是有新人

辛苦了

谢过了



老前辈

出0入0汤圆

发表于 2006-4-28 15:57:17 | 显示全部楼层
T1作输入捕捉用时,TCNT1值从0x0000往上加,是在什么时候开始的?

是在设置TCCR1B=0X03开始 还是从TIMSK=0X20是开始呢?因为我想让它先开始加,加到一定的值了然后才打开捕抓,请高人指点!

我要用这个值( T/C 的输入捕捉单元可用来捕获外部事件,并为其赋予时间标记以说明此时间的发生时刻)  

谢谢!

出0入0汤圆

发表于 2006-6-17 17:11:32 | 显示全部楼层
谢谢大家。。。让我更了解定时器的功能。

出0入0汤圆

发表于 2006-7-9 10:15:26 | 显示全部楼层
不知能否用个例子来说明一下。这样才能更好得理解。

AVR得定时器/PWM得工作模式太多了。解释得也太抽象了。不好理解。

出0入0汤圆

发表于 2006-7-9 10:18:28 | 显示全部楼层
我应用的感觉是。我想实现一个功能,要花上好长时间去找资料。去理解和分析。还要去实验我用的结果如何。

之前在书上看了好多例子。照写上去,结果都不能正常运行。害人哪

出0入0汤圆

发表于 2006-8-9 13:07:48 | 显示全部楼层
48和16的定时器功能是一样的吗?

出0入0汤圆

发表于 2006-8-9 18:25:31 | 显示全部楼层
定时1s:

CTC模式 8MHz

fCn=fclk/(2*N*(1+TOP))   

T= 0.25uS*N*(1+TOP)

TOP=1000000/(0.25*256)-1=15624

出0入0汤圆

发表于 2006-8-17 13:18:09 | 显示全部楼层
控制步进电机到底是用CTC方式好?还是相位与频率修正PWM 模式好!都看晕了!

出0入0汤圆

发表于 2006-8-17 17:34:36 | 显示全部楼层
我要做一个500ms定时中断,怎么做呀,请高人指点

出0入0汤圆

发表于 2006-8-22 21:18:15 | 显示全部楼层
模式多了也是负担……

出0入0汤圆

发表于 2006-8-23 00:13:57 | 显示全部楼层
真是太麻烦了,AVR

出0入0汤圆

发表于 2006-9-9 10:13:17 | 显示全部楼层
HJJouravr朋友谢谢了,收藏。

出0入0汤圆

发表于 2006-9-21 13:45:30 | 显示全部楼层
good

出0入0汤圆

发表于 2006-9-29 12:08:00 | 显示全部楼层
急需这样的资料 太感谢了

出0入0汤圆

发表于 2006-9-29 14:41:34 | 显示全部楼层

出0入0汤圆

发表于 2006-9-30 15:13:41 | 显示全部楼层
真是太好了,初学者必备

出0入0汤圆

发表于 2006-10-3 18:08:40 | 显示全部楼层
多谢

出0入0汤圆

发表于 2006-10-3 20:45:54 | 显示全部楼层
谢谢了

出0入0汤圆

发表于 2006-10-30 00:00:52 | 显示全部楼层
楼主,辛苦了

出0入0汤圆

发表于 2006-10-30 00:01:13 | 显示全部楼层
楼主,辛苦了

出0入0汤圆

发表于 2006-10-31 15:05:59 | 显示全部楼层
我这两天都再看定时器这块,,比较复杂,应用的很少的,所以理解比较浅,,,

谢谢HJJouravr大哥!!

出0入0汤圆

发表于 2006-11-10 12:07:34 | 显示全部楼层
PWM的模式太多,一直比较头疼,以前写过可是没有成功。回去按照楼主的讲解再试一下。谢谢楼主的讲解,辛苦了

出0入0汤圆

发表于 2006-11-10 15:28:27 | 显示全部楼层
例如 T1,CTC模式,8MHz  

fOCn=fclk_IO/(2*N*(1+TOP))  

定时时间 T= 0.125uS*N*(1+TOP)  

分频系数     定时步距    最长定时时间  

   1(无分频)   0.125uS      8192us     8毫秒  

   8               1uS     65536us    65毫秒  

  64               8uS       524ms   0.5秒  

256              32uS      2097ms     3秒  

1024             128uS      8388ms   超8秒了  



请问,楼主的定时时间 T= 0.125uS*N*(1+TOP) 是不是应该是T= 0.25uS*N*(1+TOP)啊?

但是我用ICC自动生成的,和楼主算的结果是一样的啊???不解

出0入0汤圆

发表于 2006-12-11 09:19:26 | 显示全部楼层
太好了!!!!!!!只有顶了

一直在找这方面的资料,特别是外部脉冲计数器的使用

出0入0汤圆

发表于 2006-12-12 00:10:11 | 显示全部楼层
一点疑问

文档上说:

COM1A1/     COM1A0/                 

COM1B1      COM1B0

  1           1                     升序记数时比较匹配将置位OC1A/OC1B,

                                    降序记数时比较匹配将清零OC1A/OC1B



是不是 OC1A和OC1B 都能输出 PWM波形?



我试验的结果不是这样的



我的程序如下:

void Timer1_init(void)                     

{

        //定时器1部分,无预分频器,相位与频率修正PWM 模式

        TCNT1H = 0x00;  

        TCNT1L = 0x00;  

        TCCR1A = 0xF1;  

        TCCR1B = 0x11;              

        OCR1A = 0X320;  //频率

        OCR1B = 0X280;  //占空比 要小于OCR1A

}



int main(void)

{

          DDRB=0xff;

          PORTB=0xff;

          Timer1_init();

          while(1)

          {



                //其它程序



          }

        return 1;

}



这样的化 只有 OC1B(PB2)有输出,OC1A 无输出

TCCR1A = 0x11;时 OC1B无输出

这个正常 此时:WGM13:0 = 9 或14: 比较匹配时OC1A 取反,OC1B 未连接。WGM13:0为其

               它 值时为普通端口操作, OC1A/OC1B 未连接

TCCR1A = 0x41;时 OC1A有输出

这个正常 此时:WGM13:0 = 9 或14: 比较匹配时OC1A 取反,OC1B 未连接。WGM13:0为其

               它 值时为普通端口操作, OC1A/OC1B 未连接



TCCR1A = 0x81;时 OC1A无输出

TCCR1A = 0xC1;时 OC1A无输出

不明白这两种为什么无输出 文档上说



0x81:    升序记数时比较匹配将清零OC1A/OC1B,

          降序记数时比较匹配将置位OC1A/OC1B

0xC1:    升序记数时比较匹配将置位OC1A/OC1B,

          降序记数时比较匹配将清零OC1A/OC1B

   

    中文 2486N–AVR–07/04



英文文档也是这样说的 版本 2486Q–AVR–10/06

出0入0汤圆

发表于 2007-1-11 22:17:10 | 显示全部楼层
ding

出0入0汤圆

发表于 2007-1-13 09:50:09 | 显示全部楼层
重新学习一遍,谢谢

出0入0汤圆

发表于 2007-1-18 19:14:58 | 显示全部楼层
支持一下!!!

出0入0汤圆

发表于 2007-1-23 11:20:30 | 显示全部楼层
楼主写的和书上差不多啊,还是不太明白pwm



不过楼主写了这么详细,辛苦了,顶下哈。

出0入0汤圆

发表于 2007-3-21 00:39:02 | 显示全部楼层
辛苦。

出0入0汤圆

发表于 2007-3-22 06:11:41 | 显示全部楼层
回45楼huy666 :

你的问题是这样的,如果你用OCR1A作为TOP值的时候,OC1A是无法作为PWM输出的。建议如果你想自定义TOP值,选用ICR1设置TOP值。

建议多看看datasheet,发生问题都可以在datasheet上找到的。

出0入0汤圆

发表于 2007-3-26 20:38:33 | 显示全部楼层
好帖

正好要用定时记数器,不知道怎么下手,正迷茫。

刚好可以学习一下。



谢谢了

出0入0汤圆

发表于 2007-5-21 09:23:01 | 显示全部楼层
好帖,顶一个

出0入0汤圆

发表于 2007-5-21 09:55:45 | 显示全部楼层
谢谢楼主,我已打印下来慢慢学习,楼主的总结做得真好.

出0入0汤圆

发表于 2007-9-11 16:39:34 | 显示全部楼层
谢谢HJJouravr

出0入0汤圆

发表于 2007-10-2 16:06:39 | 显示全部楼层
辛苦了,谢谢!

出0入0汤圆

发表于 2007-10-2 22:04:22 | 显示全部楼层
AVR 的计数器是否可以实现减计数设置?请高人指点下

出0入0汤圆

发表于 2007-10-15 10:20:03 | 显示全部楼层
例如 T1,CTC模式,8MHz   
fOCn=fclk_IO/(2*N*(1+TOP))   
定时时间 T= 0.125uS*N*(1+TOP)   
分频系数     定时步距    最长定时时间   
   1(无分频)   0.125uS      8192us     8毫秒   
   8               1uS     65536us    65毫秒   
  64               8uS       524ms   0.5秒   
256              32uS      2097ms     3秒   
1024             128uS      8388ms   超8秒了   

请问,楼主的定时时间 T= 0.125uS*N*(1+TOP) 是不是应该是T= 0.25uS*N*(1+TOP)啊?
但是我用ICC自动生成的,和楼主算的结果是一样的啊???不解
43楼说的对阿!!
怎么回事呢?
其他人都在看什么啊?有没有认真看啊???
望高手指点!!!!

出0入0汤圆

发表于 2007-10-15 11:03:55 | 显示全部楼层
好帖手下了!

出0入0汤圆

发表于 2007-10-23 18:09:46 | 显示全部楼层
好贴,辛苦了,谢谢! 了解了些工作模式,datasheet还要看细点

出0入0汤圆

发表于 2007-10-24 09:29:14 | 显示全部楼层
好贴,楼主辛苦了.对我太有帮助了.感谢!
头像被屏蔽

出0入0汤圆

发表于 2007-10-24 09:31:09 | 显示全部楼层
这个帖子是HJJourAVR在我们这里任职期间,写的一系列技术文章之一。

写得很不错。

出0入0汤圆

发表于 2007-10-30 17:11:33 | 显示全部楼层
我同意58楼的看发,不知道大家是怎么计算的!!
另:我想问一下"HJJourAVR":整步距是什么意思?

出0入0汤圆

发表于 2007-11-1 09:29:49 | 显示全部楼层
"HJJourAVR"不在吗?

出0入0汤圆

发表于 2007-12-10 18:42:57 | 显示全部楼层
好帖

出0入0汤圆

发表于 2007-12-11 09:04:04 | 显示全部楼层
这几天正在看这部份,不过还是看得一头雾水。先收藏

出0入0汤圆

发表于 2007-12-11 10:06:50 | 显示全部楼层
不错啊!收下了.

出0入0汤圆

发表于 2007-12-11 12:59:26 | 显示全部楼层
给一个CTC模式产生时钟的小小工具



点击此处下载ourdev_187373.rar(文件大小:95K)

出0入0汤圆

发表于 2008-2-22 12:45:34 | 显示全部楼层
收藏了,谢谢了

出0入0汤圆

发表于 2008-2-23 15:39:54 | 显示全部楼层
xiexie !

出0入0汤圆

发表于 2008-2-25 19:13:10 | 显示全部楼层
关于楼主说的非整步距有偏差我认为不会,楼主在算的时候把晶振频率放在分母上了,先把定时步距给算出来然后代入公式。
而实际上的公式是这样:
    TOP=(定时时间*晶振频率/分频系数)-1
晶振频率与分频系数是整除关系,所以不会有计算上的偏差。
如8M晶振,1s定时:
    TOP=(1*8000000/256)-1=31249
7.3728M晶振,1s定时:
    TOP=(1*7372800/256)-1=28799
个人见解。

出0入0汤圆

发表于 2008-3-2 20:49:08 | 显示全部楼层
好帖,顶一个

出0入0汤圆

发表于 2008-5-27 21:33:56 | 显示全部楼层
搜出来,学习了!

出0入0汤圆

发表于 2008-5-28 09:12:53 | 显示全部楼层
标记

出0入0汤圆

发表于 2009-2-23 15:22:38 | 显示全部楼层
找到好东东了,谢谢楼主!

出0入0汤圆

发表于 2009-3-5 23:02:41 | 显示全部楼层
很好,下载学习,楼主好就没看见了

出0入0汤圆

发表于 2009-8-15 21:09:23 | 显示全部楼层
收藏。很好的总结。

出0入0汤圆

发表于 2009-8-25 09:32:11 | 显示全部楼层
分析得透彻,深入,是我的学习榜样。

出0入0汤圆

发表于 2010-12-29 10:26:14 | 显示全部楼层
m

出0入0汤圆

发表于 2010-12-29 12:00:03 | 显示全部楼层
不错 mark一下

出0入0汤圆

发表于 2010-12-29 12:07:50 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-12-29 13:06:45 | 显示全部楼层
再看一次

出0入0汤圆

发表于 2011-4-12 17:26:29 | 显示全部楼层
学习一次

出0入0汤圆

发表于 2011-4-13 15:55:02 | 显示全部楼层
AVR活了,先复习一下;

出0入0汤圆

发表于 2011-5-7 07:23:04 | 显示全部楼层
记下了。

出0入0汤圆

发表于 2011-5-10 10:54:36 | 显示全部楼层
回复【68楼】ChipArt 芯艺
-----------------------------------------------------------------------

谢谢,呵呵

出0入0汤圆

发表于 2011-9-13 17:16:28 | 显示全部楼层
看看

出0入0汤圆

发表于 2011-9-13 22:10:06 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-9-14 00:13:19 | 显示全部楼层
mark之。

出0入0汤圆

发表于 2011-9-28 11:31:34 | 显示全部楼层
太好了

出0入0汤圆

发表于 2011-9-28 12:47:32 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-9-29 09:41:54 | 显示全部楼层
学习下 总结的很好

出0入0汤圆

发表于 2012-7-14 19:26:32 | 显示全部楼层
超棒的帖子,看中文手册来回翻页,还不如这看着方便,非常感谢啊!!!

出0入4汤圆

发表于 2012-7-23 15:58:05 | 显示全部楼层
avr   定时器应用  MARK
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-7 19:36

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表