Saltar al contenido

¿He bloqueado mi Arduino Uno? Problemas para subir a bordo

Solución:

Probablemente no esté bloqueado

Tengo bastantes Arduinos, y en los últimos años solo he “bloqueado” uno, y creo que fue zapping con static electricidad. Desafortunadamente, ese en particular tenía un chip de procesador SMD (montado en la superficie), por lo que no es fácil intentar cambiarlo por otro chip.

Mantenga la calma e intente los siguientes pasos …


Tablero de ejemplo

Un “Arduino Uno” no es solo uno cosa eso podría fallar. Tiene varios componentes principales y posiblemente solo uno haya fallado (si lo hubiera). Vea esta fotografía de referencia:

Componentes principales de Arduino Uno

Los componentes principales son:

  • Procesador Atmega16U2: maneja la interfaz a la conexión USB
  • Procesador Atmega328P: este es el procesador “principal” que tiene su boceto en él
  • Regulador de voltaje: convierte la energía entrante del conector de alimentación a 5 V
  • LED de encendido (verde): marcado como “Encendido”
  • LED indicador (amarillo) marcado “L” – conectado a través de un amplificador operacional al pin digital 13
  • LED Rx y Tx (amarillos): indican si el chip USB (Atmega16U2) está recibiendo o transmitiendo

Tenga en cuenta que los LED Rx y Tx no están conectados directamente a los pines digitales 0 y 1 de la placa (marcados Rx y Tx). Solo se iluminan si está realizando comunicaciones en serie vía USB, no si tiene algo (como un GPS) conectado directamente a los pines digitales 0 y 1.

También tenga en cuenta que dado que el LED “L” está conectado a través de un amplificador operacional, puede iluminarse si el pin 13 se establece en un aporte en tu boceto. Esto es normal. No significa que algo esté enviando datos por error.


Comprobar la potencia

Alimentación USB

  • Conecte la placa a su computadora con el cable USB y verifique que el LED verde de “Encendido” se encienda.

  • Utilice un multímetro y un par de cables de puente para probar entre el pin de 5V y el pin GND (con una flecha en la parte inferior). Debería obtener una lectura de alrededor de 5.0 V (obtuve 5.04 V en el mío).

(Puede comprar un multímetro barato por alrededor de $ 10 si no tiene uno, pero es mejor que compre uno mejor por alrededor de $ 50; consulte todos los sitios web y tiendas de electrónica).

  • También pruebe entre el pin de 3.3 V y el pin GND; debería obtener 3.3 V.

Si no obtiene 5 V con el cable USB enchufado, asegúrese de que el otro extremo esté conectado a su computadora. Pruebe también con un cable diferente.

Conector de alimentación

  • Si está usando, o planea usar, el enchufe de alimentación (marcado “power in” en la foto) desconecte el USB y conecte una fuente de alimentación, que debe ser de 7 a 12 V CC con positivo en el centrar alfiler.

  • Mida los pines de 5 V y 3,3 V como se indica arriba. Aún debería ver los mismos voltajes en ellos.

Si obtiene 5 V con el USB conectado, pero no con la fuente de alimentación, es probable que el regulador de voltaje (marcado en la foto) esté dañado. O posiblemente haya fallado la fuente de alimentación. Pruebe con una fuente de alimentación diferente para confirmar cuál es.


Verifique el flash LED de encendido

Si tiene el cargador de arranque Optiboot (el Uno normalmente se envía con eso), entonces si presiona y suelta el botón Reset, o desconecta y vuelve a enchufar el cable USB o de alimentación, el LED “L” debería parpadear rápidamente 3 veces. Los tiempos de “encendido” y “apagado” son 50 ms cada uno, los tres destellos deben terminar en aproximadamente 1/3 de segundo.

Si no es así, es posible que tenga un problema con el cargador de arranque o con el chip del procesador principal (Atmega328P).


Intenta subir un boceto

