Firmware y circuito de ATtiny45 Conexión directa USB 2.0

Quiero hacer mi propio dispositivo USB modular usando un ATtiny45 que simplemente envía datos a la PC a través de USB. No estoy leyendo datos, por lo que una conexión de una sola vía ( ATtiny -> PC ) estaría completamente bien.

Estoy usando un Arduino Uno como ISP con el boceto ArduinoISP estándar cargado desde el software Arduino. Estoy pensando en usar AVRDUDE para programar el ATtiny45 con el Arduino como ISP porque quiero poder usar código C compilado en HEX ya que es más avanzado que el lenguaje de programación Arduino.

Mis pensamientos básicos del circuito:ingrese la descripción de la imagen aquí

Como puede ver, quiero una conexión USB "directa". Hasta ahora sé que tengo que usar una solución basada en software para esto.

  1. Logré que SoftwareSerial funcione con mi ATtiny45 . Para esto, he usado el software Arduino para programar el ATtiny45 con el siguiente código:

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

    Tenga en cuenta que no uso el Pin 3 (todavía), pero necesito definirlo para SoftwareSerial.

    De esta manera, usando SoftwareSerial, pude enviar datos desde ATtiny directamente al pin TX de mi Arduino UNO que tenía un boceto en blanco cargado para esta prueba. Estaba usando el monitor serie del software Arduino para leer los datos en COM4 (en mi caso) porque mi PC no reconoció ningún dispositivo (puerto COM) ya que intenté conectar el ATtiny programado directamente a un cable USB.

    Desafortunadamente, solo obtuve caracteres Unicode extraños en el Serial Monitor. Creo que es porque los datos están en formato hexadecimal más o menos. Así que me di cuenta de que necesito conectar un convertidor USB/serie entre el USB y el ATtiny45... He buscado tales convertidores, pero no quiero usar ninguna placa prefabricada, ya que quiero todos mis componentes en una sola placa. Creo que un chip FTDI sería demasiado "demasiado" para mi proyecto, ¿no? (Tiene pines muy pequeños para soldar... )

  2. V-USB fue entonces mi segundo enfoque, ya que no necesita un convertidor USB/serie (como sé). Entonces, para usar V-USB, necesitaría usar AVRDUDE como mencioné anteriormente.

    Encontré este buen ejemplo V-USB EasyLogger . Contiene un diseño de circuito y firmware de ejemplo. (C/C++/HEX)

    Lo único que quiero saber es: ¿Realmente necesito hacer que mi circuito se vea como se muestra en el ejemplo? ->ingrese la descripción de la imagen aquí

¿Qué más necesito saber sobre este tipo de conexión USB? (¿Por qué necesito un convertidor USB/serie? ¿Puedo simplemente conectar el +5 y el VCC? ¿Qué componentes necesito absolutamente? ¿Qué tipo de señal necesito enviar a través de TX? ¿Bits? ¿Hex? ¿Qué voltaje necesita? ser ? )

Gracias por todas sus respuestas.


ACTUALIZAR

Aquí hay algunos enlaces adicionales que realmente me ayudaron en algunos puntos. Pero aún no lo entendía del todo...

el primero -> http://www.ernstc.dk/arduino/tinycom.html

y el segundo -> http://www.re-innovation.co.uk/web12/index.php/en/blog-75/227-attiny-arduino (desplácese hacia abajo hasta la sección "Salida en serie")

Sí, lo hace, al menos si no quiere violar demasiado las especificaciones de límite eléctrico . Tenga en cuenta que su conector "USB" en su diagrama superior está muy mal etiquetado. D+/D- no son líneas de transmisión y recepción distintas, sino un par diferencial bidireccional .
Lo siento por mi mal boceto. Realmente no soy el chico eléctrico, sino un programador. El "dibujo" era solo una visualización de mis pensamientos que tenía en mente mientras planeaba este proyecto.

Respuestas (3)

Puede comunicar el ATtiny45 a USB directamente, sin un convertidor FTDI.

Para que todo funcione, necesitará la biblioteca V-USB .

Un muy buen ejemplo de que todo funciona está aquí , que utiliza el mismo ejemplo de EasyLogger.

El mismo autor tiene otros buenos consejos y proyectos con USB y uC.

Un circuito de muestra con el ATtiny:

esquemático

simular este circuito : esquema creado con CircuitLab

