搜索
bottom↓
回复: 8

发现ICC6.31A的自动生成代码器生成的代码有很很大大的错啊,,,,,,调了一个早上还是这样,,,请傻

[复制链接]

出0入0汤圆

发表于 2011-4-13 11:22:29 | 显示全部楼层 |阅读模式
我用ICC6.31a的代码生成器生成的产生PWM波的程序,,下进去波形还行,但频率狠狠的不准啊,,

我设置输出40KHz的方波,但用示波器看到的频率只有:18.18KHz


我的设置和程序如下:


(原文件名:1.png)


(原文件名:2.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)
{

};
}

出0入0汤圆

发表于 2011-4-13 11:36:53 | 显示全部楼层
自己没有搞清楚之前不要对别人的东西下结论。

出0入0汤圆

 楼主| 发表于 2011-4-13 12:32:46 | 显示全部楼层
回复【1楼】fsclub 绿林好汉
-----------------------------------------------------------------------

哦。。。。那是为什么呢

出0入0汤圆

发表于 2011-4-13 12:55:49 | 显示全部楼层
6.31确实有BUG,现在已经7.19了

出0入0汤圆

发表于 2011-4-13 13:18:07 | 显示全部楼层
楼主还是多看看AVR的数据库手册吧,看看什么是CTC模式,什么是PWM模式,什么时候要重装载,什么时候不需要等等。

出0入296汤圆

发表于 2011-4-13 13:24:40 | 显示全部楼层
至少要用ICC7.20吧?

出0入0汤圆

 楼主| 发表于 2011-4-13 18:22:10 | 显示全部楼层
回复【5楼】Gorgon Meducer 傻孩子
-----------------------------------------------------------------------

回复【4楼】hsztc
-----------------------------------------------------------------------

回复【3楼】gliet_su
-----------------------------------------------------------------------

问题解决了,,,原来是电源的问题

我开始用的是开关的,,最后换成线性的就没事了

出0入0汤圆

发表于 2011-4-13 22:32:17 | 显示全部楼层
【6楼】 guxingganyue

你确定是电源问题,如果换掉后发现正常了,那我推荐你还是换回原来的那个。

看看我4楼说的,对你有帮助的。

出0入0汤圆

 楼主| 发表于 2011-4-14 09:13:31 | 显示全部楼层
回复【7楼】hsztc
-----------------------------------------------------------------------

好的,,这个问题我会继续研究一下的,,,谢谢您耐心的回答
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-5 15:09

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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