Firmware & Schaltung des ATtiny45 Direct USB 2.0 Anschlusses


9

Ich möchte mein eigenes modulares USB-Gerät mit einem ATtiny45 herstellen , der einfach Daten über USB an den PC sendet. Ich lese keine Daten, daher wäre eine Einwegverbindung (ATtiny -> PC) völlig in Ordnung.

Ich verwende ein Arduino Uno als ISP mit der Standard-ArduinoISP-Skizze, die aus der Arduino-Software geladen wird. Ich denke darüber nach, AVRDUDE zu verwenden, um den ATtiny45 mit dem Arduino als ISP zu programmieren, weil ich in HEX kompilierten C-Code verwenden möchte, da dieser weiter fortgeschritten ist als die Arduino-Programmiersprache.

Meine Grundgedanken der Rennstrecke: Geben Sie hier die Bildbeschreibung ein

Wie Sie sehen können, möchte ich eine "direkte" USB-Verbindung. Bisher weiß ich, dass ich dafür eine softwarebasierte Lösung verwenden muss.

  1. Ich habe SoftwareSerial für die Arbeit mit meinem ATtiny45 verwaltet. Dafür habe ich die Arduino-Software verwendet, um den ATtiny45 mit folgendem Code zu programmieren:

    #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);
    }

    Bitte beachten Sie, dass ich Pin 3 (noch) nicht verwende, ihn aber für SoftwareSerial definieren muss.

    Auf diese Weise konnte ich mit SoftwareSerial Daten vom ATtiny direkt an den TX-Pin meines Arduino UNO senden, auf den eine leere Skizze für diesen Test geladen war. Ich habe den seriellen Monitor der Arduino-Software verwendet, um die Daten auf COM4 zu lesen (in meinem Fall), da mein PC kein Gerät (COM-Anschluss) erkannt hat, da ich versucht habe, das programmierte ATtiny direkt an ein USB-Kabel anzuschließen.

    Leider habe ich im Serial Monitor nur seltsame Unicode-Zeichen. Ich denke, das liegt daran, dass die Daten im Hex-Format oder so sind. Ich habe also festgestellt, dass ich einen USB / Serial Converter zwischen USB und ATtiny45 anschließen muss ... Ich habe nach solchen Konvertern gesucht, möchte aber keine vorgefertigten Karten verwenden, da ich alle möchte meine Komponenten auf einer einzigen Platine. Ich denke, ein FTDI-Chip wäre viel zu "viel" für mein Projekt, nicht wahr? (Es hat zu kleine Stifte zum Löten ...)

  2. V-USB war dann mein zweiter Ansatz, da es keinen USB / Seriell-Konverter benötigt (wie ich weiß). Um V-USB zu verwenden, müsste ich AVRDUDE verwenden, wie ich bereits erwähnt habe.

    Ich habe dieses schöne Beispiel V-USB EasyLogger gefunden . Es enthält ein Schaltungsdesign und eine Beispielfirmware. (C / C ++ / HEX)

    Das einzige, was ich wissen möchte, ist: Muss ich meine Schaltung wirklich so aussehen lassen, wie im Beispiel gezeigt? -> Geben Sie hier die Bildbeschreibung ein

Was muss ich noch über diese Art von USB-Verbindung wissen? (Warum brauche ich einen USB / Seriell-Wandler? Kann ich einfach +5 & VCC anschließen? Welche Komponenten brauche ich unbedingt? Welche Art von Signal muss ich über TX-Bits senden? Hex? Welche Spannung benötigt es? sein ? )

Vielen Dank für all Ihre Antworten.


AKTUALISIEREN

Hier sind einige zusätzliche Links, die mir in einigen Punkten wirklich geholfen haben. Aber ich habe es immer noch nicht ganz verstanden ...

der erste -> http://www.ernstc.dk/arduino/tinycom.html

und das zweite -> http://www.re-innovation.co.uk/web12/index.php/en/blog-75/227-attiny-arduino (scrollen Sie nach unten zum Abschnitt "Serielle Ausgabe")


