AVR单片机有许多优点,我也是个忠实支持者,是从51过度到AVR的,中途还学PIC,初学51时买了学习板,液晶屏等不少东西,有经验后,学AVR时就从自制的下载线开始了,注意,这只是个开始,简单的东西总存在着一些局限性,但对于初学者来说,这可是个非常有用的东西,有了它就可以开始学习AVR单片机,甚至是一些开发了,这些编程器都是出自网上流传的,虽然我也不是很清楚出自那位高人,但感谢原作者.以下分享我的自制经验.
1.由于AVR的编程方式有并行高压和串行ISP (In System Program 在系统编程)方式,高压并行编程能修复一些错误的配置位,但这并不常用,因为并行通信其布线会较多,不便于在成品中预留编程接口,也不便自制,而串行的ISP是基于SPI(Serial Peripheral interface)通信方式的,SPI通信时只需三根数据线, 分别是SCK,MISO,MOSI,再加上VCC,GND,Reset共需6根线,而VCC是可选的,用于向目标芯片供电,或由目标板反供电给编程器.
那么设计目标板时,最少只要保留6根线,以后就可随时烧写,升级芯片上的程序了.而无需将芯片取下.这是ISP方式的最大特点,具体6根线连到那个引脚,不同型号不一样,要看芯片引脚定义图,例如ATtiny2313引脚定义如下:
至于编程接头,尽可能以官方的10针接口为准,也可像我一样自定义一个6针的,因为我更喜欢水晶头,其实都是排列不同而已,只要再制作一条线进行转换就什么都搞定了.
2.基于并口的ISP下载线,我最初也是自制了这款,这种下载线可以下载AVR全系列和AT89S系列51单片机,成本较低,不过需要PC机有并行口,许多笔记本电脑现在都没有并口了,比较麻烦,市场上卖的USB转并口,大都是用于打印机的,无法使用.
以上是原理图,74HC244是用于信号的隔离驱动的,它从目标板经4148供电,由于ISP编程器只有4根是信号线,实际上我用了74HC125取代74HC244,以减小体积和引脚焊点数.下面是我使用的原理图,和成品图片:
元件全装在内部,整体就很美观了,注意下载线不宜过长,最好50cm以内,PC上位机软件很多都可以支持的像双龙的SLISP,PonyProg2000(但51的型号很少,2.0a版中也只有两个),智峰的progisp试过都成功烧写和效验.不足是烧写速度偏慢,综合来说还算满意.如果首次不成功,可能是软件设置问题,双龙的几乎不用(或说是不能)作什么设置,PonyProg200和Progisp或许需要设置一下才能把它使用得更好,比如Ponyprog用直接IO方式要比API方式快些,而Progisp它的端口引脚是可以自定义的,如果不同,把它设为和原理图一样不可以了.否则根本就用不了.
3.基于串口的ISP下载线.,因为之前还在用51做些板子,初看这电路时,觉得由于reset在默认上拉,认为不适合51系列(51是高电平复位),并且更重要的是ponyprog2000的器件列表也没 89s52这型号,所以一直没去做过.但如果只对AVR编程来说,这个也是非常好用的.
其中6,7端口必须直连,Ponyprog程序用来检测是否插入此接口,制作完成后试过还可以,速度和并口的差不多,只是必须要用PC机上的物理串口,用USB转串口的就无法使用.我起初觉得可能是驱动能力问题,曾用74HC125对它隔离驱动,花了时间却不成功,用示波器观察四条线的时序,发现原来是USB转串口线有问题,它的SCK(7脚),输出像随机的方波,而从物理串口出来的SCK时序,其频率在20K左右,并连续稳定,如下图,这也许是USB转串口芯片的问题,才20K频率,难道被当燥声给滤掉了??请有了解的朋友请帮我分析一下,但这条转换线是好的,目前正在用它为ARM系统进行通迅,下载都很正常,芯片型号没打开看,驱动名称是Prolific USB-to-Serial Comm Port.有WHQL的,应该没问题,下面是我的原理图(我参考并口那个画的),实物,与波形.
示波器测量时是直接测量转接口,未接下载线,通道1(绿)是物理串口的,通道2(黄)就是USB转串口 的,已用示波器量了9个脚,不会错的,由于目前在学ARM9系统,已对这些问题放低了,对它有研究的朋友请告诉小弟,解决这小点问题,可以把它当USB的编程器用了!此线直接插到物理串口上,仍然可用.
4.当制作完成这样简单的编程器后,就可以开始学习AVR或8051单片机了,熟悉后可以制作一个USB接口的编程器,USBASP,它内部是用一块ATMega8单片机来 模似USB时序的,所以制作它的前提是至少需要一个编程器,例如上面的,将程序写入单片机中.这最好是在熟悉AVR的情况下制作.我是根据网上的公板图自己重画了这张原理图,来方便自己制作.
晶振必须为12MHz,否则不可能完成USB时序的模似,单片机可以用低压版的ATMega8L 8PU超频使用,USB的数据线上的电压是3.3V,最高不超过3.6伏,那两个稳压管也就必须是3.6伏的,至于其它元件,其取值有些偏差影响也不大,JP1跳线是强制低速工作的,比如烧写那些有内部有RC振荡的单片机,首次使用就可能要用低速模式,因为其默认就是使用1M的内部振荡.由于USB供电已足够使用,JP5通常保持断开就可以了,JP3只在烧写或更新此编程器固件时使用,平时必须断开,整个电路其实很少东西,JP2连接USB线,或USB公头时要注意顺序不要搞错,
上面这个PCB是专为万用板,有人叫洞洞板画的,并且4个LED位置是焊插针的,用来引出到外壳,这个单片机是直插的,建议不要焊上去,而是使用IC插座,当把电路做完,用表量一下确认无误后,插入USB口,此时PC端应该提示为无法识别的USB设备,不必理会,接着开始烧写固件,先短接JP3,再用另一个编程器通过编程口将程序写入Mega8单片机.此过程和平时烧写目标板是一样的.确认成功烧写和效验后,接着烧写熔丝位,这步主要就是设置单片机为外部晶振工作模式,设置熔丝时要小心,如果点错的话,先点恢复默认,再去修改.否则后果难以意料.下面分别是Ponyprog,progisp和SLISP的熔丝设置界面:
注意不要设错,完成后将JP3取下,拔下并重插USB,如无意外,你会看到发现新硬件这样的提示,然后装USB驱动,就算大功告成了.至于软件目前就智峰的Progisp支持得比较好.因为经常用,最好是搞外壳保护它,我是在壳体店买的小盒,总之都是小问题了.那个低速开关我是用另一个8脚的单片机.实现按键检测,电平求反输出,和将状态保存到片内EEPROM进行记忆来实现的自锁开关,因为这是我后来扩展的,并且是用了PIC的12F629单片机,这些用AVR单片机(如Tiny13)实现都很简单,就不多说了,不过想它反应得好些要下些功夫,或者是直接用机械的自锁开关来实现.
至此,可以慢慢享受自己的成果所带来的乐趣了.