jianjun42 发表于 2012-5-16 10:55:34

LGT8莫名其妙的损坏,大家有没有遇到过?(已经解决)

我在官方实验板上做实验的过程中,LGT8莫名其妙的就损坏了,表现为烧程序时出错,供电电流为0,(我用的稳压电源电流档指示为0),更换一片用不了几次又出现相同的问题,目前已经坏了3片了,不知道是什么原因,有点晕。


阿莫加的说明:本问题已经找到原因并且已经解决,详细请参考58楼。

wanqin_008 发表于 2012-5-16 10:57:44

会是电路板设计的问题吗

yingmin_alex 发表于 2012-5-16 11:02:08

关注中
看来要多买几块备着

jianjun42 发表于 2012-5-16 11:03:10

wanqin_008 发表于 2012-5-16 10:57 static/image/common/back.gif
会是电路板设计的问题吗

目前还不清楚原因,电路正常!供电正常!负荷正常!接线正常!只有程序在实验调试中......已经坏3片了,不敢换了!

jianjun42 发表于 2012-5-16 11:04:36

yingmin_alex 发表于 2012-5-16 11:02 static/image/common/back.gif
关注中
看来要多买几块备着

我一次只买了5片,现在手里只有两片了,没弄清楚状况前还真不敢再换了

logicgreen 发表于 2012-5-16 11:07:10

建议更换二极管为3.3V的LDO,以免电压不稳。

jianghu-00091 发表于 2012-5-16 11:07:29

电流为0时,请确认芯片电源脚有没有电压,再检查二极管是否正常.

mowin 发表于 2012-5-16 11:20:34

关注中,暂时没有遇到

niba 发表于 2012-5-16 11:20:59

电流为0?不是和MEGA8兼容吗,换MEGA8上去看看啥情况

jianjun42 发表于 2012-5-16 11:21:28

l楼上两位,首先我没有用那两个二极管,我是用稳压电源直接输入3.55V给LGT供电的。
电流为0 时芯片电源脚电压正常!

xsh2005105326 发表于 2012-5-16 12:13:18

jianjun42 发表于 2012-5-16 11:21 static/image/common/back.gif
l楼上两位,首先我没有用那两个二极管,我是用稳压电源直接输入3.55V给LGT供电的。
电流为0 时芯片电源脚电 ...

接地正常否?

jianjun42 发表于 2012-5-16 15:20:38

xsh2005105326 发表于 2012-5-16 12:13 static/image/common/back.gif
接地正常否?

接地也正常,每次换芯片后,都可以正常工作几次,因为我在调试程序,每天都要烧很多次程序,昨天还没事,今天刚烧了几次就出现了上面的问题,把实验板都检查遍了没有发现问题,于是换了一片LGT,可以工作了,烧写几次又出现上述故障,再换一片,还是如此

无级电工 发表于 2012-5-16 16:03:49

电源用1117-3.3很便宜。

iProduct 发表于 2012-5-16 16:12:13

不知LZ调试的是什么程序,是否让芯片进入了power off 的睡眠模式(此模式下工程样片工作电流在10uA级)?

bozai 发表于 2012-5-16 16:30:25

检查下电源在断电后是否有过冲。
以前在学校时做课程设计。 结果实验室电源再关电后会有一个过冲。 结果n多人的板子就莫名其妙的挂了。

另外你用的isp还是jtag, isp的话,板子在3.3v时烧程序不稳定。 适当提高一下电压,或者降一下isp的电压可解决

lyyyuna 发表于 2012-5-16 16:31:37

天热了。

JamesErik 发表于 2012-5-16 16:39:34

用个1117不麻烦啊,电源有过冲吧。

jianjun42 发表于 2012-5-16 16:47:09

iProduct 发表于 2012-5-16 16:12 static/image/common/back.gif
不知LZ调试的是什么程序,是否让芯片进入了power off 的睡眠模式(此模式下工程样片工作电流在10uA级)? ...

应该不是进入睡眠模式了,因为我发现一旦电流为0后再烧写程序就会出错

huangdog 发表于 2012-5-16 16:48:26

是不是LZ写了个自_杀程序啊...

jianjun42 发表于 2012-5-16 16:48:41

bozai 发表于 2012-5-16 16:30 static/image/common/back.gif
检查下电源在断电后是否有过冲。
以前在学校时做课程设计。 结果实验室电源再关电后会有一个过冲。 结果n ...

我是用在阿莫邮购部买的JTAG烧写程序的。
另不是电源的问题,实测电源输出非常稳定。

jianjun42 发表于 2012-5-16 16:50:56

huangdog 发表于 2012-5-16 16:48 static/image/common/back.gif
是不是LZ写了个自_杀程序啊...

我还没有这个水平,{:smile:}
我是在调试用LGT的SPI驱动LCD5110的程序,一直没有成功,一会把程序贴上来让大家给看看有没有问题。

jianjun42 发表于 2012-5-16 17:01:01

ICC7.2,LGT8-SPI驱动5110程序:
#include <iom164pv.h>
#include "iolgt8f0xa.h"
#include <macros.h>
#include "3310LCD_function.h"
#include "english_6x8_pixel.h"
#include "write_chinese_string_pixel.h"
#include "move_chinese_string_pixel.h"
#include "bmp_pixel.h"

