ATmega16 定时器总结【转】

来源:互联网 发布:java extends用法 编辑:程序博客网 时间:2024/06/03 15:32

每次重新需要用AVR调试个东西的时候觉得好多东西原来搞得似是而非的又忘记了,软件还好,以前每个独立的模块都保存了一份程序,但硬件就没笔记了,很不爽的感觉,我不需要准确地记得上面的ADC精度有多少,我要达到的目的是看到下面的引脚图时就知道每个口干什么用的有什么特点。还有三个定时器各自有什么特点。

ATmega16 <wbr>定时器总结【转】

首先ADC,TDI,MISO这些简单的就不用说了吧。

TOSC是什么东东?直接附上手册里的内容:对于拥有定时器、振荡器引脚(TOSC1和TOSC2)的AVR微处理器,晶体可以直接与这两个引脚相连,无需外部电容,此振荡器针对32.768kHz的钟表晶体作了优化,不建议在TOSC1管脚输入振荡信号,它到底干嘛用呢?看定时器一节的叙述:T/C的时钟可以为通过预分频器的内部时钟或通过由TOSC1/2接入的异步时钟,(唉!想弄一幅图上来结果还要插入,浏览才行,粘贴都不行,百度真烂。。那就省了吧)

接下来,VCC,AVCC,AREF有什么不同?VCC当然是普通电源,AVCC单独为ADC提供电源的,它俩之间的偏差不能超过0.3V,AREF看名字应该是ADC转换时的参考电压,但它不是必需的,ADC的参考电压源VREF反映了ADC的转换范围,它可以是AVCC,内部2.56V基准电源或外接于AREF引脚的电压。

XCK?它也是外部时钟,是USART的,也很少用到。

AIN0、1,模拟比较器对正极 AIN0 的值与负极 AIN1 的值进行比较。当 AIN0 上的电压比负极AIN1上的电压要高时,模拟比较器的输出 ACO 即置位。

最麻烦的就是定时器了:

先看一下百度文库http://wenku.baidu.com/view/d357494e767f5acfa1c7cd47.html《AVR定时器学习笔记》这个东西吧,对整体大概有个了解,为防混乱,在此只讨论一个定时计数器T/C0,其余两个类似了,再说说三个的区别就可以了,好现在只研究T/C0,那么多寄存器是否混乱了,首先全局控制的有SREG,TIMSK,TIFR,全局的不用管了吧很简单, 然后局部的只与T/C0相关的有TCCR0,TCNT0,OCR0,另外还有个管脚OC0,重点来了,T/C0有四种工作模式,由TCCR0中相应位设置,1、普通模式,和以前51单片机一样,把TCNT0装点初值,自加到最大时(T/C0是8位的,想要获得更宽的时间调节可改变预分频器)产生溢出中断,这模式与什么OCR0,OC0之类的无关,2、CTC模式(比较匹配时清零定时器),TCNT0累加到与OCR0相等时,TCNT0清零,同时OC0取反,就这样啊,那有什么鸟用呢?其实就是要输出一个占空比为50%的方波,还可用于产生准确的连续定时信号,3、快速PWM模式,首先我们直接用第一种模式也能搞个PWM波,但这是耗费CPU的,PWM模式就是把相关寄存器设置好后,让硬件自动去处理,我们只管最后在OC0得到一个PWM,当TCNT0从BOTTOM到MAX变化时,当TCNT0==OCR0时,可让OC0清零,当TCNT0从MAX直接跳到BOTTOM时OC0置位,这时OC0管脚上就是PWM了,调节比较区配寄存器OCR0的值就可以调节PWM波的占空比了,那何谓快速PWM呢?放到相位修正PWM模式中说吧,4、相位修正PWM模式,计时器重复地从BOTTOM到MAX,当TCNT0==OCR0时清零OC0,又从MAX回到BOTTOM,当TCNT0==OCR0时置位OC0,可见它是双斜坡的,可获得的最大频率要小,而快速PWM是单斜坡的,可获得的最大频率较大,那此模式又有什么优点,它修正什么相位了?同样与快速PWM比较,快速PWM当调节OCR0时,就调节了占空比,但输出OC0始终是在TCNT0从MAX跳变到BOTTOM置位,不可改变,而相位修正模式则改变了,这一点属个人理解啊还没细查资料,相信至此对定时/计数器已经有明确的了解了,T/C2跟T/C0差不多了也是8位的,T/C1是16位的,它计数时位数更多,另外模式更多,比如相位与频率修正PWM模式除了可调节占空比外,还可以调节PWM本身的频率,另外还可工作于捕获模式,可用来测频率周期,曾用它来测雷达发出的频率进而测速。

原创粉丝点击