nanopc t3开发板系统烧录_基础教程18 定制 Arduino 系统

本专栏内容经修订后,已在豆瓣阅读集结成书出版:

8f8b18b3afd557bfc11f2cc0711ffde8.png
https://read.douban.com/ebook/106875966/​read.douban.com

我是潘,曾经是个工程师。这是为 http://Ardui.Co 制作的 “Arduino 公开课” 系列的入门教程。本节课我们将 DIY 属于自己的 Arduino 系统。有任何疑问请在评论区提出,我会逐一回答。

完成了一项开发后,你肯定会想,怎么把它以最低成本的方式转化为成品。此时,定制属于自己的Arduino系统很重要。其实,这项工作非常简单,Arduino 核心是一块 Atmel 控制芯片,只要外接1个晶振和2个瓷片电容即可构成最小系统。

我们选用Arduino Uno上的 ATmega328P,因为这块芯片有直插封装、价格非常便宜,且性能强大。很多旧教程推荐 ATmega8,但 ATmega8 性能较差,ROM 只有区区的 8KB,最关键的是,产量少,现在价格也不比 ATmega328P 便宜多少。

5de9de3992333581fc1845453bff0d72.png

DIY Arduino 系统前需要准备一些元件:
16Mhz 石英晶振 1个
18 ~ 22pF 瓷片电容 2个
10KΩ电阻 1个
ATmega328P 芯片
Arduino Uno 开发板(用于烧录芯片)

新买的ATmega328P 芯片里面是空的,要启动它必须写入 Bootloader。此基础上就可以像Uno 一样写入程序了。为什么需要一块Uno 开发板?因为它可以化身为 ISP 烧录器,对 ATmega328P 芯片进行读写。

这是ATmega168/328P 与 Arduino Uno 的 Pin Map:

2be1f91eda82ff6831824be43109cc63.png

接线采用官方推荐的方式:

3ffe67adf01decaaef94fca2a01f50b6.png


ATmega328P 脚位7(VCC)、20(AVCC)接5V;
ATmega328P 脚位8(GND)、22(GND)接GND;
ATmega328P 脚位19(SCK)、18(MISO)、17(MOSI)、1(Reset)分别接13、12、11、10;
ATmega328P 脚位9(XTAL1)、10(XTAL2)接石英晶振,两脚通过瓷片电容接GND;
Reset 建议接一个10K上拉电阻。

现在可以开始烧录吗?不行,要让 Arduino Uno 开发板作为烧录器,还需要对其写入“ArduinoISP”,很多教程都忽略了这一步:

4f7dacbfccc62862effd9fd21b10ef46.png

点击 File -> Examples -> ArduinoISP -> ArduinoISP,然后 Upload 到 Arduino Uno 即可。

接着进行一些设定,Tools -> Board 选为 Uno。这个设定的意思是「被刻录的对象」,但我们并不是要刻录到Uno板子,因为Uno板使用的芯片跟面包板上的ATmega328P-PU相同。其实,选择Nano Pro mini 也是可以的,因为它们也是用ATmega328P。如果是ATmega8,则选择Arduino NG or Older。

设定 Tools -> Serial Port,即Uno板连接到计算机的串行端口号。最后设定 Tools -> Programmer -> Arduino as ISP

设置完毕后,点击 Tools -> Burn Bootloader 开始烧录。 过程中会显示,Burning bootloader to I/O Board (this may take a minute)…完成后出现 Done burning bootloader. 字样,恭喜你 DIY Arduino 成功了。

怎么样给他刻录程序呢?两种方法:1、很多教程会教你,通过USB 转串口模块连接脚位2(TX)、3(RX),这样不仅要改接线,而且额外一个USB转串口模块。2、还有一种方式不用改接线,通过ISP方式上传:

ab2920123d1bb9bac7e2ea3ed222b816.png

选择 Sketch ->Upload Using Programmer ,与普通 upload 不同,此时 Arduino Uno 会被当作ISP 烧录器,将程序传递给 ATmega328P上。我们尝试刻录一个程序:

/*
  作者:Ardui.co
  效果:DIY Arduino 呼吸灯
  版本:1.0
  更新时间:2017年3月4日
*/
 
int led = 3; // 对应 ATmega328P 脚位5
int brightness = 0; 
int fadeAmount = 5; 
void setup() {
 pinMode(led, OUTPUT);
}
 
void loop() {
 analogWrite(led, brightness);
 brightness = brightness + fadeAmount;
 if (brightness <= 0 || brightness >= 255) {
 fadeAmount = -fadeAmount;
 }
 delay(30);
}

要注意:Arduino Uno 3号数字端口对应 ATmega328P 的脚位5。DIY 过程中熟悉 PinMap 相当重要。

2dedd7e987e1e31f15125117780b4454.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值