搜索
bottom↓
12
返回列表 发新帖
楼主: 314forever

菜鸟作品:USBasp改进版本,支持AT89S52

[复制链接]

出0入0汤圆

 楼主| 发表于 2008-1-26 12:04:27 | 显示全部楼层
to:minier
要用USBasp自代的Makefile,WinAVR自代的不行。里面有使用说明,如下
make                same as make help
make help           same as make
make main.hex       create main.hex
make clean          remove redundant data
make disasm         disasm main
make flash          upload main.hex into flash
make fuses          program fuses
make avrdude        test avrdude
一般先make clean后再make main.hex就行了。

出0入0汤圆

发表于 2008-1-27 15:49:57 | 显示全部楼层
非常感谢

出0入0汤圆

发表于 2008-1-27 15:57:45 | 显示全部楼层
还是不行?!!

出0入0汤圆

发表于 2008-1-30 23:02:17 | 显示全部楼层
我已经下载好固件程序,插入电脑也检测出新硬件,也安装了windows驱动,然后用PROGISP调到USBASP模式,找到HEX文件,然后点“自动”,出来一个对话框显示“chip enable program error”,我下载的是S52单片机,插上USB后绿的的灯一直是亮的,我用双龙的软件它说检测不到USBISP。请各位高手指教!QQ:530883031

出0入0汤圆

发表于 2008-5-30 13:22:57 | 显示全部楼层
mark

出0入0汤圆

发表于 2008-5-30 13:22:57 | 显示全部楼层
mark

出0入0汤圆

发表于 2008-8-11 11:43:29 | 显示全部楼层
这几天刚买了mega48,发现avr芯片出厂设置的时钟都是1Mhz,usbasp速度太快了,无法使用,上面有个跳线可以把速度降低后给芯片编程,但是觉得很麻烦。于是我在本贴的程序基础上修改了下,实现了速度自动监测,切换软件 硬件spi 。

