AVR单片机TO定时器快速PWM模式范例:
/*///////////////////////////////////////////////
///////定时器TO的使用例程——快速PWM模式/////////
//编译环境:ICCV7 for AVR
//晶体: 11.0592Mhz
///////////////////////////////////////////////*/
#include
#include
void port_init(void)
{
PORTA = 0x00;
DDRA = 0x00;
PORTB = 0x00;
DDRB = 0x08; //PB3为PWM输出
PORTC = 0x00; //m103 output only
DDRC = 0x00;
PORTD = 0x00;
DDRD = 0x00;
}
void timer0_init(void)
{
TCCR0 = 0x00; //stop
TCNT0 = 0x01;
OCR0 = 0xF0; //改变此值可改变占空比
TCCR0 = 0x7D; //设置为快速PWM模式,匹配时OC0置1,分频系数1024
}
// 频率计算公式:fOCn= fclk/(N*256)
// N=1024
// fOC0=11059200/(1024*256)=42.1875Hz
// 在PB3管脚输出占空比可调,频率为42.1875Hz的PWM信号
// 通过改变分频系数N改变频率
#pragma interrupt_handler timer0_comp_isr:iv_TIM0_COMP
void timer0_comp_isr(void)
{
//compare occured TCNT0=OCR0
}
#pragma interrupt_handler timer0_ovf_isr:iv_TIM0_OVF
void timer0_ovf_isr(void)
{
TCNT0 = 0x01; //reload counter value
}
void init_devices(void)
{
CLI(); //disable all interrupts
port_init();
timer0_init();
MCUCR = 0x00;
GICR = 0x00;
TIMSK = 0x03; //timer interrupt sources
SEI(); //re-enable interrupts
//all peripherals are now initialized
}
void main(void)
{
init_devices();
while(1);
}
快速PWM 模式(WGM01:0 = 3) 可用来产生高频的PWM 波形。快速PWM 模式与其他PWM模式的不同之处是其单斜坡工作方式。计数器从BOTTOM计到MAX,然后立即回到BOTTOM重新开始。对于普通的比较输出模式,输出比较引脚OC0在TCNT0与OCR0匹配时清零,在BOTTOM 时置位;对于反向比较输出模式, OC0 的动作正好相反。由于使用了单斜坡模式,快速PWM 模式的工作频率比使用双斜坡的相位修正PWM 模式高一倍。此高频操作特性使得快速PWM 模式十分适合于功率调节,整流和DAC 应用。高频可以减小外部元器件( 电感,电容) 的物理尺寸,从而降低系统成本。
工作于快速PWM 模式时,计数器的数值一直增加到MAX,然后在后面的一个时钟周期清零。图中柱状的TCNT0 表示这是单边斜坡操作。方框图同时包含了普通的PWM 输出以及反向PWM 输出。TCNT0 斜坡上的短水平线表示OCR0和TCNT0 的比较匹配。
工作于快速PWM 模式时,比较单元可以在OC0 引脚上输出PWM 波形。设置COM01:0为2 可以产生普通的PWM 信号;为3 则可以产生反向PWM 波形。要想在引脚上得到输出信号还必须将OC0 的数据方向设置为输出。产生PWM 波形的机
理是OC0 寄存器在OCR0 与TCNT0 匹配时置位( 或清零),以及在计数器清零( 从MAX变为BOTTOM) 的那一个定时器时钟周期清零( 或置位)。
OCR0寄存器为极限值时表示快速PWM模式的一些特殊情况。若OCR0等于BOTTOM,输出为出现在第MAX+1 个定时器时钟周期的窄脉冲; OCR0 为MAX 时,根据COM01:0的设定,输出恒为高电平或低电平。
通过设定OC0 在比较匹配时进行逻辑电平取反(COM01:0 = 1),可以得到占空比为50%的周期信号。OCR0 为0 时信号有最高频率foc2 = fclk_I/O/2。这个特性类似于CTC 模式下的OC0 取反操作,不同之处在于快速PWM 模式具有双缓冲。
关键字:AVR单片机 TO定时器 快速PWM模式
引用地址:
AVR单片机TO定时器快速PWM模式范例
推荐阅读最新更新时间:2024-03-16 15:14
AVR单片机8位数码管显示的程序实现
我们接着来完成8位数码管的显示实验。现在我们开始动手编写程序; 根据前面的介绍,我们应该已经能够知道编写一个 AVR单片机 的C语言程序的基本步骤和方法了。 下面给出这个程序的主程序文件,在这个程序中我们应该能够知道这个程序都包含了那几块,具体来说我们应该能够在这个程序中把以下几个部分找出来:预编译语句、全局变量的定义、函数的声明、主函数、函数定义。如果你还不能够准确找出这几部分,那么需要把前面的内容再详细阅读一下。 主程序代码 #include avr/io.h //io端口寄存器配置文件,必须包含 #include util/delay.h //GCC中的延时函数头文件 #include hc595.h //u
[单片机]
AVR单片机驱动的LCD2004的源程序
/*======================================================= 20x4字符液晶主程序,编译软件(ICCAVR_6.31) CPU内部晶振8M 数据线B0~B7接PORTB, E=D7 RW=D6 RS=D5 ========================================================= 接线图如下: _______________ ______________ | --1|GND | | --2|+5V | | --3|V0 |
[单片机]
AVR单片机JTAG接口的使用方法
AVR的JTAG 仿真器特别好用,在此特别推荐,它可以对所有含JTAG接口的mega系列进行下载和软件硬件仿真。 刚开始使用AVR JTAG仿真器时,不是很清楚它的使用方法。看完AVR JTAG仿真器的英文说明和中文说明,也不很明确它的具体使用。经过自己的摸索,才清楚如何使用这种仿真器。其实这种仿真器的使用方法很简单,就是说明太罗索,让人越搞越糊涂。不过,使用这种仿真器,确实方便了很多,可实现硬件仿真与软件仿真,步调程序,发现程序漏洞,是较好的辅助调试工具。 下面是摸索出来的较简明的使用方法: (1) AVR JTAG的使用环境是:AVR Studio 4.07以上版本,9-15DC电源,PC与RS232口。 (2) 安装AVR S
[单片机]
AVR单片机教程——数码管
先解答之前一个思考题:如果不把引脚配置为输出而写高电平,连接LED会怎样? 实验结果是,LED会亮,但相比于输出高电平的情况,亮度很低。这是为什么呢? 通过上一篇教程我们知道,引脚输入输出模式是由寄存器DDRx中DDxn位控制的,可以推断出 pin_mode 函数会改变一个引脚对应的DDxn值,输入为0,输出为1,而其复位后的值为0,即输入,因此如果不把引脚配置为输出,它的模式就是输入。类似地 pin_write 函数会改变PORTxn,其值为函数的第二个参数。 所以不配置输出而写高电平的结果就是,这一引脚的DDxn为0,PORTxn为1,是带上拉电阻的输入模式。上拉电阻相当于VCC接电阻后再接在引脚上,外部电路是引脚
[单片机]
时钟芯片SD2200ELP与AVR单片机的接口设计
在提升机制动闸瓦间隙实时在线检测的设计中,需要保存故障时间和故障数据。大部分仪器仪表中都要使用时钟芯片,但是很多的实时时钟芯片(如PCF8563)没有掉电保护,须外接晶振和电池,比较麻烦。而深圳兴威帆电子技术有限公司生产的SD2200ELP是内置32 KBE2PROM的串行实时时钟芯片,不需要外接器件支持,连线简单、可靠,提供的数据精确,断电后也能继续工作。微控制器采用Atmel公司的ATmegal6单片机,利用AT-megai6的硬件TWI接口可直接对SD2200ELP进行操作,无需软件模拟I2C方式,使用方便、可靠。
1 SD2200L简介
SD2200L系列(包括SD2200B/C/D/E/FLP)是一种
[嵌入式]
基于AVR单片机高精度电子秤设计
摘要:本设计是采用AVR单片机作为微控制器,结合压力传感器、AD7705、LCD1602实现的一种高精度多功能数字电子秤。文章详细介绍了系统的硬件电路组成以及软件的开发流程。本设计具有体积小、成本低、精确度高、可靠性高等特点。 0 引言 随着电子技术和自动化测量技术的不断发展,传统的称重系统在功能、精度、性价比等方面已难以满足人们的需要,尤其在智能化、便携式、对微小质量的测量方面更显得力不从心。近年来,新型单片机的出现和集成电路技术的发展为更新产品设计,研制高性价比的称重控制器提供了条件。本设计采用AVR单片机为控制核心,结合电阻应变式压力传感器和相应的信号采集电路,设计出一种高精度、多功能、低成本的新型电子秤。 1 系统
[工业控制]
avr单片机秒表Proteus仿真程序 tm1637数码管显示
单片机源程序如下: /** *版权所有(c)2018,艁ukasz Marcin Podkalicki *2009年12月13日 *简单定时器(启动/复位/停止),使用基于TM1637的一个按钮和7段显示模块。 * *注意,这个ATtiny13项目使用的内部时钟并不精确 *时间可以向前或向后流动,但是嘿! *它仍然足够做一个好的鸡蛋计时器:) */ //#include stdint.h #include avr/io.h #include util/delay.h #include avr/interrupt.h #include tm1
[单片机]
AVR单片机在跳频系统数字信号处理中的应用
ATmega103单片机是ATMEL公司推出的精简指令集(RISC)AVR(ADVANCE RISC)系列单片机产品,这是一种增强型RISC结构,采用了CMOS技术的8位微控制器?该结构能有效支持高级语言以及密集度极大的汇编器代码程序。
跳频系统(FH)是指载波频率按某种跳频图案(跳频序列)在很宽的频带范围内跳变的通信系统,由于该系统具有抗干扰、抗多径和抗衰落性等能力,故在军用和民用领域都得到了广泛的应用。本系统方案中,信号处理模块主要完成跳频模式(FH)下有关数字信号的处理,包括话音编解码、话音组织及与同步有关的操作等,这些技术目前是跳频系统的关键技术之一。
本文介绍ATmega103单片机的特点及其在FH系统数字信号处
[单片机]