/*-----------------------------------------------------------------------
LCD_init          : 3310LCD初始化

编写日期          :2004-8-10
最后修改日期      :2004-8-10
-----------------------------------------------------------------------*/
void main(void)
{
    //OSCCAL=0x9d;                        // 8M系统内部时钟校准   
    //设置MCU的I/O口
    //DDRB |= LCD_RST | LCD_DC | LCD_CE | SPI_MOSI | SPI_CLK;
   // SPSR |= BIT(SPI2X);               // 设置SPI时钟倍速
   // SPCR |= BIT(SPE)|BIT(MSTR);                // 使能SPI接口,主机模式,4M时钟
init_devices();
init_spi(); //初始化SPI接口
init_io();
init_lcd(); //初始化液晶   

while(1)
      {
          LCD_write_chinese_string(0,3,12,3,0,0); //显示“我们的”,在x=0,y=2位置,显示write_chinese_string的12点阵汉字,显示4个,从第0个开始显示,行距为0,
      LCD_draw_bmp_pixel(36,2,AVR_bmp,48,32);//显示AVR大图
          LCD_write_english_string(0,5,"www.OurAVR.com");
      LCD_move_chinese_string(0, 0, 100);//在屏幕最上面一行显示:欢迎光临本网站!显示速度为100,数值越大,速度越慢。

       }          
}


void init_devices(void)
{
PMCR =0x15;          //使能外部晶振      
delay_nms(10);      //延时10ms等待晶振输入稳定
PMCR =0x35;         // 切换系统时钟到外部晶振
PMCR=0x34;         //关闭内部RC

CLKPR=0x80;      //1分频,默认是2分频(0x01)
CLKPR =0x00;    //清除 MASK_CLKPCE
}

void init_io(coid)
{
DDRB=0x0f;
PORTB=0x0e;
}

void init_spi(void)
{

   //PB0(XCK) --> LCD(7)SCLK;
   //PB1      --> LCD(5)D/C;
   //PB2      --> LCD(4)RESET;
   //PB3      --> LCD(3)SCE;
   //PD1(TXD) --> LCD(6)SDIN;
   

   PORTB = 0xE; // set SPSS high
   DDRB = 0xF;// set SPSS & SPCK direction output


// 设置波特率
   UBRR0H = 0x0;
   UBRR0L = 0x25;
      
// 配置USPI工作模式
   UCSR0C = 0xC0; // SPI主机模式,MSB,SPI Mode 0
   UCSR0B = 0x18; // 使能输入和输出
}


void init_lcd(void)
{
    PORTB &= ~BIT(2);          // 产生一个让LCD复位的低电平脉冲
    delay_1us();
    PORTB |= BIT(2);         
   
    PORTB &= ~BIT(3) ;                // 关闭LCD
    delay_1us();
    PORTB |= BIT(3);                // 使能LCD
    delay_1us();

    LCD_write_byte(0x21, 0);        // 使用扩展命令设置LCD模式
    LCD_write_byte(0xc8, 0);        // 设置偏置电压
    LCD_write_byte(0x06, 0);        // 温度校正
    LCD_write_byte(0x13, 0);        // 1:48
    LCD_write_byte(0x20, 0);        // 使用基本命令
    LCD_clear();                // 清屏
    LCD_write_byte(0x0c, 0);        // 设定显示模式,正常显示
      
    PORTB &= ~BIT(3) ;          // 关闭LCD
}
/*-----------------------------------------------------------------------
LCD_clear         : LCD清屏函数

编写日期          :2004-8-10
最后修改日期      :2004-8-10
-----------------------------------------------------------------------*/
void LCD_clear(void)
{
    unsigned int i;

    LCD_write_byte(0x0c, 0);                       
    LCD_write_byte(0x80, 0);                       

    for (i=0; i<504; i++)
      LCD_write_byte(0, 1);                       
}

/*-----------------------------------------------------------------------
LCD_set_XY      : 设置LCD坐标函数

输入参数:X       :0-83
          Y       :0-5

编写日期          :2004-8-10
最后修改日期      :2004-8-10
-----------------------------------------------------------------------*/
void LCD_set_XY(unsigned char X, unsigned char Y)
{
    LCD_write_byte(0x40 | Y, 0);                // column
    LCD_write_byte(0x80 | X, 0);                  // row
}

/*-----------------------------------------------------------------------
LCD_write_char    : 显示英文字符

输入参数:c       :显示的字符;

编写日期          :2004-8-10
最后修改日期      :2004-8-10
-----------------------------------------------------------------------*/
void LCD_write_char(unsigned char c)
{
    unsigned char line;

    c -= 32;

    for (line=0; line<6; line++)
      LCD_write_byte(font6x8, 1);
}

/*-----------------------------------------------------------------------
LCD_write_english_String: 英文字符串显示函数

输入参数:*s      :英文字符串指针;
          X、Y    : 显示字符串的位置,x 0-83 ,y 0-5

编写日期          :2004-8-10
最后修改日期      :2004-8-10                
-----------------------------------------------------------------------*/
void LCD_write_english_string(unsigned char X,unsigned char Y,char *s)
{
    LCD_set_XY(X,Y);
    while (*s)
      {
       LCD_write_char(*s);
       s++;
      }
}
/*-----------------------------------------------------------------------
LCD_write_chinese_string: 在LCD上显示汉字

输入参数:X、Y    :显示汉字的起始X、Y坐标;
          ch_with :汉字点阵的宽度
          num   :显示汉字的个数;
          line    :汉字点阵数组中的起始行数
          row   :汉字显示的行间距
编写日期          :2004-8-11
最后修改日期      :2004-8-12
测试:
        LCD_write_chi(0,0,12,7,0,0);
        LCD_write_chi(0,2,12,7,0,0);
        LCD_write_chi(0,4,12,7,0,0);       
-----------------------------------------------------------------------*/                        
void LCD_write_chinese_string(unsigned char X, unsigned char Y,
                   unsigned char ch_with,unsigned char num,
                   unsigned char line,unsigned char row)
{
    unsigned char i,n;
   
    LCD_set_XY(X,Y);                           //设置初始位置
   
    for (i=0;i<num;)
      {
              for (n=0; n<ch_with*2; n++)            //写一个汉字
                {
                if (n==ch_with)                      //写汉字的下半部分
                    {
                      if (i==0) LCD_set_XY(X,Y+1);
                      else
                         LCD_set_XY((X+(ch_with+row)*i),Y+1);
            }
                LCD_write_byte(write_chinese_string,1);
                }
              i++;
              LCD_set_XY((X+(ch_with+row)*i),Y);
      }
}

