ATtiny45直接USB 2.0连接的固件和电路


9

我想使用ATtiny45制作自己的模块化USB设备,该设备只需通过USB将数据发送到PC。我没有读取数据,因此单向连接(ATtiny-> PC)完全可以。

我正在使用Arduino Uno作为ISP,并从Arduino软件中加载了标准ArduinoISP草图。我正在考虑使用AVRDUDE与Arduino作为ISP一起对ATtiny45进行编程,因为我希望能够使用编译为HEX的C代码,因为它比Arduino编程语言更高级。

我对电路的基本想法是: 在此处输入图片说明

如您所见,我想要一个“直接” USB连接。到目前为止,我知道我必须为此使用基于软件的解决方案。

  1. 我已经管理SoftwareSerial与我的ATtiny45一起使用。为此,我使用了Arduino软件通过以下代码对ATtiny45进行编程:

    #include <SoftwareSerial.h>
    #define rxPin 3
    #define txPin 4
    SoftwareSerial serial(rxPin, txPin);
    
    void setup() {
        pinMode(rxPin, INPUT);
        pinMode(txPin, OUTPUT);
        pinMode(led, OUTPUT);     
        serial.begin(4800);
    }
    
    void loop() {
        serial.println("1");
        delay(1000);
    }

    请注意,我还没有使用Pin 3(但),但需要为SoftwareSerial定义它。

    这样,通过使用SoftwareSerial,我能够将数据从ATtiny直接发送到我的Arduino UNO的TX引脚上,该引脚上已加载了此测试的空白草图。我使用Arduino软件的串行监视器读取COM4上的数据(在我的情况下),因为我试图将编程的ATtiny直接连接到USB电缆时,我的PC无法识别任何设备(COM端口)。

    不幸的是,我在串行监视器中只有奇怪的unicode字符。我认为是因为数据采用十六进制格式左右。因此,我注意到我需要在USB和ATtiny45之间连接一个USB /串行转换器 ...我已经搜索了此类转换器,但是我不想使用任何预制板,因为我想要所有我的组件放在一块板上。我认为FTDI芯片对我的项目来说太“太多了”,不是吗?(它的引脚太细小,无法焊接...)

  2. V-USB是我的第二种方法,因为它不需要USB /串行转换器(据我所知)。因此,要使用V-USB,我需要使用前面提到的AVRDUDE。

    我找到了一个很好的示例V-USB EasyLogger。它包含电路设计和示例固件。(C / C ++ /十六进制)

    我唯一想知道的是:我真的需要使电路看起来像示例中所示吗?-> 在此处输入图片说明

关于这种USB连接,我还需要了解什么?(为什么我需要USB /串行转换器?我可以只接+5和VCC吗?我绝对需要哪些组件?我需要通过TX发送什么样的信号?位?十六进制?需要什么电压?成为 ? )

感谢您的所有回答。


更新

以下是一些确实对我有帮助的附加链接。但是我还是不完全了解...

第一个-> http://www.ernstc.dk/arduino/tinycom.html

第二个-> http://www.re-innovation.co.uk/web12/index.php/zh-CN/blog-75/227-attiny-arduino(向下滚动到“串行输出”部分)


2
是的,您可以这样做,至少在不想太严重违反电气极限规格的情况下。请注意,上图中的“ USB”连接器贴有严重标签错误。D + / D-不是不同的发送和接收线,而是双向差分对
克里斯·斯特拉顿

我为我的草图不好而感到抱歉。我真的不是电子人,而是程序员。“绘图”只是我在计划该项目时所想到的想法的可视化。
2013年

Answers:


5

您可以直接将ATtiny45与USB通信,而无需FTDI转换器。

为了使一切正常,您将需要V-USB库。

这里所有工作都很好的例子,它使用EasyLogger的例子。

相同的作者还提供了其他一些关于USB和uC的技巧和项目

ATtiny的示例电路:

原理图

模拟此电路 –使用CircuitLab创建的原理图


询问者已经在研究V-USB。
伊格纳西奥·巴斯克斯

