前往 小组作业页面
本周我要做一个 ISP (在线编程),也就是在线编程器。
我选择了 Brian 的 ISP。选它是因为简单又便宜,元件已经精简到最低限度。
整个过程分成几个阶段:铣削、贴装元件、调试、编程:
这个阶段我会用到:
- 我先从 Brian 的教程里下载了电路的 Traces(1000 dpi)和 Outline Cutout(1000 dpi)。
我选择了 “image (.png)” 选项
我选择了图片文件
图片载入后,我选择 “output format”,然后选 “G-codes (.nc)”
在 Process 里,我选择 “PCB traces (1/64)”
计算之前,我把切割深度改成 0.05,是默认值的一半,因为我有点谨慎。
然后我按了 calculate
计算完成后,我检查了一遍刀路,确认所有走线都被覆盖。按住鼠标左键可以移动图片,用滚轮可以放大,方便更好地检查刀路。
按住鼠标右键,我甚至能从另一个视角看它。
最后,我保存了用于铣削的文件。
外框我照着同样的步骤做,只是把走线换成了 “PCB outline (1/32)”。
我开始准备 CNC,先铣一个和空白 PCB 一样大的凹槽(76x50x1.5 mm)。
铣削凹槽
凹槽铣好了
在 FR1 板上贴双面胶
最后的结果是这样。
铣其中一个 ISP 的轮廓
把 PCB 从凹槽里取出来。
我用刀片和砂纸去掉铣削留下的碎屑。
我把 PCB 背面的双面胶撕掉了。
根据 Brian 的 ISP 页面上的教程,我先做了一张表格,列出元件和它们的位置。
|
元件 |
位置 |
Digikey 或 Mouser 料号 |
制造商料号 |
|
- ATtiny45 或 ATtiny85 |
U1 |
ATTINY45V-10SUR |
|
|
- 2 个 1kΩ 电阻 |
R1, R6 |
RC1206FR-071KL |
|
|
- 2 个 499Ω 电阻 |
R2, R5 |
RC1206FR-07499RL |
|
|
- 2 个 49.9Ω 电阻 |
R3, R4 |
RC1206FR-0749R9L |
|
|
- 2 个 3.3V Zener 二极管 |
D1, D2 |
BZT52C3V3-7-F |
|
|
- 1 个红色 LED |
D4 |
LTST-C150CKT |
|
|
- 1 个绿色 LED |
D3 |
LTST-C230TBKT |
|
|
- 1 个 100nF/0.1uF 电容 |
C1 |
C1206C104KARACTU |
|
|
- 1 个 2x3 排针 |
ISP |
71600-006LF |
之后,我把所有元件都焊了上去。
我先做了一次目视检查。
好吧,我还得再清理一下。
我用万用表找短路,尤其是 Vcc 和 GND 之间,结果什么都没发现。
整体来看板子没问题,所以我就继续编程了。
为了给这个自己做出来的编程器编程,我用了一个叫 USBasp。在他的网站上,Thomas Fischl 是这样描述的:
“USBasp 是用于 Atmel AVR 控制器的 USB 在线编程器。它只由一个 ATMega88 或 ATMega8 和几个无源元件组成。这个编程器使用纯固件的 USB 驱动,不需要专门的 USB 控制器。”
用法和 USBtiny 一样。
从透明塑料壳里伸出来的排针是 “slow SCK” 跳线:它把编程时钟降低,这样 USBasp 才能和运行在慢时钟(大约低于 1.5 MHz)的芯片通信。我这块 USBasp 不会自动检测速度,所以要改变速度模式,直接插上跳线就行。比如给还在出厂 1 MHz 时钟下运行的 ATtiny44 或 45 编程时,这就很有必要;而像 AT90USB1286 这种更快的芯片,可以用正常速度编程。这些编程器上的新固件通常能自动检测芯片速度,就像今天在 AliExpress 上卖不到 2 美元的那些一样。
那么回到软件,在 Windows 10 的 Ubuntu(Windows Subsystem for Linux)下,我先用这条命令安装编程环境 sudo apt-get install avrdude gcc-avr avr-libc make
用上面这条命令,程序就下载好了。
然后我把固件源码下载到一个目录里。接着,我运行了命令 make
我用 Sublime Text,编辑了 Makefile,把 “PROGRAMMER ?= usbtiny” 这一项换成 “PROGRAMMER ?= usbasp”。
就像前面解释的,因为我做的是 USBtiny,除了 USBasp 我没有别的编程器,所以我把代码换成了和我的设备兼容的那个。
然后我运行了
make flash
但是没有成功。于是我运行了 lsusb 来获取可用的 USB 设备列表。
结果我得到一条消息 "unable to initialize libusb: -99"
在 Stack Overflow 上快速搜了一下,我发现 Windows 10 的 Ubuntu 子系统还不支持 USB!哎!
注意:我还没确认过,但据说 2020 年 Windows Subsystem for Linux 已经支持 USB 了,只是我做这些练习的时候还不支持。
然后我放弃了 Windows 10 上的 Ubuntu Bash,在 VMware Player 里跑了一个 Ubuntu 副本。在 Ubuntu 里,我运行了:
sudo apt install avrdude gcc-avr avr-libc make
这一次,运行 lsusb 之后,我能看到设备已经在了。
我运行了
make
来编译固件。
然后我运行了
make flash
但又收到了错误消息。
我意识到 Brian 的 ISP 必须装上跳线才能给 ATtiny45 编程,没错,我忘了焊跳线。
于是我把我之前装的热缩管拆了。
所以我焊上了!
然后它就能用了!
接着,我运行了
make fuses
固件上传、fuses 烧好之后,我的新 ISP 还是认不出来。
所以又回到调试……
我最后把每个电阻的值都量了一遍,还把 ATtiny 换成了新的。用万用表一测,发现 R1 那个 1K 电阻坏了。我换掉它,哇!板子被检测到了!!!对了,我还决定装一个从旧线缆上剪下来的 USB 接口,洗了一下之后,就是现在这个样子。
最后的命令 make rstdisbl
成功了!现在我把跳线拿掉!
它真的能用!Linux 命令 lsusb 检测到 USBtiny 就证明了这一点,如上图所示,下面再放大看:
我不怕换平台,又决定测一下 Windows。下面这张截图是我怎么给我的 USBasp 装驱动。我用了这个很有用的软件,它让 Windows 10 上装驱动没那么痛苦。
在 Windows 上装驱动,我用这个工具 “Zadig_2.2.exe”。
下面是我最近的一张截图,证明 USBtiny 在 Windows 下能被检测到。因为这个练习是几年前做的,我没有留下 Windows 上装驱动的步骤,但我在 Linux 上展示过它能被检测到,现在在 Windows 上也一样。
装好驱动之后,我在 Windows 下试着烧录我 3D 打印机主板的固件。刚说的固件,是我几年前用开源方案做的 Printrboard 的固件。
在下面这段糟糕的视频里,你能看到它用这条命令跑起来:avrdude -c usbtiny -p at90usb1286 -U flash:w:BootloaderHID.hex:i -U lfuse:w:0xDE:m -U hfuse:w:0xdb:m -U efuse:w:0xF0:m
为了消除“做出来的 USBtiny 到底能不能烧录”的疑惑,我们来拆解一下上面的命令:
avrdude 是程序名。-c usbtiny 定义编程器的名字;“usbtiny” 就是我做出来的编程器的名字。-p at90usb1286 是要编程的目标芯片,这里是装在我 Printrboard 上的 AT90USB1286。-U flash:w:BootloaderHID.hex:i 定义了要加载的固件的名字/位置,这里是 “BootloaderHID.hex”。-U lfuse:w:0xDE:m -U hfuse:w:0xdb:m -U efuse:w:0xF0:m 是命令里烧录 fuses 的部分。上面这些都在下面这段糟糕的视频里展示 ;-)。
一切正常!