AVR单片机入门系列(25)AVR PWM OC0

发布者:平安守护最新更新时间:2016-09-30 来源: eefocus关键字:AVR单片机  PWM  OC0 手机看文章 扫描二维码
随时随地手机看文章

系统功能

AVR内部脉宽调制OC0输出实验,用LED指示PWM的频率,在PWM速度较低时,可观察到LED的闪烁。

硬件设计

AVR主控电路原理图

软件设计

//目标系统: 基于AVR单片机

//应用软件: ICC AVR

/*01010101010101010101010101010101010101010101010101010101010101010101

----------------------------------------------------------------------

实验内容:

AVR内部脉宽调制输出实验,用LED指示PWM的频率,在PWM速度较低时,可观察到LED的闪烁。

----------------------------------------------------------------------

硬件连接:

将UserLed指示灯连接至PWM的端口PB3/OC0。

----------------------------------------------------------------------

注意事项:

(1)若有加载库程序,请将光盘根目录下的“库程序”下的“ICC_H”文件夹拷到D盘

(2)请详细阅读:光盘根目录下的“产品资料开发板实验板SMK系列SMK1632说明资料”

----------------------------------------------------------------------

10101010101010101010101010101010101010101010101010101010101010101010*/

#include

#include

#define OC0_OUT_EN DDRB |= 0b00001000

/*--------------------------------------------------------------------

程序名称:定时器0初始化程序

程序功能:定时器作PWM使用,设置PWM的工作模式

注意事项:

提示说明:

输入:

返回:

--------------------------------------------------------------------*/

void timer0_init(void)

