AVR ATtiny USB教程(第一部分)
序
开始想起写这个教程的过程比较复杂,开始是学习敲CW,然后是看到有人把鼠标拆了把电键连上,最后自己用Arduino Leonardo模拟鼠标实现了这个功能,不少人都说好。于是想找一个便宜的AVR的片子专门做一个小板子来实现这个功能。开始是想找通用的USB芯片来做,后来又发现了DigiSpark这个小板子。开始是以为ATtiny85这个片子像ATmega32U4一样内置有USB的功能,后来发现是有人在12MHz的主频下,用汇编语言写了一个模拟USB通讯的程序。最后找了老外写的这个教程:http://codeandlife.com/2012/01/22/avr-attiny-usb-tutorial-part-1/ 。于是基于学习想法,想把这个教程翻译一下。不废话了,开始翻译。觉得我翻译的不好,自己去看原文。
正文(第一部分)
在我发现AVR的微控制器可以作为USB设备以后,我就想用它做一个USB设备。但是不管是USBTiny项目还是更多扩展的V-USB库都缺乏一个简单入手的教程,所以我决定写一个。
第一部分覆盖制作USB供电设备的基础内容,以及为第二部分的铺垫,第二部分是一个在ATtiny2313使用V-USB库实现USB通讯的简单例子。后续部分的发布,取决于我的时间和兴趣。(译者,原文如此,原文是老外的Blog,看来老外写Blog和我一个调调,我这篇翻译计划全部翻译完,但是还得取决于我的时间和兴趣,哈哈)
我们马上开始,下面是一些第一分部会用到的东西:
- USB线和插针
- 小号面包板和一些跳线。
- LED和330欧姆的电阻
- 低压差3.3v稳压器,例如LD1086V33或者LE33CZ
电缆
首先我们要找到一根USB线,剪开,保留连接电脑一端的部分。然后将四根线焊好插针,以便我们连接面包板使用。USB包含四根新,你需要按照下表的顺序焊接。(注:不是所有的线都按照这个颜色来做,所以你需要使用万用表来确认!)
针 | 颜色 | 功能 |
1 | 红 | VCC(+5V) |
2 | 白 | D- |
3 | 绿 | D+ |
4 | 黑 | GND |
下图就是我的成果。剥线的时候要小心,不要破坏四根线的外皮,焊接的时候也不要互相接触。如果断路的话,将会烧掉你的USB hub或者电脑的USB芯片。(译者注:译者强烈不直接把你做的USB线直接插电脑,因为断路或者其他电流过大的情况下,都可能损坏你的电脑USB部分的电路,如果你电脑的USB部分电路异常,可能导致电脑各种诡异问题,比如我的W520就因为USB部分损坏以后,导致系统速度变得极慢…….译者强烈建议使用USB Hub隔离,因为USB Hub价格便宜还方便更换。)
如果你想了解更多关于USB接头和USB电气规格的内容,我推荐你阅读Beyond Logic写的“USB in a NutShell”和“USB 2.0 specification”。目前我们只需要理解USB总线可以提供5V电压和小电流。(译者注:老外成文的时候在2012年,那时候最新的USB规格还是2.0,目前连接过去应该是USB 3.1的规格,总之这个链接会链接到最新的规格文件上,所以以后可能还会变化到更高的版本。电脑和USB Hub每个接口最大提供500ma的电流,一般情况下能带动一块移动硬盘,给手机充电也比较慢,电流过大,可能导致电脑的USB芯片或者USB Hub损坏。)
简单面包板测试
现在我们来测试一下我们的焊接工作是否成功。我建议你在第一次连接你的线缆到USB Hub或者电脑的时候,使用万用表来测量一下VCC(红)和GND(黑)之间的电压是不是5伏。我自己测量的是5.18伏。(译者注:一般在未接通的时候,电压都会稍高,以保证500ma工作的时候,电压能维持在5伏。目前市面的一些2A的USB充电器测量得到的电压会更高。)接下来把插针查到面包板上,并使用跳线连接面包板上的VCC和GND轨,然后连接串联电阻的LED,看看LED是否能点亮。
恭喜!如果你只是要从USB取电的话,你现在只要保证持续电流不太大,你就可以构建任何5V的电路。如果你的LED还没有亮,那么检查一下线的颜色是否错了,有没有焊接错误,或者LED的引脚反了。
准备USB通信-获取3.3v
USB的供电是5V的,但是数据线是3.3V的。一些计算机可以忍受5V的逻辑电压,但不是所有的都可以。按照书本来玩的话,我们有三个选项:
- 将USB的供电电压限制到3.3V
- 用3.3V来给外部电路供电
- 使用电阻、二极管、齐纳二极管等将5V的逻辑电压转换到3.3V
我们这里将选择第一个选项。第二项你可以选择使用你熟悉的方法,例如9V电池和降压器,手机充电器并调整电压,或者3节5号电池加上1到2个保护二极管来降压。第三个选项,你可以通过搜索“齐纳二极管 USB”(译者:搜索英文资料的话使用“zener diode usb”)(更新:你也可以看本教程的第六部分,将会包含相关内容。)。v-USB的wiki有一个很好的硬件概览:http://vusb.wikidot.com/hardware
- 在这个教程里,我使用LD1086V33。从数据手册,我们可以得知管脚1是接地的,管脚2是输出,管脚3输入。另外,10uF的电容需要加在输入管脚和接地之间,输出和接地之间也需要这样做。
现在我已经连接好接地端和输入端到5V电源轨,然后把输出端接好了LED和电阻。
这个电路现在看起来开始工作了,但是供电似乎有些小问题:因为稳压器内部的反馈机制,导致输出电压会有连续的波动。所以我们将在5V输入端和接地端加上10uF的电容(如下图),在3.3V输出端和接地端也要加上。确定电解电容的链接方式正确(电解电容上减号已经被标注了)。好运!(译者:接反了就会……噗~~~)
现在我们已经准备好为我们的AVR电路供电,或者其他使用3.3V的项目。接下来,我们需要使用万用表来检查降压器的接地端与输入端的电压确实为5V,接地端和输出端确实为3.3V。
近期评论