Firmware & Schaltung von ATtiny45 direkter USB 2.0-Verbindung

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

Ich verwende einen 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 der Lage sein möchte, zu HEX kompilierten C-Code zu verwenden, da er weiter fortgeschritten ist als die Arduino-Programmiersprache.

Meine Grundgedanken zur Schaltung: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 so verwaltet, dass es mit meinem ATtiny45 funktioniert. Dazu 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, aber ich muss es für SoftwareSerial definieren.

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

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

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

    Ich habe dieses nette Beispiel V-USB EasyLogger gefunden . Es enthält ein Schaltungsdesign und Beispiel-Firmware. ( C / C ++ / HEX )

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

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

Danke für all eure 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...

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

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

Ja, zumindest wenn man die elektrischen Grenzwertvorgaben nicht zu sehr verletzen will . Bitte beachten Sie, dass Ihr "USB"-Anschluss in Ihrem oberen Diagramm grob falsch beschriftet ist. D+/D- sind keine getrennten Sende- und Empfangsleitungen, sondern ein bidirektionales Differenzpaar .
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 im Sinn hatte, als ich dieses Projekt plante.

Antworten (3)

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 dafür, dass alles funktioniert, ist hier , dass dasselbe Beispiel von EasyLogger verwendet wird.

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

Eine Beispielschaltung mit dem ATtiny:

schematisch

Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan

Der Fragesteller hat sich bereits V-USB angeschaut.
Ich danke dir sehr. Ich werde das versuchen, sobald ich kann. Aber zuerst möchte ich Sie fragen, wie Sie den ATtiny45 mit der V-USB-Bibliothek richtig programmieren. Ich bin mir nicht sicher, was und wie ich vorgehen soll. Ich habe in AVRDUDE nachgesehen. Soweit ich weiß, muss ich einen Bootloader laden??? an den tiny sowie an die firmware ( hex file ?? ). Und ich denke, ich muss den C-Code (zB das Easylogger-Beispiel) kompilieren, nachdem ich den Code für meine Anwendung geändert habe. rechts ?
und könnten Sie bitte auch die Schaltung auf das Nötigste "vereinfachen"? Ich bin verwirrt wegen zB der LED ... ich brauche derzeit wirklich keine zusätzlichen Komponenten wie LEDs oder Sensoren.
und welche Art von Dioden sind D2 & D3? Schottky-Dioden?
und auch, was ist mit den Fuse-Bits? und ganz am Ende des von Ihnen verlinkten Beitrags steht etwas über Sicherungen? Ich habe gehört, wenn ich etwas mit den Sicherungen falsch mache, kann ich den Winzling ruinieren?
@Ace - Die Led D1 und R4 können Sie entfernen, kein Problem. Die Dioden D2 und D3 sind 3V6-Zener-Dioden
@Ace - Sie können Ihr uC nicht mit den Sicherungen ruinieren, es sind nur Softwaresicherungen, das einzige, was passieren könnte, ist, dass Ihr Programm nicht ausgeführt wird.
OK danke. Das Diodensymbol hat mich verwirrt.
@Ace - Um das ATtiny zu programmieren, können Sie mit einem Arduino wie diesem instructables.com/id/How-to-program-attiny-using-arduino-uno . Wenn Sie über etwas reden müssen, können wir uns im Chat unterhalten.
gut. das einzige was ich an dieser stelle jetzt wirklich brauche ist ( im besten fall ) ein step by step "tutorial" für die programmierung. (einschließlich des Codes / der Firmware und der Verwendung von avrdude)
Macht es einen Unterschied, welche Kondensatoren/Dioden/Widerstände ich wähle?
@Ace Ja, das macht es!
okay ... also sind die D's Zenerdioden. die R's sind Standardwiderstände? und die C's sind was für Kondensatoren?
@Ace - Bitte chatten