/*-----------------------------------------------------------------------
LCD_move_chinese_string: 汉字移动

输入参数:X、Y    :显示汉字的起始X、Y坐标;
          T       :移动速度;

编写日期          :2004-8-13
最后修改日期      :2004-8-13
-----------------------------------------------------------------------*/                        
void LCD_move_chinese_string (unsigned char X, unsigned char Y, unsigned char T)
{
    unsigned char i,n,j=0;
    unsigned char buffer_h={0};
    unsigned char buffer_l={0};
      
    for (i=0; i<156; i++)
      {
      buffer_h = move_chinese_string;
      buffer_l = move_chinese_string;
      j++;
      if (j==12) j=0;
      
      for (n=0; n<83; n++)
          {
            buffer_h=buffer_h;
            buffer_l=buffer_l;
          }
      
      LCD_set_XY(X,Y);
      for (n=0; n<83; n++)
          {
            LCD_write_byte(buffer_h,1);
          }
      
      LCD_set_XY(X,Y+1);
      for (n=0; n<83; n++)
          {
            LCD_write_byte(buffer_l,1);
          }
         
       delay_nms(T);
      }
}

/*-----------------------------------------------------------------------
LCD_draw_map      : 位图绘制函数

输入参数:X、Y    :位图绘制的起始X、Y坐标;
          *map    :位图点阵数据;
          Pix_x   :位图像素(长)
          Pix_y   :位图像素(宽)

编写日期          :2004-8-13
最后修改日期      :2004-8-13
-----------------------------------------------------------------------*/
void LCD_draw_bmp_pixel(unsigned char X,unsigned char Y,unsigned char *map,
                  unsigned char Pix_x,unsigned char Pix_y)
{
    unsigned int i,n;
    unsigned char row;
   
    if (Pix_y%8==0) row=Pix_y/8;      //计算位图所占行数
      else
      row=Pix_y/8+1;
   
    for (n=0;n<row;n++)
      {
              LCD_set_XY(X,Y);
      for(i=0; i<Pix_x; i++)
          {
            LCD_write_byte(map, 1);
          }
      Y++;                         //换行
      }      
}

/*-----------------------------------------------------------------------
LCD_write_byte    : 使用SPI接口写数据到LCD

输入参数:data    :写入的数据;
          command :写数据/命令选择;

编写日期          :2004-8-10
最后修改日期      :2004-8-13
-----------------------------------------------------------------------*/
void LCD_write_byte(unsigned char data, unsigned char command)
{
    PORTB &= ~BIT(3) ;                        // 使能LCD
   
    if (command == 0)
      PORTB &= ~BIT(1) ;                // 传送命令
    else
      PORTB |= BIT(1) ;                        // 传送数据
          
    while ( !(UCSR0A & 0x20) ); // 等待发送缓冲器为空
    UDR0 = data;                // 写入要发送的数据
    while( !(UCSR0A & 0x40) );// 等待发送结束
    UCSR0A = 0x40;            // 清零TXC
    PORTB |= BIT(3) ;                        // 关闭LCD
}   

jianjun42 发表于 2012-5-16 17:07:08

请高手帮我分析一下,上面的程序是如何成为自杀代码的!

jianjun42 发表于 2012-5-16 17:17:18

经实验,确实是上面的代码致使LGT8当机的,我换了一片芯片,然后烧写一个已经通过测试LGT8驱动流水灯工程(ICC)就没有问题,见此贴:http://www.ourdev.cn/thread-5475400-1-1.html,再次烧写上面的SPI工程又当机了,呵呵,真被网友《huangdog》说中了,以上的是自杀代码......
问题查找中......

wmm20031015 发表于 2012-5-16 18:07:59

在程序最开始位置加个延时1秒,再测试一下,也许只是误改了SWDD寄存器,把SWD仿真禁用了

HYLG 发表于 2012-5-16 18:19:09

我的芯片倒是买了80片,可惜仿真器一直连不上板子。想烧坏都没机会。

iProduct 发表于 2012-5-16 18:21:53

LZ可以断开与LCD的连接看看LGT8F08A的输出是否正常。

不知外接晶振是多少,如果不需要太快的速度(SPI的速度由UBRR寄存器决定),可以去掉 init_devices();

在 init_lcd 与 LCD_write_byte 中,使能LCD和关闭LCD的方式刚好相反。

rifjft 发表于 2012-5-16 18:23:06

{:lol:} 通常单片机损坏 常见的现象是芯片发热明显、电流变大

楼主都没确定问题所在,就强调芯片损坏,这点可合适

iProduct 发表于 2012-5-16 18:24:08

去除掉与LCD相关的代码之后,烧入LGT8F08A运行正常。

代码如下:
#include <iom164pv.h>
#include "iolgt8f0xa.h"
#include <macros.h>

#define uint unsigned int

//#include "3310LCD_function.h"
//#include "english_6x8_pixel.h"
//#include "write_chinese_string_pixel.h"
//#include "move_chinese_string_pixel.h"
//#include "bmp_pixel.h"