2
Ja, zumindest, wenn Sie die elektrischen Grenzwertspezifikationen nicht zu stark verletzen möchten . Bitte beachten Sie, dass Ihr "USB" -Anschluss in Ihrem oberen Diagramm stark falsch beschriftet ist. D + / D- sind keine unterschiedlichen Sende- und Empfangsleitungen, sondern ein bidirektionales Differentialpaar .
Chris Stratton

Es tut mir leid für meine schlechte Skizze. Ich bin wirklich nicht der Elektriker, sondern ein Programmierer. Die "Zeichnung" war nur eine Visualisierung meiner Gedanken, die ich bei der Planung dieses Projekts im Sinn hatte.
Ass

Antworten:


5

Sie können den ATtiny45 ohne FTDI-Konverter direkt mit USB kommunizieren.

Damit alles funktioniert, benötigen Sie die V-USB- Bibliothek.

Ein sehr gutes Beispiel für alles, was funktioniert, ist hier , dass es das gleiche Beispiel von EasyLogger verwendet.

Der gleiche Autor hat einige andere nette Tipps und Projekte mit USB und uC.

Eine Beispielschaltung mit dem ATtiny:

schematisch

simulieren Sie diese Schaltung - Schema erstellt mit CircuitLab


Der Fragesteller hat sich bereits V-USB angesehen.
Ignacio Vazquez-Abrams

Ich danke dir sehr. Ich werde es versuchen, sobald ich kann. Aber zuerst möchte ich Sie nach der richtigen Möglichkeit fragen, den ATtiny45 mit der V-USB-Bibliothek zu programmieren. Ich bin mir nicht sicher, was und wie ich tun soll. Ich habe mir AVRDUDE angesehen. Bisher weiß ich, dass ich einen Bootloader laden muss ??? auf die winzige sowie die Firmware (Hex-Datei ??). Und ich denke, ich muss den C-Code kompilieren (z. B. das Easylogger-Beispiel), nachdem ich den Code für meine Anwendung geändert habe. richtig ?
Ass

und könnten Sie bitte auch die Schaltung auf das Nötigste "vereinfachen"? Ich bin verwirrt, zB wegen der LED ... ich brauche zu diesem Zeitpunkt wirklich keine zusätzlichen Komponenten wie LEDs oder Sensoren.
Ass

und welche Art von Dioden sind D2 & D3? Schottky-Dioden?
Ass

und was ist mit den Sicherungsbits? und ganz am Ende des Beitrags, den Sie verlinkt haben, sagen sie etwas über Sicherungen? Ich habe gehört, wenn ich etwas mit den Sicherungen falsch mache, kann ich die winzigen ruinieren?
Ass

5

Grundsätzlich ist USB ein Kommunikationsprotokoll auf hoher Ebene mit spezifischen Anforderungen für das Ansteuern, Timing und Beenden auf Signalleitungsebene. Es ist nicht so einfach wie seriell, es verfügt über differenzielle Datenleitungen und NRZI-Codierung, erforderliche Abfrage, Handshake usw. Aus diesem Grund benötigen Sie einen USB / Serial-Adapter oder eine USB-Hardware- oder Software-Implementierung.

Während USB 5 V Strom verbraucht, sind die Signalleitungen tatsächlich 3,3 V bis 3,6 V. Aus diesem Grund verwendet die von Ihnen gezeigte VUSB-Schaltung Zenerdioden auf diesen beiden Leitungen. Der Tiny kann nicht einfach mit 3,3 V betrieben werden, da er nicht mit den erforderlichen 16 MHz bei 3,3 V getaktet werden kann.

Die übrigen Teile R1-R3, D1, D2 und C1, C2 sind nur minimal erforderliche Teile. Das verlangt nicht wirklich viel nach den Funktionen, die Sie erhalten. Auf dieser Seite finden Sie eine Liste aller Projekte, die vusb verwenden.

Der Schalter, R4 und LED1 sind alle Teil des spezifischen Beispiels für die Datenprotokollierungs-Firmware und können vermieden werden, wenn Sie sie nicht benötigen / die Firmware ändern.


