您现在的位置是:网站首页> 硬件
全新AVR芯片ATMEGA328P烧录程序的教程
- 硬件
- 2021-03-31
- 1457人已阅读
玩Arduino有几年了,断断续续的。最近开发一个项目,因为我本身不是电子专业,只是对UNO有些经验,所以先用各种模块搭建的系统进行了测试。
测试通过后,开始设计PCB打样,一开始使用的是和UNO一样的芯片进行设计,结果在打样的时候出了问题。
这是我第一次PCB打样,才知道淘宝打样都是10cm以内20元,超过10cm要额外计算,价格差出好几倍。然后我的设计原件比较多,小了板子空间放不下。
然后想起了Arduino mini,用的是tqfp封装的芯片,可以节省空间,这个芯片和UNO的唯一区别就是封装。
所以改板,重新画PCB,打样,采购元件,安装焊接,中间历经坎坷就不多说了。
本来以为一切就绪,结果出现了新问题,程序下载不进去!开始以为是焊接问题,但是按说我这手法不应该出问题啊,但是不管了,马上重新焊一片,问题依旧。
后来上网查询学习,总结知识点一:如何为全新AVR芯片烧录程序
1. Arduino不是指AVR单片机芯片,而是基于AVR单片机搭建的一个平台。
2. ATMEGA328P是AVR单片机的一个型号,常用的Ardunio UNO和Arduino Pro Mini都是基于这款芯片,当然也有基于其他型号芯片的其他版本Arduino。
3. AVR芯片本身只支持SPI方式烧录程序,新的芯片内不含任何程序。
4. 我们平时用的Arduino编程软件,一般情况下是通过串口烧录程序的。
后面两条看起来相悖,这是为什么呢?因为虽然说硬件只支持SPI方式烧录,但试想一下,如果芯片里已经有一个程序,可以通过串口接收数据,写入到芯片里,就实现了串口烧录。这就是Arduino使用的烧录方式,而这个程序,就是Bootloader。
刚才说了,新的AVR芯片不含任何程序,当然也不含Bootloader,所以我们像为UNO烧录程序一样为新的AVR芯片烧录,自然是不行。那怎么办?答案你已经想到了,就是先通过SPI方式为芯片烧录Bootloader程序。
SPI烧录程序有两种方式,一种是单独买一个烧录设备,学名叫做USBISP,这是一个通用硬件,可以为AVR、51等单片机下载程序,支持通用的烧录软件。但是Arduino用不了,因为Arduino对USBISP的协议做了稍稍的修改,将其命名为USBasp。USBISP可以通过刷固件改为USBasp,这里今天先不说这个,因为今天先不讲USBasp方式烧录。有人说你废了半天话,还卖关子。其实不是的,因为一个是要单独买硬件需要成本,更重要的是win10下没有USBasp驱动,虽然有解决办法但是比较复杂。不如下面说的第二种方式来的简单。
第二种方式,是通过把现有的Arduino模拟成USBISP,实现烧录。这种方式无需为驱动操心,因为你的UNO早就和你的电脑愉快的玩耍在一起了吧。
总结知识点二:通过现有Arduino板为新的AVR芯片烧录程序(烧录Bootloader)
首先连接好UNO,打开Arduino软件,选择文件-示例-ArduinoISP-ArduinoISP,这时软件自动打开了一个程序。
选择在工具菜单中设置好开发板的型号UNO,以及软口号。
注意因为这个步骤是为你的UNO烧录程序,所以此处设置和平时烧录程序一样。如果你不是UNO就按你的版本设置。
然后点上传,和平时一样,为你的UNO烧录程序。
之后你的UNO就以为成为一块模拟USBISP了,按照arduino的说法就是Arduino as ISP。
现在接口定义为:10.RESET、11.MOSI、12.MISO、13.SCK,如果你不是UNO,那就查一下刚才打开这个程序的代码,看下具体定义。
现在准备为你新的AVR芯片烧录程序,连接好上面说的4条线路,另外不要忘了+5V和GND。
这里用到了TQFP32烧录器,一会交给大家做法。
然后注意软件设置!端口不变,还是你UNO的端口。开发板和处理器按照你的目标AVR芯片设置,和UNO无关!比如我的目标是328P,5V电压,16M晶振,这里就如图设置。
这里可能又有人要问了,为什么开发板选择的是Arduino Pro Mini?因为Pro Mini是328P芯片啊!刚才说了,Arduino是基于AVR搭建的平台,他卖的是平台不是芯片,所以这里不会提供给你芯片型号选项,而是提供Arduino版本选项,所以你选择和你使用同样芯片的版本就行了。
然后编程器选择Arduino as ISP,如果是使用USBasp,这里就选择USBasp。
然后到这里,一切都准备妥当了。之后有两条路,需要注意了。
如果你单纯想烧录程序,不想要Bootloader,可以按住shift再点上传,每次都用这种方式烧录程序就可以了。
如果你想以后和玩Arduino一样,用串口烧录和调试,点击菜单工具-烧录引导程序,这样就写进去Bootloader了,以后就可以用串口操作了。
如果烧录报错了就检查你的硬件,按照我经验如果连线没问题,一般都是晶振未起震。
总结知识点三:新的AVR芯片开光无需设置熔丝位!
新的AVR芯片开光无需设置熔丝位!新的AVR芯片开光无需设置熔丝位!重要的事情说三遍!
不知道什么时候开始,网上教程都说要为芯片设置熔丝位,那是低级的51的玩法好么!我们这么高级的Arduino,才不用设置熔丝位,你烧录Bootloader的时候,程序帮你一切都做好了。
总结知识点四:328P最小系统设计
直接看图吧,一共7个外围元件,图中接出了SPI口和串口,当然还有RESET和DTR。
这里要区别一下DTR和RESET,RESET是芯片本身的引脚,而DTR是通过电容接在RESET脚上的。
SPI刷机方式用的是RESET脚,而使用串口刷机方式使用的是DTR信号。
某些版本的USB转串口设备,比如我手上这块CP2102,本身已经集成了DTR电容,那么也可以直接使用RESET引脚。这样就省略了C5,只剩下6个元件。
如果使用村田3脚晶振,因为晶振内置了对地电容,所以C3C4就可以省略了,参照Pro Mini,这样就剩下4个元件。
也就是说保证功能和稳定的前提下,328P的最小系统只要4个元件!
总结知识点五:328P的烧录板制作
在大批量烧录的时候,我们不可能一个一个的去焊引脚,所以就需要一个烧录板,可以快速批量作业。
查了一下万能的淘宝,TQFP32座好贵,要60块钱!
这不是最重要的,重要的是竟然没有成品卖!好吧,我只能自己做一个了。
需要元件:TQFP32座,还有最小系统所需的几个元件。
然后就是手工活了,找了个洞洞板,按照上面电路图焊就行了。
正面样子
背面
插上烧录座
烧录座针脚特写
连接NUO的接线
连接USBasp的接线
连接CP2102的接线
好了完工,此帖到此结束。
最后因为强迫症,打算有时间画个专用的烧录座PCB,把元件烧录座都弄到一张板子上,现在这样好几层看着不舒服。
但是因为有这个能用了,再单画一个又有点不值,所以如果大家有需要的,我就画一个做几片,大家出点费用,不会超过100块钱,如果没有需要的就算了。