/*-----------------------------------------------------------------------
LCD_init          : 3310LCD初始化

编写日期          :2004-8-10
最后修改日期      :2004-8-10
-----------------------------------------------------------------------*/
void main(void)
{
    //OSCCAL=0x9d;                        // 8M系统内部时钟校准   
    //设置MCU的I/O口
    //DDRB |= LCD_RST | LCD_DC | LCD_CE | SPI_MOSI | SPI_CLK;
   // SPSR |= BIT(SPI2X);               // 设置SPI时钟倍速
   // SPCR |= BIT(SPE)|BIT(MSTR);                // 使能SPI接口,主机模式,4M时钟
init_devices();
init_spi(); //初始化SPI接口
//init_io();
init_lcd(); //初始化液晶   

while(1)
      {
             init_lcd();
            //LCD_write_chinese_string(0,3,12,3,0,0); //显示“我们的”,在x=0,y=2位置,显示write_chinese_string的12点阵汉字,显示4个,从第0个开始显示,行距为0,
      //LCD_draw_bmp_pixel(36,2,AVR_bmp,48,32);//显示AVR大图
            //LCD_write_english_string(0,5,"www.OurAVR.com");
      //LCD_move_chinese_string(0, 0, 100);//在屏幕最上面一行显示:欢迎光临本网站!显示速度为100,数值越大,速度越慢。

       }         
}

void delay_1us(void)               //1ms延时函数
{
    uint i;
    for (i=0;i<12;i++);
}

void delay_nus(uint n)       //N ms延时函数
{
    uint i=0;
    for (i=0;i<n;i++)
      delay_1us();
}

void delay_1ms(void)               //1ms延时函数
{
    uint i;
    for (i=0;i<2280;i++);
}

void delay_nms(uint n)       //N ms延时函数
{
    uint i=0;
    for (i=0;i<n;i++)
      delay_1ms();
}

void init_devices(void)
{
PMCR =0x15;          //使能外部晶振      
delay_nms(10);      //延时10ms等待晶振输入稳定
PMCR =0x35;         // 切换系统时钟到外部晶振
PMCR=0x34;         //关闭内部RC

CLKPR=0x80;      //1分频,默认是2分频(0x01)
CLKPR =0x00;    //清除 MASK_CLKPCE
}

void init_io(coid)
{
DDRB=0x0f;
PORTB=0x0e;
}

void init_spi(void)
{

   //PB0(XCK) --> LCD(7)SCLK;
   //PB1      --> LCD(5)D/C;
   //PB2      --> LCD(4)RESET;
   //PB3      --> LCD(3)SCE;
   //PD1(TXD) --> LCD(6)SDIN;
   

   PORTB = 0xE; // set SPSS high
   DDRB = 0xF;// set SPSS & SPCK direction output


// 设置波特率
   UBRR0H = 0x0;
   UBRR0L = 0x25;
      
// 配置USPI工作模式
   UCSR0C = 0xC0; // SPI主机模式,MSB,SPI Mode 0
   UCSR0B = 0x18; // 使能输入和输出
}


void init_lcd(void)
{

    PORTB |= BIT(3);            
    delay_1us();
       
        PORTB &= ~BIT(3) ;               
    delay_1us();
       
    PORTB &= ~BIT(2);          // 产生一个让LCD复位的低电平脉冲
    delay_1us();
    PORTB |= BIT(2);   
   
    LCD_write_byte(0x21, 0);      // 使用扩展命令设置LCD模式
    LCD_write_byte(0xc8, 0);      // 设置偏置电压
    LCD_write_byte(0x06, 0);      // 温度校正
    LCD_write_byte(0x13, 0);      // 1:48
    LCD_write_byte(0x20, 0);      // 使用基本命令
    //LCD_clear();                // 清屏
    LCD_write_byte(0x0c, 0);      // 设定显示模式,正常显示

        PORTB |= BIT(3);         
    delay_1us();
}


/*-----------------------------------------------------------------------
LCD_write_byte    : 使用SPI接口写数据到LCD

输入参数:data    :写入的数据;
          command :写数据/命令选择;

编写日期          :2004-8-10
最后修改日期      :2004-8-13
-----------------------------------------------------------------------*/
void LCD_write_byte(unsigned char data, unsigned char command)
{
    //PORTB &= ~BIT(3) ;                        // 使能LCD
        //delay_1us();
   
    if (command == 0)
      PORTB &= ~BIT(1) ;                // 传送命令
    else
      PORTB |= BIT(1) ;                        // 传送数据
         
    while ( !(UCSR0A & 0x20) ); // 等待发送缓冲器为空
    UDR0 = data;                // 写入要发送的数据
    while( !(UCSR0A & 0x40) );// 等待发送结束
    UCSR0A = 0x40;            // 清零TXC
       
    //PORTB |= BIT(3) ;                        // 关闭LCD       
        //delay_1us();
}   

jianjun42 发表于 2012-5-16 18:56:16

iProduct 发表于 2012-5-16 18:24 static/image/common/back.gif
去除掉与LCD相关的代码之后,烧入LGT8F08A运行正常。

代码如下:


去除掉LCD相关代码后LGT8运行正常,有没有加上LCD相关代码试试,看会不会当机?

jianjun42 发表于 2012-5-16 18:58:27

iProduct 发表于 2012-5-16 18:21 static/image/common/back.gif
LZ可以断开与LCD的连接看看LGT8F08A的输出是否正常。

