新闻  |   论坛  |   博客  |   在线研讨会
迷你 Arduino - 让 Arduino IDE 支持 ATtiny13
bacy | 2013-07-26 14:27:31    阅读:5606   发布文章

Arduino IDE 支持很多不同的 MCU,不是只有官方 Arduino 板才能用。

Arduino 编译系统 Arduino IDE (IntegratedDevelopmentEnvironment) 目前最高版本为1.0。具有直观易用的界面,和常用 Arduino 板的必要设置-Uno、Duemilanove、Nano 和其他基于ATmega168 和 ATmega328 的MCU。最新版的 IDE 还提供了 ATmega1280 和 ATmega2560 的支持。但是如果你需要为烧录一个小的 Atmel 芯片而频繁切换到你需要的编辑器,就无法使用 IDE 提供的全部功能了,比如 ATtiny13。Arduino IDE 背后的引擎 - C 和 C++ 的 AVR-GCC 编译器 和 avrdude - ATmel AVR 系列 MCU 编程系统,已经提供了对小芯片的支持,我们只需要在 Arduino IDE 的设备配置文件中添加一小段代码来实现自如地切换硬件设置而不用离开你心爱的 IDE。具体操作如下:

Arduino IDE 用于配置硬件信息的 C 库文件和必要设置的文件位于 IDE 所在文件夹下的 hardware 文件夹里(本文将简称此文件夹为【arduino_home】),配置信息也可能位于用户自己的 sketchbook 目录下。我所使用的是 Linux Ubuntu 系统,我的 sketchbook 目录位于 ~/sketchbook/。在 Windows 系统中可能位于不同的目录中,请根据Windows 版本自行检查。

硬件配置库文件称为 cores,位于 ~/sketchbook/hardware/xxxx/cores,(xxxx可以是 arduino,或者是开发者指定的硬件名,比如 - tiny)。cores 位于[arduino_home]/hardware/arduino/cores/。

IDE 中另一个重要的文件 - 让 IDE 知道你正在给什么样的 MCU 编写程序 - boards.txt,位于 ~/sketchbook/hardware/xxxx/boards.txt 或者 /[arduino_home]/hardware/arduino/boards.txt。这个文件包含的硬件(或者可以只是一个单独的芯片)信息包括:时钟频率、高低熔丝位、MCU 烧录配置和定义时钟源、预分频器和其他一些不必每次重新上传都更新的必要设置。boards.txt 还可以指定编译器应该以多快的速度与微控制器对话 - MCU (如ATtiny)的一个重要特性 - 可以使用内置时钟源大幅放缓。

到目前为止,我知道两套可用的可以编译 ATtiny 的库:

Damellis’es ATtiny cores(通过添加设置支持 ATtiny13)

Arduino-Tiny Cores(似乎不支持 ATtiny13)

smeezekitty’s core13(只支持 ATtiny13)

上述大多支持一些 Arduino 的基本功能,可以在像 ATtiny 这样小 Flash 和 SRAM 的 MCU 上运行。通常支持的功能包括:

millis()
micros()(并不是很准确的微妙)
delay()
delayMicroseconds()(并不是很准确的微妙)
analogRead()
analogWrite()
pinMode()
digitalRead()
digitalWrite()

在编写你的程序时应该注意 - 一些更高级的功能,比如数学运算和三角函数也许是可用的,但很可能会很快耗尽 MCU 的有限资源。

上述所有 ATtiny cores 的引入方式都是类似的:

1.关闭 Arduino IDE

2.定位到 sketchbook 目录(在我的 Linux 上是 ~/sketchbook/),新建 hardware 文件夹,像这样 ~/sketchbook/hardware。

3.如果 cores 是按目录结构压缩的,直接解压到 ~/sketchbook/hardware/ 即可,所需目录会自动创建。否则,手动创建子目录,比如 “tiny”(或者“core13” -smeezekitty给 core13 的命名。目录名称可以随意,只要和boards.txt 中定义的一致就可以了,见下文)

4.在~/sketchbook/hardware/tiny/目录中,编辑或新建 boards.txt(格式见下文)

###########################################################################

