通过 FTDI USB 串行适配器使用 Arduino 引导加载程序对 ATmega328 进行编程

电器工程 Arduino 编程 ftdi
2022-01-09 04:48:03

我想听听您关于使用 Arduino IDE 和 avrdude 对预装了 Arduino 引导加载程序的 ATmega328 进行编程的建议。我正在使用基于 FTDI 芯片的 USB 转 TTL 串行分线板。

我在ebay上买了一个“FTDI Basic Program Downloader USB to TTL FT232 for Arduino ACC”

FTDI USB 转 TTL F1232

我完全按照这个设置:

  1. 通过 0.1uF 电容将 DTR 引脚连接到 ATmega 上的引脚 1。

  2. 将 RX 引脚连接到 ATmega (TX) 上的引脚 3

  3. 将 TX 引脚连接到 ATmega (RX) 上的引脚 2

  4. 将 5V 引脚连接到电路板的 5V 导轨,以通过 USB 接口为电路板供电。

  5. 将 GND 引脚连接到电路板的 GND 导轨

设置来自遵循的说明

当我尝试上传草图时,我得到了这个坏男孩:

avrdude: stk500_getsync(): not in sync: resp=0x00

这是我到目前为止所尝试的:

将 Arduino“屏蔽”的插头引脚连接到面包板上的芯片。为此,我使用板载 ATmega16U2 发送程序。结果:完美无缺!程序启动,每个人都很高兴。

回到 FTDI 分线板。切换 RX 和 TX(永远不知道?)仍然没有,所以切换回初始 TX - RX 配置。

FTDI 板上的 DTR 引脚肯定会成功重置 ATmega328,因为当我尝试上传内容时,它会经历神奇的闪烁序列。

现在,我已经测试了 ATmega328 是否可以通过分线板​​将串行信息发送到计算机。它可以。

我注意到一些有趣的事情:

TX 和 RX 线始终为 5 V。我知道这一点,因为如果我将 LED 与线并联,它们就会亮起。但是,分线板上标有 TX 和 RX 的小 LED 并不总是亮着……这是为什么呢?这能解释我的问题吗?

如果您想了解更多信息,请告诉我,我会为您获取。

- - - - - - - - - - - - - - - - - - - - - - -编辑 - - --------------------------------------

再一次问好,

好的,我在 5v 和 GND 之间添加了一个 100uF 的电解电容和一个 0.1uF 的电解电容。这不是建议的 47uF 和 0.1uF,但我想它仍然有助于过滤掉。(在它的时候。它会改变什么?)

我已经用一个 10k 的上拉电阻替换了我的 1k 上拉电阻

我仍然无法上传草图并得到同样的错误。DTR 线调用复位,我仍然得到串行输出。(我有一个草图,每秒通过串行发送递增的整数)

同样有趣的是,(尽管在此之前我仍然无法发送草图)我插在引脚 13(又名 19)上的任何 LED 现在都变得更暗了……也许我之前使用的超亮白色 LED 正在拉电流很大一个 270 欧姆的电阻器... -_- )

这里的热门需求是我的板和我正在使用的 USB 到 FTDI 分线板的图片。

分线板

我的面包板 - 图 1

我的面包板 - 图 2

4个回答

我也来到这里,因为我独立的、引导加载的 ATmega328 不想加载我的程序并给出了 avrdude 错误。我解决了我的情况,并想分享它,所以也许它会帮助其他人。

最终的问题是 ATmega328 芯片没有在面包板上正确“点击”。然而,当我最初将 ATmega 芯片直接放在面包板上时,它会发出“咔哒”声。看起来它确实正确,没有松动,不能更深,当你将它倒置时不会掉出来等。但是当我尝试加载程序时,我收到了 avrdude 消息。

上传一些引脚时闪烁,即使是我连接到引脚 19 的 LED(Arduino 板上的引脚 13)。我在荷兰买的面包板,所以我不能说是不是中国的,但显然它也有一些深连接器和DIP芯片的引脚连接困难。幸运的是,我有一个芯片插座安装座(IC Socket 28 Pin DIP),我将它放置在 ATmega 芯片和面包板之间。我的问题立刻解决了,幸福又回来了。

我使用 FTDI basic 对其进行编程,几乎就像Gwideman上面给出的链接中的图片一样。图中只有 RESET 的上拉电阻接错了。就像 Gwideman 正确规定的那样,电阻器需要连接到引脚 1,而不是连接到电容的 DTR 侧。

在 Arduino IDE 中,我选择了“Arduino Uno”。

希望它可以帮助某人。

几个建议:

看一下您似乎正在关注的图片:

在此处输入图像描述

几乎可以肯定有一个错误会导致重置无法按预期工作。

我认为复位电路应该模仿实际 Arduino 中的电路,它的 DTR 通过一个 100nF (0.1uF) 电容器连接到 /RESET(引脚 1)。实际的 Arduino(例如:Deumilanove)原理图显示了从引脚 1 到 +5V 的 10k 上拉电阻。这将强制 /RESET 在 DTR 变为低电平后一段时间内变为无效。

然而,在照片中的面包板上,10k 电阻连接到盖子的错误端,连接到 DTR。这不会产生任何影响,并且意味着 /RESET 恢复将仅归因于内置上拉,据称这是一个更高的值,如 30 到 60k,因此需要 3 到 6 倍的时间来重置,并且将更容易受到噪音的影响。

将 10k 电阻上拉到引脚 1 可以彻底解决问题。

要检查的另一件事是是否真的从 FTDI 适配器上的 5V 引脚获得 5V。其中许多板都带有跳线头或未焊接的跳线垫,允许您将“电源输出”引脚连接到 FTDI 芯片上的 5V 或 3.3V 稳压器。

并在每个 LED 上串联电阻(比如 330 到 1k),以避免造成过大的负载。照片似乎显示一个 LED 直接跨接 5V-Gnd,另一个从 Vcc 连接到 D13。第一个当然应该立即烧毁或造成其他破坏。但是,这些 LED 可能是带有内置串联电阻的 LED。

最好在 328 附近的 Gnd 和 VCC 之间添加并联的 0.1uF 和 47uF 电容器,以提供干净的电源。

我遇到了一个非常相似的问题,它是由 FTDI 的 DTR --- 0.1uF 陶瓷帽 --- AtMega328p 的 RESET 之间的面包板上的不良连接引起的。

当我将公线插入与盖子腿相同的孔中时,问题得到解决,因此连接更牢固。我能够上传草图,但仍然不是很可靠。当我将 0.1uF 电容换成 10uF 陶瓷电容时,似乎完全解决了这个问题。

编辑:导致类似行为的另一个问题是在我的笔记本电脑和 FTDI 模块之间使用“USB 过流保护器”模块。所以我停止使用它,尽管我以前的笔记本电脑被我的一根电线烧毁了:o(再加上更紧的面包板上传草图就像一个魅力。

面包板上的 DTR、cap 和 RESET

当我看到这个错误时,我唯一能想到的就是在 Arduino IDE 中选择了错误的板。您可能需要选择使用 atmega328p 的板。