ATmega328P-MU制作Arduino开发板
前言
前段时间¥48买(捡垃圾)了一套 昊翔ToF模块和四合一电调,上面包含4片ATMEGA328P-MU单片机,于是画了个Arduino开发板【已验证】,工程已开源在立创Hub。
PCB工程链接:【已验证】Arduino开发板(ATMEGA328P-MU)
1.焊接PCB
2.为芯片烧录Bootloader
bootloader的作用
Arduino通过预先写入的bootloader来引导烧录程序。每次通过串口给Arduino板下载程序时,首先会令Arduino板复位一次,这样就先进入了bootloader,接着向Arduino板发送特定的下载指令,bootloader识别到这些指令后就会紧接着开始接收剩下的新的程序代码写入到内部flash中。如果bootloader没有识别到下载指令,那么它就会跳转到程序区正常工作。
新出厂的单片机里是没有bootloader的,需要自己烧录进去。
烧录bootloader的两种方法
两种方式:
- 通过AVR下载器烧录Bootloader
- 使用另一个Arduino作为ISP烧录Bootloader
Arduino 烧写bootloader:https://www.jianshu.com/p/2f274f8b3dab
如何制作自己的Arduino开发板:http://www.basemu.com/how-to-make-an-Arduino-clone-board.html
2.1使用USBISP下载器烧录
建议买这种的,我买的另外一种用不了
打开PROGISP软件,选择芯片型号,将USBISP下载器与arduino开发板连接:
点击调入Flash,选择arduino安装目录下D:\Program Files\Arduino\hardware\arduino\avr\bootloaders\atmega文件夹
如果你的开发板使用的晶振是8MHz,那么选择ATmegaBOOT_168_atmega328_pro_8MHz.hex
如果你的开发板使用的晶振是16MHz,那么选择ATmegaBOOT_168_atmega328.hex
笔者使用的16MHz,所以选择的是ATmegaBOOT_168_atmega328.hex
bootloader文件一定要和晶振匹配,否则将无法使用 串口 下载程序!
遇到FLASH校验错误,需要先擦除FLASH
如果下载不了BootLoader或者程序时钟运行不正常,设置熔丝位如下,点击写入即可
如果熔丝位写错,可尝试用其他开发板的晶振引脚连接到Arduino开发板的XTAL1(PB6),但只对CKSEL0-3写错的情况有效
2.2使用Arduino开发板烧录
打开arduino IDE的Tools -> Programmer
下显示了所有支持的编程器列表,这里推荐使用Arduino as ISP
方式,较为简单而且成功率高。
Arduino as ISP
简单来说就是用另一块arduino板,给它用普通方式下载一段专门的程序,将其变为一个ISP下载器,再将其相应引脚与待烧写bootloader的板子相连,再通过arduino IDE来控制进行bootloader烧写。这里斜体字显示了分为三个步骤。
- 专门的程序
打开IDE,Files -> Examples -> ArduinoISP -> ArduinoISP
,使用这个程序下载到一块arduino板中,我们暂且称这块板为ISP板。
- ISP板与目标板连接
由前面介绍可知,这里应该是将ISP板的引脚连接到目标板上的ICSP接口上去,连接对应表如下(以使用UNO作为ISP板为例)
ISP板 | 目标板 |
---|---|
MISO / 12 | MISO / ICSP-1 |
Vcc / 5V | Vcc / ICSP-2 |
SCK / 13 | SCK / ICSP-3 |
MOSI / 11 | MOSI / ICSP-4 |
10 | Reset / ICSP-5 |
GND | GND / ICSP-6 |
实际连接电路如下所示,其中左边是ISP板,连接到电脑上,右边是等待下载bootloader的目标板
-
使用arduino IDE进行bootloader烧写
按照前面的方式连接好ISP板和目标板后,将ISP板连接到电脑上,打开IDE,首先按住ctrl + shirft + M
打开串口调试窗口,然后点击Tools -> Boards
选择目标板的类型。然后在Tools -> Programmer
中选择Arduino as ISP
,最后点击 工具-> 烧录引导程序
,此时会开始进行烧写,同时串口调试窗口里会有相关提示和确认,按照其说明输入相应按键即可完成。
3.串口下载测试
打开示例中的Blink,用USB-TTL下载器与Arduino开发板连接:
下载器--Arduino开发板
GND---GND
RXD---D1(TXD)
TXD---D0(RXD)
5V------VCC
笔者使用的是16MHz晶振,如下图选择下载方式。8MHz选择(3.3V,8MHz),芯片供电电压也要为3.3V
注意:
这个0.1uF电容实现自动下载,而不用每次下载都按RESET键