搜索
bottom↓
回复: 31

atmega162 出现问题(悬赏电路板含芯片焊接好的)

[复制链接]
头像被屏蔽

出0入0汤圆

发表于 2012-10-29 16:30:07 | 显示全部楼层 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
头像被屏蔽

出0入0汤圆

 楼主| 发表于 2012-10-29 16:30:55 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2012-10-29 16:52:42 | 显示全部楼层
你用的是什么编译器?  应该是  iccavr吧?   。   void init(void) . 这个括号里的void 不能省的。   你现在的程序应该会提示警告吧?

出0入0汤圆

发表于 2012-10-29 16:53:53 | 显示全部楼层
这种小程序,没必要把 PORT_INIT()  分出个函数来。  直接写在主程序里不就得了。。。
头像被屏蔽

出0入0汤圆

 楼主| 发表于 2012-10-29 16:53:54 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
头像被屏蔽

出0入0汤圆

 楼主| 发表于 2012-10-29 16:55:57 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
头像被屏蔽

出0入0汤圆

 楼主| 发表于 2012-10-29 16:57:36 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入4汤圆

发表于 2012-10-29 16:57:45 | 显示全部楼层
第一个代码,你初始化端口了之后,就一直死循环,所以是废的。
第二个代码,你就一直的初始化端口和输出同样的值,所以也是废的。
第三个代码其实就是第二个代码的Refactory而已。

如果你要写个流水灯程序的话,你改成这样就可以了:
  1. #include<iom162v.h>
  2. #include <macros.h>
  3. void main()
  4. {
  5.   char flag=0;
  6.    DDRA=0XFF;
  7.    DDRC=0XFF;

  8.      while(1)
  9. {
  10.    if (flag)
  11.    {
  12.    PORTA=0X00;
  13.    PORTC=0XFF;
  14.   }
  15.   else
  16.   {
  17.    PORTA=0XFF;
  18.    PORTC=0X00;
  19.   }
  20.   flag = 1-flag;
  21. }
  22. }
复制代码
另外,板子不用给我,你自己留着吧。
头像被屏蔽

出0入0汤圆

 楼主| 发表于 2012-10-29 16:59:19 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2012-10-29 17:00:35 | 显示全部楼层
建议进行以下设置:

1.关闭WDT,禁止BOD,内RC振荡器作为时钟源,取消加密,复位延时设置最大;

2.另外熔丝位M161C设置是否正确也很关键,试着把这位改成0。这位是M161兼容模式位,当芯片在不同模式时,有些功能可能不能用,比如M161模式下 UART2就不能用。
头像被屏蔽

出0入0汤圆

 楼主| 发表于 2012-10-29 17:04:07 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2012-10-29 17:05:25 | 显示全部楼层
#include<iom162v.h>
#include <macros.h>
void main(void)
{
     DDRA=0XFF;
     DDRC=0XFF;
     PORTA=0X00;
     PORTC=0XFF;
     while(1);
}

你这样用万用表看一下A C 口的输出电平,  能有问题我就不说什么了。

出0入0汤圆

发表于 2012-10-29 17:06:51 | 显示全部楼层
taocongrong 发表于 2012-10-29 17:04
还是一样的,给你说下现象吧!
#include
#include

囧。。。。。  你自己程序写的就是  PA口低电平,  B C口高电平啊= =。。。。

出0入0汤圆

发表于 2012-10-29 17:09:46 | 显示全部楼层
sco518 发表于 2012-10-29 17:06
囧。。。。。  你自己程序写的就是  PA口低电平,  B C口高电平啊= =。。。。 ...

是啊?

出0入0汤圆

发表于 2012-10-29 17:12:35 | 显示全部楼层
你就看一下你编译器编译以后    窗口里有没有这样的警告吧!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2012-10-29 17:13:23 | 显示全部楼层
还是没有看明白!

出0入0汤圆

发表于 2012-10-29 17:17:19 | 显示全部楼层

设置里改一下芯片型号。     。 恕我直言,  这种问题显然是你对ICCAVR这个软件不了解造成的。  静下心来好好检查检查,都能搞清楚的。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
头像被屏蔽

出0入0汤圆

 楼主| 发表于 2012-10-29 17:17:35 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2012-10-29 17:54:07 | 显示全部楼层