{

TCCR0 = (1<

/*

WGM01=1; WGM00=1; --> fast PWM modle

COM01=1; COM00=0; --> 比较匹配时set OC0 pin

CS00=1; --> timer0 source 不经过任何分频,直接为Clk,使得PWM可以工作得足够快

*/

TCNT0 = 0x00;//设置TC0计数寄存器初值

OCR0 = 0x10;//输出比较寄存器初值,设置该值可用于调节OC0输出占空比

}

 

/*--------------------------------------------------------------------

程序名称:

程序功能:

注意事项:

提示说明:

输入:

返回:

--------------------------------------------------------------------*/

void main(void)

{

OC0_OUT_EN;//为允许PWM工作,需设置PB3为输出

timer0_init();

SEI();

while(1);

}

系统调试

改变PWM初始化代码的如下两个语句的赋值:

TCNT0 = 0x00;//设置TC0计数寄存器初值

OCR0 = 0x10;//输出比较寄存器初值,设置该值可用于调节OC0输出占空比

从LED的闪烁频率可以看出,改变了PWM的频率。

关键字:AVR单片机  PWM  OC0 引用地址:AVR单片机入门系列(25)AVR PWM OC0

上一篇:AVR单片机入门系列(26)AVR PWM OC2
下一篇:AVR 串口使用

推荐阅读最新更新时间:2024-03-16 15:12

任务10:认知“数码管”的显示原理
本系列教程以AVR单片机为对象,介绍单片机的快速开发方法。 参考教材:《单片机技术及应用项目教程》 栾秋平 电子工业出版社 2019.6 第1版 本文介绍“数码管”的显示原理。 一、认知数码管 1、4位8段共阳极数码管 2、4位8段共阴极数码管 二、数码管的字符编码 1、共阳极数码管字符编码表 2、共阴极数码管字符编码表
[单片机]
任务10:认知“数码管”的显示原理
Cirrus Logic推出最高电流脉宽调制输出IC
Cirrus Logic公司宣布推出具备业界最高电流脉宽调制(PWM)输出的IC Apex Precision Power SA306-IHZ和SA57-IHZ,应用于直流电动机驱动市场。随着该系列产品的推出,设计师第一次能够选择单个封装的解决方案,利用9V至60V的电源电压驱动三相无刷直流电机或有刷直流电机。该系列IC面向用于工业应用的电机控制电路,如工厂及办公自动化、机器人控制、产品筛选机,以及航空航天及军工领域的飞行器座椅及位置控制。 此前,如电机驱动需要高于3A的连续电流,系统设计师需要开发包括多达50到60个分立式元件和多出70%以上占板空间的分立式解决方案。SA306-IHZ和SA57-IHZ为用户提供了
[电源管理]
stm32使用PWM时,关闭PWM引脚会出现高电平解决方案
现在使用TIM3来产生PWM波形,并通过软件打开/关闭PWM以实现调制波形。做法是: 打开:TIM_Cmd(TIM3, ENABLE); 关闭:TIM_Cmd(TIM3, DISABLE); 跟踪到TIM_Cmd之后,发现直接操作寄存器就可以了:TIMx- CR1 |= CR1_CEN_Set; 这个问题算解决了。 但是PWM关闭后,管脚电平是高电平,这不是我需要的……需要的是低电平。尝试关闭PWM后,加一行GPIO_ResetBits(GPIOC, GPIO_Pin_6);以把管脚设置为低电平。测试代码: while(1) { ENABLE_PWM(); Delay_ms(10);//延时若干ms DISA
[单片机]
基于AVR单片机的LED显示屏应用设计
  LED点阵块具有亮度高、发光均匀、可靠性好、拼装方便等优点,能构成各种尺寸的显示屏。目前,LED显示屏已被广泛应用于文字显示并取得了很好的效果,但是大部分仅能显示滚动的文字信息而不能显示图像,并且还存在系统复杂等缺点。本文提出了一种主从式单片机的LED显示屏解决方案,该设计方案利用AVR单片机自身的FLASH ROM和RAM,外部无需任何存储电路,电路结构简单。该系统实现了图像的16阶灰度显示,可广泛用于商场、车站等公共场合。 1 AVR单片机简介   AVR单片机是增强型内置FLASH的RISC(ReducedInstruction Set CPU)精简指令集高速8位单片机,硬件采用哈佛(Harward)结构,达到一个时
[单片机]
基于<font color='red'>AVR单片机</font>的LED显示屏应用设计
第四节:定时器中断及定时器产生PWM(用CubeMX学习STM32)
前言: STM32定时器概述 我演示用的STM32F407ZGt6的核心板有多达14个定时器;  其中包含两个高级定时器(TIM1和TIM8); 十个通用定时器(TIM2~TIM5, TIM9~TIM14); 两个基础定时器(TIM6、TIM7)。 Tips: 在十个通用定时器里面包含两个看门狗定时器(two watchdog timers) 下面是datasheet里面官方给出的介绍 Couter resolution— 计数器位数, 位数越高精度越高; Counter type — 计数类型 即向上计数还是向下计数 Prescaler factor — 分频因子, 对时钟的分频, 比如单片机的时钟为84MHz, 预
[单片机]
第四节:定时器中断及定时器产生<font color='red'>PWM</font>(用CubeMX学习STM32)
AVR单片机-流水灯2
  利用单片机可以做出各种花样的流水灯效果,曾经就见有人用一片STC89C52单片机接了32个LED,做成一个心的形状,然后送给了女朋友。呵呵~~   利用c语言的数组功能就可以实现花样流水灯的设计,只要把每种流动方式的代码写进数组,依次从数组取出显示就可以了。想要多少花样都由你说了算! 源代码: /* * LED1.c * * Created: 2011-6-24 15:29:32 * Author: ZYIN */ #include avr/io.h unsigned char led0 ={0x81,0x42,0x24,0x18,0x00,0x18,0x24,0x42,0x81,0x00,0x55,0
[单片机]
<font color='red'>AVR单片机</font>-流水灯2
AVR单片机定时器做的门铃程序+电路
#define F_CPU 1000000UL #include avr/io.h #include avr/interrupt.h #include util/delay.h #define INT8U unsigned char #define INT16U unsigned int #define DoorBell() (PORTD ^= 0x01) / #define Key_DOWN() ((PINB & 0x80) == 0x00) volatile INT16U soundDelay; //两个不同取值分别对应于 叮 , 咚 int main() {
[单片机]
<font color='red'>AVR单片机</font>定时器做的门铃程序+电路
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved