如何将您的 Arduino 变成 ISP — 对 ATmel ATtiny85 进行编程

已发表: 2017-06-13

短字节:有时,在项目中使用预先构建的 Arduino 板是矫枉过正,或者只是过大。 ATtiny85 是一款价格低廉但功能惊人的微控制器,有助于减少项目的占用空间。 以下是您如何对 ATtiny 进行编程以在您的项目中使用。

Arduino平台是一个了不起的学习工具,但有时支持的 Arduino 板并不完全适合您需要的地方。 Arduino Uno (最常见的型号)的尺寸约为 65mmx50mm,很容易看出它可能是某些项目中最大的组件。 还有其他像 Nano 这样的板要小得多(我的 Nano 仿冒品是 43 毫米 x 17 毫米,小 4.5 倍) ,但即便如此,有时它还是太大了。 如果,比如说,你想制造一个可穿戴设备,也许它只是一个闪烁的 LED,让你的狗在晚上佩戴。 一旦考虑到电池等因素,它就会变得相当大。

提示 ATtiny 线,我们问题的英雄。 ATtiny 的名字很明显。 您可以在 DIP-8 封装(双列直插式封装 - 8 针)中找到它,大约 9 平方毫米。 就其同名的本质而言,阁楼是微不足道的,但不仅仅是它的物理尺寸。 本文使用的 ATtiny85 只有 8KB 的程序闪存、512 字节的 RAM 和 512 字节的 EEPROM (程序存储之外的永久存储)

现在的问题是对这些小家伙之一进行编程。 网上有一些关于这方面的教程,但我发现它们有些不完整或缺乏说明。

ISP - 在系统程序员

In System Programmer (ISP) 并不像听起来那么花哨。 通常,用于 ATmel 芯片的 ISP 由带有六针连接器 USB 电缆的设备组成。 ISP 引脚在 Arduino 上非常容易发现,它们通常位于 USB 连接器的对面。 ATmel 芯片旨在通过 ISP 引脚进行编程,但 Arduino 平台已在板上实现了 USB 到串行适配器,从而无需 ISP 设备。 尽管如此,他们仍然在许多(如果不是大多数)型号上保留了 ISP 引脚。

因为我们的 ATtiny 芯片没有 Arduino 的 USB 转串口设备,所以需要使用 ISP 对它们进行编程。 ATmel ISP 设备相当昂贵,至少与 Arduino 本身的成本相比,因此我们可以通过将 Arduino 编程为 ISP 来节省金钱和运输时间。

我们通过打开 Arduino IDE 并从示例草图中选择 ArduinoISP 来做到这一点。

打开草图文件后,您将看到有关代码预期行为的一些信息。 在此文件中,我们必须快速更改我们的 ISP 以正确与 Arduino IDE 通信。

在第 220 行,我们找到了setup()函数。

 无效设置(){
  SERIAL.begin(波特率);

  pinMode(LED_PMODE,输出);
  脉冲(LED_PMODE,2);
  pinMode(LED_ERR,输出);
  脉冲(LED_ERR,2);
  pinMode(LED_HB,输出);
  脉冲(LED_HB,2);

}

我们需要将BAUDRATE更改为 19200,因此该行显示为

SERIAL.开始(19200);

根据我的阅读,Arduino IDE 收到了一个更新,该更新破坏了与此 ArduinoISP 固件的兼容性。 Arduino 和 IDE 尝试以不同的波特率进行通信,这导致无法将 Arduino 用作 ISP,尽管固件正确闪烁。

阁楼图书馆

Arduino IDE 支持各种不同的微控制器和板,但遗憾的是,不包括 ATtiny 系列。 这意味着我们必须自己争取对他们的支持。

对我有用的方法是将以下 URL 添加到 Arduino IDE 首选项下的 Additional Boards Manager URL,

https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json

重启IDE,在Tools -> Board -> Boards Manager下打开Boards Manager,然后搜索ATtiny包并安装。