不知外接晶振是多少,如果不需要太快的速度(SPI的速 ...

LCD断开过,还是不行。
外界晶振是16M的。

iProduct 发表于 2012-5-16 19:19:18

jianjun42 发表于 2012-5-16 18:56 static/image/common/back.gif
去除掉LCD相关代码后LGT8运行正常,有没有加上LCD相关代码试试,看会不会当机? ...

请你提供完整的代码,在你那里会当机的,我这边没有那些LCD相关的.h文件

jianjun42 发表于 2012-5-16 19:37:37

iProduct 发表于 2012-5-16 19:19 static/image/common/back.gif
请你提供完整的代码,在你那里会当机的,我这边没有那些LCD相关的.h文件

家里没有完整的ICC工程,明天到单位传上来,请你帮忙测试,谢谢先

jianghu-00091 发表于 2012-5-16 19:47:38

jianjun42 发表于 2012-5-16 17:07 static/image/common/back.gif
请高手帮我分析一下,上面的程序是如何成为自杀代码的!

由于08A的SRAM只有512Bytes, 你调试的时候可以看看是不是你的堆栈溢出了   导致修改了寄存器的值比如PMCR或者RTCSR。 如果RTCSR的POWOFF位置1的话会进入Power down模式,就会出现你所说的芯片无反应,电流为0.

jianjun42 发表于 2012-5-16 19:51:37

jianghu-00091 发表于 2012-5-16 19:47 static/image/common/back.gif
由于08A的SRAM只有512Bytes, 你调试的时候可以看看是不是你的堆栈溢出了   导致修改了寄存器的值比如PMC ...

假如是您说的问题,如何解决?我这里一旦出问题,不但电流为0,芯片无反应,还无法烧写程序了,JTAG时出错

jianghu-00091 发表于 2012-5-16 20:36:26

jianjun42 发表于 2012-5-16 19:51 static/image/common/back.gif
假如是您说的问题,如何解决?我这里一旦出问题,不但电流为0,芯片无反应,还无法烧写程序了,JTAG时出 ...

你先看看编译信息看看data部分有多大。太大的话 减小你的一些buffer, 然后再编译确保data部分不要超过480个bytes(怎么也要给堆栈留点吧)。   你说的坏了的片子 估计用ISP工具能烧回来。

jianjun42 发表于 2012-5-16 20:48:59

jianghu-00091 发表于 2012-5-16 20:36 static/image/common/back.gif
你先看看编译信息看看data部分有多大。太大的话 减小你的一些buffer, 然后再编译确保data部分不要超 ...

十分感谢您的解答,我明天试试。
目前还没有ISP下载器,回头等阿莫开放了ISP的原理图,DIY一个

LGT 发表于 2012-5-16 20:59:55

jianjun42 发表于 2012-5-16 19:51 static/image/common/back.gif
假如是您说的问题,如何解决?我这里一旦出问题,不但电流为0,芯片无反应,还无法烧写程序了,JTAG时出 ...

1. 是否方便把整个工程都上传一下, 我们也帮着检查下问题的原因。
2. 你可以软仿真的方式运行调试, 观察堆栈指针的变化。
3. 你可以同时打开WDT, 看是否有复位动作
4. 对于将SWD接口锁死,或者系统以外进入power/off模式的芯片, 可以通过ISP接口擦掉内部程序。

gongnn 发表于 2012-5-17 07:16:45

作为对比,可以测试下mega8

armok 发表于 2012-5-17 08:00:49

armok 发表于 2012-5-17 08:03:56

armok 发表于 2012-5-17 08:06:48

armok 发表于 2012-5-17 08:11:59

fsclub 发表于 2012-5-17 08:14:00

armok 发表于 2012-5-17 08:06 static/image/common/back.gif
另外,举一个真实的例子。当然,这个例子可能与楼说的情况不同,但的确是真实发生的。

有网友从邮购部购买 ...

阿莫,我的那个LGT板的LED也烧了,就是板子上的原线路,看了上面有100电阻的。

jianjun42 发表于 2012-5-17 08:26:35

armok 发表于 2012-5-17 08:03 static/image/common/back.gif
请将你“损坏”的芯片,及仿真器、演示板,一起用顺丰快递寄回给我们。

我们会安排技术人员跟进你提到的 ...

谢谢阿莫,不用了,根据上面网友的一些回复和指导,应该不是硬件原因,而是代码造成的,现在正在想办法恢复芯片功能,有网友说用ISP可以重新烧回芯片,正好问一下阿莫,现在邮购部有LGT的ISP下载器散件卖吗?

armok 发表于 2012-5-17 08:33:34

armok 发表于 2012-5-17 08:35:34

jianjun42 发表于 2012-5-17 08:37:03

LGT 发表于 2012-5-16 20:59 static/image/common/back.gif
1. 是否方便把整个工程都上传一下, 我们也帮着检查下问题的原因。
2. 你可以软仿真的方式运行调试, 观 ...

ICC工程:

armok 发表于 2012-5-17 08:37:09

armok 发表于 2012-5-17 08:42:12

fsclub 发表于 2012-5-17 09:20:19

armok 发表于 2012-5-17 08:37 static/image/common/back.gif
根据我们公布的线路, 仿真器上的LED限流电阻是1K的,这是一个合理的设计。

你收到的成品上面是100欧 ...

我的是散件。
我说的不是JTAG板,是DEMO板。
上电几分钟就烧了LED,4148也烧了一个,冒烟了。
好像也有网友是这情况。
现在我是串了一个LED在供电回路中,取代4148,同时也起指示灯作用。

armok 发表于 2012-5-17 09:49:09

armok 发表于 2012-5-17 09:51:37

HYLG 发表于 2012-5-17 09:56:15

armok 发表于 2012-5-17 08:00 static/image/common/back.gif
你买的是散件或是成品? 建议你购买一个成品。 如果有问题的话,可以直接电话联系我们。

我们的技术人员 ...

不好意思,仿真器是成品,演示板是散件因为成品没货。
等下载线和演示板成品都有货了,我再一块买吧。
仿真器当时买的时候本来是想买2个的,结果下单的时候忘了填2了。

first_blood 发表于 2012-5-17 09:57:50

本帖最后由 first_blood 于 2012-5-17 10:03 编辑

Memory summary:

flash size is 16384 bytes (16KB)
flash used for
- int vectors   = 124 (0x7C) bytes from 0x0000 to 0x007B = 62 (0x3E) instruction words from 0x0000 to 0x003D
- constants       = 1143 (0x477) bytes from 0x007C to 0x04F2
- code            = 1578 (0x62A) bytes from 0x04F4 to 0x0B1D = 789 (0x315) instruction words) from 0x027A to 0x058E
+- user code      : 1346 (0x542) bytes from 0x04F4 to 0x0A35 = 673 (0x2A1) instruction words) from 0x027A to 0x051A
+- <library>      : 232 (0xE8) bytes from 0x0A36 to 0x0B1D = 116 (0x74) instruction words) from 0x051B to 0x058E
flash usage is 2846 bytes or 17.5%, leaving 13414 bytes (13KB) free