Vielen Dank für diese Antwort. Ich wusste, dass die Datenleitungen von USB ~ 3,3 V verwenden. Aber was ich nicht verstehe ist, wie genau das USB-Signal definiert ist? Sind das nicht eine Reihe von Bits? Kann ich diese Bits nicht einfach mit dem richtigen Timing in einer Schleife "emulieren" (Tuning-Signal ein und aus)? Ich habe bereits die winzige Verwendung des internen Osc, um mit 8 MHz und einer seriellen Boudrate von 4800 zu laufen, so dass das Timing laut einigen Blogposts, die ich gefunden habe, nicht das Problem sein sollte ...
Ace

1
@Ace 4800 bps ist 4,8 kHz. USB niedrige Geschwindigkeit ist 1,5 MHz Und es gibt Codierung, Parität, USB-Deskriptoren und alles. VUSB "emuliert" USB-Daten, ist aber sehr, sehr komplex.
Passant

1
@Ace Im Grunde versuchen Sie, das Äquivalent zu jemandem zu tun, der versucht, Morsecode auf einem Computer zu verwenden, indem Sie auf den Monitor tippen.
Passant

HAHA XD Der Grund, warum ich ein Boudrate von 4800 verwende, wird im zweiten Link in meinem Update erläutert.
Ass

1

Viel zu viele Fragen, um sie in einem Beitrag zu beantworten, aber hier ein paar kurze Punkte:

Einige Mikrocontroller enthalten einen USB- "Endpunkt" und die entsprechende Hardware, aber die Atmel-Site zeigt, dass der ATTiny45 dies nicht tut.

Daher können Sie die Mikrocontroller-Ports nicht einfach an einen solchen USB-Anschluss anschließen, da USB sowohl auf elektronischer als auch auf Protokollebene ein komplizierter Bus ist.

Wie in den Kommentaren unten erwähnt, suchen Sie mit V-USB in der richtigen Richtung. Ich habe dies jedoch nicht verwendet, sodass andere Kommentare abgeben können.

Die FTDI-Chips sind nicht zu schwer zu löten, aber eine geeignete Leiterplatte mit Lötresist erleichtert dies.

Bisher habe ich so etwas wie dieses FT232-Kabel verwendet :

FT232 USB-Kabel
(Quelle: ftdichip.com )

Der FTDI-Chip ist in den USB-Anschluss eingebettet und übernimmt die Übersetzung aller Ebenen bei gleichzeitiger Stromversorgung. Das Ende ist ein einfacher 0,1 "Pitch-Anschluss, den Sie an einen Pin-Header anschließen können.

Sie sind bei eBay zu angemessenen Preisen erhältlich.



Das ist ziemlich interessant. Ich werde meinen Beitrag entsprechend bearbeiten, vielleicht kann jemand anderes bei den V-USB-Besonderheiten helfen.
David

@ David - Ja, VUSB emuliert grundsätzlich USB. Ihr Beitrag ist im Allgemeinen korrekt, aber speziell die ATTiny-Familie kann über diese Methode mit USB verbunden werden.
Gustavo Litovsky

Danke für deine Antwort. Ich hätte sagen sollen, dass ich vorhabe, das Projekt auf einer einzelnen Platine mit einem USB-A-Kopf (wie diesem Computerkabelversand.de/pictures/picturesbig/… ) zu erstellen . Im Grunde sieht es also aus wie ein gewöhnlicher USB-Stick. Keine Kabel, nur eine 3-polige Buchse am anderen Ende. Deshalb habe ich es "modular" genannt. Auf diese Weise kann ich den ATtiny einzeln programmieren (er ist abnehmbar) und meine verschiedenen Sensoren / Geräte an die linken Pins 3 oder 4 (den RX, den ich noch nicht benutze) anschließen.
Ass

1
Habe das heute gesehen, was für dich von Nutzen sein könnte: rayshobby.net/?p=7363
David
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.