Con un puerto serie o un puerto paralelo en la PC, la programación del microcontrolador avr es muy fácil y económica. El problema es que ninguna computadora moderna viene con puerto serial o paralelo. Entonces, el convertidor de usb a serie debería ser la solución, pero desafortunadamente no.
Debe haber una diferencia entre el puerto serie real y el puerto serie convertido. ¿Qué es?
Otra pregunta relacionada sería, ¿cómo USBasp se comunica casi directamente con la PC? Pensé que la mayoría o todos los microcontroladores de la serie ATmega no tienen soporte usb.
He comprobado este enlace: programador AVR con convertidor de serie a USB
Sé que hay varias preguntas como esta, pero como soy nuevo en la programación integrada, necesito una explicación fácil para entender el concepto. Gracias.
Editar: quiero usar un circuito como el siguiente con la interfaz serial convertida (posiblemente, RS232). Este circuito está diseñado para el puerto serial real. Con un puerto serial convertido, podría reducir la complejidad del circuito.
Los detalles se pueden encontrar en Simple Serial Programmer para AVR
El programador en serie que está usando está usando un puerto en serie para conectarse a la computadora, ¡pero no el protocolo estándar RS232! Eche un vistazo más de cerca al esquema:
DTR y RTS son los únicos pines del puerto serial que pueden ser bitbanged. Pero existe la necesidad de una señal de reinicio. El diseñador de ese adaptador usa un truco. Envía un carácter 0x00 sin bits de parada sobre RS232 TX estándar, creando así un breve pulso de reinicio (que para algunas MCU debe invertirse).
Los datos reales en una comunicación serie RS232 estándar se envían solo a través de líneas Rx/Tx. Todas las demás son líneas accesorias utilizadas por los dispositivos para señalar diferentes estados de funcionamiento o para señalar la disponibilidad de datos o la finalización de la transferencia.
Este es el problema con los adaptadores serie USB. La mayoría de ellos solo pueden usar líneas Rx/Tx y, por supuesto, solo el protocolo serial RS232 (asíncrono), que de ninguna manera es compatible con el protocolo de programación AVR (SPI, síncrono). Entonces, la única forma de comunicarse a través del puerto serie por SPI es usar líneas alternativas y emular el protocolo en el software.
Puede ver en este foro que en algunos casos funciona con adaptadores serie USB, pero en la mayoría de las situaciones no es así.
Pensé que la mayoría o todos los microcontroladores de la serie ATmega no tienen soporte usb.
Que dices de: ATmega 8U2, 16U2, 16U4, 32U2, AT90USB1286, AT90USB1287, AT90USB162, AT90USB646, AT90USB647, AT90USB82. Lista completa desde aquí .
¡Pero USBasp no está usando una de esas MCU! Si observamos su esquema, podemos ver que utiliza una resistencia pull-up en la línea D, lo que significa que le indica a la PC que es un dispositivo de baja velocidad (1,5 Mb/s). Y el software emula el bus USB a través de un puerto de E/S de uso general (se puede ver en el código fuente del firmware AVR - archivo usbconfig.h
):
#define USB_CFG_IOPORTNAME B
/* This is the port where the USB bus is connected. When you configure it to
* "B", the registers PORTB, PINB and DDRB will be used.
*/
#define USB_CFG_DMINUS_BIT 0
/* This is the bit number in USB_CFG_IOPORT where the USB D- line is connected.
* This may be any bit in the port.
*/
#define USB_CFG_DPLUS_BIT 1
/* This is the bit number in USB_CFG_IOPORT where the USB D+ line is connected.
* This may be any bit in the port. Please note that D+ must also be connected
* to interrupt pin INT0!
*/
#define USB_CFG_CLOCK_KHZ 12000
/* Clock rate of the AVR in MHz. Legal values are 12000, 16000 or 16500.
* The 16.5 MHz version of the code requires no crystal, it tolerates +/- 1%
* deviation from the nominal frequency. All other rates require a precision
* of 2000 ppm and thus a crystal!
* Default if not specified: 12 MHz
*/
Algunos pensamientos de mi cabeza basados en una amarga experiencia:
Solo use convertidores FTDI USB-Serial, son de lejos los más confiables, configurables y con mejor soporte. Otros pueden funcionar bien, pero es una lotería y la vida es demasiado corta para un hardware errante.
Verifique que la salida "en serie" del chip sea realmente lo que realmente desea; Los convertidores pueden generar datos seriales de nivel RS232, TTL (0-5v) completos o datos seriales 0-3v3 y, a veces, RS485/RS422, según el convertidor.
Como se mencionó, hay otras configuraciones como bits de inicio/parada, paridad, almacenamiento en búfer, modos bit-bang, etc., que pueden causar problemas.
El almacenamiento en búfer en el chip o controlador de serie USB puede causar problemas especialmente cuando el software de programación intenta ejecutar retrasos de tiempo específicos durante la programación. Los controladores FTDI le permiten cambiar todas estas cosas.
Para poder programar dichos dispositivos, es posible que el puerto SERIAL deba configurarse para operar en modo bitbang. La mayoría de los convertidores USB <-> serie no ofrecen esa capacidad.
Dependiendo del tipo de convertidor USB <-> SERIAL, es posible que pueda "configurarlo" para facilitar dicho modo.
www.ftdichip.com/Documents/AppNotes/AN232B-01_BitBang.pdf
Los chips FT232BM y FT245BM se pueden configurar en un modo especial donde se reemplaza la función normal de los chips. Este modo cambia las 8 líneas de datos del FT245BM o las líneas de datos y control RS232 del FT232BM a un bus bidireccional de 8 bits . El propósito de este modo estaba destinado a ser utilizado para programar dispositivos FPGA. También se puede usar para hablar con EEPROM seriales o cargar un latch de datos.
chris stratton
chris stratton