我觉得是你iccavr编译没有改芯片型号造成的。
头像被屏蔽

出0入0汤圆

 楼主| 发表于 2012-10-29 17:55:39 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2012-10-29 18:54:47 | 显示全部楼层
。。。。。。。。。。。  所有函数名后的括号里,不要留空!

void main(void)          void init(void)!!!!   

我都跟你说过了。
头像被屏蔽

出0入0汤圆

 楼主| 发表于 2012-10-29 20:56:59 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2012-10-29 20:58:16 | 显示全部楼层
那就按警告的内容去改啊。。。
头像被屏蔽

出0入0汤圆

 楼主| 发表于 2012-10-29 21:07:05 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
头像被屏蔽

出0入0汤圆

 楼主| 发表于 2012-10-29 21:08:49 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入42汤圆

发表于 2012-10-29 21:40:12 | 显示全部楼层
taocongrong 发表于 2012-10-29 21:07
我后来又买了几块atmega8515的芯片 贴上去之后,情况还是那样的 不知道为什么,调用void init(void); ...

我这里有mega8515的片子,稍等我用STK500搭个测试环境。然后写个最简单的端口赋值程序。
在我这里实验无误后,把HEX发给你,你烧录进去试试看吧

出0入0汤圆

发表于 2012-10-29 21:51:58 | 显示全部楼层
taocongrong 发表于 2012-10-29 21:08
警告的内容再编译一下又正常了,这是怎么回事呀??
你在哪里 如果在深圳 我就把我的电路板邮寄给你 ,你 ...

那还是算了吧。。。我在杭州呢。。。

基本是程序的问题。你再仔细看看吧。

出0入42汤圆

发表于 2012-10-29 22:07:40 | 显示全部楼层
代码如下;
  1. #define F_CPU 8000000UL

  2. #include "avr/io.h"
  3. #include "util/delay.h"

  4. void port_init(void)
  5. {
  6.         DDRA = 0xFF;
  7.         DDRB = 0xFF;
  8.         DDRC = 0xFF;
  9.         DDRD = 0xFF;
  10.         PORTA = 0x00;
  11.         PORTB = 0x00;
  12.         PORTC = 0x00;
  13.         PORTD = 0xFF;
  14. }

  15. int main(void)
  16. {
  17.     port_init();
  18.         while(1)
  19.     {
  20.                 _delay_ms(100);
  21.                 PORTA = ~(PORTA);
  22.                 PORTB++;
  23.     }
  24. }
复制代码
实测PORTA上为5.129Hz的稳定方波。
PORTB0上为5.129Hz,剩余依次减半。
PORTC全为10+mV。
PORTD全为4.82V

供电电压实测4.82V。
内部8M RC振荡器,熔丝如下图

未编辑锁定位

HEX在.:\AVRGCC1\Debug文件夹下

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2012-10-30 17:27:29 | 显示全部楼层
taocongrong 发表于 2012-10-29 17:04
还是一样的,给你说下现象吧!
#include
#include

我来解答一下吧

释疑程序一

#include <iom162v.h>
#include <macros.h>

#define uchar unsigned char
#define uint   unsigned int

void init(void)//这个函数有个小问题,见释疑程序二
{
   DDRA=0XFF;
   DDRB=0XFF;
   DDRC=0XFF;
}

void main() {
//下面3行与init()函数相同,可以删除
   DDRA=0XFF;
   DDRB=0XFF;
   DDRC=0XFF;

//整个程序里没有 init()函数 !

  while(1) {
/**************************************************
你这里设置PORTA=0x00;即PA口为低电平,PA口自然是低电平了;
你可以改为下面3行,即PA,PB和PC均为低电平试试看!
PORTA=0x00;
PORTB=0x00;
PORTC=0x00;
**************************************************/
     PORTC=0Xff;
     PORTA=0X00;
     PORTB=0XFF;
     }
}
上面这个函数出现了PORTA是低电平,而PORTC 和PORTB是高电平 ,奇怪吧 ,我单片机买了两家了 都是这样的

释疑程序二:

#include <iom162v.h>
#include <macros.h>

#define uchar unsigned char
#define uint   unsigned int