Grundsätzlich ist USB ein High-Level-Kommunikationsprotokoll mit spezifischen Anforderungen für Signalleitungs-Pegelsteuerung, Timing und Terminierung. Es ist nicht so einfach wie seriell, es hat differenzielle Datenleitungen und NRZI-Codierung, erforderliche Abfragen, Handshaking usw. Aus diesem Grund benötigen Sie einen USB/Seriell-Adapter oder eine USB-Hardware- oder Softwareimplementierung.

Während USB 5 V Strom verbraucht, haben 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 bei 3,3 V nicht mit den benötigten 16 MHz getaktet werden kann.

Die restlichen Teile, R1-R3, D1, D2 und C1, C2, sind die absolut erforderlichen Teile. Das ist nicht wirklich viel für die 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 Datenaufzeichnungs-Firmware-Beispiels und können vermieden werden, wenn Sie ihn nicht benötigen/die Firmware ändern.

Vielen Dank für diese Antwort. Ich wusste, dass die Datenleitungen von USB ~ 3,3 V verbrauchen. 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" (Turing-Signal ein und aus)? Ich habe bereits den Tiny, der den internen Osc verwendet, um mit 8 MHz und einer seriellen Boudrate von 4800 zu laufen, also sollte das Timing laut einigen Blogposts, die ich gefunden habe, nicht das Problem sein ...
@Ace 4800 bps sind 4,8 kHz. USB Low Speed ​​ist 1,5 MHZ Und es gibt Kodierung, Parität, USB-Deskriptoren und alles. VUSB "emuliert" USB-Daten, aber es ist sehr, sehr komplex.
@Ace Im Grunde versuchen Sie, das Äquivalent von jemandem zu tun, der versucht, Morsecode auf einem Computer zu verwenden, indem Sie auf den Monitor tippen.
HAHA XD Der Grund, warum ich eine Boudrate von 4800 verwende, wird im zweiten Link in meinem Update erklärt.

Viel zu viele Fragen, um sie in einem Beitrag zu beantworten, aber hier sind 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 mit einem solchen USB-Anschluss verbinden, da USB sowohl auf elektronischer als auch auf Protokollebene ein komplizierter Bus ist.

Wie jedoch in den Kommentaren unten angemerkt, suchen Sie mit V-USB in der richtigen Richtung. Ich habe dies nicht verwendet und überlasse es anderen, Kommentare abzugeben.

Die FTDI-Chips sind nicht allzu schwer zu löten, aber eine richtige Platine mit Lötstopplack macht es einfacher.

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

USB-Kabel FT232
(Quelle: ftdichip.com )

Der FTDI-Chip ist in den USB-Anschluss eingebettet und übernimmt die gesamte Pegelumsetzung, während er auch Strom liefert. Das Ende ist ein einfacher 0,1-Zoll-Anschluss, den Sie an eine Stiftleiste anschließen können.

Sie sind bei eBay zu günstigen Preisen erhältlich.

Das ist ziemlich interessant. Ich werde meinen Beitrag entsprechend bearbeiten, vielleicht kann jemand anderes bei den V-USB-Besonderheiten helfen.
@David - Ja, VUSB emuliert im Grunde USB. Ihr Beitrag ist im Allgemeinen richtig, aber speziell die ATTiny-Familie kann über diese Methode an USB angeschlossen werden.
Danke für deine Antwort. Ich hätte erwähnen sollen, dass ich vorhabe, das Projekt auf einer einzelnen Platine aufzubauen, die einen USB-A-Kopf (wie hier computerkabelversand.de/pictures/picturesbig/… ) darauf hat. Im Grunde sieht es also aus wie ein gewöhnlicher USB-Stick. keine Kabel, nur eine 3-Pin-Buchse am anderen Ende. Deshalb habe ich es "modular" genannt. Auf diese Weise kann ich den ATtiny individuell programmieren (er ist abnehmbar) und meine verschiedenen Sensoren / Geräte an die linken Pins 3 oder 4 (den RX, den ich noch nicht verwende) anschließen.
Heute gesehen, was für Sie nützlich sein könnte: Rayshobby.net/?p=7363