面包板上的至简 Arduino
1 元器件
ATmega328p,TQFP32 封装,手头没有 PDIP 的 328p 就用这个了
为了用杜邦线接插的方便,故将其先焊接在一小片转接板上
焊好后,在面包板上加一个 16MHz 晶振外围电路即可,所需要的元件仅为:
- 1 个 16MHz 无源晶振
- 2 个 15pF 电容
电路如下:
XTAL1, XTAL2 接晶振,再找一个 VCC 接 5V,GND 接地,即成一个极简系统
ATmega328p 针脚定义为:
搭好的效果为:
白线连 5V,黑线连接 GND,极简系统即可工作
2 Bootloader 烧写
328p 的片子,可使用 /PATH/TO/arduino-1.0.1/hardware/arduino/bootloaders/atmega/ATmegaBOOT_168_atmega328.hex
这个 bootloader,烧写的过程可参考 Arduino bootloader 的烧写
至于编程器的连线,可直接连片子的引脚,即:
MISO --> MISO MOSI --> MOSI SCK --> SCK RESET --> RESET
3 arduino upload 测试
烧写有 arduino bootloader 的芯片安如下连接,就可以用 arduino 的开发环境直接上载程序了:
将 FT232RL 板的 RX 串一个 1K 的电阻连 ATmega 的 TX TX 也要串一个 1K 的电阻连 ATmega 的 RX DTR 串一个 100nF 的电容连在 RESET
断电重启一下,一般即可像正常 arduino 板一样使用。对于命令行方式,可用如下命令测试是否成功:
$ avrdude -C /d/arduino-1.0.1/hardware/tools/avr/etc/avrdude.conf -p m328p -c arduino -P COM27 -b 57600 avrdude.exe: AVR device initialized and ready to accept instructions Reading | ################################################## | 100% 0.00s avrdude.exe: Device signature = 0x1e950f avrdude.exe: safemode: Fuses OK avrdude.exe done. Thank you.
对于已有 bootloader 的板子,avrdude 通过串口与板上的 ATmega328p 通信,实际为 avrdude 通过串口“命令”ATmega328p 对自身的 flash 进行编程,需要写入的数据也从串口传入
烧了一个在数字口 7、1s 闪一次 LED 的程序:
$ avrdude -C /d/arduino-1.0.1/hardware/tools/avr/etc/avrdude.conf -p m328p -c arduino \
-P COM27 -b 57600 -D -U flash:w:Blink-7-1s.hex
avrdude.exe: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.02s
avrdude.exe: Device signature = 0x1e950f
avrdude.exe: reading input file "Blink-7-1s.hex"
avrdude.exe: input file Blink-7-1s.hex auto detected as Intel Hex
avrdude.exe: writing flash (2496 bytes):
Writing | ################################################## | 100% 1.27s
avrdude.exe: 2496 bytes of flash written
avrdude.exe: verifying flash memory against Blink-7-1s.hex:
avrdude.exe: load data flash data from input file Blink-7-1s.hex:
avrdude.exe: input file Blink-7-1s.hex auto detected as Intel Hex
avrdude.exe: input file Blink-7-1s.hex contains 2496 bytes
avrdude.exe: reading on-chip flash data:
Reading | ################################################## | 100% 1.08s
avrdude.exe: verifying ...
avrdude.exe: 2496 bytes of flash verified
avrdude.exe: safemode: Fuses OK
avrdude.exe done. Thank you.
烧完后去除无关连接线,PD7(对应于 Arduino 的数字 7 口)接一个 LED 灯,效果如下(每秒 LED 灯闪一次):
对于测试连接出现的如下错误信息:
$ avrdude -C /d/arduino-1.0.1/hardware/tools/avr/etc/avrdude.conf -p m328p -c arduino -P COM27 -b 115200 avrdude.exe: stk500_getsync(): not in sync: resp=0x00 avrdude.exe done. Thank you.
一般是波特率的问题,改成 '-b 57600' 试试
还不行的话就要检查硬件连接了,尤其是 RX/TX/RESET(DTR) 这三个线串的电阻和电容有无问题