非常感谢。我将尽快尝试。但是首先,我想问问您使用V-USB库对ATtiny45进行编程的正确方法。我不确定该如何做。到目前为止,我知道我必须加载引导加载程序???以及固件(十六进制文件??)。而且我认为在为我的应用程序更改代码后,我需要编译C代码(例如easylogger示例)。对 ?
2013年

您还可以将电路“简化”到最低限度吗?我因为例如LED而感到困惑……我现在真的不需要任何辅助组件,例如LED或传感器。
2013年

D2和D3是哪种二极管?肖特基二极管?
2013年

还有,保险丝位呢?在您链接的帖子的最后,他们说了一些关于保险丝的事情??我听说如果我用保险丝弄错了,我会毁了这个微小的?
2013年

5

基本上,USB是一种高级通信协议,对信号线级别的驱动,时序和终止有特定的要求。它不像串行那么简单,它具有差分数据线和NRZI编码,需要轮询,握手等。这就是为什么您需要USB /串行适配器,或者为什么需要USB硬件或软件实现的原因。

USB使用5V电源时,信号线实际上为3.3V至3.6V。这就是为什么您显示的VUSB电路在这两条线上使用齐纳二极管。Tiny不能简单地以3.3V电压运行,因为它无法以3.3V的频率以所需的16MHz时钟运行。

其余零件R1-R3,D1,D2和C1,C2只是最低限度的必需零件。并不是真正要求您获得很多功能。有关使用vusb的所有项目的列表,请参见此页面。

开关,R4和LED1都是特定数据记录固件示例的一部分,如果您不需要它/更改固件,可以避免使用。


谢谢您的回答。我知道USB的数据线使用〜3.3V。但是我不明白的是,USB信号的定义如何?那不是一行吗?我难道不能在一个正确的时序中“模拟”这些位(对信号进行开和关调整)?我已经很少使用内部osc以8MHz运行,串行波特率为4800,所以根据我发现的一些博客文章,时机应该不是问题……
2013年

1
@Ace 4800 bps为4.8 khz。USB低速为1.5 MHZ,其中包含编码,奇偶校验,usb描述符等。VUSB确实“模拟”了USB数据,但是它非常非常复杂。
2013年

1
@Ace基本上,您试图通过点击监视器来做等同于试图在计算机上使用摩尔斯电码的人。
2013年

HAHA XD我使用4800波特率的原因在更新的第二个链接中得到了解释。
2013年

1

在一篇文章中,有太多问题无法回答,但是这里有几点要点:

某些微控制器包含USB“端点”和相关的硬件,但Atmel站点显示ATTiny45没有。

因此,您不能简单地将微控制器端口连接到USB连接器,因为USB在电子和协议级别都是复杂的总线。

但是,正如下面的注释中所指出的那样,您正在使用V-USB在正确的位置进行搜索,我没有使用过它,因此将使其他人留下评论。

FTDI芯片焊接起来不太困难,但是适当的带有阻焊剂的PCB将使其更容易焊接。

以前我使用过类似FT232电缆的东西:

FT232 USB电缆
(来源:ftdichip.com

它在USB连接器中嵌入了FTDI芯片,可以处理所有电平转换,同时还可以供电。末端是一个简单的0.1英寸间距连接器,您可以将其连接到排针。

它们可以在eBay上以合理的价格购买。



那很有趣。我将相应地编辑我的文章,也许其他人可以帮助解决V-USB的细节。
大卫,

@David-是的,VUSB基本模拟USB。您的帖子总体上是正确的,但是具体来说,ATTiny系列可以通过这种方法连接到USB。
古斯塔沃·利托夫斯基2013年

感谢您的回答。我应该已经提到过,我打算在具有USB A头的单板上构建该项目(例如,这台 计算机kabelversand.de/pictures/picturesbig/…)。所以基本上看起来像是普通的USB记忆棒 没有电缆,另一端只有3针插孔。这就是为什么我称其为“模块化”。这样,我就可以分别对ATtiny进行编程(它是可移动的),并将不同的传感器/设备连接到3或4(我还没有使用的RX)左引脚。
2013年

1
今天看到了这可能对您有用的
David
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.