找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4421|回复: 0
打印 上一主题 下一主题
收起左侧

发现M16的TC1的重大缺陷!!!!!

[复制链接]
跳转到指定楼层
楼主
ID:43292 发表于 2012-7-25 22:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
发现M16的TC1的重大缺陷!!!!! 本人用M16的TC1产生PWM信号,并且在产生信号的同时不断改变频率,但变频幅度很小,这时就出现一个很令人费解的现象,PWM信号会不时有断开的现象 PWM频率:28KHz OC1A、OC1B双路输出:想得到的信号是:如图正常的波形 但是一旦改变频率,两路的信号会随即的中断6.5ms左右,如图断开的波形,不知其解,各位高手请指教 程序: // Target : M16 // Crystal: 10.000Mhz #include #include void port_init(void) { PORTA = 0x00; DDRA = 0x00; PORTB = 0x00; DDRB = 0x00; PORTC = 0x00; //m103 output only DDRC = 0x00; PORTD = 0x00; DDRD = 0b00110000; } //TIMER1 initialize - prescale:1 // WGM: 8) PWM phz freq correct, TOP=ICRn // desired value: 28KHz // actual value: 28.090KHz (0.3%) void timer1_init(void) { TCCR1B = 0x00; //stop TCNT1H = 0xFF; //setup TCNT1L = 0x4E; OCR1AH = 0x00; OCR1AL = 0xB2-0x50; OCR1BH = 0x00; OCR1BL = 0x50; ICR1H = 0x00; ICR1L = 0xB2; TCCR1A = 0xB0; TCCR1B = 0x11; //start Timer } //call this routine to initialize all peripherals void init_devices(void) { //stop errant interrupts until set up CLI(); //disable all interrupts port_init(); timer1_init(); MCUCR = 0x00; GICR = 0x00; TIMSK = 0x00; //timer interrupt sources SEI(); //re-enable interrupts //all peripherals are now initialized } void Delay(unsigned int t) { unsigned int i,j; for(i=0;i9)i=0; Delay(100); //延时 ICR1L=ICR1L_+i; //改变频率 } }

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表