发现ICC6.31A的自动生成代码器生成的代码有很很大大的错啊,,,,,,调了一个早上还是这样,,,请傻
我用ICC6.31a的代码生成器生成的产生PWM波的程序,,下进去波形还行,但频率狠狠的不准啊,,我设置输出40KHz的方波,但用示波器看到的频率只有:18.18KHz
我的设置和程序如下:
http://cache.amobbs.com/bbs_upload782111/files_38/ourdev_630407MZ4P84.png
(原文件名:1.png)
http://cache.amobbs.com/bbs_upload782111/files_38/ourdev_630408MIX4HD.png
(原文件名:2.png)
http://cache.amobbs.com/bbs_upload782111/files_38/ourdev_630409AEB3PJ.png
(原文件名:3.png)
//ICC-AVR application builder : 2011-4-13 上午 11:17:55
// Target : M48
// Crystal: 7.3728Mhz
#include <iom48v.h>
#include <macros.h>
void port_init(void)
{
PORTB = 0x00;
DDRB= 0x00;
PORTC = 0x00; //m103 output only
DDRC= 0x01;//---------------------------在PC0上输出方波
PORTD = 0x00;
DDRD= 0x00;
}
//TIMER1 initialize - prescale:1
// WGM: 4) CTC, TOP=OCRnA
// desired value: 40KHz
// actual value: 40.070KHz (0.2%)
void timer1_init(void)
{
TCCR1B = 0x00; //stop
TCNT1H = 0xFF; //setup
TCNT1L = 0x49;
OCR1AH = 0x00;
OCR1AL = 0xB7;
OCR1BH = 0x00;
OCR1BL = 0xB7;
ICR1H= 0x00;
ICR1L= 0xB7;
TCCR1A = 0x00;
TCCR1B = 0x09; //start Timer
}
#pragma interrupt_handler timer1_ovf_isr:14
void timer1_ovf_isr(void)
{
//TIMER1 has overflowed
TCNT1H = 0xFF; //reload counter high value
TCNT1L = 0x49; //reload counter low value
PORTC ^=0x01;
}
//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;
EICRA = 0x00; //extended ext ints
EIMSK = 0x00;
TIMSK0 = 0x00; //timer 0 interrupt sources
TIMSK1 = 0x01; //timer 1 interrupt sources
TIMSK2 = 0x00; //timer 2 interrupt sources
PCMSK0 = 0x00; //pin change mask 0
PCMSK1 = 0x00; //pin change mask 1
PCMSK2 = 0x00; //pin change mask 2
PCICR = 0x00; //pin change enable
PRR = 0x00; //power controller
SEI(); //re-enable interrupts
//all peripherals are now initialized
}
//
void main(void)
{
init_devices();
//insert your functional code here...
while(1)
{
};
} 自己没有搞清楚之前不要对别人的东西下结论。 回复【1楼】fsclub 绿林好汉
-----------------------------------------------------------------------
哦。。。。那是为什么呢 6.31确实有BUG,现在已经7.19了 楼主还是多看看AVR的数据库手册吧,看看什么是CTC模式,什么是PWM模式,什么时候要重装载,什么时候不需要等等。 至少要用ICC7.20吧? 回复【5楼】Gorgon Meducer 傻孩子
-----------------------------------------------------------------------
回复【4楼】hsztc
-----------------------------------------------------------------------
回复【3楼】gliet_su
-----------------------------------------------------------------------
问题解决了,,,原来是电源的问题
我开始用的是开关的,,最后换成线性的就没事了 【6楼】 guxingganyue
你确定是电源问题,如果换掉后发现正常了,那我推荐你还是换回原来的那个。
看看我4楼说的,对你有帮助的。 回复【7楼】hsztc
-----------------------------------------------------------------------
好的,,这个问题我会继续研究一下的,,,谢谢您耐心的回答
页:
[1]