搜索
bottom↓
回复: 59

从新用M8制作简易并行高压(12V)编程器,充分应用一站式编译器"AVRGCCIDE 2.0&q

[复制链接]

出0入104汤圆

发表于 2005-7-18 13:40:18 | 显示全部楼层 |阅读模式
从新用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





调用AVRGCCIDE编译器强大的程序下载功能,将xx.hex下载到编程器的监控芯片





设置com通信的参数如:115200 波特率





编程器发送熔丝高低位字节和加密位字节及AVR IC 标记号发送到上位机显示。




-----此内容被andy于2005-07-18,13:52:00编辑过

出0入104汤圆

 楼主| 发表于 2005-7-18 13:41:50 | 显示全部楼层
被编程的芯片RESET脚没有接上+12V,熔丝位高低字节和加密位字节及AVR IC 标记号作以下的显示

24个FF及3个FF



显示以下的RESET脚才接上+12V。   

99E1FF   熔丝位高低字节和加密位字节(芯片正常)

1E9403   MEGA16 标记号









到目前只有一片mega48-20PI(0432A)不能恢复熔丝位高低字节和加密位字节,要宣布IC死亡,不能恢生。

熔丝位高低字节和加密位字节及AVR IC 标记号作以下的显示










-----此内容被andy于2005-07-18,17:25:20编辑过

出0入104汤圆

 楼主| 发表于 2005-7-18 13:42:06 | 显示全部楼层
ATmaga8  简易并行高压(12V)编程器



已通过对以下芯片恢复熔丝位测试:

Mega32

Mega16

Mega8

Mega48



ATmaga8  简易并行高压(12V)编程器原理电路图:



主控芯片90S4433P改为ATmaga8 PC5连接一支4K7电阻到三极管B极(Q1三极管用9014) R1 1K改为10K

取消S1按键及LED2,将RXD及TXD加接一片MAX202,作为和上位机串行通信。







程序可参考以下现成的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();

   }

}





简易并行编程器实物图




-----此内容被andy于2005-07-18,18:09:55编辑过

出0入0汤圆

发表于 2005-7-18 13:44:10 | 显示全部楼层
太好了

出0入0汤圆

发表于 2005-7-18 13:48:15 | 显示全部楼层
太好了

出0入0汤圆

发表于 2005-7-18 17:42:47 | 显示全部楼层
good!

出0入104汤圆

 楼主| 发表于 2005-7-20 00:14:10 | 显示全部楼层
简易并行编程器硬件电路接线表:



点击此处打开armok0157546.pdf



对2楼的电路图和C源代码作了大量的修改,主控芯片用mega48,采用内部RC 8MHz系统时钟,

增加一个小按键及led作为显示状态,将原程序和avr910ISP原代码合并。


-----此内容被andy于2005-07-20,00:17:45编辑过

出0入0汤圆

发表于 2005-10-28 22:00:46 | 显示全部楼层
请问红日接在RXD及TXD上的一片MAX202能用MAX232代用吗

出0入0汤圆

发表于 2005-10-28 22:11:52 | 显示全部楼层
如果能够有5V升到12V,就可以修改USBASP固件来完成。

有合适的DC-DC升压方法吗?

出0入0汤圆

发表于 2007-2-2 21:36:07 | 显示全部楼层
问个问题,别见笑。2楼图中那个ISP是做什么用的,可以改成10PIN的接口接下载线向目标MCU下载程序吗?

出0入0汤圆

发表于 2007-5-18 20:42:26 | 显示全部楼层
红日大哥:我用ATmage8做了一个并行高压编程器,可是没有监控程序,请问你能否给我发一个ATmage8的监控程序,最好的.hex的。我的E-mail:goodboy3021@sina.com.谢谢!!!!!!!!!!!!!
-----此内容被goodboy3021于2007-05-18,20:44:27编辑过

出0入84汤圆

发表于 2008-8-2 00:30:05 | 显示全部楼层
定位

出0入0汤圆

发表于 2009-1-15 20:34:42 | 显示全部楼层
好的

出0入0汤圆

发表于 2009-1-15 23:09:27 | 显示全部楼层
这个高压并行好,听说能解决融丝锁定的情况。

出0入4汤圆

发表于 2009-2-19 20:26:53 | 显示全部楼层
能不能把那个XX.HEX传上来

出0入0汤圆

发表于 2009-4-16 23:13:20 | 显示全部楼层
jh

出0入0汤圆

发表于 2009-5-6 15:51:47 | 显示全部楼层
【6楼】的表格有错,4433上出现2个PC2,请楼主核实并给出底层文件来,谢谢

出0入0汤圆