Importante: Si tiene problemas para cargar bocetos, elimine todos los dispositivos conectados (como escudos). También retire los cables de puente enchufados en los enchufes de la placa. En particular, debería haber nada enchufado en los pines digitales 0 y 1 (Rx y Tx) porque eso interferirá con la comunicación con la computadora de carga.

Elija uno de los bocetos de ejemplo simples (por ejemplo, Blink) e intente cargarlo. Esto es lo que debería ver:

  • El LED “L” debe parpadear 3 veces. Esto se debe a que el chip principal se reinicia mediante un comando del proceso de carga.

  • El LED “Rx” debería parpadear rápidamente. Estas son las instrucciones del proceso de carga que intenta activar el gestor de arranque.

  • El LED “Tx” debería parpadear rápidamente. Este es el procesador que reconoce los datos cargados.

Es posible que vea lo anterior, incluso si falla el proceso de carga. Esto podría deberse a que se seleccionó el tipo de placa incorrecto.

Si solo parpadea el LED “Rx”, podría deberse a un problema con el cargador de arranque o con el chip del procesador principal (Atmega328P). ¡Alguien está llamando, pero no hay nadie en casa!

Verifique el tipo de tablero

Si los LED parpadean, pero recibe un mensaje como este:

avrdude: stk500_recv(): programmer is not responding

Verifique el tipo de tablero:

Menú tipo tablero

Si ha seleccionado el tipo de placa incorrecto, probablemente enviará las instrucciones de carga incorrectas y se agotará el tiempo de espera o fallará. Si eres como yo y tienes diferentes tableros por ahí, es fácil olvidar que la última vez que subiste fue para un tipo de tablero diferente.

Verifique el puerto de comunicaciones

Si los LED no parpadean en absoluto, es posible que haya seleccionado el puerto de comunicaciones incorrecto.

Verifique el puerto de comunicaciones:

Menú del puerto de comunicaciones

Pruebe con una PC / Mac diferente si es posible

Pruebe su Arduino en una PC / Mac diferente si tiene una a mano. Esto puede limitar si tiene o no un problema con la computadora en particular a la que lo ha conectado, o con las computadoras en general.

Haz una prueba de loopback

  • Desconecte todos los blindajes y otros cables.
  • Retire la placa de la fuente de alimentación
  • Conecte un cable de puente de RESET a GND (cable naranja en la foto)
  • Conecte un cable de puente de Rx a Tx (cable blanco en la foto)

Alambrado:

Prueba de bucle invertido

  • Conecte el cable USB e inicie un programa de terminal, como el Monitor de terminal en el IDE de Arduino. Escriba algo y envíelo (por ejemplo, presione Ingresar en el Monitor de terminal).
  • Todo lo que escriba debe ser repetido.

Si todo se repite: Eso confirma que tiene el puerto de comunicaciones correcto, el cable USB está bien y el chip de interfaz USB (Atmega16U2) probablemente esté bien.

Si no se repite nada, verifique:

  • Tiene el puerto de comunicaciones correcto.
  • Pruebe con un cable diferente. Algunos cables USB baratos solo tienen cables de alimentación y no cables de datos.
  • Verifique que el controlador de dispositivo para el Arduino esté instalado. Probablemente no necesite hacer esto si esa placa funcionó anteriormente en esta computadora, pero puede valer la pena hacerlo si es la primera vez que conecta esta placa a esta computadora.

Pruebe el chip Atmega16U2

Si su placa no pasa la prueba de bucle de retorno y está seguro de que el cable USB está bien, puede probar el chip Atmega16U2. Hay un encabezado ICSP (Programación en serie en circuito) en la placa, junto al chip Atmega16U2 y cerca de la toma USB.

Desconecte la alimentación primero (desconecte el cable USB y cualquier cable de alimentación).

Luego, puede conectar el encabezado ICSP a través de 6 cables de puente a un Uno bueno conocido, como se muestra en la foto:

Pruebe el chip Atmega16U2

Los pines para el encabezado ICSP son (desde la parte superior):

Encabezado ICSP