void init(void)
{
/********************************************************
AVR单片机配置I/O口应该将
方向控制寄存器DDRx数据寄存器PORTx同时设置】,可改为:
   DDRA=0XFF;
   PORTA=0xff;

   DDRB=0XFF;
   PORTB=0xff;

   DDRC=0XFF;
   PORTC=0xff;//3个端口均为高电平
***********************下面3行无用矣***********************/
   DDRA=0XFF;
   DDRB=0XFF;
   DDRC=0XFF;
}

void main()
{
   init();//在进入【死循环】之前init()函数已经被调用了,你怎么说没有呢?!

  while(1)
{    //这里就是I/O口输出状态了,谁【=0x00】,谁就是【低电平】
     PORTA=0X00;
     PORTB=0XFF;
     PORTC=0X00; //我修改了~~~~~  
     }
}
这个代码出现PORTB为低电平,PORTC位低电平,相当于无法调用init()这个函数!
//上面的程序你可以重新编译下,I/O口应该是【PA口和PC口为低电平;PB口为高电平】就对了!

另外,再发个小测试程序给你吧.如果还有不会的或不懂得可+QQ【266AA51F】,你懂得~~~~~要注明是坛里的哦~~~~~一般不加人滴

#include <iom162v.h>
#include <macros.h>
#define uint unsigned int

void Delay_ms(uint xms)//延时函数
{
   int i,j;
   for(i=0;i<xms;i++)
     {
   for(j=0;j<1140;j++) ;
     }
}

void port_init (void)//端口初始化函数
{
   DDRA=0XFF;
   PORTA=0xff;

   DDRB=0XFF;
   PORTB=0xff;

   DDRC=0XFF;
   PORTC=0xff;
}

void main (void)//主函数
{
        port_init();//不解释~~~~~你懂得 文方~~~~~
while(1)//哈哈,木技术含量的跑马灯~~~~~从PA0~PA7---->PB0~PB0---->PC0~PC7反复循环~~~~~
{
            PORTA=0xFE;
        Delay_ms(500);
        PORTA=0xFD;
                Delay_ms(500);
        PORTA=0xFB;
        Delay_ms(500);
        PORTA=0xF7;
        Delay_ms(500);
        PORTA=0xEF;
        Delay_ms(500);
        PORTA=0xDF;
        Delay_ms(500);
        PORTA=0xBF;
                Delay_ms(500);
        PORTA=0x7F;
        Delay_ms(500);

                PORTB=0xFE;
        Delay_ms(500);
        PORTB=0xFD;
                Delay_ms(500);
        PORTB=0xFB;
        Delay_ms(500);
        PORTB=0xF7;
        Delay_ms(500);
        PORTB=0xEF;
        Delay_ms(500);
        PORTB=0xDF;
        Delay_ms(500);
        PORTB=0xBF;
                Delay_ms(500);
        PORTB=0x7F;
        Delay_ms(500);

                PORTC=0xFE;
        Delay_ms(500);
        PORTC=0xFD;
                Delay_ms(500);
        PORTC=0xFB;
        Delay_ms(500);
        PORTC=0xF7;
        Delay_ms(500);
        PORTC=0xEF;
        Delay_ms(500);
        PORTC=0xDF;
        Delay_ms(500);
        PORTC=0xBF;
                Delay_ms(500);
        PORTC=0x7F;
        Delay_ms(500);
     }       
}

=你的板子,哈哈~~~~~
头像被屏蔽

出0入0汤圆

 楼主| 发表于 2012-10-30 19:36:13 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2013-2-26 20:03:42 | 显示全部楼层
ICCAVR编译时出现的警告你不管它而又再编译一下,警告就会不出现,但你关了ICCAVR重新打开程序再编译就会有出现,就是这样的,没事

出0入0汤圆

发表于 2013-2-26 20:33:22 | 显示全部楼层
楼主,你把程序给别人帮你编译好后发给你测试一下不就行了~还有啊,不一定是不能调用init,可能是调用的时候单片机已经硬件异常死掉了,怀疑是你的编译器设置有问题。就和在ARM一样,如果栈空间太小,也会出现这种。你给出程序,让某个有硬件的网友用自己的电脑编译测试,如果没有问题,把hex文件发出来,你来烧写看看,如果没有问题,说明还是你的编译器问题~
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-7-24 05:26

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

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