¿Cómo conectar ATTiny13 a USB?

Esto puede estar en el límite de las posibilidades de ATTiny13, pero aún así: ¿es posible conectar ATTiny13 a USB para obtener lecturas de ADC (una vía)?

De acuerdo con este artículo http://www.vk2zay.net/article/211 (y mi comprensión del mismo) parece factible, aunque el tamaño del programa de comunicación en serie requiere mucha memoria.

Sin embargo, en lugar de max232, tengo un adaptador Micro USB a serie de microbot ( http://www.microbot.it/products/mr002-002-1.php ). (Bueno, también tengo el chip max3323, pero me gustaría reservarlo para otra cosa).

Soy consciente de esta pregunta: ¿ Cómo puedo comunicarme entre el microcontrolador y la PC sin usar el adaptador RS232/USB?

pero no puedo entender por qué se necesita max232 en el medio?

ACTUALIZACIÓN : no puedo encontrar ninguna hoja de datos mejor sobre el adaptador, pero usa el chip MCP2200.

ACTUALIZACIÓN 2 : como respondió Passerby a continuación, uno puede conectar attiny directamente al adaptador del microbot. Para que conste, estos son los cambios que hice en el proyecto mencionado anteriormente para que funcione:

  1. La línea 52 del código necesitaba "const": const unsigned long mags[10] PROGMEM = {... para hacer feliz a avr-gcc.

  2. El pin 6 de attiny debe conectarse al RX del adaptador (attiny puede usar Vdd y Gnd para una alimentación de 5v)

  3. No configuré ningún fusible con avrdude (los eliminé en Makefile)

  4. La tasa de baudios en mi caso fue 1200, y todo lo que se necesitó para ver la salida de attiny fue cu -l /dev/ttyACM3 -s 1200 (supongo que cu hace algo de magia al adaptador al principio para establecer la tasa de baudios). La tasa de baudios se calculó observando la salida del pin 6 con un osciloscopio, lo que dio un ancho de pulso de aproximadamente 0,8 ms min. (cu es la utilidad serial Linux/Unix, otra probada es minicom)

  5. La hoja de datos del adaptador no es suficiente. Necesitaba buscar las especificaciones del chip MCP2200 para hacer mejores conjeturas

MAX232 es solo un nivel de voltaje y un circuito de control para traducir la interfaz física uC a la interfaz RS-232. No desea que su uC maneje directamente estas señales, especialmente a través de un cable posiblemente largo. Además, la especificación RS-232 permite diferentes niveles de señal de voltaje hasta +/- 15 V o +/- 25 V para aplicaciones especiales y estos no son compatibles con su 5V o 3.3V uC.
La idea es usar RS232 hasta el adaptador de USB a serie, y creo que funciona con 5v (voltaje USB normal), por lo que no se necesita un cambiador de nivel. La pregunta realmente es si es posible que el adaptador serie USB lea todo lo que attiny13 es capaz de dar. En realidad, quiero obtener energía de la misma conexión USB.

Respuestas (3)

El adaptador microbot es un adaptador USB a serie basado en TTL (normalmente 5 V). No puedo decir qué IC usan, pero todos actúan de la misma manera. Simplemente conecte los pines TX, RX y GND a su ATTiny13 e inicie una comunicación serial regular. O, en este caso, solo el TX de ATTiny al pin RX del adaptador y los pines de tierra juntos, ya que el proyecto al que se vincula es solo de transmisión. Simplemente reemplazaría el max232 en el circuito, con el adaptador USB en su lugar. Todo lo demás se queda igual.

El max232 se usa cuando se convierte de serie TTL (0v Bajo, +5v Alto) a RS232 real como lo usaría un puerto serie de computadora (+3~25V Bajo, -3~25V Alto). Dado que está utilizando un adaptador de USB a serie con niveles TTL, el mismo que usaría el ATTiny13, no se necesita el max232. Hay algunos adaptadores de usb a serie destinados a usarse con material de nivel rs232 real, por lo que el chip max232 o similar sería útil en ese momento, pero no en su caso.

El adaptador de 5v del microbot está conectado directamente al pin usb de 5v. Esto le da hasta 500 mA para usar.

Lo probé (Vdd, Gnd, Tx. Este último se conectó al pin 6 (PB1), y luego escuché con minicom en /dev/ttyACM3, pero no había nada de allí, excepto algunos caracteres, cuando conecto RTS a Vdd. ¿Necesito conectar CTS/RTS alto/bajo para permitir la comunicación? Puedo ver la señal digital en el PIN 6, así que supongo que attiny está tratando de enviar algo todo el tiempo. El pulso más corto es de aproximadamente 0,8 ms.
La misma historia con 'cu -l /dev/ttyACM3 -s 115200' (probado también 9600 8N1).
Se me acaba de ocurrir, es una tasa de baudios de 1200: 1/ 0.0008 ≅ 1200. Tal vez, necesito configurar el adaptador de alguna manera.
La velocidad de @RomanSusi depende de para qué esté configurado su código attiny. Ese proyecto lo establece en baud_rate = 9600, pero realmente como "F_CPU/256/BAUD_RATE;" así que si cambia la velocidad esperada de la CPU que espera el código, la velocidad en baudios cambia
¡Bingo! Funcionó con esto: cu -l /dev/ttyACM3 -s 1200 ¡Muchas gracias!
Además, el PIN 6 va al pin RX del adaptador, no a TX como en la respuesta, pero supongo que es un error tipográfico.
@RomanSusi lo es y no es un error tipográfico. Serial/RS232 tiene nombres extraños que dependen del punto de vista del dispositivo que esté conectando. TX y RX son nombres subjetivos. El RX del adaptador Microbot es el RX de ATTiny y viceversa. Es una fuente de confusión constante para los novatos. Sin embargo, aclararé la respuesta.
@RomanSusi también, 1200 es "9600/8". ¿Estás usando un reloj de 8 MHz o de 1 MHz? Supongo que su attiny está configurado en 1 mhz, si está usando exactamente el mismo código. Sin embargo, la velocidad de reloj predeterminada debería ser de 8 MHz.
La hoja de datos proporciona 9,6 MHz predeterminados para el reloj interno. El F_CPU está configurado en F_CPU=9600000 ya que no he realizado ninguna otra configuración. Estoy de acuerdo, esto es raro.
De atmel docs: "Si se programa CKDIV8, los bits CLKPS [registro de preescalador de reloj] se restablecen a "0011", dando un factor de división de ocho al inicio". "El dispositivo se envía con el fusible CKDIV8 programado". Creo que explica la rareza.

Los AVR tienen la ventaja de la pila de software LUFA . Puede conectar un AVR directamente a los pines USB D+ y D- y obtener una apariencia razonable de USB. No cumplirá exactamente con las especificaciones de USB, pero es lo suficientemente parecido para casi todas las aplicaciones generales.

A partir de ahí, debería ser bastante sencillo usar el periférico ADC en ATTiny y dejar que LUFA se encargue del lado USB.

Editar: en realidad parece que quieres V-USB ahora. Lo siento por la pista falsa. Específicamente, aquí hay un ejemplo de interfaz de un ATTiny45 con un LDR para comenzar.

Gracias por apuntar a V-USB... Supongo que no puedo usar attiny13 para esto, porque tiene "1K byte de memoria flash de programa programable en el sistema" y V-USB requiere al menos 2 kB de memoria flash, 128 bytes de RAM... No estoy seguro ni siquiera con attiny26, que tiene 2k... En cierto modo, su mensaje es: utilice un MCU más potente: attiny45 o attiny85...
Puede ver el diseño de DigiSpark para ver un ejemplo de un ATtiny85 conectado directamente a un conector USB. Es posible que te las arregles con 2K de flash, pero 4K probablemente sea una apuesta más segura.

Hay un excelente tutorial aquí que puede ayudarte.

Muestra cómo usar un puente USB a USART de 9 dólares, o simplemente puede construir uno propio, y los terminales gratuitos HyperTerminal o RealTerm para comunicarse con los AVR.

No estoy seguro de cómo el tutorial puede ayudarme. No estoy usando ni atmega, ni USART.
USART es la forma en que te comunicas con max232, que luego lo traduce para que el USB pueda entenderlo. Además, si no puede mirar el código atmega y descubrir cómo adaptarlo para su propio uso, entonces podría estar asumiendo un gran proyecto.
El tutorial (si lo entendí bien) usa USART del chip. No existe tal cosa en attiny13 (UCSRA, UDR, etc.). Entonces, en este caso, adaptarse significa escribir la implementación del software desde cero. ¿O me estoy perdiendo algo?
Parece que tienes razón. Lamento eso, solo estaba publicando un tutorial que me fue útil cuando usé un controlador más usb. No leí la hoja de datos de attiny13 antes de publicar.
Ningún problema. Si bien no es exactamente para este caso, sugiere usar otra MCU con USART de dúplex completo.