El pin 1 en el encabezado ICSP cerca del chip Atmega16U2 está marcado con un pequeño punto blanco, cerca de la “F” en “AREF”. El pin 1 en el encabezado ICSP cerca del chip ATmega328P está marcado con un pequeño punto blanco, debajo de la “N” en “ON”.

Conectar hasta:

Good board         Target Uno

  MISO                MISO    (pin with dot - pin 1)
  VCC                 VCC
  SCK                 SCK
  MOSI                MOSI
  D10                 /RESET
  GND                 GND

Vuelva a verificar su cableado.

Luego, en la placa de “buen conocido”, instale el boceto “Atmega_Board_Detector” como se describe en la página del programador del cargador de arranque Atmega. El código está en GitHub – nickgammon / arduino_sketches. Si hace clic en el botón Descargar en esa página, obtendrá una serie de bocetos útiles. El que desea se llama “Atmega_Board_Detector”.

Una vez instalado, abra el monitor en serie, configúrelo en 115200 baudios y debería ver algo como esto:

Atmega chip detector.
Written by Nick Gammon.
Version 1.17
Compiled on Jul  9 2015 at 08:36:24 with Arduino IDE 10604.
Attempting to enter ICSP programming mode ...
Entered programming mode OK.
Signature = 0x1E 0x94 0x89
Processor = ATmega16U2
Flash memory size = 16384 bytes.
LFuse = 0xEF
HFuse = 0xD9
EFuse = 0xF4
Lock byte = 0xCF
Clock calibration = 0x51
Bootloader in use: No
EEPROM preserved through erase: No
Watchdog timer always on: No
Bootloader is 4096 bytes starting at 3000

Bootloader:

3000: 0x4B 0xC0 0x00 0x00 0x64 0xC0 0x00 0x00 0x62 0xC0 0x00 0x00 0x60 0xC0 0x00 0x00
3010: 0x5E 0xC0 0x00 0x00 0x5C 0xC0 0x00 0x00 0x5A 0xC0 0x00 0x00 0x58 0xC0 0x00 0x00
3020: 0x56 0xC0 0x00 0x00 0x54 0xC0 0x00 0x00 0x52 0xC0 0x00 0x00 0xEE 0xC4 0x00 0x00
...
3FE0: 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
3FF0: 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF

MD5 sum of bootloader = 0xD8 0x8C 0x70 0x6D 0xFE 0x1F 0xDC 0x38 0x82 0x1E 0xCE 0xAE 0x23 0xB2 0xE6 0xE7
Bootloader name: Arduino-dfu-usbserial-atmega16u2-Uno-Rev3

First 256 bytes of program memory:

0: 0x90 0xC0 0x00 0x00 0xA9 0xC0 0x00 0x00 0xA7 0xC0 0x00 0x00 0xA5 0xC0 0x00 0x00
10: 0xA3 0xC0 0x00 0x00 0xA1 0xC0 0x00 0x00 0x9F 0xC0 0x00 0x00 0x9D 0xC0 0x00 0x00
20: 0x9B 0xC0 0x00 0x00 0x99 0xC0 0x00 0x00 0x97 0xC0 0x00 0x00 0x48 0xC4 0x00 0x00
30: 0x0C 0xC4 0x00 0x00 0x91 0xC0 0x00 0x00 0x8F 0xC0 0x00 0x00 0x8D 0xC0 0x00 0x00
...

Sin embargo, si recibe un mensaje como este:

"Failed to enter programming mode. Double-check wiring!"

Eso parecería indicar que su ATmega16U2 no está funcionando.


Pruebe el chip ATmega328P

Desconecte la alimentación del Arduino Uno “conocido en buen estado” y vuelva a cablear los puentes ICSP como se muestra en esta foto, para conectarlos al procesador “principal” de su Uno:

Pruebe el chip ATmega328P

Los pines para el encabezado ICSP son (desde la parte superior):

Encabezado ICSP

El pin 1 en el encabezado ICSP cerca del chip ATmega328P está marcado con un pequeño punto blanco, debajo de la “N” en “ON”.

El cableado es el mismo que antes, excepto que se está conectando al otro encabezado ICSP, el que está al final de la placa, más alejado de la toma USB.

Good board       Target Uno

  MISO                MISO    (pin with dot - pin 1)
  VCC                 VCC
  SCK                 SCK
  MOSI                MOSI
  D10                 /RESET
  GND                 GND

Una vez conectado, abra el monitor en serie, configúrelo en 115200 baudios y debería ver algo como esto:

Atmega chip detector.
Written by Nick Gammon.
Version 1.17
Compiled on Jul  9 2015 at 08:36:24 with Arduino IDE 10604.
Attempting to enter ICSP programming mode ...
Entered programming mode OK.
Signature = 0x1E 0x95 0x0F
Processor = ATmega328P
Flash memory size = 32768 bytes.
LFuse = 0xFF
HFuse = 0xDE
EFuse = 0xFD
Lock byte = 0xEF
Clock calibration = 0x83
Bootloader in use: Yes
EEPROM preserved through erase: No
Watchdog timer always on: No
Bootloader is 512 bytes starting at 7E00

Bootloader:

7E00: 0x11 0x24 0x84 0xB7 0x14 0xBE 0x81 0xFF 0xF0 0xD0 0x85 0xE0 0x80 0x93 0x81 0x00
7E10: 0x82 0xE0 0x80 0x93 0xC0 0x00 0x88 0xE1 0x80 0x93 0xC1 0x00 0x86 0xE0 0x80 0x93
...

MD5 sum of bootloader = 0xFB 0xF4 0x9B 0x7B 0x59 0x73 0x7F 0x65 0xE8 0xD0 0xF8 0xA5 0x08 0x12 0xE7 0x9F
Bootloader name: optiboot_atmega328

First 256 bytes of program memory:

0: 0x0C 0x94 0x35 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00
10: 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00
20: 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00
30: 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00
...

En este caso, confirma que el procesador principal está funcionando y que tiene instalado el cargador de arranque Optiboot.


Cosas que puedes arreglar

Regulador de voltaje fallado

Esto no es fácil de reemplazar, pero solo es necesario si usa el conector de alimentación. Si ejecuta desde USB, no es necesario. Alternativamente, puede disponer de un suministro de 4 a 5 V (por ejemplo, 3 pilas AA) y conectarlas directamente a la toma de 5 V de la placa.


Chip ATmega16U2 fallido

Esto solo es necesario para cargar bocetos a través del puerto USB y la depuración en serie. No es particularmente fácil de reemplazar porque es un SMD (dispositivo montado en superficie). Sin embargo, puedes arreglártelas sin él.

Puede cargar bocetos a través del encabezado ICSP, si compra un dispositivo de programación ICSP.

Ejemplos de estos dispositivos conectados a la toma ICSP:

USBtinyISP

AVRISP

(Esas fotos fueron tomadas de un Ruggeduino, pero el concepto es el mismo).


También puede obtener un cable FTDI, como este:

Conecte FTDI a Arduino

Conéctelo a los puertos serie de su placa de esta manera:

Cable FTDI

FTDI    Arduino Uno

GND       GND  (black wire on FTDI cable, blue jumper wire)
CTS       not connected
VCC       5V
TxD       D0 (RX)
RxD       D1 (TX)
RTS       To RESET with a 0.1 µF capacitor in series with it (green wire)

Ahora puede cargar bocetos directamente en el procesador principal, sin pasar por el chip USB.


También puede usar mi programador autónomo con chip Atmega para cargar archivos .hex; esto le permite copiar el archivo .hex para un boceto en una tarjeta SD y luego programar la placa a través del encabezado ICSP.


Chip ATmega328P fallido

El procesador principal se puede reemplazar con bastante facilidad si está montado en un zócalo. Obtenga un chip de reemplazo en algún lugar como Adafruit por alrededor de $ 6. Alternativamente, pruebe eBay. Intente obtener un chip que ya tenga instalado el gestor de arranque Optiboot, para evitar problemas.

Saque con cuidado el chip existente del zócalo e instale el nuevo, tomando nota de la ubicación del pin 1. El pin 1 tiene una muesca en el chip, y su orientación correcta se indica en la primera foto de esta publicación con un amarillo. punto (más cercano al borde del tablero). Probablemente necesite enderezar las piernas un poco. Sostenga el chip por los extremos y empújelo suavemente hacia abajo sobre una superficie plana, como un escritorio, hasta que se empujen un poco hacia adentro. Intentar no tocar las clavijas de metal, puede golpearlas con static electricidad.


ATmega328P responde pero no tiene cargador de arranque

Tengo un boceto en el programador del cargador de arranque Atmega que reemplazará al cargador de arranque Optiboot. El cableado es el mismo que para el esquema del detector de chips. El código está en GitHub – nickgammon / arduino_sketches. Si hace clic en el botón Descargar en esa página, obtendrá una serie de bocetos útiles. El que quieres se llama “Atmega_Board_Programmer”.

Instale el boceto en su Uno “conocido en buen estado” y conéctelo a la placa de destino con el cableado que se muestra anteriormente.

Pruebe el chip ATmega328P

Abra el Monitor de serie en su Uno “bueno” y debería ver esto:

Atmega chip programmer.
Written by Nick Gammon.
Version 1.35
Compiled on Jul  9 2015 at 15:06:58 with Arduino IDE 10604.
Attempting to enter ICSP programming mode ...
Entered programming mode OK.
Signature = 0x1E 0x95 0x0F
Processor = ATmega328P
Flash memory size = 32768 bytes.
LFuse = 0xFF
HFuse = 0xDE
EFuse = 0xFD
Lock byte = 0xEF
Clock calibration = 0x83
Type 'L' to use Lilypad (8 MHz) loader, or 'U' for Uno (16 MHz) loader ...

Escriba “U” para el cargador Uno (Optiboot).

Using Uno Optiboot 16 MHz loader.
Bootloader address = 0x7E00
Bootloader length = 512 bytes.
Type 'Q' to quit, 'V' to verify, or 'G' to program the chip with the bootloader ...

Escriba “G” para programar el chip.

Deberías ver:

Erasing chip ...
Writing bootloader ...
Committing page starting at 0x7E00
Committing page starting at 0x7E80
Committing page starting at 0x7F00
Committing page starting at 0x7F80
Written.
Verifying ...
No errors found.
Writing fuses ...
LFuse = 0xFF
HFuse = 0xDE
EFuse = 0xFD
Lock byte = 0xEF
Clock calibration = 0x83
Done.
Programming mode off.
Type 'C' when ready to continue with another chip ...

Esto toma alrededor de un segundo. Ahora el cargador de arranque está instalado.


Problemas con el temporizador de vigilancia

El temporizador de vigilancia (desactivado de forma predeterminada) se puede configurar para reiniciar el procesador después de un tiempo determinado. La intención es recuperarse de un “bloqueo” de un procesador desplegado en el campo. Sin embargo, si el temporizador está configurado para un período corto (como 16 ms), el procesador puede reiniciarse nuevamente antes de que el cargador de arranque tenga la oportunidad de hacer algo.

Los síntomas son que no puede cargar nuevos bocetos. Algunos cargadores de arranque modernos (como Optiboot) toman medidas para detener este problema como una de las primeras cosas que hacen. Sin embargo, otros no lo hacen.

Puede ser difícil recuperarse de esto, porque una vez que se ejecuta el boceto, tiene el problema de que se reinicie y, si tiene el problema, no puede reemplazar el boceto. Las personas a menudo informan que tienen que grabar un nuevo gestor de arranque para recuperarse. Sin embargo, eso se debe solo a que, como efecto secundario, la grabación de un gestor de arranque borra el boceto actual.