El autor de la pregunta ya ha mirado V-USB.
Muchas gracias. Intentaré esto tan pronto como pueda. Pero primero quiero preguntarle cuál es la forma correcta de programar el ATtiny45 con la biblioteca V-USB. No estoy seguro de qué hacer y cómo hacerlo. He buscado en AVRDUDE. hasta ahora se que tengo que cargar un bootloader??? al diminuto así como al firmware (archivo hexadecimal ??). Y creo que necesito compilar el código C (por ejemplo, el ejemplo de easylogger) después de haber cambiado el código de mi aplicación. derecho ?
y también, ¿podría "simplificar" el circuito al mínimo? Me confundo por, por ejemplo, el LED... realmente no necesito ningún componente adicional como LED o sensores en este momento.
¿Y qué tipo de diodos son D2 y D3? diodos schottky?
y también, ¿qué pasa con los bits de fusible? y al final de la publicación que has vinculado, ¿dicen algo sobre fusibles? Escuché que si hago algo mal con los fusibles, ¿puedo arruinar el diminuto?
@Ace: los Led D1 y R4 se pueden quitar, no hay problema. Los diodos D2 y D3 son diodos Zener 3V6
@Ace: no puede arruinar su uC con los fusibles, solo son fusibles de software, lo único que podría suceder es que su programa no se ejecute.
OK gracias. el símbolo del diodo me confundió.
@Ace: para programar el ATtiny, puede hacerlo con un Arduino como este instructables.com/id/How-to-program-attiny-using-arduino-uno . Si necesitas hablar de algo podemos hablar en el chat.
todo bien. lo único que realmente necesito en este momento es (en el mejor de los casos) un "tutorial" paso a paso para la programación. (incluyendo el código/firmware, y usando avrdude)
¿Hace alguna diferencia qué capacitores/diodos/resistencias elijo?
@Ace ¡Sí, lo hace!
bien... entonces las D son diodos zener. ¿Las R son resistencias estándar? ¿Y los C son qué tipo de condensadores?
@Ace - Chatea por favor

Básicamente, USB es un protocolo de comunicación de alto nivel con requisitos específicos para la conducción, temporización y terminación de nivel de línea de señal. No es tan simple como el serial, tiene líneas de datos diferenciales y codificación NRZI, sondeo requerido, protocolo de enlace, etc. Es por eso que necesita un adaptador USB/Serie, o por qué necesita una implementación de hardware o software USB.

Mientras que el USB utiliza una potencia de 5 V, las líneas de señal son en realidad de 3,3 V a 3,6 V. Es por eso que el circuito VUSB que muestra usa diodos zener en esas dos líneas. El Tiny no puede simplemente funcionar a 3,3 V porque no puede sincronizarse a los 16 MHz necesarios a 3,3 V.

El resto de las partes, R1-R3, D1, D2 y C1, C2 son partes mínimas requeridas. Eso no es realmente pedir mucho por las características que obtienes. Consulte esta página para obtener una lista de todos los proyectos que usan vusb.

El interruptor, el R4 y el LED1 forman parte del ejemplo de firmware de registro de datos específico y se pueden evitar si no lo necesita o cambia el firmware.

Gracias por esa respuesta. Sabía que las líneas de datos de usb usan ~3.3V. Pero lo que no entiendo es, ¿cómo se define exactamente la señal USB? ¿No son esos una fila de bits? ¿No puedo simplemente "emular" esos bits con el tiempo correcto en un bucle (activar y desactivar la señal de giro)? Ya tengo el pequeño uso del osc interno para funcionar a 8 MHz y una velocidad de transmisión en serie de 4800, por lo que el tiempo no debería ser el problema según algunas publicaciones de blog que encontré...
@Ace 4800 bps es 4,8 khz. USB de baja velocidad es de 1,5 MHZ Y hay codificación, paridad, descriptores usb y todo. VUSB "emula" datos USB, pero es muy, muy complejo.
@Ace básicamente, está tratando de hacer el equivalente a alguien que intenta usar el código morse en una computadora, tocando el monitor.
HAHA XD La razón por la que estoy usando un boudrate de 4800 se explica en el segundo enlace de mi actualización.

Demasiadas preguntas para responder en una publicación, pero aquí hay algunos puntos rápidos:

Algunos microcontroladores contienen un "punto final" USB y el hardware correspondiente, pero el sitio de Atmel muestra que el ATTiny45 no.

Por lo tanto, no puede simplemente conectar los puertos del microcontrolador a un conector USB de esa manera, porque el USB es un bus complicado tanto a nivel electrónico como de protocolo.

Sin embargo, como se indica en los comentarios a continuación, está buscando en la línea correcta con V-USB, no he usado esto, así que dejaré que otros comenten.

Los chips FTDI no son demasiado difíciles de soldar, pero una PCB adecuada con resistencia de soldadura lo hará más fácil.

Anteriormente he usado algo como este cable FT232 :

Cable USB FT232
(fuente: ftdichip.com )

Tiene el chip FTDI integrado en el conector USB y maneja todos los niveles de traducción al mismo tiempo que suministra energía. El extremo es un simple conector de paso de 0,1" que puede conectar a un cabezal de pines.

Están disponibles en eBay a precios razonables.

Eso es bastante interesante. Editaré mi publicación en consecuencia, tal vez alguien más pueda ayudar con los detalles específicos de V-USB.
@David: sí, VUSB básicamente emula USB. Su publicación es correcta en general, pero específicamente la familia ATTiny se puede conectar a USB a través de este método.
Gracias por tu respuesta. Debería haber mencionado que estoy planeando construir el proyecto en una sola placa que tiene un cabezal USB A (como este computerkabelversand.de/pictures/picturesbig/… ) en él. así que básicamente parece una memoria USB común. sin cables, solo un conector de 3 pines en el otro extremo. por eso lo llamé "modular". de esta manera puedo programar el ATtiny individualmente (es removible) y tener mis diferentes sensores/dispositivos conectados a los 3 o 4 (el RX que aún no uso) pines izquierdos.
Vi esto hoy que podría serte útil: rayoshobby.net/?p=7363