历史上的今天

今天是:2024年10月17日(星期四)

正在发生

2019年10月17日 | ATMEGA16单片机Timer1的OC1A脚输出占空比可调的PWM信号

发布者:SereneNature 来源: 51hei关键字:ATMEGA16  单片机  Timer1  占空比  PWM信号 手机看文章 扫描二维码
随时随地手机看文章

采用快速PWM方式,通过按键设置OCR1A的值,从而改变占空比;

当数值超出界限时,以了LED和LCD的方式报警;

输出经过滤波可以得到直流信号,改变占空比,输出不一样。

仿真原理图如下
0.png 

单片机源程序如下:


#define MAIN_C

#include "includes.h"

/***************************/

/*PWM*/

/*晶振为4MHz*/

/*利用Timer1的OC1A脚输出占空比可调的信号*/

/*通过按键控制OCR1A的值*/

/***************************/


#define PwmOut     PD5     //A通道的PWM输出

#define OCR        OCR1A

#define KeyUp      PA0     //增大PWM值的按键

#define KeyDown    PA1     //减小PWM值的按键

#define Above      PA2     //设置位值过高指示

#define Below      PA3     //设置位值过低指示

#define STEP       64      //定义按键时的步进值

int OcrReg = 1024;         //OCR1A初始值

int Icr1Reg = 0x7ff;       //PWM的计数顶部值  Icr1Reg = 2047

//unsigned char *show = "0000"; 

unsigned char temp;


void init(void)   //初始化函数

{

    //比较匹配时清零,计数到最大时置位OC1A

    TCCR1A |= (1<    //11位分辨率,快速PWM模式,使用系统时钟作为计数时钟

    TCCR1B |= (1<    ICR1   = Icr1Reg;  

    OCR    = 0 ;

    DDRD  |= (1<    DDRA  |= (1<    DDRA  &= ~((1<    PORTA |= (1<    PORTA |= (1<    //TIMSK |= (1<    //SREG  |= (1<<7);   //开全局中断

}


void  ShowValue(int value)

{

    unsigned char *temp = "0000";

    temp[0] = value/1000 + 0x30;

    value = value%1000;

    temp[1] = value/100 +0x30;

    value = value%100;

    temp[2] = value/10 + 0x30;

    value = value%10;

    temp[3] = value + 0x30;  

    ClearLine(2);

    LCD_DisplayString(2,1,"OCR1A = ");

    LCD_DisplayString(2,9,temp);  

}


void main(void)

    unsigned char i; 

    init();

    Init_LCD();

    OCR = OcrReg;

    LCD_DisplayString(1,1,"PWM test");

    LCD_DisplayString(2,1,"OCR1A = ");

    ShowValue(OcrReg);

    while(1)

    {                

        if(!(PINA&(1<        {

            delay_nms(10);    //按键消抖

            if(!(PINA&(1<            {

                while(!(PINA&(1<                if(OcrReg >= (Icr1Reg+1))

                {

                    for(i=0;i<5;i++)

                    {

                        PORTA ^= (1<                        delay_nms(200);

                    }

                    ClearLine(2);

                    LCD_DisplayString(2,1,"Value MAX!");

                }

                else

                {

                    PORTA |= (1<                    OcrReg += STEP;                    

                    OCR = OcrReg;

                    ShowValue(OcrReg);

                }

            }

        }

        if(!(PINA&(1<        {

            delay_nms(10);    //按键消抖

            if(!(PINA&(1<            {

                while(!(PINA&(1<                if(OcrReg <= 0)

                {

                    for(i=0;i<5;i++)

                    {

                        PORTA ^= (1<                        delay_nms(200);

                    }

                     ClearLine(2);

                    LCD_DisplayString(2,1,"Value MIN!");

                }

                else

                {

                    PORTA |= (1<                    OcrReg -= STEP;

                    OCR = OcrReg;

                    ShowValue(OcrReg);

                }

            }

        }       

    }

}



//比较中断子程序,可以用来产生正弦波

/*#pragma vector = TIMER1_COMPA_vect

    __interrupt void CompA_isr( void ) 

{

    

    OcrReg =  st[j];

    OCR = OcrReg;  

    j++;  

    if(j>88)

    {

        j = 0;

    }

}*/



关键字:ATMEGA16  单片机  Timer1  占空比  PWM信号 引用地址:ATMEGA16单片机Timer1的OC1A脚输出占空比可调的PWM信号

上一篇:AVR单片机ATmega16之初识PWM模式
下一篇:AVR单片机简单计算器的Proteus仿真实现+源码

推荐阅读

新平台包括首款为汽车和工业应用提供高可靠智能技术的NOR闪存产品 全球领先的嵌入式解决方案供应商赛普拉斯半导体公司(Cypress Semiconductor Corp.)日前宣布推出拥有嵌入式计算能力的新一代存储平台,以满足高级驾驶辅助系统(ADAS)和智能工厂等应用对高可靠智能技术和无故障存储产品的日益增长的需求。该平台拥有标准化的IP设计,可针对新的应用需...
本作品采用STC15F104W单片机和OLED12864(IIC)设计,配合B站上传的视频更佳。B站搜索基于DHT11的温湿计(UP凌净清河)即可查到相关视频(预计2018年7月13日前会审核完毕)。主要亮点:1.自定义的显示函数以满足显示需求2.简化的字库以满足单片机4K Flash的容量需求次要亮点:1.使用小巧的STC15F104W单片机请注意!为防止低成本盗用(虽然写的不怎么样)...
iPhone配件制造商贝尔金宣布为iPhone 12和iPhone 12 Pro系列推出一系列新的MagSafe配件,外加一个屏幕保护膜。贝尔金一直是苹果产品的老牌配件制造商,他们直接与苹果合作推出了最新的产品。新发布的产品包括一个3合1无线充电器、一个汽车通风口支架和一个新的屏幕保护膜。这次发布的Boost Charge Pro MagSafe三合一无线充电器是一个15W的MagSafe充...
更短刘海、高刷屏幕、更长续航、电影模式、更低价格……尽管这代iPhone 13系列有一千个值得买的理由,但并不代表它是一款完美的手机。今天,数码博主@王奔宏 爆料称,自己的iPhone 13 Pro在拔掉充电器很久后,右上角居然还显示正在充电状态,他调侃“我这台永不断电的iPhone 13 Pro值多少钱?”有网友质疑使用了无线充电或者是截屏,他也通过视频方式...

史海拾趣

问答坊 | AI 解惑

运放和比较器的根本区别(一)

放大器与比较器的主要区别是闭环特性! 放大器大都工作在闭环状态,所以要求闭环后不能自激.而比较器大都工作在开环状态更 追求速度.对于频率比较低的情况放大器完全可以代替比较器(要主意输出电平),反过来比 较器大部分情况不能当作放大器使用. ...…

查看全部问答∨

“第三届‘ZLG’杯”后感想

本帖最后由 paulhyde 于 2014-9-15 08:58 编辑 在第三届“ZLG杯”中国大学生ARM嵌入式系统电子设计竞赛我们组的作品“基于EasyARM1138和RFID的病房无线体温监测终端”排在65名(全国500组),获得“优胜奖。 其实,对于这样的成绩,我们 ...…

查看全部问答∨

ntstrsafe.lib

这东西哪有????…

查看全部问答∨

这些汇编语句表明处理器正在做什么?

arm7 S3C44B0的板子,在AXD中调试。进入main函数后,在完成了一些例如端口初始化、时钟初始化等操作后,程序总是莫名其妙的进入disassembly模式中,大侠帮我看看这些汇编语句表明处理器正在做什么? 026ec27c [0x2e2e2e2e] cdpcs p14,0x2,c2,c14,c ...…

查看全部问答∨

请问现在流行的单片机是哪几种

要求不高,只要有基本功能,然后带232和RJ45就行,当然物美价廉,速度快,技术新颖又成熟可靠。…

查看全部问答∨

>>调查一下大家做嵌入式开发的工资水平

偶是做web开发转过来的,什么都搞不定,很郁闷很郁闷。 开个题散点分给大家。 顺便调查一哈大家做嵌入式开发的工资情况 ——地点,工作年限,工资水平。…

查看全部问答∨

CETK测试sd卡驱动的问题

CETK测试sd卡驱动的问题 用CETK測試SD卡的驅動的時候,一共有三項。 其中Strorage Device Block Driver Read/Write Test Cases 和Storage Device Block Driver API Test Cases這兩項都能通過, 另外一項:Storage Device Block Driver Benchm ...…

查看全部问答∨

公司招人了

要求: 职责:嵌入式产品软件开发。 要求: 重点院校本科及以上学历,计算机或电子相关专业,要求在软件设计岗位有两年以上工作经验; 熟悉单片机产品开发流程,有一年以上单片机控制类产品的开发经验; 精通嵌入式C语言的开发要求; 工作 ...…

查看全部问答∨

LED贴片胶如何固化

replyreload += \',\' + 706025;Timson,如果您要查看本帖隐藏内容请回复…

查看全部问答∨

MSP430G2452使用EZ430-F2013工具问题

MSP430G2452使用EZ430-F2013调试工具,老是提示错误,是不是不能用这EZ430-F2013工具不能调试MSP430G2452?…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved