9 votos

Firmware y circuito de la conexión directa USB 2.0 del ATtiny45

Quiero hacer mi propio modular Dispositivo USB con un ATtiny45 que simplemente envía los datos al PC por USB. No estoy leyendo datos, por lo que una conexión de una sola vía ( ATtiny -> PC ) estaría completamente bien.

Estoy utilizando un Arduino Uno como ISP con el sketch estándar de ArduinoISP cargado desde el software de Arduino. Estoy pensando en usar AVRDUDE para programar el ATtiny45 con el Arduino como ISP porque quiero poder usar código C compilado a HEX ya que es más avanzado que el Arduino Programming Langue.

Mis pensamientos básicos del circuito: enter image description here

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

  1. He conseguido SoftwareSerial para trabajar con mi ATtiny45. Para ello he utilizado 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);
    }

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

    De esta manera, utilizando el SoftwareSerial, he podido enviar los datos del ATtiny directamente al pin TX de mi Arduino UNO que tenía cargado un sketch en blanco para esta prueba. He utilizado el Serial Monitor del Software Arduino para leer los datos en el COM4 ( en mi caso ) porque mi PC no reconocía ningún dispositivo ( puerto COM ) ya que he intentado enganchar el ATtiny programado directamente a un cable USB.

    Desgraciadamente, en el Serial Monitor sólo he obtenido extraños caracteres unicode. Creo que es porque los datos están en formato hexadecimal o así. Así que me he dado cuenta de que tengo que conectar un Convertidor USB/Serial entre el USB y el ATtiny45... He buscado este tipo de 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 para mi proyecto, ¿no? ( Tiene pines demasiado pequeños para soldar... )

  2. V-USB fue entonces mi segunda aproximación, ya que no necesita un convertidor USB/Serial ( que yo sepa ). Así que para usar V-USB necesitaría usar AVRDUDE como mencioné antes.

    He encontrado este bonito ejemplo V-USB EasyLogger . Contiene un diseño de circuito y un firmware de ejemplo. ( C / C++ / HEX )

    Lo único que quiero saber es ¿Realmente necesito hacer mi circuito como se muestra en el ejemplo? -> enter image description here

¿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 VCC? ¿Qué componentes necesito? ¿Qué tipo de señal necesito enviar a través de TX? )

Gracias por todas sus respuestas.


ACTUALIZACIÓN

Aquí hay algunos enlaces adicionales que realmente me ayudaron en algunos puntos. Pero todavía no lo he entendido del todo...

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

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

2 votos

Sí, lo hace, al menos si no quiere violar las especificaciones del límite eléctrico demasiado mal . 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 .

0 votos

Lo siento por mi mal dibujo. En realidad no soy un electricista, sino un programador. El "dibujo" era sólo una visualización de mis pensamientos que tenía en mente mientras planeaba este proyecto.

5voto

NeoRiddle Puntos 106

Puedes comunicar el ATtiny45 a USB directamente, sin necesidad de un convertidor FTDI.

Para que todo funcione necesitarás el V-USB biblioteca.

Un muy buen ejemplo de que todo funciona es aquí que utiliza el mismo ejemplo de EasyLogger.

El mismo autor tiene otras bonitas consejos y proyectos con USB y uC.

Un circuito de muestra con el ATtiny:

schematic

simular este circuito - Esquema creado con CircuitLab

0 votos

El autor de la pregunta ya ha mirado el V-USB.

0 votos

Muchas gracias. Voy a probar esto tan pronto como pueda. Pero primero quiero preguntarte por la forma propper para programar el ATtiny45 con la libra V-USB. no estoy seguro de qué y cómo hacer.. He mirado en AVRDUDE. hasta ahora sé que tengo que cargar un bootloader??? a la pequeña, así como el firmware ( archivo hexadecimal ?? ). Y creo que tengo que compilar el código C ( por ejemplo el ejemplo de easylogger ) después de haber cambiado el código para mi aplicación. ¿cierto?

0 votos

Y además, ¿podría "simplificar" el circuito al mínimo? Me confunde, por ejemplo, el LED ... realmente no necesito ningún componente adicional como LED o sensores en este momento.

5voto

Passerby Puntos 28913

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

Aunque el USB utiliza una alimentación de 5V, las líneas de señal son en realidad de 3,3V a 3,6V. Por eso el circuito VUSB que muestras utiliza diodos zener en esas dos líneas. El Tiny no puede funcionar simplemente a 3,3V porque no puede ser sincronizado a los 16MHz necesarios a 3,3V.

El resto de las piezas, R1-R3, D1, D2, y C1, C2 son piezas mínimas necesarias. Eso no es realmente pedir mucho para las características que se obtienen. Consulte esta página para ver una lista de todos los proyectos que utilizan vusb.

El interruptor, R4, y LED1 son todos parte del ejemplo de firmware de registro de datos específicos, y se puede evitar si no lo necesita / cambiar el firmware.

0 votos

Gracias por la respuesta. Sabía que las líneas de datos del usb utilizan ~3,3V. Pero lo que no entiendo es, ¿cómo se define exactamente la señal USB? ¿No son una fila de bits? ¿No puedo simplemente "emular" esos bits con la sincronización correcta en un bucle (activando y desactivando la señal)? Ya tengo el diminuto uso de la osc interna para correr a 8MHz y una velocidad de transmisión en serie de 4800, por lo que el tiempo no debería ser el problema de acuerdo con algunos blogposts que he encontrado ...

1 votos

@Ace 4800 bps es 4,8 khz. USB de baja velocidad es 1,5 MHZ Y hay codificación, paridad, descriptores usb y todo. VUSB sí "emula" los datos usb, pero es muy muy complejo.

1 votos

@Ace básicamente, estás tratando de hacer el equivalente a alguien tratando de usar el código morse en una computadora, golpeando el monitor.

1voto

Salem Koja Puntos 21

Son demasiadas preguntas para responderlas en un solo post, pero he aquí 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 lo hace.

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

Sin embargo, como se señala en los comentarios a continuación que está buscando a lo largo de las líneas correctas con V-USB, no he usado esto, así que dejará a otros a comentar.

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

Anteriormente he utilizado algo como este cable FT232 :

FT232 USB cable
(fuente: <a href="http://www.ftdichip.com/Images/TTL-232R1.jpg" rel="nofollow noreferrer">ftdichip.com </a>)

Tiene el chip FTDI incrustado en el conector USB y se encarga de toda la traducción de niveles a la vez que suministra energía. El extremo es un simple conector de 0,1" de paso que se podría conectar a una cabecera de pines.

Están disponibles en eBay a precios razonables.

0 votos

0 votos

Es muy interesante. Voy a editar mi post en consecuencia, tal vez alguien más puede ayudar con los detalles V-USB.

0 votos

@David - Sí, VUSB básicamente emula el USB. Tu post es correcto en general pero específicamente la familia ATTiny puede conectarse a USB a través de este método.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X