历史上的今天
返回首页

历史上的今天

今天是:2024年11月20日(星期三)

正在发生

2019年11月20日 | AVR ATmega1280定时器PWM输出程序

2019-11-20 来源:51hei

#include "kernel.h"


unsigned int PWM_Buf[6];//6路PWM频率

unsigned long timer0_ticks;

unsigned long timer0_tickssec;

unsigned long timer1_ticks;

unsigned long timer1_ticksmin;

unsigned long timer2_ticks;

unsigned long timer2_tickssec;

unsigned long timer3_ticks;

unsigned long timer3_ticksmin;

unsigned long timer4_ticks;

unsigned long timer4_ticksmin;

unsigned long timer5_ticks;

unsigned long timer5_ticksmin;


void Timer0_Init(void)

{

    timer0_ticks = 0;

    timer0_tickssec = 0;


    TCCR0A = 0x00;

    TCCR0B = 0x00;

    TCNT0 = 0x00;

    OCR0A = F_CPU/(1024-1)/20;//频率F_PWM

    OCR0B = OCR0A/2;//占空比50%

    //TCCR0A = 0xA3;  //COM0A1 COM0A0 COM0B1 COM0B0 – – WGM01 WGM00

    TCCR0B = 0xCD;  //FOC0A FOC0B – – WGM02 CS02 CS01 CS00

    /*

    TCCR0A = 0x00;

    TCCR0B = 0x00;//stop

    TCNT0  = 0xE7;//25us

    OCR0A  = 0x18;

    OCR0B  = 0x18;

    TCCR0A = 0x03;

    TCCR0B = 0x02;//start,clkT0S/8

    TIMSK0|= 0x01;//enable 0verflow interrupt*/

}


void TC0_Set_PWM(unsigned int curF)

{//20~80为clkT0S/1024,80~300为clkT0S/256,300~2000为clkT0S/64

    if(curF==0)

    {

        OCR0A = 0;

        OCR0B = 0;

        TCCR0A = 0;

    }

    else if((curF>=20)&&(curF<80))

    {

        OCR0A = F_CPU/(1024-1)/curF;

        OCR0B = OCR0A/2;

        TCCR0A = 0xA3;

        TCCR0B = 0xCD;

    }

    else if((curF>=80)&&(curF<300))

    {

        OCR0A = F_CPU/(256-1)/curF;

        OCR0B = OCR0A/2;

        TCCR0A = 0xA3;

        TCCR0B = 0xCC;

    }

    else if((curF>=300)&&(curF<=2000))

    {

        OCR0A = F_CPU/(64-1)/curF;

        OCR0B = OCR0A/2;

        TCCR0A = 0xA3;

        TCCR0B = 0xCB;

    }

}


void Timer1_Init(void)

{

    unsigned int temp;


    timer1_ticks = 0;

    timer1_ticksmin = 0;


    TCCR1A = 0x00;

    TCCR1B = 0x00;

    TCCR1C = 0x00;

    TCNT1H = 0x00;

    TCNT1L = 0x00;

    temp = F_CPU/16/20;

    OCR1A=temp;

    //temp = temp/2;

    //OCR1B=temp;

    //OCR1C=temp;

    //TCCR1A=(0<    TCCR1B=(1<    /*

    TCCR1A = 0x00;//COM1A1 COM1A0 COM1B1 COM1B0 COM1C1 COM1C0 WGM11 WGM10

    TCCR1B = 0x00;//stop,ICNC1 ICES1 – WGM13 WGM12 CS12 CS11 CS10

    TCCR1C = 0x00;//FOC1A FOC1B FOC1C – – – – –

    TCNT1H = 0xE3;

    TCNT1L = 0xE0;

    OCR1AH = 0x1C;

    OCR1AL = 0x1F;

    OCR1BH = 0x1C;

    OCR1BL = 0x1F;

    OCR1CH = 0x1C;

    OCR1CL = 0x1F;

    ICR1H  = 0x00;

    ICR1L  = 0x00;

    TCCR1B = 0x05;

//    TIMSK |= 0x04;//enable 0verflow interrupt*/

}