sram size is 1024 bytes (1KB)
sram used for
- variables       = 159 (0x9F) bytes from 0x0100 to 0x019E
- heap, s/w stack = 849 (0x351) bytes from 0x019F to 0x04EF
- h/w stack       = 16 (0x10) bytes from 0x04F0 to 0x04FF

eeprom size is 512 bytes
no eeprom area found


Areas:
(items sorted by name)

FLASH area "lit" used for constants
FLASH area "lit" = 984 (0x3D8) bytes from 0x007C to 0x0453
_font6x8                  =552 (0x0228) bytes
_move_chinese_string      =360 (0x0168) bytes
_write_chinese_string   =   72 (0x0048) bytes

FLASH area "idata" with init values for data area objects
FLASH area "idata" = 159 (0x9F) bytes from 0x0454 to 0x04F2
no user objects in this area

FLASH area "text" used for code
FLASH area "text" = 1578 (0x62A) bytes from 0x04F4 to 0x0B1D = 789 (0x315) instruction words from 0x027A to 0x058E
_LCD_clear                =   29 (0x001D) words
_LCD_draw_bmp_pixel       =   75 (0x004B) words
_LCD_move_chinese_string=185 (0x00B9) words
_LCD_set_XY               =   19 (0x0013) words
_LCD_write_byte         =   21 (0x0015) words
_LCD_write_char         =   29 (0x001D) words
_LCD_write_chinese_string =   70 (0x0046) words
_LCD_write_english_string =   21 (0x0015) words
__start                   =   34 (0x0022) words
_delay_1ms                =   10 (0x000A) words
_delay_1us                =    2 (0x0002) words
_delay_nms                =   14 (0x000E) words
_delay_nus                =   14 (0x000E) words
_exit                     =    1 (0x0001) word
_init_devices             =   20 (0x0014) words
_init_io                  =    8 (0x0008) words
_init_lcd               =   43 (0x002B) words
_init_spi               =   17 (0x0011) words
_main                     =   61 (0x003D) words
<library>               =116 (0x0074) words

SRAM area "data" with global and static variables initialised explicitly
SRAM area "data" = 159 (0x9F) bytes from 0x0100 to 0x019E
_AVR_bmp                  =159 (0x009F) bytes

FLASH area "vector" used for interrupt vectors
FLASH area "vector" = 4 (0x04) bytes from 0x0000 to 0x0003 = 2 (0x02) instruction words from 0x0000 to 0x0001

看起来没溢出,不过_AVR_bmp数组 这个没加const

void LCD_move_chinese_string 函数中
   
    unsigned char buffer_h={0};
    unsigned char buffer_l={0};
这两个大数组改在外边吧,看着就吓人啊

楼下编译很正常啊,你没加全文件吧

iProduct 发表于 2012-5-17 09:59:51

jianjun42 发表于 2012-5-17 08:37 static/image/common/back.gif
ICC工程:

编译结果有错误:

C:\iccv7avr\bin\imakew -f 3310LCD_PRJ.mak
    iccavr -c -IC:\icc\include\ -e -D__ICC_VERSION=722 -DATMega16-l -g -MLongJump -MHasMul -MEnhanced -Wf-const_is_flash -DCONST=""3310LCD_main.c
    iccavr -c -IC:\icc\include\ -e -D__ICC_VERSION=722 -DATMega16-l -g -MLongJump -MHasMul -MEnhanced -Wf-const_is_flash -DCONST=""delay_function.c
    iccavr -c -IC:\icc\include\ -e -D__ICC_VERSION=722 -DATMega16-l -g -MLongJump -MHasMul -MEnhanced -Wf-const_is_flash -DCONST=""3310LCD_function.c

!ERROR file 'delay_function.o': undefined symbol 'pop_xgset300C'
!ERROR file '_3310LCD_function.o': undefined symbol 'pop_xgset303C'
!ERROR file '_3310LCD_function.o': undefined symbol 'pop_xgsetF0FC'
!ERROR file 'delay_function.o': undefined symbol 'push_xgset300C'
!ERROR file '_3310LCD_function.o': undefined symbol 'push_xgset303C'
!ERROR file '_3310LCD_function.o': undefined symbol 'push_xgsetF0FC'

请检查一下代码。

编译设置里 compiler options --> device configuration --> ATMega16 是不行的,换成164A/P试试。



xsh2005105326 发表于 2012-5-17 10:50:15

armok 发表于 2012-5-17 08:06 static/image/common/back.gif
另外,举一个真实的例子。当然,这个例子可能与楼说的情况不同,但的确是真实发生的。

有网友从邮购部购买 ...

还真有这样的人?{:sweat:}

iProduct 发表于 2012-5-17 11:00:31

问题已经找到,LZ编译的器件选用的是ATMega16,sram的地址是从0x60开始,LGT8F08A是从0x100开始的,

在对sram进行初始化的时候,往sram地址0xd0写入了数据,而这是LGT8F08A的寄存器,该数据使能了芯片的POWOFF位,

后来又写sram地址0xf2,又使能了RTC的时钟,因而使系统进入了Power off 模式,电流减小到0附近。

LZ所谓“损坏“的芯片其实并未损坏,用ISP工具擦除即可正常使用。

logicgreen 发表于 2012-5-17 11:09:39

问题核心是编译时选错了芯片型号!应该选M164P,错误的选成了M16!

导致SRAM的地址初始化错误,误操作了特殊功能寄存器!

使芯片进入了掉电模式。

just_be_fine 发表于 2012-5-17 11:10:48

关注,求高手解答

iProduct 发表于 2012-5-17 11:10:50

由于该操作进入非意愿性Power Off模式, 并未使能唤醒源,因此不能唤醒,只能使用ISP对其进行擦除,

进行擦除时,先将芯片RESETN引脚连接到地,再上电,以禁止程序运行,确保不再进入Power Off模式。

jianjun42 发表于 2012-5-17 11:12:26

iProduct 发表于 2012-5-17 11:00 static/image/common/back.gif
问题已经找到,LZ编译的器件选用的是ATMega16,sram的地址是从0x60开始,LGT8F08A是从0x100开始的,

在对s ...

#include <iom164pv.h>
#include "iolgt8f0xa.h"
#include <macros.h>
//#include "3310LCD_function.h"
#include "english_6x8_pixel.h"
#include "write_chinese_string_pixel.h"
#include "move_chinese_string_pixel.h"
#include "bmp_pixel.h"

选择的是iom164pv!
用avr studio 4编译时选择的也是164p,“LZ编译的器件选用的是ATMega16”从何说起?

iProduct 发表于 2012-5-17 11:21:04

jianjun42 发表于 2012-5-17 11:12 static/image/common/back.gif
#include
#include "iolgt8f0xa.h"
#include


不是你的include文件决定的

看你的compile log 和 compiler options --> Target --> Device Configuration吧。

jianjun42 发表于 2012-5-17 11:31:52

iProduct 发表于 2012-5-17 11:21 static/image/common/back.gif
不是你的include文件决定的

看你的compile log 和 compiler options --> Target --> Device Configurati ...

你说的有道理,我看了compiler options --> Target 选项里确实是M16,但是我在编译另一个工程时:也是用相同的编译方式,在compiler options --> Target 选项中也没有去选择M164p,只是在avr studio中选择了M164P,就没有出现上面的错误,为什么呢?
刚才我升级仿真器到最新的5月11号的固件,重新烧录程序出现这个错误提示栏:,会不会和此程序的SPI设置有关系呢?

armok 发表于 2012-5-17 11:38:20

iProduct 发表于 2012-5-17 11:43:24

jianjun42 发表于 2012-5-17 11:31 static/image/common/back.gif
你说的有道理,我看了compiler options --> Target 选项里确实是M16,但是我在编译另一个工程时:也是用 ...

芯片Power Off之后ICE是连不上了的,你还是等待armok的大礼包,用ISP工具擦除Program吧。

编译的时候先选对器件,编译器对变量和堆栈的分配才不会出错。

上面出现的错误我暂时也还没找到原因。

jianjun42 发表于 2012-5-17 13:05:28

对于阿莫以及网站技术人员我深表谢意,如上所述,这个故障本来是我个人调试程序时的疏忽造成的,却让阿莫以及网站技术人员劳心费力的帮助解决问题,阿莫甚至还数次打来电话详细询问情况,并与技术人员一起反复测试,最终解决了问题,这种认真负责的工作作风让我深为感动。
对于阿莫赠送的ISP下载器和芯片我更是受之有愧、却之不恭了,啥也不说了,加紧测试为LGT的推广出一份力吧!

xsh2005105326 发表于 2012-5-17 14:02:37

logicgreen 发表于 2012-5-17 11:09 static/image/common/back.gif
问题核心是编译时选错了芯片型号!应该选M164P,错误的选成了M16!

导致SRAM的地址初始化错误,误操作了特 ...

不知道是否有类似的计划,如在编译器中,直接在Option中设置IC为LGT,就不用什么164之类的了。就是完全脱离AVR,这样可以避免很多问题{:lol:}

单片机玩C++ 发表于 2012-5-17 14:09:18

请高人 重新编译生成WinAVR,有可能。

armok 发表于 2012-5-17 14:16:06

jiwm 发表于 2012-5-17 14:17:07

这个讨论非常好。
很多开发过程中,我想我们都是想当然,运气好成功了且不分析原因,造成很多隐忧。
有些元件留的冗余大,够用,有的,就不行了。

gzhuli 发表于 2012-5-17 14:39:01

armok 发表于 2012-5-17 14:16 static/image/common/back.gif
这个建议很好,的确是可以避免类似的事情发生。

非常有必要,看我发的这个帖子,由于M164P是1KB SRAM而LGT8F08A只有512B,8楼的反汇编结果表明WinAVR并未能正确初始化栈指针寄存器(0x3d, 0x3e):
关于LGT的栈指针初始化问题

xsh2005105326 发表于 2012-5-17 16:01:07

是否可以更改IAR的底层文件,把LGT加到IAR里面{:lol:}

jianjun42 发表于 2012-5-19 10:23:24

ISP下载线和芯片收到,再次感谢阿莫。

taishandadi 发表于 2012-5-19 11:07:35

再次赞阿莫的服务不是盖的

jianjun42 发表于 2012-5-19 11:11:37

安装好下载软件和驱动进入界面后出现下图:
无法下载和清除

zgxcom123 发表于 2012-5-19 11:32:40

jianjun42 发表于 2012-5-17 11:31 static/image/common/back.gif
你说的有道理,我看了compiler options --> Target 选项里确实是M16,但是我在编译另一个工程时:也是用 ...

我这边在烧录时也出现了相同症状
有时候重新连接会成功
但在擦除成功并下载后
会提示Warning说SRAM的地址不对
Debug也无法正常进行

不只是不是哪里没有设置好

PS:为了偷懒,只接了4根线,VCC GND SWD SWC

iProduct 发表于 2012-5-19 15:00:52

jianjun42 发表于 2012-5-19 11:11 static/image/common/back.gif
安装好下载软件和驱动进入界面后出现下图:
无法下载和清除

请参考61楼

iProduct 发表于 2012-5-19 15:03:19

