Programando un ATmega328 con el cargador de arranque Arduino a través de un adaptador serial USB FTDI

7

Me gustaría su consejo relacionado con el uso del IDE de Arduino y avrdude para programar un ATmega328 que está precargado con un cargador de arranque Arduino. Estoy utilizando una placa de conexión USB a TTL en serie basada en un chip FTDI.

Compré un "FTDI Basic Program Downloader to TTL FT232 para Arduino ACC" apagado ebay

Seguíexactamenteestaconfiguración:

  1. ConecteelpinDTRalpin1enelATmegaatravésdelcondensadorde0.1uF.

  2. ConecteelpinRXalpin3enelATmega(TX)

  3. ConecteelpinTXalpin2enelATmega(RX)

  4. Conecteelpinde5Valrielde5VdelaplacaparasuministraralimentaciónalaplacadesdelainterfazUSB.

  5. ConecteelpinGNDalrielGNDdelaplaca

( a partir de las instrucciones que se siguen )

Cuando intento subir un boceto, obtengo este chico malo:

avrdude: stk500_getsync(): not in sync: resp=0x00

Esto es lo que he intentado hasta ahora:

Conectando los pines de cabecera del "escudo" de Arduino al chip en el tablero. Al hacerlo, estoy utilizando el ATmega16U2 a bordo para enviar el programa. Resultado: ¡Perfecto! El programa arranca y todos están felices.

Volver a la tabla de desglose FTDI. Switch RX y TX (¿nunca se sabe?) Todavía no hay nada, así que volví a la configuración inicial de TX - RX.

El pin DTR fuera de la placa FTDI está restableciendo con éxito el ATmega328 a medida que avanza a través de su secuencia de parpadeo mágico cuando intento cargar algo.

Ahora, he probado para ver si el ATmega328 puede enviar información en serie a través de la placa de ruptura por computadora. Puede.

He notado algunas cosas interesantes:

Tanto las líneas TX como las RX están siempre a 5 V. Lo sé porque si conecto un LED en paralelo con las líneas, éstas se iluminan. Pero, los pequeños LEDs pequeños en la placa de conexiones etiquetados como TX y RX no siempre están encendidos ... ¿por qué? ¿Podría eso explicar mi problema?

Si desea más información, avíseme, la obtendré por usted.

--------------------------------------------- EDIT- -----------------------------------------

Hola de nuevo,

OK, he añadido un condensador electrolítico de 100uF junto con uno de 0.1uF entre 5v y GND. Este no es el sugerido 47uF y 0.1uF pero creo que ayudará a filtrar, no obstante. (mientras esté en ello. ¿Qué cambiaría?)

He reemplazado mi resistencia de pull-up de 1k con un 10k one

Todavía no puedo cargar un boceto y obtengo el mismo error. La línea DTR llama a un reinicio y todavía tengo salida en serie. (Tengo un boceto en él que envía enteros incrementales a través de la serie cada segundo)

También es interesante, (aunque todavía no pude enviar un boceto antes de que esto sucediera) cualquier LED que conecte en el pin 13 (también conocido como 19) es ahora mucho más tenue ... tal vez ese LED blanco brillante que tenía anteriormente estaba tratando de Muy actual con un proveedor de 270 ohmios ... -_-)

A la demanda popular aquí están las fotos de mi placa y la placa de separación USB a FTDI que estoy usando.

    
pregunta Ethienne

9 respuestas

8

Un par de sugerencias:

Mirando la imagen que parece estar siguiendo aquí:

Escasiseguroquehayaunerrorqueharáqueelreinicionofuncionecomoseesperaba.

CreoqueelcircuitodereiniciodebeimitaraldeunArduinoreal,quetieneDTRconectadoatravésdeuncondensadorde100nF(0.1uF)a/RESET(pin1).ElesquemarealdeArduino(porejemplo:Deumilanove)muestraunaresistenciadepull-upde10kdesdeelpin1a+5V.Estoobligaráa/RESETadeshabilitarsepocotiempodespuésdequeDTRsehayapuestobajo.

Sinembargo,eneltablerodelafoto,laresistenciade10kestáconectadaalextremoincorrectodelatapa,queseconectaaDTR.Estonotendráningúnefecto,ysignificaquelarecuperaciónde/RESETsolosedeberáalarecuperaciónincorporada,quesupuestamenteesunvalormásaltocomo30a60k,yporlotantotomaráde3a6vecesmástiempopararestablecerse,ySermássusceptiblealruido.

Moverelpullupdelaresistenciade10kalpin1puederesolverelproblemaporcompleto.

Otracosaquehayqueverificaressirealmenteseestánobteniendo5Vdelpinde5VeneladaptadorFTDI.Muchasdeesastarjetasvienenconencabezadosdepuenteoalmohadillasdepuentesinsoldarparapermitirleconectarelpinde"Apagado" a 5 V o al regulador de 3,3 V en el chip FTDI.

Y agregue resistencias (por ejemplo, 330 a 1k) en serie con cada uno de sus LED para evitar la carga excesiva. La foto parece mostrar un LED conectado directamente a través de 5V-Gnd, y otro desde Vcc a D13. El primero de todos los derechos debería quemarse inmediatamente o causar algún otro caos. Sin embargo, es posible que estos sean LED con resistencias en serie incorporadas.

También sería bueno agregar capacitores paralelos de 0.1uF y 47uF a través de Gnd y VCC cerca del 328, para darle un suministro limpio.

    
respondido por el gwideman
7

También vine aquí porque mi ATmega328 de arranque, independiente, no quería cargar mi programa y dio ese error de avrdude. Resolví mi situación y me gustaría compartirla para que tal vez ayude a otros.

Lo que finalmente resultó ser el problema fue que el chip ATmega328 no se "hizo clic" correctamente en el tablero. Sin embargo, cuando inicialmente coloqué el chip ATmega en el tablero directamente, hizo un sonido de "clic". Realmente parecía que estaba correctamente, no suelto, no podía ir más profundo, no se caía cuando lo agitaste al revés, etc. Pero cuando intenté cargar un programa, recibí el mensaje de avrdude.

Mientras estaban cargando algunos pines estaban parpadeando, incluso el LED I se conectó al pin 19 (pin 13 en la placa Arduino). Compré el tablero en los Países Bajos, así que no puedo decir si es chino o no, pero aparentemente también tiene algunos conectores profundos y dificultad para conectar con los pines de los chips DIP. Por suerte, tuve un soporte para chip (IC Socket 28 Pin DIP) que coloqué entre el chip ATmega y el tablero. Mi problema se resolvió de inmediato y la felicidad volvió.

Utilicé un FTDI basic para programarlo, casi exactamente como la foto en el enlace de Gwideman dio más arriba. Sólo la resistencia de pull-up del RESET está conectada falsamente en esa imagen. Como Gwideman estipula correctamente, la resistencia debe ir al pin 1 y no al lado DTR de la tapa.

En el IDE de Arduino tengo seleccionado el 'Arduino Uno'.

Espero que ayude a alguien.

    
respondido por el Tmatz
1

Tuve un problema muy similar y fue causado por malas conexiones en mi tablero entre la tapa de cerámica DTR-0.1uF del FTDI --- RESTABLECIMIENTO del AtMega328p.

El problema se resolvió cuando inserté los cables macho en los mismos orificios que las patas de la tapa, para que la conexión fuera más fuerte. Pude subir bocetos, pero aún no era muy confiable. Cuando cambié la tapa de 0.1uF por una tapa de cerámica de 10uF, pareció solucionar el problema por completo.

