从新用M8制作简易并行高压(12V)编程器,充分应用一站式编译器"AVRGCCIDE 2.0&q
从新用M8制作简易并行高压(12V)编程器(写错熔丝位都没有问题),用C编写一段程序,充分应用一站式编译器AVRGCCIDE 2.0 非常方便,亦很好用。1.启动AVRGCCIDE编译器。
2.从Project菜单选择Open命令,选择打开"m8_hv_prog"项目。
3.在项目管理下编写一段C程序。
4.调用AVRGCCIDE编译器编译,输出m8_hv_prog.hex。
5.调用AVRGCCIDE编译器强大的程序下载功能,将xx.hex下载到编程器的监控芯片。
6.将编程器连接电脑的com1/2,接上电源。
7.调用AVRGCCIDE编译器超级终端功能,设置com通信的参数如:115200 波特率。
8,终端发送CR到下位机,下位机接收到CR作编程开始,编程器发出芯片擦除命令,写入新的
熔丝高低位字节(出厂默认值),编程器发送熔丝高低位字节和加密位字节到上位机显示,
亦读出芯片的AVR IC 标记号发送到上位机显示。
调用AVRGCCIDE编译器编译,输出m8_hv_prog.hex
http://cache.amobbs.com/bbs_upload782111/files_3/armok0157246.jpg
调用AVRGCCIDE编译器强大的程序下载功能,将xx.hex下载到编程器的监控芯片
http://cache.amobbs.com/bbs_upload782111/files_3/armok0157247.jpg
设置com通信的参数如:115200 波特率
http://cache.amobbs.com/bbs_upload782111/files_3/armok0157248.jpg
编程器发送熔丝高低位字节和加密位字节及AVR IC 标记号发送到上位机显示。
http://cache.amobbs.com/bbs_upload782111/files_3/armok0157249.jpg
-----此内容被andy于2005-07-18,13:52:00编辑过 被编程的芯片RESET脚没有接上+12V,熔丝位高低字节和加密位字节及AVR IC 标记号作以下的显示
24个FF及3个FF
显示以下的RESET脚才接上+12V。
99E1FF 熔丝位高低字节和加密位字节(芯片正常)
1E9403 MEGA16 标记号
http://cache.amobbs.com/bbs_upload782111/files_3/armok0157266.jpg
到目前只有一片mega48-20PI(0432A)不能恢复熔丝位高低字节和加密位字节,要宣布IC死亡,不能恢生。
熔丝位高低字节和加密位字节及AVR IC 标记号作以下的显示
http://cache.amobbs.com/bbs_upload782111/files_3/armok0157306.jpg
-----此内容被andy于2005-07-18,17:25:20编辑过 ATmaga8简易并行高压(12V)编程器
已通过对以下芯片恢复熔丝位测试:
Mega32
Mega16
Mega8
Mega48
ATmaga8简易并行高压(12V)编程器原理电路图:
主控芯片90S4433P改为ATmaga8 PC5连接一支4K7电阻到三极管B极(Q1三极管用9014) R1 1K改为10K
取消S1按键及LED2,将RXD及TXD加接一片MAX202,作为和上位机串行通信。
http://cache.amobbs.com/bbs_upload782111/files_1/armok017882.JPG
程序可参考以下现成的AVR熔丝自动恢复器C原程序。
//
// ATmaga8のヒュ〖ズ恃构脱 パラレルプログラマ
//
// MCU:ATmaga8
//
// 2003.9.15 KAWAKAMI Yukio
//
#include <avr/io.h>
#include <avr/signal.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <stdlib.h>
// 今きこむヒュ〖ズデ〖タ
//#define FUSE_H 0xD9
#define FUSE_H 0xD1 // チップ久殿から EEPROMを瘦割
//#define FUSE_L 0xEF // クロック嘲婶券慷 3×8MHz
//#define FUSE_L 0xE0 // クロック嘲婶掐蜗
#define FUSE_L 0xE3 // クロック柒婶 4MHz
//#define FUSE_L 0xAF // BOD钓材、クロック嘲婶券慷 3×8MHz
#define ERASE_CHIP 0x80 // チップ久殿コマンド
#define WRITE_FUSE 0x40 // ヒュ〖ズ今き哈みコマンド
#define READ_FUSE 0x04 // ヒュ〖ズ粕みだしコマンド
#define LF 10
#define ON 1
#define OFF 0
#define SWITCH 0 // PORTD
#define LED 1
#define LED_ON sbi(PORTD,LED)
#define LED_OFF cbi(PORTD,LED)
#define OE 2 // PORTD
#define OE_H sbi(PORTD,OE)
#define OE_L cbi(PORTD,OE)
#define WR 3
#define WR_H sbi(PORTD,WR)
#define WR_L cbi(PORTD,WR)
#define BS1 4
#define BS1_H sbi(PORTD,BS1)
#define BS1_L cbi(PORTD,BS1)
#define XA0 5
#define XA0_H sbi(PORTD,XA0)
#define XA0_L cbi(PORTD,XA0)
#define XA1 6
#define XA1_H sbi(PORTD,XA1)
#define XA1_L cbi(PORTD,XA1)
#define PAGEL 7
#define PAGEL_H sbi(PORTD,PAGEL)
#define PAGEL_L cbi(PORTD,PAGEL)
#define BS2 2 // PORTC
#define BS2_H sbi(PORTC,BS2)
#define BS2_L cbi(PORTC,BS2)
#define XTAL1 3
#define XTAL1_H sbi(PORTC,XTAL1)
#define XTAL1_L cbi(PORTC,XTAL1)
#define RDY 4
#define RESET 5
#define RESET_H cbi(PORTC,RESET)
#define RESET_L sbi(PORTC,RESET)
typedef unsigned char uchar;
typedef unsigned int uint;
typedef unsigned long ulong;
void wait(void);
void wait0(void);
void set_command(uchar com);
void set_data(uchar data);
uchar read_data(void);
void write_puls(void);
void error(void);
#define NOP asm volatile("nop
"::)
#define WDR asm volatile("wdr
"::)
//*********************************
// メインル〖チン
//*********************************
int main (void) {
uint i;
int t, retry;
outp(0x00, PORTB); // PB5×0 L
outp(0x00, DDRB); // PB5×0 out
outp(0x00, PORTC); // PC5 H, PC4×0 L
outp(0x2C, DDRC); // PC5, PC4×0 out
outp(0x01, PORTD); // PD0 pull up
outp(0xFE, DDRD); // PD7×1 out, PD0 in
outp(0x03, TCCR0); // タイマ〖プリスケ〖ラ 1/64
// 弹瓢箕に3搀爬糖
for (i=0; i<3; i++){
LED_ON;
for (t=0; t<200; t++){
wait();
}
LED_OFF;
for (t=0; t<200; t++){
wait();
}
}
// スイッチ掐蜗略ち
while(inp(PIND)&(1<<SWITCH));
// パラレルプログラミングへの败乖
RESET_L;
for (i=0; i < 10; i++){
XTAL1_H;
NOP;
XTAL1_L;
}
OE_L;
WR_L;
BS1_L;
XA0_L;
XA1_L;
PAGEL_L;
BS2_L;
XTAL1_L;
NOP;
RESET_H;
wait();
wait();
// チップ久殿
set_command(ERASE_CHIP);
write_puls();
wait();
wait();
// ヒュ〖ズ布疤バイト今哈み
for (retry = 0; retry < 8; retry++){
set_command(WRITE_FUSE);
set_data(FUSE_L);
BS1_L;
BS2_L;
write_puls();
wait();
wait();
set_command(READ_FUSE);
BS1_L;
BS2_L;
if (read_data() == FUSE_L) break;
}
if (retry >= 8) error();
wait();
wait();
// ヒュ〖ズ惧疤バイト今哈み
for (retry = 0; retry < 8; retry++){
set_command(WRITE_FUSE);
set_data(FUSE_H);
BS1_H;
BS2_L;
write_puls();
wait();
wait();
set_command(READ_FUSE);
BS1_H;
BS2_H;
if (read_data() == FUSE_H) break;
}
if (retry >= 8) error();
wait();
wait();
// 姜わった
outp(0x00, DDRB);
cbi(DDRC, 0);
cbi(DDRC, 1);
LED_ON;
RESET_L;
outp(0x00, PORTB); // PB5×0 L
cbi(DDRC, 0);
cbi(DDRC, 1);
for(;;);
}
// エラ〖山绩
void error(void){
int t;
outp(0x00, DDRB);
cbi(DDRC, 0);
cbi(DDRC, 1);
LED_ON;
RESET_L;
outp(0x00, PORTB); // PB5×0 L
cbi(DDRC, 0);
cbi(DDRC, 1);
for (;;){
LED_ON;
for (t=0; t<200; t++){
wait();
}
LED_OFF;
for (t=0; t<200; t++){
wait();
}
}
}
// 今哈みパルス券栏
void write_puls(void){
WR_L;
wait0();
WR_H;
while(!(inp(PINC) & (1<<RDY)));
outp(0, DDRB); // デ〖タポ〖ト掐蜗肋年
cbi(DDRC, 0);
cbi(DDRC, 1);
}
// コマンドセット
void set_command(uchar com){
WR_H;
OE_H;
XA1_H;
XA0_L;
BS1_L;
BS2_L;
outp(0xFF, DDRB);
sbi(DDRC, 0);
sbi(DDRC, 1);
outp((com & 0x3F), PORTB);
outp((inp(PORTC) & 0xFC)|((com & 0xC0) >> 6), PORTC);
XTAL1_H;
wait0();
XTAL1_L;
wait0();
}
// 8bitデ〖タセット
void set_data(uchar data){
XA1_L;
XA0_H;
outp(0xFF, DDRB);
sbi(DDRC, 0);
sbi(DDRC, 1);
outp((data & 0x3F), PORTB);
outp((inp(PORTC) & 0xFC)|((data & 0xC0) >> 6), PORTC);
XTAL1_H;
wait0();
XTAL1_L;
wait0();
}
// 8bitデ〖タ粕みだし
uchar read_data(void){
uchar data;
outp(0, DDRB);
cbi(DDRC, 0);
cbi(DDRC, 1);
outp(0xFF, PORTB); // プルアップ
sbi(PORTC, 0);
sbi(PORTC, 1);
OE_L;
wait0();
data = (inp(PINC) & 0x03) << 6;
data |= inp(PINB) & 0x3F;
OE_H;
return data;
}
// 16×32μS箕粗略ち
void wait0(void){
uchar t;
t = inp(TCNT0);
while(inp(TCNT0) == t);
t = inp(TCNT0);
while(inp(TCNT0) == t);
}
// 腆1mS箕粗略ち
void wait(void){
int i;
for (i = 0; i < 32; i++){
wait0();
}
}
简易并行编程器实物图
http://cache.amobbs.com/bbs_upload782111/files_1/armok0110762.JPG
-----此内容被andy于2005-07-18,18:09:55编辑过 太好了 太好了 good! 简易并行编程器硬件电路接线表:
点击此处打开armok0157546.pdf
对2楼的电路图和C源代码作了大量的修改,主控芯片用mega48,采用内部RC 8MHz系统时钟,
增加一个小按键及led作为显示状态,将原程序和avr910ISP原代码合并。
-----此内容被andy于2005-07-20,00:17:45编辑过 请问红日接在RXD及TXD上的一片MAX202能用MAX232代用吗 如果能够有5V升到12V,就可以修改USBASP固件来完成。
有合适的DC-DC升压方法吗? 问个问题,别见笑。2楼图中那个ISP是做什么用的,可以改成10PIN的接口接下载线向目标MCU下载程序吗? 红日大哥:我用ATmage8做了一个并行高压编程器,可是没有监控程序,请问你能否给我发一个ATmage8的监控程序,最好的.hex的。我的E-mail:goodboy3021@sina.com.谢谢!!!!!!!!!!!!!
-----此内容被goodboy3021于2007-05-18,20:44:27编辑过 定位 好的 这个高压并行好,听说能解决融丝锁定的情况。 能不能把那个XX.HEX传上来 jh 【6楼】的表格有错,4433上出现2个PC2,请楼主核实并给出底层文件来,谢谢 升压用34063把5V升到12V去用!
用USB转串口直接连电脑并且供电!
USB转串口不知道那个用M8做的能不能用! USB转串口用M8做的能用,我的是CH431的 更新电路图,用本身Mega8将5V升到12V(不用外围34063作升压),这样才安全,要编程时才将5V升到12V对从机编程,不编程时是5V输出,
PD0(RXD)/PD1(TXD)是多项功能应用,RXD_PIN RS-232通信及控制从机的VCC(这点很重要,Mega8/48/88/168_PB6/RESET选用为I/O不作RESET复位功能),TXD_PIN RS-232通信、LED显状态、按键输入指令。
用本身主控单片机(Mega8)将5V升到12V,将PB3输出OC2_PWM,PC0/ADC0输入12V的取样电压,CPU运算后控制OC2_PWM的占空比,令至12V电压输出稳定。
http://cache.amobbs.com/bbs_upload782111/files_14/ourdev_442664.JPG
(原文件名:m8_hv_prog.JPG)
点击此处下载 ourdev_442665.pdf(文件大小:265K) (原文件名:M8_PROG_HIGH.pdf) 记号 收藏一下,自己做一个 用m8的hex文件有吗? mask mark mark M&C 太COOL了 mega8的应用简直无所不在 mark 我也求个用M8做的高压并行串口下载的编程器的监控程序.HEX文件。有C源文件没?能否给传个?谢谢了。我的邮箱:344587604@qq.com mark mark mark 好,不错的资料,谢谢LZ Mark! 顶 mark一下,以后要自己做一个。 你好!红日老师,那个xx.hex
固件你可以传我一份吗?我刚学AVR,
锁了几片,想做个解解,谢谢了!
zwb1616@sina.com mark mark一下,容后慢慢研究学习。 回复【楼主位】andy 红日
-----------------------------------------------------------------------
制作成功,熔丝已解锁,感谢红日1 mark mark MARK,avr熔丝位恢复 mark mark一下 学习 谢谢 mark. 回复【8楼】landem_2004
如果能够有5v升到12v,就可以修改usbasp固件来完成。
有合适的dc-dc升压方法吗?
-----------------------------------------------------------------------
MAX232+12V稳压管 mark mark 记号,我要做个 新手需要这个哦。要不锁了单片机就又要破费了。 mark 并行高压编程器还很热门,我有M8也想作一个试试,参考! 不错的资料,谢谢LZ 求m8自升压12V编程器程序固件!谢谢,yiyp77@qq.com
页:
[1]