Wie verbinde ich ATTiny13 mit USB?

Dies ist möglicherweise die Grenze der ATTiny13-Möglichkeiten, aber dennoch: Ist es möglich, ATTiny13 an USB anzuschließen, um ADC-Messwerte zu erhalten (in eine Richtung)?

Laut diesem Artikel http://www.vk2zay.net/article/211 (und meinem Verständnis davon) scheint es machbar zu sein, obwohl die Größe des seriellen Kommunikationsprogramms viel Speicher benötigt.

Anstelle von max232 habe ich jedoch einen Micro-USB-zu-Seriell-Adapter von Microbot ( http://www.microbot.it/products/mr002-002-1.php ). (Nun, ich habe auch einen max3323-Chip, aber ich würde ihn gerne für etwas anderes ersparen).

Ich bin mir dieser Frage bewusst: Wie kann ich ohne die Verwendung eines RS232 / USB-Adapters zwischen Mikrocontroller und PC kommunizieren?

kann aber nicht ganz verstehen, warum max232 dazwischen benötigt wird?

UPDATE : Ich kann kein besseres Datenblatt zum Adapter finden, aber er verwendet den MCP2200-Chip.

UPDATE 2 : Wie Passerby unten antwortete, kann man Attiny direkt mit dem Adapter des Mikrobots verbinden. Fürs Protokoll, dies sind Änderungen, die ich am oben genannten Projekt vorgenommen habe, damit es funktioniert:

  1. Zeile 52 des benötigten Codes "const": const unsigned long mags[10] PROGMEM = {... to make avr-gcc happy.

  2. Pin 6 des Attiny muss mit RX des Adapters verbunden werden (Attiny kann Vdd und Gnd für 5 V Strom verwenden)

  3. Ich habe mit avrdude keine Fuses gesetzt (in Makefile entfernt)

  4. Die Baudrate war in meinem Fall 1200, und alles, was nötig war, um die Ausgabe von attiny zu sehen, war cu -l /dev/ttyACM3 -s 1200 (ich denke, cu macht am Anfang etwas Magie mit dem Adapter, um die Baudrate einzustellen). Die Baudrate wurde berechnet, indem der Ausgang von Pin 6 mit einem Oszilloskop betrachtet wurde, das eine minimale Impulsbreite von etwa 0,8 ms ergab. (cu ist ein serielles Linux/Unix-Dienstprogramm, ein anderes ausprobiertes ist minicom)

  5. Das Datenblatt des Adapters reicht nicht aus. Ich musste die Spezifikationen des MCP2200-Chips nachschlagen, um bessere Vermutungen anstellen zu können

MAX232 ist nur ein Spannungspegel und eine Treiberschaltung, um die physische uC-Schnittstelle in die RS-232-Schnittstelle zu übersetzen. Sie möchten nicht, dass Ihr uC diese Signale direkt ansteuert, insbesondere nicht über möglicherweise lange Kabel. Außerdem ermöglicht die RS-232-Spezifikation unterschiedliche Pegel des Spannungssignals bis zu +/- 15 V oder +/- 25 V für spezielle Apps, und diese sind nicht mit Ihrem 5-V- oder 3,3-V-uC kompatibel.
Die Idee ist, RS232 bis zum USB-zu-Seriell-Adapter zu verwenden, und ich glaube, es funktioniert mit 5 V (normale USB-Spannung), sodass kein Pegelumsetzer benötigt wird. Die Frage ist wirklich, ob es dem seriellen USB-Adapter möglich ist, alles zu lesen, was attiny13 geben kann. Eigentlich möchte ich Strom über dieselbe USB-Verbindung beziehen.

Antworten (3)

Der Microbot-Adapter ist ein TTL-basierter USB-zu-Seriell-Adapter (normalerweise 5 V). Ich kann nicht sagen, welchen IC sie verwenden, aber sie verhalten sich alle gleich. Verbinden Sie einfach die TX-, RX- und GND-Pins mit Ihrem ATTiny13 und starten Sie eine reguläre serielle Kommunikation. Oder in diesem Fall nur ATTinys TX an den RX-Pin und die Masse-Pins des Adapters zusammen, da das Projekt, mit dem Sie verknüpfen, nur übertragen wird. Sie würden einfach den max232 in der Schaltung durch den USB-Adapter ersetzen. Alles andere bleibt gleich.

Der max232 wird verwendet, wenn von TTL seriell (0 V Low, +5 V High) zu tatsächlichem RS232 konvertiert wird, wie es ein serieller Computeranschluss verwenden würde (+3 ~ 25 V Low, -3 ~ 25 V High). Da Sie einen USB-zu-Seriell-Adapter mit TTL-Pegeln verwenden, den gleichen wie der ATTiny13, wird der max232 nicht benötigt. Es gibt einige USB-zu-seriell-Adapter, die für die Verwendung mit tatsächlichem RS232-Level-Zeug gedacht sind, daher wäre der max232 oder ein ähnlicher Chip dann nützlich, aber nicht in Ihrem Fall.

Die 5 V vom Microbot-Adapter sind direkt mit dem USB-5-V-Pin verbunden. Dadurch können Sie bis zu 500 mA verwenden.

Ich habe es versucht (Vdd, Gnd, Tx. Letzteres mit an Pin 6 (PB1) verbunden, und dann mit minicom auf /dev/ttyACM3 gelauscht, aber da kam nichts, außer einigen Zeichen, wenn ich RTS anschließe Vdd. Muss ich CTS/RTS High/Low anschließen, um die Kommunikation zu ermöglichen?Ich kann ein digitales Signal auf PIN 6 sehen, also vermute ich, dass Attiny ständig versucht, etwas zu senden.Der kürzeste Impuls beträgt etwa 0,8 ms.
Gleiche Geschichte mit 'cu -l /dev/ttyACM3 -s 115200' (versuchte auch 9600 8N1).
Mir ist gerade eingefallen, es ist 1200 Baudrate: 1/ 0,0008 ≅ 1200. Vielleicht muss ich den Adapter irgendwie konfigurieren.
Die Geschwindigkeit von @RomanSusi hängt davon ab, wofür Ihr Attiny-Code eingestellt ist. Dieses Projekt setzt es auf baud_rate = 9600, aber wirklich als "F_CPU/256/BAUD_RATE;" Wenn Sie also die erwartete CPU-Geschwindigkeit ändern, die der Code erwartet, ändert sich die Baud-Geschwindigkeit
Bingo! Damit hat es geklappt: cu -l /dev/ttyACM3 -s 1200 Vielen Dank!
Außerdem geht PIN 6 an den RX-Pin des Adapters, nicht an TX wie in der Antwort, aber ich denke, es ist ein Tippfehler.
@RomanSusi ist es und es ist kein Tippfehler. Seriell/RS232 hat eine seltsame Benennung, die davon abhängt, aus welchem ​​Blickwinkel Sie das Gerät anschließen. TX und RX sind subjektive Namen. Der RX des Microbot-Adapters ist der RX des ATTiny und umgekehrt. Es ist eine Quelle ständiger Verwirrung für Anfänger. Ich werde die Antwort aber klären.
@RomanSusi auch, 1200 ist "9600 / 8". Läuft du auf 8 MHz Takt oder 1 MHz? Ich vermute, Ihre Attiny ist auf 1 MHz eingestellt, wenn Sie genau denselben Code verwenden. Die Standardtaktrate sollte jedoch 8 MHz betragen.
Das Datenblatt gibt 9,6 MHz als Standard für die interne Uhr an. Die F_CPU ist auf F_CPU=9600000 gesetzt, da ich sonst keine Einstellungen vorgenommen habe. Ich stimme zu, das ist seltsam.
Aus Atmel-Dokumenten: "Wenn CKDIV8 programmiert ist, werden die CLKPS-Bits [Clock Prescaler Register] auf "0011" zurückgesetzt, was beim Start einen Teilungsfaktor von acht ergibt." "Das Gerät wird mit programmierter CKDIV8-Sicherung geliefert." Ich denke, es erklärt die Kuriosität.

AVRs haben den Vorteil des LUFA- Software-Stacks. Sie können einen AVR direkt an die USB-D+- und -D-Pins anschließen und erhalten dadurch einen angemessenen Anschein von USB. Es wird die USB-Spezifikation nicht genau erfüllen, aber es ist nah genug für fast alle allgemeinen Anwendungen.

Von dort aus sollte es ziemlich einfach sein, das ADC-Peripheriegerät auf dem ATTiny zu verwenden und LUFA die USB-Seite der Dinge überlassen zu lassen.

Bearbeiten: Eigentlich sieht es so aus, als ob Sie jetzt V-USB wollen . Tut mir leid wegen der Ablenkung. Hier ist ein Beispiel für die Verbindung eines ATTiny45 mit einem LDR, um Ihnen den Einstieg zu erleichtern .

Danke für den Hinweis auf V-USB ... Ich denke, ich kann attiny13 dafür nicht verwenden, da es "1 KByte In-System Programmable Program Memory Flash" hat und V-USB mindestens 2 kB Flash-Speicher benötigt. 128 Byte RAM ... Ich bin mir nicht sicher, auch nicht bei attiny26, das 2k hat ... In gewisser Weise lautet Ihre Botschaft: Verwenden Sie eine leistungsfähigere MCU - attiny45 oder attiny85 ...
Sie können sich das DigiSpark- Design als Beispiel für einen direkt an einen USB-Anschluss angeschlossenen ATtiny85 ansehen . Sie könnten mit 2K Flash auskommen, aber 4K wäre wahrscheinlich eine sicherere Wahl.

Es gibt hier ein ausgezeichnetes Tutorial , das Ihnen helfen kann.

Es zeigt, wie Sie eine 9-Dollar-USB-zu-USART-Brücke verwenden, oder Sie können einfach Ihre eigene bauen, und die kostenlosen HyperTerminal- oder RealTerm-Terminals, um mit AVRs zu kommunizieren.

Ich bin mir nicht sicher, wie das Tutorial mir helfen kann. Ich verwende weder Atmega noch USART.
Über USART kommunizieren Sie mit max232, das es dann übersetzt, damit der USB es verstehen kann. Auch wenn Sie sich Atmega-Code nicht ansehen und herausfinden können, wie Sie ihn für Ihren eigenen Gebrauch anpassen können, übernehmen Sie möglicherweise ein zu großes Projekt.
Das Tutorial (wenn ich es richtig verstanden habe) verwendet USART des Chips. Auf attiny13 (UCSRA, UDR usw.) gibt es so etwas nicht. In diesem Fall bedeutet Anpassung also, die Softwareimplementierung von Grund auf neu zu schreiben. Oder übersehe ich etwas?
Sieht aus wie Ihr Recht. Sry, ich habe gerade ein Tutorial gepostet, das mir geholfen hat, als ich einen Controller plus USB verwendet habe. Ich habe das attiny13-Datenblatt vor dem Posten nicht gelesen.
Kein Problem. Obwohl es nicht genau für diesen Fall ist, deutet es auf die Verwendung einer anderen MCU mit Vollduplex-USART hin.