Allí es una forma de recuperarse. Siga estos pasos:

  • Apague la placa por completo (retire el cable USB).
  • Mantenga presionado el botón Reset y mantenlo presionado (o, ejecute un cable de puente desde el pin RESET hasta el pin GND). Esto detiene el inicio del boceto del problema y, por lo tanto, activa el temporizador de vigilancia.
  • Manteniendo pulsado Restablecer, vuelva a conectar el cable USB.
  • Comience a cargar un boceto que no tenga este problema (por ejemplo, Blink)
  • Una vez que el IDE informe “Cargando”, suelte el botón Reset (o retire el cable de puente).
  • Ahora debería cargarse correctamente, ya que el boceto que activó el temporizador de vigilancia nunca se inició.

Problemas con la carga de Mega2560

Menciono esto aquí, aunque esta publicación realmente está dirigida a la placa Uno, porque es bastante común.

Algunas versiones del cargador de arranque Mega2560 buscan “!!!” en la carga entrante desde la PC, y si lo ven, pasen al modo de depuración. Esto hace que la carga falle.

Código de ejemplo:

Serial.println ("Furnace overheating!!!");

Soluciones:

  • Instale un cargador de arranque más reciente. Mi esquema de “cargador de arranque” mencionado anteriormente en esta respuesta debería instalar un cargador de arranque que no tenga ese problema.

O (más simplemente):

  • No utilice “!!!” en tu boceto.

Problemas para cargar a Leonardo / Micro / Esplora, etc.

Las placas con ATmega32u4 como su procesador principal (y único) pueden ser más complicadas de cargar. Esto se debe a que el mismo chip tiene que manejar las cargas y también ejecutar su código.

Hay una pequeña ventana de oportunidad, después de reiniciar el tablero, cuando busca un nuevo boceto para cargar. La técnica para subir a estos tableros es:

  • Compile su boceto sin errores.
  • Iniciar la carga
  • Tan pronto como el IDE informe “Cargando”, presione y suelte el botón Restablecer.

Solo tiene un segundo más o menos para hacer esto, antes de que comience a ejecutarse el boceto antiguo. No se desanime si tiene que repetir este proceso un par de veces. Eso es normal.


Referencias

  • Resolviendo problemas con la carga de programas a su Arduino
  • Boceto para detectar tipos de chips Atmega
  • Sitio de GitHub con detector de chip / programador de cargador de arranque
  • Programador del cargador de arranque Atmega
  • Programador autónomo con chip Atmega para cargar archivos .hex
  • Calculadora de fusibles Atmel AVR® incorporada
  • Foto de pinouts de Arduino Uno Rev3

Al menos, como supongo que carga su boceto a través de avrdude, brinde más información sobre el error de carga (por ejemplo, la salida del cargador de bocetos) para que la gente aquí pueda ayudarlo mejor.

Además de la gran respuesta de Nick Gammon, busque signos de exclamación en su dibujo. Si su boceto contiene un string con más o igual a 3 signos de exclamación, la carga fallará, ya que las versiones antiguas del Arduino Bootloader interpretarán estos signos de exclamación como otra función y la carga se detendrá.

Un ejemplo para detener la carga:

char* test = "This will stop the upload!!!";

Consulte el problema del código de Google.

He bloqueado 2x ATMega328P en mi placa Arduino Uno debido a static (Creo).

los static parece haber eliminado el pin TX y, por lo tanto, el programa no se puede descargar con el cable USB.

La solución más sencilla es reemplazar el microcontrolador. Puede comprar un nuevo ATMega328P DIP programado con el gestor de arranque Arduino (como este de Adafruit) y estará listo para comenzar de nuevo.

Alternativamente, aún puede programar los ATMega328P usando el programador Atmel Ice o AVRISPmkII o usando otro Arduino como programador ICSP. Cuando lo haga, todos excepto el pin Tx funcionan bien.

Te mostramos reseñas y valoraciones

Recuerda que puedes dar difusión a este tutorial si lograste el éxito.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *