历史上的今天
返回首页

历史上的今天

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

正在发生

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

2019-10-17 来源:51hei

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

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

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

仿真原理图如下
0.png?imageView2/2/w/550 

单片机源程序如下:


#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;

    }

}*/



推荐阅读

史海拾趣

德丰(DEFOND)公司的发展小趣事

德丰电创科技股份有限公司(简称“德丰电创”)自1984年成立以来,从一个东莞的洪梅电器厂逐步发展为一家专业从事开关制造到电子电路模块、机电一体化集成模组等多元化产品的大型港资实业公司。公司凭借多年的产品研发和高端制造经验,以及完善的供应链管理体系,成功在家用电器、电动工具、汽车等多个市场领域占据一席之地。德丰电创的发展历程充满了不断的技术创新和市场扩张,其产品质量和服务得到了全球客户的广泛认可。

亿晶源(ekinglux)公司的发展小趣事

凭借卓越的产品质量和创新能力,亿晶源逐渐获得了行业内的认可。2015年,公司荣获广东省高新技术企业称号,标志着公司在技术创新和市场竞争中取得了显著成绩。此外,公司还先后成为中国LED光电协会副会长单位、深圳半导体保进会员会长单位等,进一步提升了行业地位。

EPIGAP公司的发展小趣事

随着全球对环保问题的日益关注,EPIGAP公司也开始注重绿色环保和可持续发展。公司积极采用环保材料和生产工艺,减少生产过程中的污染物排放。同时,EPIGAP还加大了对可再生能源的研发力度,推动公司向绿色、低碳、循环发展的方向迈进。这一战略不仅符合全球环保趋势,也为公司赢得了良好的社会声誉。

AEMC Instruments公司的发展小趣事

随着电子行业的不断发展,AEMC Instruments公司不断追求技术创新和产品升级。公司投入大量资源进行研发,成功推出了接地电阻测试仪(包括新型革命性塔测试系统)和绝缘电阻测试仪等新型产品。这些产品不仅提高了测试的准确性和效率,还满足了市场对高品质电气测试仪器的需求。同时,公司还不断完善现有产品线,推出了钳形表、变压器变比计、谐波功率计等一系列电气测试仪器,进一步巩固了其在行业内的领先地位。

德旭电子(DEXU)公司的发展小趣事

面对日益激烈的市场竞争和不断变化的市场需求,德旭电子深知只有不断创新才能在竞争中立于不败之地。因此,公司始终坚持技术创新和产业升级的战略方向。

德旭电子在产品研发方面不断投入大量人力物力,积极引进国内外先进技术和管理经验。同时,公司还加强与高校、科研机构的合作与交流,共同开展技术研发和人才培养工作。这些举措使得德旭电子在技术创新方面取得了显著成果,不断推出具有市场竞争力的新产品和新技术。

BTCPower公司的发展小趣事

BTCPower深知技术创新是公司发展的核心动力。因此,公司不断加大研发投入,积极引进和培养高素质的研发人才。同时,公司还建立了完善的研发体系和创新机制,鼓励员工提出新的想法和创意。这些举措使得BTCPower在技术创新方面始终保持领先地位。

问答坊 | AI 解惑

买开发板的经验教训

买开发板的经验教训(转发) 我先来谈谈我自己的经验教训吧! 我最早买的ARM开发板是**公司的4510-R2,是基于4510b和uClinux的开发板,当初选择**公司的想法是——大公司,应该比较有实力,技术支持比较好(事实上证明我这个想法是完全错误的 ...…

查看全部问答>

现在把所有的活都交给手下干,不知道是好事还是坏事

现在coding不再做了,连架构都不做了,专职于做管理还有一些客户交流以及跟公司老总的交流问题,慢慢的,很多技术上的问题就疏远了,都在担心以后技术会不会慢慢就退化了!要跳槽如果没有manager该怎么办呢…

查看全部问答>

Quartus II 有没有汉化版啊?

我是初次接触这个软件,英文版的有点看不懂,有没有高手能帮忙搞一个,将不胜感激!或者是只要兼容vista系统的版本都可以。急求!!!!!!!!!…

查看全部问答>

大虾帮帮忙啊,搞了好久了,还是不行...

本帖最后由 dontium 于 2015-1-23 13:26 编辑 正在做一个DSP--PCI的驱动,应用程序调试时出现如下: -----  damned.pjt - Debug  ----------------------------- [async_pci.cdb] \\"E:\\\\CCStudio_v3.1\\\\plugins\ ...…

查看全部问答>

RealView Development Suite 4.0 Professional 软件

RealView Development Suite 4.0 Professional 软件http://www.mcu123.com/news/Soft/embsof/arm/200811/486.html…

查看全部问答>

Hanker_M4学习笔记(一)

      可能看到我帖子的人,会有些失望,这么久了才提交个led循闪烁的程序,是不太应该,其实这几天都是在看M4的驱动编程,一直在归纳总结自己在M4学习中Keil软件方面的问题,大家也许看看我的文档,就能不这么责怪我了呵 ...…

查看全部问答>

嵌入式学习的点点滴滴(我的学习笔记-《鸟哥的linux私房菜》3)

大家好,抽出一点时间写一下今天的学习笔记,这几天感觉自己挺认真的,晚上决定奖励自己去看场电影 (本想把自己的linux安装方法上传的,想想还是算了,网上有太多太多这样的教程啦,在这里提一个小的建议,就是像我一样的新手,在虚拟机中安装lin ...…

查看全部问答>

学模拟+《运算放大器噪声优化手册》读书笔记 之二

本帖最后由 dontium 于 2015-1-23 11:23 编辑 在光电二极管探测电路中,常用上述的电路,将电流转换为电压,通过学习,发现其噪声来源还真不少: 1、反馈电阻的热噪声,电阻热噪声的带宽极限为放大器的信号带宽与砖墙滤波器的矫正系数; 2、电 ...…

查看全部问答>

DE0-Nano开发板求购

谁有闲置的DE0-Nano开发板,求购…

查看全部问答>

Helper2416-03——Ubuntu下vim的安装

Ubuntu下vim的安装 参与Helper2416开发板助学计划心得 对于linux的学习,想必不能不对vi的学习,对于新手来说,一般都不习惯vi的应用,特别是系统自带的vi,进入不能按照我们平时的习惯去删除、移动等操作。ubuntu中vi在编辑状态下方向键不能用, ...…

查看全部问答>