LGT8莫名其妙的损坏,大家有没有遇到过?(已经解决)
我在官方实验板上做实验的过程中,LGT8莫名其妙的就损坏了,表现为烧程序时出错,供电电流为0,(我用的稳压电源电流档指示为0),更换一片用不了几次又出现相同的问题,目前已经坏了3片了,不知道是什么原因,有点晕。阿莫加的说明:本问题已经找到原因并且已经解决,详细请参考58楼。 会是电路板设计的问题吗 关注中
看来要多买几块备着 wanqin_008 发表于 2012-5-16 10:57 static/image/common/back.gif
会是电路板设计的问题吗
目前还不清楚原因,电路正常!供电正常!负荷正常!接线正常!只有程序在实验调试中......已经坏3片了,不敢换了! yingmin_alex 发表于 2012-5-16 11:02 static/image/common/back.gif
关注中
看来要多买几块备着
我一次只买了5片,现在手里只有两片了,没弄清楚状况前还真不敢再换了 建议更换二极管为3.3V的LDO,以免电压不稳。 电流为0时,请确认芯片电源脚有没有电压,再检查二极管是否正常. 关注中,暂时没有遇到 电流为0?不是和MEGA8兼容吗,换MEGA8上去看看啥情况 l楼上两位,首先我没有用那两个二极管,我是用稳压电源直接输入3.55V给LGT供电的。
电流为0 时芯片电源脚电压正常! jianjun42 发表于 2012-5-16 11:21 static/image/common/back.gif
l楼上两位,首先我没有用那两个二极管,我是用稳压电源直接输入3.55V给LGT供电的。
电流为0 时芯片电源脚电 ...
接地正常否? xsh2005105326 发表于 2012-5-16 12:13 static/image/common/back.gif
接地正常否?
接地也正常,每次换芯片后,都可以正常工作几次,因为我在调试程序,每天都要烧很多次程序,昨天还没事,今天刚烧了几次就出现了上面的问题,把实验板都检查遍了没有发现问题,于是换了一片LGT,可以工作了,烧写几次又出现上述故障,再换一片,还是如此 电源用1117-3.3很便宜。 不知LZ调试的是什么程序,是否让芯片进入了power off 的睡眠模式(此模式下工程样片工作电流在10uA级)? 检查下电源在断电后是否有过冲。
以前在学校时做课程设计。 结果实验室电源再关电后会有一个过冲。 结果n多人的板子就莫名其妙的挂了。
另外你用的isp还是jtag, isp的话,板子在3.3v时烧程序不稳定。 适当提高一下电压,或者降一下isp的电压可解决 天热了。 用个1117不麻烦啊,电源有过冲吧。 iProduct 发表于 2012-5-16 16:12 static/image/common/back.gif
不知LZ调试的是什么程序,是否让芯片进入了power off 的睡眠模式(此模式下工程样片工作电流在10uA级)? ...
应该不是进入睡眠模式了,因为我发现一旦电流为0后再烧写程序就会出错 是不是LZ写了个自_杀程序啊... bozai 发表于 2012-5-16 16:30 static/image/common/back.gif
检查下电源在断电后是否有过冲。
以前在学校时做课程设计。 结果实验室电源再关电后会有一个过冲。 结果n ...
我是用在阿莫邮购部买的JTAG烧写程序的。
另不是电源的问题,实测电源输出非常稳定。 huangdog 发表于 2012-5-16 16:48 static/image/common/back.gif
是不是LZ写了个自_杀程序啊...
我还没有这个水平,{:smile:}
我是在调试用LGT的SPI驱动LCD5110的程序,一直没有成功,一会把程序贴上来让大家给看看有没有问题。 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
} 请高手帮我分析一下,上面的程序是如何成为自杀代码的! 经实验,确实是上面的代码致使LGT8当机的,我换了一片芯片,然后烧写一个已经通过测试LGT8驱动流水灯工程(ICC)就没有问题,见此贴:http://www.ourdev.cn/thread-5475400-1-1.html,再次烧写上面的SPI工程又当机了,呵呵,真被网友《huangdog》说中了,以上的是自杀代码......
问题查找中...... 在程序最开始位置加个延时1秒,再测试一下,也许只是误改了SWDD寄存器,把SWD仿真禁用了 我的芯片倒是买了80片,可惜仿真器一直连不上板子。想烧坏都没机会。 LZ可以断开与LCD的连接看看LGT8F08A的输出是否正常。
不知外接晶振是多少,如果不需要太快的速度(SPI的速度由UBRR寄存器决定),可以去掉 init_devices();
在 init_lcd 与 LCD_write_byte 中,使能LCD和关闭LCD的方式刚好相反。 {:lol:} 通常单片机损坏 常见的现象是芯片发热明显、电流变大
楼主都没确定问题所在,就强调芯片损坏,这点可合适 去除掉与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();
} iProduct 发表于 2012-5-16 18:24 static/image/common/back.gif
去除掉与LCD相关的代码之后,烧入LGT8F08A运行正常。
代码如下:
去除掉LCD相关代码后LGT8运行正常,有没有加上LCD相关代码试试,看会不会当机? iProduct 发表于 2012-5-16 18:21 static/image/common/back.gif
LZ可以断开与LCD的连接看看LGT8F08A的输出是否正常。
不知外接晶振是多少,如果不需要太快的速度(SPI的速 ...
LCD断开过,还是不行。
外界晶振是16M的。
jianjun42 发表于 2012-5-16 18:56 static/image/common/back.gif
去除掉LCD相关代码后LGT8运行正常,有没有加上LCD相关代码试试,看会不会当机? ...
请你提供完整的代码,在你那里会当机的,我这边没有那些LCD相关的.h文件 iProduct 发表于 2012-5-16 19:19 static/image/common/back.gif
请你提供完整的代码,在你那里会当机的,我这边没有那些LCD相关的.h文件
家里没有完整的ICC工程,明天到单位传上来,请你帮忙测试,谢谢先 jianjun42 发表于 2012-5-16 17:07 static/image/common/back.gif
请高手帮我分析一下,上面的程序是如何成为自杀代码的!
由于08A的SRAM只有512Bytes, 你调试的时候可以看看是不是你的堆栈溢出了 导致修改了寄存器的值比如PMCR或者RTCSR。 如果RTCSR的POWOFF位置1的话会进入Power down模式,就会出现你所说的芯片无反应,电流为0. jianghu-00091 发表于 2012-5-16 19:47 static/image/common/back.gif
由于08A的SRAM只有512Bytes, 你调试的时候可以看看是不是你的堆栈溢出了 导致修改了寄存器的值比如PMC ...
假如是您说的问题,如何解决?我这里一旦出问题,不但电流为0,芯片无反应,还无法烧写程序了,JTAG时出错 jianjun42 发表于 2012-5-16 19:51 static/image/common/back.gif
假如是您说的问题,如何解决?我这里一旦出问题,不但电流为0,芯片无反应,还无法烧写程序了,JTAG时出 ...
你先看看编译信息看看data部分有多大。太大的话 减小你的一些buffer, 然后再编译确保data部分不要超过480个bytes(怎么也要给堆栈留点吧)。 你说的坏了的片子 估计用ISP工具能烧回来。 jianghu-00091 发表于 2012-5-16 20:36 static/image/common/back.gif
你先看看编译信息看看data部分有多大。太大的话 减小你的一些buffer, 然后再编译确保data部分不要超 ...
十分感谢您的解答,我明天试试。
目前还没有ISP下载器,回头等阿莫开放了ISP的原理图,DIY一个 jianjun42 发表于 2012-5-16 19:51 static/image/common/back.gif
假如是您说的问题,如何解决?我这里一旦出问题,不但电流为0,芯片无反应,还无法烧写程序了,JTAG时出 ...
1. 是否方便把整个工程都上传一下, 我们也帮着检查下问题的原因。
2. 你可以软仿真的方式运行调试, 观察堆栈指针的变化。
3. 你可以同时打开WDT, 看是否有复位动作
4. 对于将SWD接口锁死,或者系统以外进入power/off模式的芯片, 可以通过ISP接口擦掉内部程序。 作为对比,可以测试下mega8 armok 发表于 2012-5-17 08:06 static/image/common/back.gif
另外,举一个真实的例子。当然,这个例子可能与楼说的情况不同,但的确是真实发生的。
有网友从邮购部购买 ...
阿莫,我的那个LGT板的LED也烧了,就是板子上的原线路,看了上面有100电阻的。 armok 发表于 2012-5-17 08:03 static/image/common/back.gif
请将你“损坏”的芯片,及仿真器、演示板,一起用顺丰快递寄回给我们。
我们会安排技术人员跟进你提到的 ...
谢谢阿莫,不用了,根据上面网友的一些回复和指导,应该不是硬件原因,而是代码造成的,现在正在想办法恢复芯片功能,有网友说用ISP可以重新烧回芯片,正好问一下阿莫,现在邮购部有LGT的ISP下载器散件卖吗? LGT 发表于 2012-5-16 20:59 static/image/common/back.gif
1. 是否方便把整个工程都上传一下, 我们也帮着检查下问题的原因。
2. 你可以软仿真的方式运行调试, 观 ...
ICC工程:
armok 发表于 2012-5-17 08:37 static/image/common/back.gif
根据我们公布的线路, 仿真器上的LED限流电阻是1K的,这是一个合理的设计。
你收到的成品上面是100欧 ...
我的是散件。
我说的不是JTAG板,是DEMO板。
上电几分钟就烧了LED,4148也烧了一个,冒烟了。
好像也有网友是这情况。
现在我是串了一个LED在供电回路中,取代4148,同时也起指示灯作用。 armok 发表于 2012-5-17 08:00 static/image/common/back.gif
你买的是散件或是成品? 建议你购买一个成品。 如果有问题的话,可以直接电话联系我们。
我们的技术人员 ...
不好意思,仿真器是成品,演示板是散件因为成品没货。
等下载线和演示板成品都有货了,我再一块买吧。
仿真器当时买的时候本来是想买2个的,结果下单的时候忘了填2了。 本帖最后由 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};
这两个大数组改在外边吧,看着就吓人啊
楼下编译很正常啊,你没加全文件吧 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试试。
armok 发表于 2012-5-17 08:06 static/image/common/back.gif
另外,举一个真实的例子。当然,这个例子可能与楼说的情况不同,但的确是真实发生的。
有网友从邮购部购买 ...
还真有这样的人?{:sweat:} 问题已经找到,LZ编译的器件选用的是ATMega16,sram的地址是从0x60开始,LGT8F08A是从0x100开始的,
在对sram进行初始化的时候,往sram地址0xd0写入了数据,而这是LGT8F08A的寄存器,该数据使能了芯片的POWOFF位,
后来又写sram地址0xf2,又使能了RTC的时钟,因而使系统进入了Power off 模式,电流减小到0附近。
LZ所谓“损坏“的芯片其实并未损坏,用ISP工具擦除即可正常使用。
问题核心是编译时选错了芯片型号!应该选M164P,错误的选成了M16!
导致SRAM的地址初始化错误,误操作了特殊功能寄存器!
使芯片进入了掉电模式。 关注,求高手解答 由于该操作进入非意愿性Power Off模式, 并未使能唤醒源,因此不能唤醒,只能使用ISP对其进行擦除,
进行擦除时,先将芯片RESETN引脚连接到地,再上电,以禁止程序运行,确保不再进入Power Off模式。 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”从何说起? jianjun42 发表于 2012-5-17 11:12 static/image/common/back.gif
#include
#include "iolgt8f0xa.h"
#include
不是你的include文件决定的
看你的compile log 和 compiler options --> Target --> Device Configuration吧。 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设置有关系呢? jianjun42 发表于 2012-5-17 11:31 static/image/common/back.gif
你说的有道理,我看了compiler options --> Target 选项里确实是M16,但是我在编译另一个工程时:也是用 ...
芯片Power Off之后ICE是连不上了的,你还是等待armok的大礼包,用ISP工具擦除Program吧。
编译的时候先选对器件,编译器对变量和堆栈的分配才不会出错。
上面出现的错误我暂时也还没找到原因。 对于阿莫以及网站技术人员我深表谢意,如上所述,这个故障本来是我个人调试程序时的疏忽造成的,却让阿莫以及网站技术人员劳心费力的帮助解决问题,阿莫甚至还数次打来电话详细询问情况,并与技术人员一起反复测试,最终解决了问题,这种认真负责的工作作风让我深为感动。
对于阿莫赠送的ISP下载器和芯片我更是受之有愧、却之不恭了,啥也不说了,加紧测试为LGT的推广出一份力吧! logicgreen 发表于 2012-5-17 11:09 static/image/common/back.gif
问题核心是编译时选错了芯片型号!应该选M164P,错误的选成了M16!
导致SRAM的地址初始化错误,误操作了特 ...
不知道是否有类似的计划,如在编译器中,直接在Option中设置IC为LGT,就不用什么164之类的了。就是完全脱离AVR,这样可以避免很多问题{:lol:} 请高人 重新编译生成WinAVR,有可能。 这个讨论非常好。
很多开发过程中,我想我们都是想当然,运气好成功了且不分析原因,造成很多隐忧。
有些元件留的冗余大,够用,有的,就不行了。 armok 发表于 2012-5-17 14:16 static/image/common/back.gif
这个建议很好,的确是可以避免类似的事情发生。
非常有必要,看我发的这个帖子,由于M164P是1KB SRAM而LGT8F08A只有512B,8楼的反汇编结果表明WinAVR并未能正确初始化栈指针寄存器(0x3d, 0x3e):
关于LGT的栈指针初始化问题 是否可以更改IAR的底层文件,把LGT加到IAR里面{:lol:} ISP下载线和芯片收到,再次感谢阿莫。
再次赞阿莫的服务不是盖的 安装好下载软件和驱动进入界面后出现下图:
无法下载和清除 jianjun42 发表于 2012-5-17 11:31 static/image/common/back.gif
你说的有道理,我看了compiler options --> Target 选项里确实是M16,但是我在编译另一个工程时:也是用 ...
我这边在烧录时也出现了相同症状
有时候重新连接会成功
但在擦除成功并下载后
会提示Warning说SRAM的地址不对
Debug也无法正常进行
不只是不是哪里没有设置好
PS:为了偷懒,只接了4根线,VCC GND SWD SWC jianjun42 发表于 2012-5-19 11:11 static/image/common/back.gif
安装好下载软件和驱动进入界面后出现下图:
无法下载和清除
请参考61楼 zgxcom123 发表于 2012-5-19 11:32 static/image/common/back.gif
我这边在烧录时也出现了相同症状
有时候重新连接会成功
但在擦除成功并下载后
请提供详细的设置 或者 参考我们提供的教程。 iProduct 发表于 2012-5-19 15:00 static/image/common/back.gif
请参考61楼
按照61楼方法,还是不行,界面里显示的也还是我贴图中的样子 jianjun42 发表于 2012-5-19 15:50 static/image/common/back.gif
按照61楼方法,还是不行,界面里显示的也还是我贴图中的样子
贴图中未看出有什么问题
点击 读Flash 或 写Flash 后有什么反应? 还有我给一个新的芯片ISP下载也不行啊
jianjun42 发表于 2012-5-19 16:25 static/image/common/back.gif
还有我给一个新的芯片ISP下载也不行啊
能读到GUID不? jianjun42 发表于 2012-5-19 16:25 static/image/common/back.gif
还有我给一个新的芯片ISP下载也不行啊
”Open Hex File Failure“是因为没有设置HEX文件,在“设置”栏里指定“FLASH数据文件路径” iProduct 发表于 2012-5-19 16:58 static/image/common/back.gif
”Open Hex File Failure“是因为没有设置HEX文件,在“设置”栏里指定“FLASH数据文件路径” ...
就是在指定HEX文件时跳出的open hex file failure的错误提示栏 打开文件失败.. 这个跟ISP 下位机关系不大.就是说上位机软件运行错误了.. 我想到的两种可能 上位机软件C++运行库可能出现了一些问题.或者.HEX 文件的编码格式有些问题.UTF-8或ANSI.. 我也去测试一下. jianjun42 发表于 2012-5-19 17:15 static/image/common/back.gif
就是在指定HEX文件时跳出的open hex file failure的错误提示栏
我测试到你的这个对话框.. 但是我用的是一个非常少见的 文本编码格式.
抄收了,烧写之前要仔细检查。。 wangjiati 发表于 2012-5-19 17:52 static/image/common/back.gif
我测试到你的这个对话框.. 但是我用的是一个非常少见的 文本编码格式.
...
编码格式还要选择吗?如何选择?
我用的是ICC7.22,一直都是直接编译的。 另外我的系统是win7,好不好有影响? wangjiati 发表于 2012-5-19 17:52 static/image/common/back.gif
我测试到你的这个对话框.. 但是我用的是一个非常少见的 文本编码格式.
...
上面的界面是在哪个软件中选择的? wangjiati 发表于 2012-5-19 17:37 static/image/common/back.gif
打开文件失败.. 这个跟ISP 下位机关系不大.就是说上位机软件运行错误了.. 我想到的两种可能 上位机 ...
朋友,我在等您回复,我现在还是没有解决ISP下载的问题,究竟您说的上机位软件的问题是什么?我反复安装了很多遍了,为什么还是不能读写LGT,您说的那个编码选择错误是怎么回事? 怎么没有音讯了呢?到手的ISP没法使用,活活把人急死! jianjun42 发表于 2012-5-21 10:37 static/image/common/back.gif
怎么没有音讯了呢?到手的ISP没法使用,活活把人急死!
我也非常着急... 我的系统win7 64位.也测试过,可用的. wangjiati 发表于 2012-5-21 10:49 static/image/common/back.gif
我也非常着急... 我的系统win7 64位.也测试过,可用的.
那个编码选择时怎么回事?如何选择?
如果用ISP这么麻烦就算了,我还是用JTAG吧 jianjun42 发表于 2012-5-21 10:55 static/image/common/back.gif
那个编码选择时怎么回事?如何选择?
如果用ISP这么麻烦就算了,我还是用JTAG吧 ...
你电话怎么打不通??电话沟通效率可能比较高. 我:13414380005 wangjiati 发表于 2012-5-21 10:57 static/image/common/back.gif
你电话怎么打不通??电话沟通效率可能比较高. 我:13414380005
电话打不通?不会吧,15122385150,前几天阿莫打过的 wangjiati 发表于 2012-5-21 10:57 static/image/common/back.gif
你电话怎么打不通??电话沟通效率可能比较高. 我:13414380005
不知道最后怎么解决的?我也是一样的问题,在一台win7的电脑上就不能用,和上面的那个情况一样,读写熔丝是可以的,就是不能打开文件。在另外一台XP的电脑上一切正常,说明肯定是上位机软件的兼容性不好。希望能改进升级。 想知道结果,ISP成功了没?
页:
[1]
2