EDITAR: Otro problema que causó un comportamiento similar fue el uso de un módulo "Protector de sobrecorriente USB" entre mi computadora portátil y el módulo FTDI. Así que dejé de usarlo aunque uno de mis cableados quemó mi computadora portátil anterior: o (Junto con una tabla de pruebas más apretada, los bocetos de carga funcionan como un encanto.

    
respondido por el Michal Fapso
0

Lo único en lo que puedo pensar cuando veo este error, es que se seleccionó la placa incorrecta en el IDE de Arduino. Probablemente deba seleccionar una placa que use el atmega328p.

    
respondido por el Matthijs
0

Vine aquí en busca de respuestas a un problema muy similar (aparentemente idéntico): 382P en el tablero, ya con un cargador de arranque y amp; codifíquelo, pero no responde a los intentos de programación a través de una ruptura FTDI ebay 'barata', aunque el restablecimiento parecía estar funcionando. Muchas posibilidades de error.

Después de verificar que mi circuito era el mismo y volver a verificar mi configuración de IDE, answer by matthijs desencadenó un pensamiento: había seleccionado" Arduino Uno "en el menú de la placa, por lo que probablemente el IDE (o avrdude) estaba intentando para alcanzar el ATmega16u2 en el Uno (que a su vez está emulando stk500 IIRC). Desde mis intentos (finalmente exitosos) de iniciar el gestor de arranque previamente mediante un donante Uno, descargué una configuración de la Junta "Atmega328 en una Breadboard", que probé y funcionó. También funcionaron otras configuraciones que no forman parte de la Junta, como "Arduino Nano w / ATmega328" y "Duemilanove w / ATmega238".

    
respondido por el jpdw
0

Ahora puede comprar programadores USPasp para atmega chip y Arduinos por 5 $ Se conectan al puerto de programación de 6 pines de ICSP en Arduinos, pero tienen una conexión de 10 pines para otros dispositivos, como una atmega desnuda que tiene aquí.

El software Arduino es compatible con los programadores USPasp, también lo hacen muchos programadores de terceros. Son eléctricamente muy similares al convertidor USB-TTL, pero están diseñados explícitamente para programar chips descubiertos y en circuitos utilizando el software popular. Ver:

enlace

He comprado uno para volver a flashear un clon Arduino Mega 2560 que se sabe que tiene un mal tiempo de vigilancia. Las imágenes HEX posteriores lo solucionan, pero debe usar el puerto de programación de la CPU de 6 pines en el Arduino.

saludos Pablo BSc Elec Eng

    
respondido por el Paul Hadley
0

He llegado a esta respuesta de StackExchange buscando una solución al mismo problema. Aprendí mucho leyendo todas las respuestas, pero ninguna de ellas pareció resolver mi caso. Finalmente, solucioné el problema y pensé en compartir la solución.

Compré un kit de condensadores AVR 328P + crystal + 22pf en Amazon como un "kit barduino de Arduino" para probarlo. El proveedor afirmó que el AVR tendría instalado un "cargador de arranque arduino" no especificado.

Reuní el circuito siguiendo algunos ejemplos y la documentación que se encuentra en Google sobre cómo programar un AVR utilizando el desglose de FTDI. Había usado los tableros FTDI antes para programar con éxito algunos Nano Pros antes, así que sabía qué esperar.

Una vez que conecté el FTDI y lo conecté a un USB, desde el cual el AVR también tomaba energía, agregué la configuración canónica del LED a D13 al final y, he aquí, comenzó a parpadear de forma familiar. Resultó que el proveedor había pre-flasheado el AVR con la demo de Blink. El chip parecía estar correctamente sincronizado y funcionando como se esperaba.

Encendí el IDE de Arduino y cargué la demostración de Blink. Si pueden hacerlo, yo también puedo, ¿no?

No. No importa cuánto lo intenté, no pude cargar el programa al AVR con ninguna combinación de selecciones de placa / programador. Triple revisó todas las conexiones, buscó en Google, encontró esta pregunta, probó todas las soluciones, nada. Avrdude podría comenzar, reiniciar el chip correctamente (lo pude ver desde el patrón de parpadeo), intentar enviar datos (FTDI tx led parpadeó) pero subiendo

En este punto comencé a preguntarme si el gestor de arranque no estaba actualizado, así que opté por la opción nuclear:

  • cargó la muestra de ArduinoISP en el IDE de Arduino
  • conectó un Arduino de repuesto para utilizarlo como programador
  • sin comentarios "#define USE_OLD_STYLE_WIRING"
  • cableado D11, D12, D13 a D11, D12 D13 del chip AVR desnudo
  • conectó el D10 del programador al pin de reinicio del chip AVR
  • agregue una resistencia pull-up de 10Kohm a V + en el pin de reinicio
  • subió ArduinoISP al "programador"
  • seleccionó "Herramientas / Programador" - > "Arduino como ISP"
  • cruzé mis dedos
  • pulsa "Burn Bootloader"

El "cruzar los dedos" debe haber funcionado, porque avrdude estaba feliz y el chip ya no estaba parpadeando, lo que significa que al menos pude cargar algo y probablemente no había nada de malo en el chip y el cableado, incluso si probablemente significaba que había bloqueado el chip.

Solo tuve que volver a intentarlo, así que desconecté el "programador" del AVR, volví a la muestra "Blink", subí después de seleccionar la placa "Arduino / Genuino Uno" y, ¡yay !, ahí estaba el luz alegre!

Así que, en general, no fue tan difícil. Todo lo que tenía que hacer era cruzar los dedos en el momento adecuado.

Hay muchos diagramas y artículos sobre cómo actualizar el cargador de arranque a un AVR simple usando "Arduino como ISP", aquí hay uno que encontré útil:

Ejecutar Atmega328 en un modo independiente sin Arduino Shield

    
respondido por el Nico Orrù
0

Encontré que el 328 y el 328p en avr dude se reconocen como chips diferentes, edite el archivo avrdude.conf para el 328p y agregue esta firma en su lugar 0x1e 0x95 0x14

    
respondido por el roger
-1

Necesita una tapa 10uf conectada al pin de reinicio y DTR. Aquí hay un ejemplo práctico de cómo debería estar conectado:

Los otros 3 casquillos son 22pF

    
respondido por el PhillyNJ

Lea otras preguntas en las etiquetas

Comentarios Recientes

Vea la discusión de Arduino-Ed (1/5 que se publicará más adelante) en quillwing.comDos ejemplos adicionales Generación de señal auto similar similar al vecino más cercano Seguimiento de fuentes VCC, GND y GND separadas a medida que cambia la configuración Muestreo de ondas de sonido con acelerador de dispositivos Control definido por software de los aceleradores de dispositivos Gracias a usigtahi y tmpwind por mostrarnos buenas diferencias en los voltajes utilizados en el modo paralelo y en serie. ¡Estoy muy... Lees verder