Leer Primero

Como se utiliza este blog?

sábado, 25 de julio de 2020

USB a Serial en Arduino - Generalidades

Bienvenido a mi blog, hoy hablaremos un poco de la comunicación USB en las placas Arduino. Arduino es una plataforma de creación de electrónica de código abierto, la cual está basada en hardware y software libre, flexible y fácil de utilizar para los creadores o desarrolladores, para hacerlo, utiliza el lenguaje de programación Arduino (basado en Wiring) y el Software Arduino IDE (basado en Processing). Recordemos que Arduino es un proyecto, un ecosistema y no solo un modelo concreto de placa.

Arduino se conecta a nuestro ordenador a través del puerto USB, pero el puerto USB se debe conectar al microcontrolador a través de un puerto serial, esta interfaz USB en el ordenador, nos permite tener un puerto serie virtual, en un Arduino usamos el puerto USB para tres funciones: la primera cargar nuestro programa ya compilado en la memoria flash del micro, la segunda conectarnos al puerto Serie (UART) predefinido en cada Arduino para comunicarnos durante la ejecución del programa y la tercera, alimentar de corriente a Arduino. Dada la facilidad de uso y que hoy en día todos los ordenadores disponen de un puerto USB, esto nos facilita mucho hacer estas 3 operaciones.


El microcontrolador ATmega16U2, encontrado en las principales placas arduino originales, pertenece a la compañía Microchip, (recordemos que ya hace varios años microchip compro atmel) y utiliza una arquitectura AVR de 32 registros de 8 bits cada uno, este microcontrolador es de bajo consumo y cuenta con 16 KB de memoria flash, 512 bytes de memoria EEPROM y 512 bytes de memoria SRAM, también dispone de un oscilador interno para la sincronización de instrucciones, 22 pines de entradas y salidas, una interface UART, 2 de SPI y 5 pines PWM. En la placa electrónica Arduino UNO Rev3 y Arduino Mega2560, tenemos un chip ATmega16U2 programado con el firmware necesario para la transmisión de información con el protocolo USB, de esta manera cuando nos conectamos a través del puerto USB de nuestro ordenador a la placa Arduino, el encargado de comunicarse, situándose como intermediario entre el ordenador y el ATmega328P o ATmega2560, es el microcontrolador ATmega16U2.

ATmega16U2 no es el único microcontrolador programado con un firmware para actuar como conversor USB serial, en el Arduino Leonardo y Arduino UNO WiFi Rev2 tenemos al ATmega32U4 y en el Arduino NANO tenemos un chip de ftdi, por citar algunos ejemplos.

La UART o USART es el puerto serie que casi todos los microcontroladores tienen, en el caso de Arduino UNO Rev3 están conectados a los pines 0 y 1, y la comunicación serie es la base de casi cualquiera de las comunicaciones de los microcontroladores. Una USART puede trabajar igual que una UART, pero tiene la capacidad adicional de actuar como síncrona, esto significa, que los datos van sincronizados con una señal de reloj. En la placa Arduino UNO Rev3, se utiliza la UART para que el Atmega328P  se comunique con el otro microcontrolador ATmega16U2 que hace la interface al puerto USB. Los leds (Tx y Rx) parpadean para indicar actividad en el puerto serie a través de la UART.

Físicamente un USB tiene 4 pines:



  • Pin 1=> Alimentación con un voltaje de 5V DC y máximo 500 mA
  • Pin 2 y 3 => Sirven para la transmisión de datos del BUS
  • Pin 4 = GND, Masa o tierra

Como ya hemos visto, para que un Arduino tenga una interfaz USB, se necesita de un chip que ofrezca dicha interfaz, en algunos casos el propio microcontrolador ya dispone de ese interfaz embebida (como los PIC de microchip 18F25K50 y 18F45K50) y en otros casos, utiliza un segundo microcontrolador con interfaz USB, como es el caso de Arduino y sus Micros ATmega16U2 y ATmega32U4. Cuando conectamos un USB al ordenador, necesitamos un driver que nos implemente la comunicación con el USB y nos monte un puerto serie virtual, en el caso de Arduino los drivers ya están embebidos en el IDE, por ese motivo cuando conectamos un Arduino UNO Rev3 original o un Arduino Mega2560, automáticamente nos reconoce el dispositivo. También en el caso de Arduino UNO Rev 3 cuando se resetea la placa, se está reseteando el procesador principal ATmega328P sin cerrar la conexión USB, que es mantenida por el microcontrolador secundario ATmega16u2.

¿Cuál es la diferencia entre la placa ATmega328P ATmega16U2 Arduino Uno R3 original y la placa USB CH340G de Arduino Uno R3 ATmega328P china?