主程序修改了下,默认设置为低速模式,其实没有必要,因为后面每一次编程都会检测。
uchar usbFunctionSetup(uchar data[8]) {

  uchar len = 0;

  if(data[1] == USBASP_FUNC_CONNECT){
/************************************************
    // set SCK speed                                  //此处被屏蔽掉,是原来的跳线设置速度的部分
    if ((PINC & (1 << PC2)) == 0) {
      ispSetSCKOption(ISP_SCK_SLOW);
    } else {
      ispSetSCKOption(ISP_SCK_FAST);
    }
/*************************************************/
        ispSetSCKOption(ISP_SCK_SLOW);//改成默认低速模式了
        ispConnect();
    ledRedOn();


以下是在isp.c里的一个函数,在原来的基础上加入了检测部分。

uchar ispEnterProgrammingMode() {
  uchar check;
  uchar count=32;//这里改成32 其中16次尝试高速模式,16次尝试低速模式
  chip=ATM;
  ispTransmit=ispTransmit_hw;/////////////////这是我加入的,每一次都先高速检测一次
  while(count--){
  ispConnect();//这样更好一些,如果在while之前,要是一次连接没有成功,后面的循环就不起作用了。所以每一次握手都连接一次
    ispTransmit(0xAC);
    ispTransmit(0x53);
    check=ispTransmit(0);
    ispTransmit(0);   
    if(check==0x53){
      return 0;
    }
/****************************************************************************************/
    if(count<16)//当高速模式无法工作时,采用低速模式
        {
        spiHWdisable();
        ispTransmit=ispTransmit_sw;//这里把编程速度调低
        }
/****************************************************************************************/
        spiHWdisable();   
    /* pulse SCK */
    ISP_OUT|=(1<<ISP_SCK);     /* SCK high */
    ispDelay();
    ISP_OUT&= ~(1<<ISP_SCK);    /* SCK low */
    ispDelay();
    if(ispTransmit==ispTransmit_hw){
      spiHWenable();
    }  
  }//while(count--)
  count=16;
  chip=S5x;
  if(ispTransmit==ispTransmit_hw){
          spiHWdisable();
          ispTransmit=ispTransmit_5x;
  }

  while(count--){
  ispConnect();//这样更好一些,如果在while之前,要是一次连接没有成功,后面的循环就不起作用了。所以每一次握手都连接一次
    ispTransmit(0xAC);
    ispTransmit(0x53);
    ispTransmit(0);
    check=ispTransmit(0);   
    if(check==0x69){
      return 0;
    }   
    /* pulse SCK */
    ISP_OUT|=(1<<ISP_SCK);     /* SCK high */
    ispDelay();
    ISP_OUT&= ~(1<<ISP_SCK);    /* SCK low */
    ispDelay();  
  }  
  return 1;  /* error: device dosn't answer */
}

该函数也修改了下下
void ispConnect() {

  /* all ISP pins are inputs before */
  /* now set output pins */
  ISP_DDR |= (1 << ISP_RST) | (1 << ISP_SCK) | (1 << ISP_MOSI);

        if(chip==ATM){
                        /* reset device */
                ISP_OUT &= ~(1 << ISP_RST);   /* RST low */
          ISP_OUT &= ~(1 << ISP_SCK);   /* SCK low */

                  /* positive reset pulse > 2 SCK (target) */
          ispDelay();
          ISP_OUT |= (1 << ISP_RST);    /* RST high */
          ispDelay();               
          ISP_OUT &= ~(1 << ISP_RST);   /* RST low */
          ispDelay();
          if(ispTransmit==ispTransmit_hw){
            spiHWenable();
          }else{spiHWdisable();}//这里是在高速检测失败时,采用低速模式,将硬件spi屏蔽
       
       
         
   }else{
            /* reset device */
        spiHWdisable();//这里也是在89s系列时将硬件spi屏蔽
        ISP_OUT |= (1 << ISP_RST);   /* RST high */
          ISP_OUT &= ~(1 << ISP_SCK);   /* SCK low */

                  /* positive reset pulse > 2 SCK (target) */
          ispDelay();
          ISP_OUT &= ~(1 << ISP_RST);    /* RST low */
                ispDelay();               
          ISP_OUT |= (1 << ISP_RST);   /* RST high */
          ispDelay();
        }
}

出0入0汤圆

发表于 2008-8-11 11:59:54 | 显示全部楼层
源文件ourdev_374340.rar(文件大小:90K) (原文件名:myisp.rar)
hex文件ourdev_374341.rar(文件大小:4K) (原文件名:myisphex.rar)
PCBourdev_374342.rar(文件大小:5K) (原文件名:myavrispPCB.rar)

出0入0汤圆

发表于 2008-8-11 13:02:08 | 显示全部楼层
记号,有空做个!

出0入0汤圆

发表于 2008-8-15 18:48:02 | 显示全部楼层
烧m8的熔丝位怎么设置呀外接12m晶振,我不会,主要是用那个来isp51芯片,前面熔丝设置错了废了一块芯片,现在都不敢再设了,那位大侠贴张图在上面。小弟参考参考

出0入0汤圆

发表于 2008-8-15 18:58:00 | 显示全部楼层
64楼;
usbasp用的是外部12MHz晶振,显然熔丝位要设置成外部晶振8- MHz
请问你烧m8时熔丝是怎么设的哈
麻烦你贴张图给小弟参考

出0入0汤圆

发表于 2008-8-15 19:14:23 | 显示全部楼层
呵呵,非常感谢。

出0入0汤圆

发表于 2008-8-17 20:14:56 | 显示全部楼层
一年了还有人关注这个贴,很不错呀。非常感谢

出0入4汤圆

发表于 2008-8-18 04:20:17 | 显示全部楼层
记号

出0入0汤圆

发表于 2008-9-19 22:07:45 | 显示全部楼层
记号,同时谢谢各位大虾的慷慨!

出0入0汤圆

发表于 2008-11-15 20:17:52 | 显示全部楼层
这么多程序全试了,52读写都不稳定。。。mega48不能读写

出130入129汤圆

发表于 2008-11-15 20:30:42 | 显示全部楼层
我这个一直在用,51&nbsp;AVR都很好的,怎么会不稳定

点击此处下载&nbsp;ourdev_500754.rar(文件大小:33K)&nbsp;(原文件名:USBasp_51&AVR_New&nbsp;_VID_PID.rar)&nbsp;

出0入0汤圆

发表于 2008-11-16 11:06:14 | 显示全部楼层
楼上的,我在读取52时出现



mega8&nbsp;48没问题52出现如上情况&nbsp;(原文件名:usb2.JPG)&nbsp;

出130入129汤圆

发表于 2008-11-16 13:23:40 | 显示全部楼层
可能你目标板复位电路问题,下面是我板上的复位电路





&nbsp;(原文件名:usbasp_read_ok.JPG)&nbsp;





&nbsp;(原文件名:RESET.JPG)&nbsp;

出0入0汤圆

发表于 2008-11-16 22:36:00 | 显示全部楼层
感谢楼上。。。我原来的只是mega48和52的测试电路,52复位端勿接了10k电阻到电源。。。去掉电阻,52复位端直接接usbasp的复位端就可以了。不过还有点问题,单独读写擦除校验flash都没问题,而自动的话在写完flash后校验的话通不过(写的没问题,我单独点校验通过)。



&nbsp;(原文件名:usb3.JPG)&nbsp;

出0入0汤圆

发表于 2008-11-16 22:37:28 | 显示全部楼层
另外,52复位端误接10k电阻到电源的时候,用并口下载线却没问题。。

出0入0汤圆

发表于 2008-11-17 11:17:06 | 显示全部楼层
晕死。。总算找到一个没有问题的。。107楼hittiger&nbsp;杨乾坤的可以写52&nbsp;48&nbsp;8&nbsp;就是速度慢好多呀

出0入0汤圆

发表于 2008-11-17 11:32:59 | 显示全部楼层
87楼的可以写52&nbsp;mega8,速度快,但是不能写mega48

本贴被 qiuyu 编辑过,最后修改时间:2008-11-17,11:34:17.

出0入0汤圆

发表于 2009-6-30 14:58:24 | 显示全部楼层
标记下!

出0入0汤圆

发表于 2009-8-9 19:31:27 | 显示全部楼层
我决定自己做一个!!!

出0入0汤圆

发表于 2009-8-23 11:30:14 | 显示全部楼层
标记下!

出0入0汤圆

发表于 2009-10-7 07:34:56 | 显示全部楼层
楼主好,我现在用的原理图是这样的!

(原文件名:原理图.gif)

这个能用你的固件吗?avr的可以,但是at89s52就不行了!请问是什么原因呢?

出0入0汤圆

发表于 2009-11-5 19:13:47 | 显示全部楼层
不能烧写s52和mega48的朋友,建议把整个帖子浏览一遍,原因和解决方法上面都有。

                                        by:314forever
                                           2009.11.5

出0入0汤圆

发表于 2009-11-6 19:01:11 | 显示全部楼层
huiyige

出0入0汤圆

发表于 2009-11-7 00:06:21 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-11-7 11:31:49 | 显示全部楼层
学习

出0入0汤圆

发表于 2009-11-19 22:38:41 | 显示全部楼层
顶 学习了

出0入0汤圆

发表于 2009-12-9 18:21:26 | 显示全部楼层
学习

出0入0汤圆

发表于 2009-12-12 00:31:12 | 显示全部楼层
此贴太强了

小菜膜拜楼上的各位大神

出0入0汤圆

发表于 2009-12-23 08:46:02 | 显示全部楼层
学习

出0入0汤圆

发表于 2010-1-4 19:19:01 | 显示全部楼层
Mark!

出0入0汤圆

发表于 2010-1-5 19:09:59 | 显示全部楼层
谢谢,下了,可以用。
发现USBasp的话,要一整套东西配套才行,之前弄过其他资料一直不行。最主要的是上位机软件、系统驱动程序和单片机固件要配套。

出0入0汤圆

发表于 2010-5-2 18:07:36 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-5-3 09:33:58 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-6-13 01:10:12 | 显示全部楼层
MARK

出0入0汤圆

发表于 2010-6-13 09:23:30 | 显示全部楼层
不错

出0入0汤圆

发表于 2010-11-1 22:08:50 | 显示全部楼层
很好

出0入0汤圆

发表于 2011-3-31 17:26:47 | 显示全部楼层
请问用自制简易公版USBASP用PROGISP1.67可以写MEG8,不能写MEG16,但用双龙USBISP可以写MEG16,交换写多次如此,

出0入0汤圆

发表于 2011-4-30 15:36:15 | 显示全部楼层
MARK

出0入0汤圆

发表于 2011-5-3 11:35:39 | 显示全部楼层
不错,顶

出0入0汤圆

发表于 2011-12-2 10:03:33 | 显示全部楼层
thank you!

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-5-11 21:15

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

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