Hackaday.io上的树莓派项目-树莓派AVR编程器
收藏
分享
脑图
Hackaday.io上的树莓派项目-树莓派AVR编程器
关于项目
项目描述:该项目是一个简单的板,允许使用树莓派的SPI接口编程 ATMEL AVR 微控制器。它还具有一个头,可以为多达四个树莓派的GPIO引脚提供缓冲输出。
项目图片
项目详情
多年来,我曾与许多微处理器和微控制器合作。我目前的兴趣在于来自 ATMEL 的 AVR 微控制器。我有一个开发系统,包括一个主板和插件板,容纳 AVR 和其他外设。我在树莓派上为我的 Avr 部件编写和编译了程序。我使用连接到 Pi 的 usbtiny 对插入 AVR 开发系统的 CPU 板的 AVR 部件进行编程。这工作得很好, 直到有一天, usbtiny 停止工作。我知道发生了什么事。
我的树莓派和我的 AVR 开发系统由不同的来源供电。当我编写代码来与一些硬件接口时,我经常将 usbtiny 留在 Pi 和开发系统之间。在没有为 Pi 供电的情况下为开发系统供电(反之亦然),或者更换开发系统和无焊面包板之间的导线,必须损坏 usbtiny 编程器上的 AVR。连接到 Pi 时, usbtiny 上的 LED 指示灯不再亮灯, Pi 没有看到 usbtiny。
usbtiny 是一个简单的板,以单个 AVR AT90S2313 为主要组件。当我为电路板绘制一个示意图时,我发现无法保护板载 AVR 的 I/O 引脚,该引脚将转到要编程的 AVR 部件。我现在没有 AVR 部件的程序员,无法继续从事我已经开始的一些项目。我必须决定是修复我的 usbtiny (如果可能的话), 买另一个, 还是使用不同的程序员。
我搜索了关于 usbtiny 的信息, 看看是否有信息可以让我修复它。我发现一个非常相似的程序员的信息, 以 usbtiny 。它使用 ATtiny2313,并包括 AVR 的程序。10S2313 是 90S2313(不再可用的)的替代品。我认为,我发现的软件中的引脚分配的一些更改应该让我让 usbtiny 板再次工作,但我仍然需要一种方法来编程的 AVR 微控制器。
这就是这个项目的用武之路。 细节,在搜索信息,可以帮助我修复我的usbtiny AVR程序员,我看到了有关使用树莓派的SPI接口编程VR微控制器的信息。
我有一个树莓派坐在我的工作台上, 已经使用它交叉编译程序的 AVR 微控制器。Pi 和 AVR 微控制器之间的布线很简单,我不需要任何我手头没有的组件。使用 SPI 接口对 AVR 部件进行编程所需的软件是 avrdude(我已经使用我的 usbtiny)。这听起来像是我如何继续编程 AVR 部件问题的理想解决方案。
没过多久, 用无焊面包板把 Avr 连接到我的树莓派。我用拉斯比安在我的皮。我很快发现,标准 Raspbian 存储库中提供的 avrdude 版本不支持使用 SPI 接口。这个问题通过下载、编译和安装 avrdude 的最新源得到解决。更新 avrdude 后, 我能够读取 AVR 部件的签名字节, 我已经在我的无焊面包板上。
我很快就验证了,我可以使用 avrdude 读取和写入 AVR 的内存使用我的树莓派的 SPI接口。它工作得很好,大多数时候。(请参阅下面的说明部分,了解我为什么说"大多数时候"。现在,我知道这一切工作下一步是设计一个电路和PCB,这样我就可以释放空间在我的无焊面包板和简化布线时,我需要编程的VR部件。
特征
具有 6 针和 10 针编程标头
通过将跳线安装在板载接头上,可将 ±5V 馈送至外部电路
使用由 3.3V 供电的 IC 缓冲信号,但它是 5V 容差
可以缓冲从(或到)树莓派的GPIO头最多四个信号
avrdude_gui. py
1 X Pcb
1 X 74LVC245
3 X 220 欧姆电阻器
1 X 1k 欧姆电阻器
1 X 10k 欧姆电阻器
1 X 100nF 圆盘陶瓷电容器
1 X 2x3 引脚公头
1 X 2x5 引脚公头
1 X 2x13 引脚公头
1 X 1x2 引脚公头(可选)
1 X 1x3 引脚公头(可选)
2 X 1x5 引脚公头(可选)
1 X 编程电缆(6 针 F 至 F,或 10 引脚 F 至 F)
我已经使用这个接口大约一年来编程 AVR 微控制器,我在另一个项目中使用。它已经证明自己是非常有用的,但我经常会得到验证错误。有时就像三分之一的编程尝试一样频繁。(我没有保留任何适当的统计数据。只是觉得经常这样。我终于决定够了就够了。是时候看看我能否做一些提高编程过程可靠性的事情,这样我才能减少编程步骤失败的时间。
我使用 Pi Zero 对以 1MHz 运行的 AVR 微控制器进行编程,而波特拉特 (-b) 设置将其默认值更改为 100,000。我怀疑波特拉特设置是编程失败的最可能原因。Pi 或微控制器跟不上数据流。
我一路降低到 10,000, 并多次尝试编程 AVR。在这个较低的波特率设置,我从来没有一个验证失败。我开始增加设置,直到验证步骤失败。我第一次失败是设置 25,000 。我降低到 20,000,并且没有经历过任何更多的验证失败。
如果您使用此接口对 AVR 微控制器进行编程,并且遇到太多的验证失败,请尝试使用较低的值进行波特率设置。
此处提供的avrdude_gui的 UI 不是很好,但原始 C++ 版本的 UI 没有更好的了。一个窗口中的选项太多。UI 设计者看到它可能是唠叨。我没有时间或兴趣对程序的外观和感觉做出根本性的改变。您看到的是程序从从一个到 Python 的快速C++的结果。我只是想要一些易于使用的东西, 而不必继续查找 avrdude 中可用的所有命令行选项。
将程序从 C++移植到 Python 给了我一个在 Python 中执行更多编程和了解有关使用 wxGlade 制作复杂屏幕布局更多内容的借口。有几个小问题在布局,我懒得尝试修复,但他们是如此小,大多数人甚至可能没有注意到。底线是程序可能不漂亮,但它的工作,并可以帮助解决命令行,你需要执行一些操作使用avrdude。
我已经上传了图形前端,我一直在使用avrdude程序。前端程序基于一个称为C++的avrdude_gui。我在 Python 中重写C++程序,并使用 wxPython 进行图形显示。我保留了原始 C++ 程序的一般外观和布局,但增加了对 6.1 版本的 avrdude 中许多新选项的支持,这些选项在创建原始 C++ 程序时不可用。
我一直在使用此接口来编程我在另一个项目中使用的 AVR 微控制器。它一直在工作, 但我有时遇到可靠性问题。avrdude 程序不能始终与 AVR 通信,或者 AVR 的输出引脚在编程后无法正常工作。我发现自己在使用 avrdude 对 AVR 进行编程之前移动了一根电线,并在 AVR 编程完成后将导线移动回来。它很快就变得烦人,每次我想测试代码的更改。我开始思考,如果我可以把'245的输出到三状态模式时,它不被用来编程的VR,它会简化事情,使更容易使用程序员。
电路需要更改不大。Pi 的复位线也可以用作 '245 的芯片启用线。当线路变低以在开始编程过程之前重置 AVR 部件时,它将启用来自 '245 的输出。当线路变高时,允许 AVR 运行刚刚接收的程序,'245 的输出将置于三状态模式。我在PCB上添加了一个跳线,这样'245的芯片启用输入可以由复位线驱动,也可以在'245用于缓冲GPIO线路时与地面连接。
我向原理图和 PCB 添加了新的跳线。当我更新PCB布局时,我做了一些额外的更改。我修改了丝网,以便可以看到所有元件参考,并添加电阻器和电容器的零件值。我还减少了板宽0.05"。库中的图像已更新为最新版本的原理图、PCB 布局和组装板的 3D 模型。
我一直在使用程序员的修改版本过去5天,它真的是一个很大的帮助。在 AVR 上运行程序与使用新软件编程 AVR 之间切换时,我不再需要移动任何导线。
自从我上次添加到项目日志以来,已经一段时间了。我一直在做一些其他项目,我在圣诞节假期和新年休息了一下。
我刚刚完成了这个项目的说明部分的工作。自从我进行了上一个项目日志输入以来,PCB布局也发生了其他更改。
当我努力将最后几个项目添加到说明部分时,我想有一个选项,提供3.3V或5V的外部电路,但认为这是太危险。如果外部电路由 5V 单独供电,并且编程板设置为提供 3.3V,外部 5V 电源将反馈到树莓派的 3.3V 导轨,这将破坏 Pi。
在完成说明部分的注释时想到的另一个想法是使 74LVC245 中未使用的缓冲区更易于使用。这导致了多氯联苯的进一步变化。我移动电阻器和'245,让垫片的空间允许访问'245的未使用的输入。然后,我不得不将主板扩大 0.05",以便为安装在新焊盘中的接头留出空间,并允许使用 '245 的插座。我认为PCB现在已经完成,不需要任何进一步的变化,但我之前在做另一个PCB时就考虑过了。
与这个项目相关的最后一件事是使我的更新版本avrdude_gui下载。
如组件列表所述,所需的 220 欧姆和 10k 欧姆电阻器的数量是错误的。我已经更新了这些电阻器所需的数量。
在对PCB的第一次修订做了一些修改之后,我将设计发送到OSHPark,让一些电路板。只有在我收到PCB制造商的电路板后,我才意识到设计上有一个小问题。
没有错。问题是机械问题。我已经把 P1 放在 Gpio 标题旁边。这导致PCB的左侧延伸过树莓派PCB的左边缘。当 Pi 不在机柜中时,这不会对使用主板的能力产生任何影响。如果 Pi 位于机柜中,可能没有足够的间隙允许将 AVR 编程器板插入 GPIO 标头。
为了解决问题,我移动了 P1 的位置,将电路板的整体宽度从 1.9" 减少到 1.75"。
在最近的PCB修订中,我修改了一些痕迹来缩短它们,并在PCB的底部添加了一个地平面。
我已经在图库中添加了 AVR 程序员板最新修订版 3D
视图。我还添加了 PCB 第二修订的正面和背面视图,就像我在 3 月份把它发送到 OSHPark 时一样。我会写一些笔记,在这个项目页面的说明部分在不久的将来(我希望)。
步骤 1 :项目要求
使用 AVR 程序员对 AVR 微控制器进行编程,您需要几件事情。它们是:
树莓派(天然)
树莓派板组装的 AVR 程序员
AVR 跨编译器工具链(可选)
avrdude 程序(2013 年 5 月 26 日构建,或更晚),包括 linuxspi 支持
ardude avrdude_gui前端 GUI(可选)
您要编程的 AVR 微控制器
该项目的接口板具有 26 针头,可插入树莓派型号 1 A 或 B 版本的 GPIO 头。将主板插入使用 40 针 GPIO 头的型号 A+、B+ 或 2B 时可能遇到一些困难。
步骤 2:配置树莓派
我使用树莓派上的 Raspbian Linux 发行版。在 Raspbian 中,默认情况下禁用 SPI 接口的内核驱动程序。必须先启用 SPI 驱动程序,然后才能使用它对 AVR 微控制器进行编程。
要启用 SPI 接口,您必须删除 /etc/modprobe.d/raspi-黑名单.conf 文件中 spi-bcm2708 的黑名单条目,或使用 raspi-config 启用 SPI 接口。
一旦你删除了SPI驱动程序的黑名单,你必须重新启动树莓派或手动加载驱动程序:
$ sudo modprobe spi- bcm2708
步骤 3:安装 AVR 交叉编译器(可选)
如果要使用树莓派为 AVR 微控制器在 C 中编写和编译程序,则需要安装交叉编译器。安装以下软件包以编译用于 AVR 微控制器的程序:
gcc - avr - AVR 的 GNU C 交叉编译器
binutils- avr - 支持 Atmel AVR 目标的二进制实用程序
avr-libc - Atmel AVR 开发的标准 C 库
步骤 4: 安装 AVR 编程软件
下载并安装 avrdude 程序
下载并安装avrdude_gui程序(可选)
下载并安装 wxWidgets(由avrdude_gui)
avrdude_gui是可选的,但它使得处理 avrdude 程序接受的所有命令行开关要容易得多。您将需要我的 0.5 (或更晚) 版本的 avrdude_gui, 而不是原来的 0.2 版本。
注:原始版本的avrdude_gui是用C++。我不用计算机编写程序C++在 Python 中重写avrdude_gui, 并用于 Gui 的 wxwidts 。在重写程序的过程中,我更新了它,以处理自创建基于原始程序以来添加的所有 avrdude C++ 功能和选项。我为主 0.2 版本分配了 0.5 的版本,以将其与基于C++ 0.2 版本进行区分。
稍后,我将添加指向更新的基于 Python 版本的 avrdude_gui链接。
步骤 5:组装接口板
请仔细阅读以下装配说明,然后再开始将组件焊接到 PCB。并非所有组件都放在 PCB 的顶部。要生成和使用接口板,您需要组件列表中列出的项目(上文)。我假设你知道如何使用焊接铁, 或知道有人谁这样做。为了组装电路板,我建议按以下顺序添加元件:
1. 所有电阻器
2.DIP 插座(建议)或 74LVC245
3.所有电容器
4.除 2x13 引脚头外的所有标头。
5. 在板的底部安装 2x13 母接头。
您可以在电路板上安装 20 针插座或 74LVC245。我建议使用插座,因为它将很容易更换74LVC245,如果它曾经损坏的静态或电路中的错误包含VR微控制器要编程。
注: 电阻 R2 到 R5 是可选的。建议它们保护 74LVC245 和树莓派。电阻值是建议,应该是一个很好的起点。您可以根据需要根据正在编程的 AVR 微控制器的外部电路调整值。如果您选择省略任何 R2 到 R5 电阻,则需要在省略的电阻器的位置安装跳线。
步骤 6:  将程序员连接到树莓派
程序员接口板插头连接到树莓派的 GPIO 头。当它正确连接到 Pi 时,接口板将被定位,以便它完全位于树莓派上。
将树莓派与 USB 和网络连接器定向到右侧,将 GPIO 接头从您您位于电路板对面的板的左侧定向。右侧使用 6 针和 10 针连接器定向接口板。在将接口板向下推送到树莓派的 GPIO 标头之前,请检查标题是否正确排列。如果接头被一两个引脚偏移,在通电时可能会损坏 Pi。
接口板最初设计用于早期型号的树莓派,具有 26 针 GPIO标头。如果使用使用 40 针 GPIO 接头的较新的型号(如 A+、B+ 或 2B),则接口板将连接到 40 针头的第一个 26 针(最远的 USB 和网络连接器)。
步骤7: 接口板
连接到包含 AVR 微控制器的外部电路,通过将电缆连接到 P2(10 针)或 P3(6 针)接头进行编程。
P2 和 P3 接头使用通用引脚,因此您可以使用任何 6 针或 10 针电缆,您必须连接到外部板上 AVR 微控制器的编程接头。如果您使用的是没有专用编程标头的(无焊)面包板,可以查看接口板原理图,了解如何将跳线从 P2 或 P3 接头运行到面包板。
步骤 8:可以通过连接到 P2
或 P3 的电缆为外部电路头 P1 供电,为外部电路提供 +5V。外部电路可用的电流量将因使用的树莓派版本以及为 Pi 供电提供的最大电流而有所不同。如果正在编程的 AVR 微控制器是外部电路或板的一部分,可能会吸引大量电流,您应该使用单独的电源为外部电路供电。如果外部电路只是 AVR 微控制器,接口板可以通过在 P1 上安装跳线来供电。
注意:请勿在 P1 上放置跳线的同时使用单独的电源为外部电路供电,否则可能会严重损坏树莓派。
步骤 9:对 AVR使用 avrdude 
微控制器进行编程 此时,您应该已安装所需的软件,配置树莓派,组装 PCB,将 PCB 连接到具有 AVR 编程的电路,并且将二进制文件编程到 AVR 微控制器中。这就是 avrdude 程序发挥作用的地方。
如果您键入"avrdude -h"或"man avrdude",你会发现程序有很多命令行选项。更新的avrdude_gui版本将更容易确定需要传递哪些选项到程序的特定任务。在这些项目的范围内,详细讨论使用这些说明中的 avrdude 是超出此项目范围的。相反,将只覆盖四个参数,因为它们将是您将使用 avrdude 执行的任何操作的核心。这四个参数是:-p-c-p和-p.-p 选项用于指定要对哪个 AVR 微控制器进行编程。例如"-p ATtiny45"或"ATmega16"。-c 选项指定使用的程序员的类型。此项目使用树莓派的 SPI 接口,因此您将使用"-c linuxspi"。-P 选项指定将使用哪个端口(或设备,以 Linux 术语)通过程序员与 AVR 微控制器通信。用于此项目的 SPI 接口的设备名称为"spidev0.0"。在命令行上,您需要指定设备的完整路径,以便使用"-P /dev/spidev0.0"。使用命令行时不要忘记"/dev/"部分。如果使用命令,avrdude_gui选择"spidev0.0"avrdude_gui在生成命令行时将自动预排"/dev/"。
-b 选项指定波特拉特。未使用 -b 选项时,默认值为 400000。是否需要指定值将取决于两个因素:AVR 微控制器的时钟速率和为 AVR 微控制器供电的电压。使用avrdude_gui通过首先单击 -b 标签下方的字段中输入波特率值。您可以省略 -b 并使用默认值,当您为微控制器供电时,微控制器的电压为 5 伏或 8MHz 或更多。
如果波特拉特过高,avrdude 程序将无法与微控制器进行正确通信。
为了测试与微控制器的通信,请向命令行添加"-U 签名:r:fuse-sig:i",以测试签名字节的读数。如果读取签名字节时出错,或者未获得一致的结果,请降低波特拉特,直到可靠地读取签名字节。
如果微控制器电压在 8MHz 下工作,但在 3.3V 时工作,可能需要将波特酸盐降低到 1000000或更少。如果时钟速率降低到 1MHz,波特可能需要大幅降低到 25000 或更少。波特越低,编程微控制器的时间越长。不要担心对波特酸盐使用比可能可以使用的更低的值。最好使用较低的波特值和可靠的通信,而不是尝试使用尽可能高的值,而风险与微控制器进行不可靠的通信。
旁注:我已经使用Pi的SPI接口对 AVR 微控制器进行编程大约一年了。我发现,avrdude 并不总是能够与微控制器交谈。有时我必须多次运行 avrdude 才能让它读取设备签名或让其能够验证写入 AVR 部件的数据。当 avrdude 报告错误时,我发现如果我运行 avrdude 操作两到三次,它最终会成功。在 Pi Zero 上运行 avrdude 时,我有时不得不重新启动零,然后 avrdude 会与 AVR 在上一个成功的编程周期后进行交谈。当我使用 Pi 模型 1b 时, 我从来不需要重新启动 Pi 。
我没有花时间诊断这个问题。它可能只是我的用例,我让 AVR 连接到外部电路,它将串行数据馈送至用于编程 AVR 的引脚之一。如果您遇到类似的可靠性问题,您可以断开与 AVR 之间的某些连接,这些连接可能会干扰与设备的通信,或者您可以对设备进行开外编程。
步骤 10: 缓冲其他信号
本项目中使用的 74LVC245 能够缓冲 8 个信号,但只需 4 个信号来编程 AVR 微控制器。电路板不是浪费一半的IC,而是用来允许未使用的部分来缓冲来自(或到)树莓派的其他信号。未使用的缓冲器的输入是引脚 6、7、8 和 9,相应的输出分别是引脚 14、13、12 和 11。PCB 上提供了孔,便于访问输入和输出引脚。用于输入和输出的孔由 PCB 顶部的丝网层中的文本表示。
通常,输入引脚通过PCB顶部的跟踪与接地连接。在可以使用其中一个未使用的缓冲区之前,必须首先切断将输入引脚绑在地面的跟踪。必须在 GPIO 标头和位于 U1 和 GPIO 标头之间的孔之间切割跟踪。不要切割输入孔和 U1 之间的轨迹。
切断将输入与接地的跟踪后,您可以使用输入缓冲来自树莓的信号,或者您可以使用输入缓冲来自外部电路的信号,并使用相应的输出通过 GPIO 标头将信号馈送至树莓Pi。
您可能会注意到 U1 和 GPIO 标头之间有五个孔。第五孔提供易于访问接地,以防您需要或希望为将(外部)信号送入 U1 输入的接地参考。组件列表中列出了两个 4 针头,但如果可能需要轻松访问标头上的接地引用,可以使用 5 针头进行输入。
步骤 11: 享受您新编程的 AVR 微控制器的乐趣!
评论
0 / 100
查看更多
Sen
2020-08-24
819
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号