zgxcom123 发表于 2012-5-19 11:32 static/image/common/back.gif
我这边在烧录时也出现了相同症状
有时候重新连接会成功
但在擦除成功并下载后


请提供详细的设置 或者 参考我们提供的教程。

jianjun42 发表于 2012-5-19 15:50:53

iProduct 发表于 2012-5-19 15:00 static/image/common/back.gif
请参考61楼

按照61楼方法,还是不行,界面里显示的也还是我贴图中的样子

iProduct 发表于 2012-5-19 16:23:43

jianjun42 发表于 2012-5-19 15:50 static/image/common/back.gif
按照61楼方法,还是不行,界面里显示的也还是我贴图中的样子

贴图中未看出有什么问题

点击 读Flash 或 写Flash 后有什么反应?

jianjun42 发表于 2012-5-19 16:25:41

还有我给一个新的芯片ISP下载也不行啊





jianghu-00091 发表于 2012-5-19 16:54:49

jianjun42 发表于 2012-5-19 16:25 static/image/common/back.gif
还有我给一个新的芯片ISP下载也不行啊

能读到GUID不?

iProduct 发表于 2012-5-19 16:58:24

jianjun42 发表于 2012-5-19 16:25 static/image/common/back.gif
还有我给一个新的芯片ISP下载也不行啊

”Open Hex File Failure“是因为没有设置HEX文件,在“设置”栏里指定“FLASH数据文件路径”

jianjun42 发表于 2012-5-19 17:15:25

iProduct 发表于 2012-5-19 16:58 static/image/common/back.gif
”Open Hex File Failure“是因为没有设置HEX文件,在“设置”栏里指定“FLASH数据文件路径” ...

就是在指定HEX文件时跳出的open hex file failure的错误提示栏

armok 发表于 2012-5-19 17:17:32

wangjiati 发表于 2012-5-19 17:37:15

打开文件失败..   这个跟ISP 下位机关系不大.就是说上位机软件运行错误了..    我想到的两种可能 上位机软件C++运行库可能出现了一些问题.或者.HEX 文件的编码格式有些问题.UTF-8或ANSI..      我也去测试一下.

wangjiati 发表于 2012-5-19 17:52:09

jianjun42 发表于 2012-5-19 17:15 static/image/common/back.gif
就是在指定HEX文件时跳出的open hex file failure的错误提示栏



我测试到你的这个对话框.. 但是我用的是一个非常少见的 文本编码格式.

mlnet 发表于 2012-5-19 18:57:40

抄收了,烧写之前要仔细检查。。

jianjun42 发表于 2012-5-20 08:49:45

wangjiati 发表于 2012-5-19 17:52 static/image/common/back.gif
我测试到你的这个对话框.. 但是我用的是一个非常少见的 文本编码格式.

...

编码格式还要选择吗?如何选择?
我用的是ICC7.22,一直都是直接编译的。

jianjun42 发表于 2012-5-20 09:17:27

另外我的系统是win7,好不好有影响?

jianjun42 发表于 2012-5-21 09:48:20

wangjiati 发表于 2012-5-19 17:52 static/image/common/back.gif
我测试到你的这个对话框.. 但是我用的是一个非常少见的 文本编码格式.

...


上面的界面是在哪个软件中选择的?

jianjun42 发表于 2012-5-21 10:31:19

wangjiati 发表于 2012-5-19 17:37 static/image/common/back.gif
打开文件失败..   这个跟ISP 下位机关系不大.就是说上位机软件运行错误了..    我想到的两种可能 上位机 ...

朋友,我在等您回复,我现在还是没有解决ISP下载的问题,究竟您说的上机位软件的问题是什么?我反复安装了很多遍了,为什么还是不能读写LGT,您说的那个编码选择错误是怎么回事?

jianjun42 发表于 2012-5-21 10:37:05

怎么没有音讯了呢?到手的ISP没法使用,活活把人急死!

wangjiati 发表于 2012-5-21 10:49:18

jianjun42 发表于 2012-5-21 10:37 static/image/common/back.gif
怎么没有音讯了呢?到手的ISP没法使用,活活把人急死!

我也非常着急...   我的系统win7 64位.也测试过,可用的.   

jianjun42 发表于 2012-5-21 10:55:06

wangjiati 发表于 2012-5-21 10:49 static/image/common/back.gif
我也非常着急...   我的系统win7 64位.也测试过,可用的.

那个编码选择时怎么回事?如何选择?
如果用ISP这么麻烦就算了,我还是用JTAG吧

wangjiati 发表于 2012-5-21 10:57:50

jianjun42 发表于 2012-5-21 10:55 static/image/common/back.gif
那个编码选择时怎么回事?如何选择?
如果用ISP这么麻烦就算了,我还是用JTAG吧 ...

你电话怎么打不通??电话沟通效率可能比较高.   我:13414380005

jianjun42 发表于 2012-5-21 11:08:43

wangjiati 发表于 2012-5-21 10:57 static/image/common/back.gif
你电话怎么打不通??电话沟通效率可能比较高.   我:13414380005

电话打不通?不会吧,15122385150,前几天阿莫打过的

.titrwh 发表于 2012-7-8 14:12:38

wangjiati 发表于 2012-5-21 10:57 static/image/common/back.gif
你电话怎么打不通??电话沟通效率可能比较高.   我:13414380005

不知道最后怎么解决的?我也是一样的问题,在一台win7的电脑上就不能用,和上面的那个情况一样,读写熔丝是可以的,就是不能打开文件。在另外一台XP的电脑上一切正常,说明肯定是上位机软件的兼容性不好。希望能改进升级。

yhyf_heart 发表于 2012-7-14 07:29:55

想知道结果,ISP成功了没?
页: [1] 2
查看完整版本: LGT8莫名其妙的损坏,大家有没有遇到过?(已经解决)