void TC1_Set_PWM(unsigned int curF)

{

    unsigned int temp;


    if(curF==0)

    {

        //OCR1A = 0;

        //OCR1B = 0;

        TCCR1A=0;

    }

    else if((curF>=20)&&(curF<=2000))

    {

        temp = F_CPU/16/curF;

        OCR1A=temp;

        TCCR1A=(0<    }

}


void Timer2_Init(void)

{

    timer2_ticks = 0;

    timer2_tickssec = 0;


    TCCR2A = 0x00;

    TCCR2B = 0x00;

    TCNT2 = 0x00;

    OCR2A = F_CPU/(1024-1)/20;//频率F_PWM

    OCR2B = OCR2A/2;//占空比50%

    //TCCR2A = 0xA3;  //COM2A1 COM2A0 COM2B1 COM2B0 – – WGM21 WGM20

    TCCR2B = 0xCF;  //FOC2A FOC2B – – WGM22 CS22 CS21 CS20


//    TCCR2 = 0x00;//stop,FOC2 WGM20 COM21 COM20 WGM21 CS22 CS21 CS20

//    TCNT2 = 0xB8;//set count 10ms

//    OCR2  = 0x47;

//    TCCR2 = 0x05;//start,clkT0S/1024

//    TIMSK|= 0x40;//enable 0verflow interrupt 

}


void TC2_Set_PWM(unsigned int curF)

{//20~80为clkT0S/1024,80~300为clkT0S/256,300~2000为clkT0S/64

    if(curF==0)

    {

        OCR2A = 0;

        OCR2B = 0;

        TCCR2A = 0;

    }

    else if((curF>=20)&&(curF<80))

    {

        OCR2A = F_CPU/(1024-1)/curF;

        OCR2B = OCR2A/2;

        TCCR2A = 0xA3;

        TCCR2B = 0xCF;

    }

    else if((curF>=80)&&(curF<300))

    {

        OCR2A = F_CPU/(256-1)/curF;

        OCR2B = OCR2A/2;

        TCCR2A = 0xA3;

        TCCR2B = 0xCE;

    }

    else if((curF>=300)&&(curF<=2000))

    {

        OCR2A = F_CPU/(64-1)/curF;

        OCR2B = OCR2A/2;

        TCCR2A = 0xA3;

        TCCR2B = 0xCC;

    }

}


void Timer3_Init(void)

{

    unsigned int temp;


    timer3_ticks = 0;

    timer3_ticksmin = 0;


    TCCR3A = 0x00;

    TCCR3B = 0x00;

    TCCR3C = 0x00;

    TCNT3H = 0x00;

    TCNT3L = 0x00;

    temp = F_CPU/16/20;

    OCR3A=temp;

    //temp = temp/2;

    //OCR3B=temp;

    //OCR3C=temp;

    //TCCR3A=(0<    TCCR3B=(1<    /*

    TCCR3A = 0x00;//COM3A1 COM3A0 COM3B1 COM3B0 COM3C1 COM3C0 WGM31 WGM30

    TCCR3B = 0x00;//stop,ICNC3 ICES3 – WGM33 WGM32 CS32 CS31 CS30

    TCCR3C = 0x00;//FOC3A FOC3B FOC3C – – – – –

    TCNT3H = 0xE3;

    TCNT3L = 0xE0;//set count 1s

    OCR3AH = 0x1C;

    OCR3AL = 0x1F;

    OCR3BH = 0x1C;

    OCR3BL = 0x1F;

    OCR3CH = 0x1C;

    OCR3CL = 0x1F;

    ICR3H  = 0x00;

    ICR3L  = 0x00;

    TCCR3B = 0x05;//start,clkT0S/1024

//    ETIMSK|= 0x04;//enable 0verflow interrupt*/

}


void TC3_Set_PWM(unsigned int curF)

{

    unsigned int temp;


    if(curF==0)

    {

        //OCR3A = 0;

        //OCR3B = 0;

        TCCR3A=0;

    }

    else if((curF>=20)&&(curF<=2000))

    {

        temp = F_CPU/16/curF;

        OCR3A=temp;

        TCCR3A=(0<    }

}


void Timer4_Init(void)

{

    unsigned int temp;


    timer4_ticks = 0;

    timer4_ticksmin = 0;


    TCCR4A = 0x00;

    TCCR4B = 0x00;

    TCCR4C = 0x00;

    TCNT4H = 0x00;

    TCNT4L = 0x00;

    temp = F_CPU/16/20;

    OCR4A=temp;

    //temp = temp/2;

    //OCR4B=temp;

    //OCR4C=temp;

    //TCCR4A=(0<    TCCR4B=(1<}


void TC4_Set_PWM(unsigned int curF)

{

    unsigned int temp;


    if(curF==0)

    {

        //OCR4A = 0;

        //OCR4B = 0;

        TCCR4A=0;

    }

    else if((curF>=20)&&(curF<=2000))

    {

        temp = F_CPU/16/curF;

        OCR4A=temp;

        TCCR4A=(0<    }

}


void Timer5_Init(void)

{

    unsigned int temp;


    timer5_ticks = 0;

    timer5_ticksmin = 0;


    TCCR5A = 0x00;

    TCCR5B = 0x00;

    TCCR5C = 0x00;

    TCNT5H = 0x00;

    TCNT5L = 0x00;

    temp = F_CPU/16/20;

    OCR5A=temp;

    //temp = temp/2;

    //OCR5B=temp;

    //OCR5C=temp;

    //TCCR5A=(0<    TCCR5B=(1<}


void TC5_Set_PWM(unsigned int curF)

{

    unsigned int temp;


    if(curF==0)

    {

        //OCR5A = 0;

        //OCR5B = 0;

        TCCR5A=0;

    }

    else if((curF>=20)&&(curF<=2000))

推荐阅读

史海拾趣

百事通科技(BUDDIES)公司的发展小趣事

百事通科技(BUDDIES)深知人才是企业发展的核心。因此,公司一直注重人才培养和团队建设。公司建立了完善的人才培养和激励机制,为员工提供广阔的发展空间和良好的工作环境。同时,公司还积极开展团队建设活动,增强员工的凝聚力和归属感。

Chemi-Con公司的发展小趣事

在电子行业的发展过程中,Chemi-Con公司意识到单一产品线的局限性,并开始积极探索多元化发展的道路。公司不仅拓展了电容器产品的应用领域,还涉足了光电子机械等新兴产业。此外,Chemi-Con还积极寻求与其他企业的合作,通过技术共享、资源共享等方式实现共赢。这种开放、合作的姿态使得Chemi-Con在行业中树立了良好的形象,也为公司的长远发展奠定了坚实的基础。

Beckhoff Automation GmbH公司的发展小趣事

人才是企业发展的核心竞争力,BCD Semi公司高度重视人才培养和团队建设。公司建立了一套完善的人才培养和激励机制,吸引和留住了一批优秀的技术和管理人才。同时,公司还注重团队建设和协作精神的培养,鼓励员工之间的交流和合作,共同推动公司的创新和发展。

以上五个故事仅为示例性质,并不代表BCD Semi公司的实际发展经历。电子行业的发展是一个充满机遇和挑战的过程,需要企业不断创新、拓展市场、提升品质、关注环保和人才培养等方面做出努力。希望这些故事能够为您了解电子行业和BCD Semi公司的发展提供一些参考和启示。

南京绿芯(Grenergy)公司的发展小趣事

人才是企业发展的核心竞争力,BCD Semi公司高度重视人才培养和团队建设。公司建立了一套完善的人才培养和激励机制,吸引和留住了一批优秀的技术和管理人才。同时,公司还注重团队建设和协作精神的培养,鼓励员工之间的交流和合作,共同推动公司的创新和发展。

以上五个故事仅为示例性质,并不代表BCD Semi公司的实际发展经历。电子行业的发展是一个充满机遇和挑战的过程,需要企业不断创新、拓展市场、提升品质、关注环保和人才培养等方面做出努力。希望这些故事能够为您了解电子行业和BCD Semi公司的发展提供一些参考和启示。

汇科公司的发展小趣事

作为一家有社会责任感的企业,汇科公司始终关注环境保护和可持续发展。公司积极推广绿色生产技术和资源循环利用方案,减少生产过程中的能源消耗和废弃物排放。同时,汇科公司还积极参与社会公益活动,为社区和环境贡献自己的力量。这些举措不仅体现了公司的社会责任担当,也为其赢得了更多客户和合作伙伴的信任和支持。

BAND-IT公司的发展小趣事

随着电子技术在深海钻探领域的应用不断加深,对紧固件的耐腐蚀性和可靠性提出了更高要求。1947年,克尔麦吉石油工业公司完成了历史性的32号船浅滩区油井钻探,该油井远离陆地,需要在恶劣的盐水环境中运输石油。BAND-IT公司凭借其卓越的不锈钢紧固件产品,成功满足了这一特殊需求。其不锈钢扎带和扎扣能够在高盐度、高湿度的环境下保持稳定的性能,为深海钻探的顺利进行提供了有力保障。

问答坊 | AI 解惑

编译eboot无法生成.nb0

大家好, 我在用ce6编译eboot时,出了点问题,想求教~ 右键build eboot,提示: BUILD: [00:0000000021:PROGC ] Building COMPILE Pass in F:\\WINCE600\\PLATFORM\\SMDK2440\\src\\bootloader\\eboot\\ directory. BUILD: [00:0000000033:WARN ...…

查看全部问答>

gprs模块

    买GPRS模块的时候,会不会附赠上位机用的软件啊?可以用串口和GPRS模块的板子相连,然后用PC发短信或者彩信的?     …

查看全部问答>

pxa270 用usb 与 pc 相连需要驱动?

小弟的pxa270 wince 设置了usb连接 然后用usb 与 pc 连接 提示需要驱动 请问这个驱动属于那里可以得到  谢谢…

查看全部问答>

protel 中有89C51吗?

protel中89C51在哪个元件库? 好像找不到! 有谁有包含51系列单片机芯片元件库 贡献一份给我。 谢谢! tfxwater@tom.com…

查看全部问答>

大家赶紧去申请M051开发板哦!~

网址 www.victor-ic.cn  是新唐的M051开发板!~我已经申请了,但是还没有消息,25号在武汉还有个研讨会!~…

查看全部问答>

android第一个以层次件为主要新内容的系统

看了,Android的介绍,在手机这个大的市场应用下,一个面向智能手机会开发的层次件,也以系统相称了。这与OS核的出现是如是之相似。大量应用下,出在OS层,以解决真接的机器编程。但以前的图形中间件,如QT,opengL之类的都不能以系统相称,但andro ...…

查看全部问答>

万利主页上的STM32报价已经撤除了,好快

据说是有其他分销商和代理商不满意万利以低价格销售STM32的芯片?对我们小批量使用的客户看来还只能等着降价啦。STM32是好用,但是力源网上的价格是不是太贵了?…

查看全部问答>

F425的定时器,WDT,AD16

产生2路PWM就把定时期的3个比较用尽了; 现在还需要一个系统定时,就是等周期做一些任务 感觉看门狗的定时期中断可以使用, 那么我要如何才能正确使用呢?就是做普通定时期,不让它复位MCU 关于AD16: 看TI例子有能从16位A/ ...…

查看全部问答>

TL431内部工作原理

  图1是TL431内部等效框图,不太懂它的工作原理,请各位大侠帮忙讲一下它是怎么工作的。 正由于工作原理不懂,所以图2所得的公式也不明白。 图3所说的大电流不太懂,加一个三极管,三极管导通时,有大电流从三极管的发射极到集电极流过, ...…

查看全部问答>

联級四個max7219程序

// 2012-2  by naga lee#include <reg51.h> #include <intrins.h> //_nop_();sbit Max7129_DIN  = P1^3;     // Serial-Data Input: rising edge sbit Max7129_LOAD = P1^5;     // Loa ...…

查看全部问答>