attiny13.name=Attiny13 @ 128 KHz (internal watchdog oscillator)
attiny13.upload.using=arduino:arduinoisp
# attiny13.upload.protocol=avrispv2
# attiny2313at1.upload.using=pololu
attiny13.upload.maximum_size=1024
attiny13.upload.speed=250 # important for not losing connection to a slow processor
attiny13.bootloader.low_fuses=0x7B
attiny13.bootloader.high_fuses=0xFF
attiny13.bootloader.unlock_bits=0x3F
attiny13.bootloader.lock_bits=0x3F
attiny13.build.mcu=attiny13
attiny13.build.f_cpu=128000
attiny13.build.core=core13
###############################################################
attiny13at4.name=ATtiny13 @ 4.8MHz (internal 4.8 MHz clock)
attiny13at4.bootloader.low_fuses=0x69
attiny13at4.bootloader.high_fuses=0xff
attiny13at4.upload.maximum_size=1024
attiny13at4.build.mcu=attiny13
attiny13at4.build.f_cpu=600000
attiny13at4.build.core=core13
###############################################################
attiny13.name=ATtiny13 @ 9.6MHz (internal 9.6 MHz clock)
attiny13.bootloader.low_fuses=0x7a
attiny13.bootloader.high_fuses=0xff
attiny13.upload.maximum_size=1024
attiny13.build.mcu=attiny13
attiny13.build.f_cpu=9600000L
attiny13.build.core=arduino:arduino
attiny13.build.variant=tiny8
###########################################################################
Arduino IDE 1.0 Pick the right Programmer before uploading the software


Arduino IDE 1.0 上传前选择正确的编程器

编辑 boards.txt 之后启动 Arduino IDE,在 Programmer 菜单中选择将使用的编程器(见上图),我使用的是 Atmel AVRISP mk II USB ,Arduino 可以使用 ICSP 方式为 AVR MCU 编程。

在 Tools -> Board 菜单中选择 MCU 类型和时钟频率(见上图)。

在上传程序之前,运行 "Tools" 菜单下的“Burn Bootloader”。虽然因为内存太小和 I/O 口数量太少,选项中没有ATtiny 的 bootloader,但是这个功能的确是把高低熔丝位给烧进去了 - 上面的配置步骤对于确认MCU在你设定的速度运行是必须的。

写点代码,别忘了那些硬件限制 - ATtiny13 只有 1024Byte 的 FLASH 和 64 byte 的 SRAM,最方便的上传代码的方式是通过 ICSP,如果你计划用 ICSP,显然,只有 5 个 I/O 口可用。但如果是用其他方式上传代码的话,可以将 Reset 脚复用做第六个 I/O 口。

Connect ATtiny13 to the programmer as shown on this diagram

按此图所示连接 ATtiny13 和 编程器

现在,你应该如上图所示将 ATtiny13 MCU 和 编程器的 ICSP 6 引脚连接好。如果你是用面包板连接的,,最好用 6 条彩色 18AWG 线做一条 6-pin 的 ICSP 线公头 - 这将使软硬件连接变得简单,并且是重复使用的。注意 Vcc 脚应该接 +1.9V 到 +5.5V。
10.程序写好后,按 [Ctrl-Shift-U] 编译并上传到 MCU。别忘了电压应该和 MCU 相匹配。

现在程序应该成功运行了,除非是有 bug。如果没有得到预期的结果,仔细检查然后重新上传。

保证代码在 ATtiny13 上正常运行所应该考虑到的一个问题就是程序正在使用的 RAM 数量。比如,每个声明的变量得到一个内存空间,所以声明变量时应该用占用空间最小的类型。例如程序中用到一个计数器,不会超过 255 个,就没有必要使用 2 个字节的 int 类型,使用 1 个字节的 byte 类型就足够了。每个字节计数器只有 64 个字节的 RAM!

如果你声明了很多常量,比如数组或字符串,记得用 PROGMEM 将他们从 RAM 移到 FLASH,来保证有足够的 RAM用来流畅地运行程序。

用 Arduino IDE 给 ATtiny13 芯片编程非常有意思。IDE 提供了非常舒服的编程环境,ATtiny13 这样的小型 MCU 的种种限制也使得编程更具挑战性。如果你还没有尝试过,我建议你试着玩一玩 ATtiny。

参与讨论
登录后参与讨论
推荐文章
最近访客