ATMEGA16U2 es un Microcontrolador en el que se puede escribir firmware y CH340G es un convertidor chino de USB a TTL que solo sirve para comunicar la placa con la computadora. En el caso del Atmega16U2 este ha sido programado o preconfigurado con un firmware, para actuar como convertidor USB a TTL en nuestra placa Arduino UNO Rev3 o Arduino Mega2560.

Comparaciones:

  • CH340 es más barato, 16U2 es más costoso.
  • CH340 es un IC (circuito integrado), 16U2 es un microcontrolador.
  • CH340 no puede reprogramarse, 16U2 puede reprogramarse y usarse como microcontrolador independiente (con el bootloader Hoodloader2) ejemplo Arduino USB Rubber Ducky.
  • Los driver para CH340 deben instalarse por separado, los drivers ATmega16U2 ya están embebidos en el IDE de arduino.
  • 16U2 es el método utilizado por Arduino UNO Rev3 original y Arduino Mega2560, CH340 es el clon chino, aunque en algunos casos también se encuentran placas clones con ATmega16U2.

Ejemplos de Conversores USB a Serial Comerciales para Arduino.


Arduino USB 2 Serial micro, el conversor oficial de arduino basado en el ATmega16U2, desafortunadamente lo descontinuaron y ya no lo venden, hasta lo borraron de la pagina oficial de Arduino.

Si es necesario restaurar el firmware del ATmega16U2 nos guiaremos por el siguiente pinout:



Debemos recordar que el firmware del ATmega16U2 "Arduino-COMBINED-dfu-usbserial-atmega16u2-Uno-Rev3.hex" se encuentra en la propia ruta de instalación del IDE:

C:\Program Files (x86)\Arduino\hardware\arduino\avr\firmwares\atmegaxxu2

Pero para determinar si un ATmega16U2 realmente necesita restaurar su firmware, primero se debe hacer la prueba de loop-back.

El siguiente esquema nos muestra el circuito de una interfaz USB a serial, perfectamente funcional, que podríamos implementar en nuestros diseños pcb:




Se implementa un diodo shockley para proteger el puerto USB de nuestro ordenador de corrientes inversas y un regulador de +3,3v para obtener los +5v para arduino y adicional +3.3v para alimentar por ejemplo módulos wifi esp8266. Como ejemplo tenemos el siguiente video, donde veremos la construcción, la forma de mandar hacer nuestras propias placas SMD y aprender a utilizar plantillas Stencil para soldar componentes de montaje superficial:



Cortesía: elprofegarcia


Diseño Final del Conversor USB a Serial SMD

Puedes descargar el esquemático y diseño del pcb en Fritzing aquí
Puedes descargar los archivos gerber aquí



Quieres aportar algo que complemente este articulo? crees que hay algo que se deba corregir? Escríbenos este blog es para todos.

Finalmente recuerda que en https://jorgechac.blogspot.com nos dedicamos a construir una electrónica mejor! y apoyamos el proyecto CTC GO! (Creative Technologies in the Classroom) que es un programa de educación steam personalizable.


Si te sirvió deja un comentario de agradecimiento, comparte el post en tus redes sociales o recomiéndale el blog a un amigo, eso me motiva a seguir realizando estos pequeños posts y espero que vuelvas a mi blog, publico nuevo material con base en los softwares y apps que utilizo y la experiencia que he adquirido. Por último si deseas colaborar voluntariamente y crees que mi trabajo y mi tiempo lo ameritan, considere hacer una pequeña donación a mi NEQUI +573177295861.




También te puede interesar:









2 comentarios:

  1. hola como puedo conseguir CH340g y la Max 232 aqui en cuba

    ResponderBorrar
    Respuestas
    1. Hola maugrys, gracias por comentar, cabe destacar que el integrado CH340 solo se comercializa en SMD, es decirs solo en montaje superficial, yo me encuentro en colombia y aca se compra por mercado libre, estando en cuba, yo creo que tu mejor opcion es aliexpress por 0.23 dolares:

      https://www.aliexpress.com/item/4000111637740.html?spm=a2g0o.productlist.0.0.11831c9cHhlhdF&s=p&ad_pvid=20201005083447465187699515500007018366_1&algo_pvid=b18b836d-c60d-4c07-9978-b6473b2f3ebe&algo_expid=b18b836d-c60d-4c07-9978-b6473b2f3ebe-0&btsid=0bb0623916019120870307817e4f41&ws_ab_test=searchweb0_0,searchweb201602_,searchweb201603_

      Borrar