完成后,您就可以开始构建电路以对 ATtiny 进行编程。

建立你的 ISP

您可以通过多种方式构建您的 ISP。 您可以在无焊面包板上构建它,这样您就可以重新利用这些部件,或者您可以像我一样通过将它们焊接在一起来制作一个半永久性的解决方案。 如果您仔细地将它们焊接在一起,那么如果您愿意,您可以将 Arduino 重新用于另一个项目。

查看 ArduinoISP 草图的前三十多行,我们可以找到以下有关将 Arduino 设置为 ISP 的信息。

引脚 10 重置引脚
目标微控制器
引脚 11 SPI 主输出
从属输入
引脚 12 SPI主控输入
奴隶出局
引脚 13 SPI 串行时钟

或者,您可以将 LED 连接到以下引脚以指示状态

  • Pin 9 – Heartbeat – 表示 ISP 正在运行
  • 引脚 8 – 错误 – 表示发生了错误
  • 引脚 7 – 编程 – 指示与目标的主动通信

请记住,这些 LED 将需要电阻器。

在这里,我们可以看到 ATtiny85 的引脚以及我们需要回到 Arduino 的适当连接。 这是一张相当粗糙的图,但为了方便起见,我在 ATtiny85 上标记了引脚。 然而,应该注意的是,这些引脚没有像图中那样在 1、2、3..8 处寻址,它们在 Arduino IDE 中被指定,因为它们在对角线文本中被标记。

这是不同连接的更详细的图表。 所有的 LED 都是可选的,但它们对于故障排除很有用,除了 ArduinoISP 草图文件中推荐的三个状态 LED 之外,还有一个简单地从 5V 连接到地(当然,使用电阻器) ,并且然后有一个连接到第二个引脚(IDE 中的引脚 3) ,用于通过眨眼测试测试阁楼。 请注意将复位引脚连接到地的电容器,这是 Arduino 用作 ISP 所必需的。

这是我为 ATtiny 微控制器构建的 Arduino ISP。 你可以看到我在编程时使用了 DIP-8 插座来固定阁楼。 我还在右侧留出足够的空间来安装一个 DIP-28 插座,用于对 ATmega 芯片(如 ATmega328P)进行编程。 升级将非常简单,只需要像我们与 ATtiny 一样连接 Atmega 芯片的必要引脚。

一旦你组装好你的 Arduino ISP,你肯定会想尝试一下。 请务必选择适当的设置以通过连接的 Arduino 进行编程,而不是对 Arduino 本身进行编程。

对于板子,我们选择 ATiny 25/45/85 选项,然后在处理器选择中选择 ATtiny85,最后,我们从程序员那里选择 Arduino 作为 ISP。 这告诉 IDE 它需要了解的有关目标系统的所有信息,包括它将如何与目标系统通信。 现在我们已经准备好调出 Blink 草图(或者如果你是铁杆,你可以自己输入)并尝试一下,只要确保将用于闪烁 LED 的引脚切换到你在你的电路,如果您使用我提供的原理图,那是引脚 3。 最后,我们通过单击 Sketch -> Upload Using Programmer 来编译和上传草图。

 无效设置(){
  pinMode(3,输出);
}

无效循环(){
  数字写入(3,高);
  延迟(1000);
  数字写入(3,低);
  延迟(1000);
}

总的来说,焊接在一起的我的 Arduino ISP 可能要花费大约三四美元。 ATtiny 芯片也非常便宜,通常每块只有 1 美元左右。 如果您打算将 ATtiny 芯片放入项目中,我建议您购买 DIP-8 插座,因为您可能想要更新一些代码或重新调整芯片的用途。 将 IC 焊接到位是可行的,但您很容易损坏 IC,尤其是在反复暴露的情况下,如果您多次更新代码就会出现这种情况。

有没有其他人做过这样的事情? 你想看更多 Arduino 的东西吗? 请在下面的评论中告诉我们。

另请阅读:Raspberry Pi 或 Arduino——哪个板最适合初学者?