发表于 2009-5-6 19:41:34 | 显示全部楼层
升压用34063把5V升到12V去用!
用USB转串口直接连电脑并且供电!
USB转串口不知道那个用M8做的能不能用!

出0入0汤圆

发表于 2009-5-6 23:31:37 | 显示全部楼层
USB转串口用M8做的能用,我的是CH431的

出0入104汤圆

 楼主| 发表于 2009-5-7 00:15:17 | 显示全部楼层
更新电路图,用本身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电压输出稳定。



(原文件名:m8_hv_prog.JPG)

点击此处下载 ourdev_442665.pdf(文件大小:265K) (原文件名:M8_PROG_HIGH.pdf)

出0入0汤圆

发表于 2009-5-10 00:01:46 | 显示全部楼层
记号

出0入0汤圆

发表于 2009-5-23 15:02:18 | 显示全部楼层
收藏一下,自己做一个

出0入0汤圆

发表于 2009-6-7 20:22:08 | 显示全部楼层
用m8的hex文件有吗?

出0入0汤圆

发表于 2009-6-7 21:23:01 | 显示全部楼层
mask

出0入0汤圆

发表于 2009-6-7 21:42:43 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-6-7 23:39:27 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-6-14 21:25:07 | 显示全部楼层
M&C

出0入0汤圆

发表于 2009-11-12 12:01:05 | 显示全部楼层

出0入0汤圆

发表于 2009-11-16 12:39:03 | 显示全部楼层
太COOL了

出0入0汤圆

发表于 2009-11-16 13:09:58 | 显示全部楼层
mega8的应用简直无所不在

出0入0汤圆

发表于 2009-11-16 13:18:49 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-11-17 10:37:29 | 显示全部楼层
我也求个用M8做的高压并行串口下载的编程器的监控程序.HEX文件。有C源文件没?能否给传个?谢谢了。我的邮箱:344587604@qq.com

出0入0汤圆

发表于 2010-2-27 14:50:04 | 显示全部楼层
mark

出0入228汤圆

发表于 2010-2-27 16:06:06 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-3-7 10:10:25 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-3-15 20:40:25 | 显示全部楼层
好,不错的资料,谢谢LZ

出0入0汤圆

发表于 2010-3-15 23:24:29 | 显示全部楼层
Mark!

出0入0汤圆

发表于 2010-3-26 17:28:52 | 显示全部楼层

出0入0汤圆

发表于 2010-4-26 10:56:51 | 显示全部楼层
mark一下,以后要自己做一个。

出0入0汤圆

发表于 2010-4-27 16:54:39 | 显示全部楼层
你好!红日老师,那个xx.hex
固件你可以传我一份吗?我刚学AVR,
锁了几片,想做个解解,谢谢了!
zwb1616@sina.com

出0入0汤圆

发表于 2010-7-29 00:28:41 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-7-29 08:12:42 | 显示全部楼层
mark一下,容后慢慢研究学习。

出0入0汤圆

发表于 2010-10-11 08:26:48 | 显示全部楼层
回复【楼主位】andy 红日
-----------------------------------------------------------------------

制作成功,熔丝已解锁,感谢红日1

出0入0汤圆

发表于 2011-1-12 01:09:10 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-2-16 01:05:01 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-2-16 08:10:20 | 显示全部楼层
MARK,avr熔丝位恢复

出0入0汤圆

发表于 2011-3-1 17:05:21 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-3-7 13:56:13 | 显示全部楼层
mark一下

出0入0汤圆

发表于 2011-5-20 22:04:46 | 显示全部楼层
学习 谢谢

出0入0汤圆

发表于 2011-5-24 10:20:13 | 显示全部楼层
mark.

出0入0汤圆

发表于 2011-7-14 20:15:59 | 显示全部楼层
回复【8楼】landem_2004  
如果能够有5v升到12v,就可以修改usbasp固件来完成。
有合适的dc-dc升压方法吗?
-----------------------------------------------------------------------

MAX232+12V稳压管

出0入0汤圆

发表于 2011-7-17 21:59:58 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-7-17 22:07:20 | 显示全部楼层
mark
头像被屏蔽

出0入0汤圆

发表于 2011-10-4 16:35:52 | 显示全部楼层
记号,我要做个

出0入0汤圆

发表于 2011-11-27 23:49:29 | 显示全部楼层
新手需要这个哦。要不锁了单片机就又要破费了。

出0入0汤圆

发表于 2011-11-28 07:39:06 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-12-1 14:38:04 | 显示全部楼层
并行高压编程器还很热门,我有M8也想作一个试试,参考!

出0入0汤圆

发表于 2011-12-4 14:14:35 | 显示全部楼层
不错的资料,谢谢LZ

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-5-8 06:16

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

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