Carga bien pero no se ejecuta el programa - DUE

Buenos días,

Necesitaba algo de ayuda con este tema. He buscado mucho por internet y no encuentro nada que me ayude.

Estaba programando en mi DUE el encendido de unos LEDs soldados a mano a una placa cuando un cable de la placa parece que hace contacto con algo del arduino y creo que dejó de comportarse como debería. Todavía estaba en pruebas tanto de hardware como de software y no me iba bien del todo, de ahí el "creo".

Pues bien, a partir de ese momento, puedo cargar el sketch sin errores (se encienden los LEDS de Tx y Rx y el IDE realiza todo correctamente sin reportar ningún fallo) pero al acabar la carga no se ejecuta el programa. He probado tanto con mi programa como con el ejemplo de Serial.Begun() y Serial.println("hola") como hacer parpadear el LED_BUILTIN. Todos ellos se cargan correctamente en la placa pero no se ejecutan (los 3 programas los estaba probando el día anterior y funcionaban correctamente). He probado a usar distintos puertos USB, distintos cables y tanto la última versión del IDE como el del navegador web. También he probado a quitarle corriente y volvérsela a dar tanto a los pocos segundos como al cabo de más de 10 segundos. También he hecho todas las combinaciones que se me ocurrieron con el botón de reset (carga + reset, carga + power off + reset, etc).

Es obvio pensar que he quemado algo y que ha muerto para siempre, pero muchas veces he cableado algo mal o he tenido un cable pelado por ahí suelto y nunca había pasado nada (cosas que pasan al trabajar con cosa pequeñas).

Me extraña que se realice la carga correctamente pero luego no ejecute el programa.

Me gustaría saber varias cosas:

  • ¿Habíais visto algo así antes: carga bien sin fallos y no arranca nunca?
  • ¿Puedo diagnosticar el runtime de alguna forma?
  • ¿Hay alguna forma de saber si el hardware está correcto mediante algún autodiagnóstico?
  • ¿Puedo volver a cargar el firmware o reestablecer valores de fábrica?
  • ¿Se os ocurre alguna prueba más que pueda hacer?
  • ¿Alguna solución?

Muchas gracias de antemano, atentamente,
Luis Darriba.

Hola!! Tengo una placa DUE y no he tenido ese problema. Imagino que cargarás el programa por el puerto de programación. ¿Has probado a cargarlo por el puerto nativo a ver si te reporta fallo? :wink:

LuisDarriba:
Me gustaría saber varias cosas:

  • ¿Habíais visto algo así antes: carga bien sin fallos y no arranca nunca?

Luis,
Hace mucho (mucho) tiempo un compañero de trabajo me preguntó "cómo funciona un transistor cuando está roto": la respuesta, obvia decirlo, es que yo sé (creo saber) cómo funciona cuando funciona bien ...
Lo que tú propones (el DUE carga el sketch pero no lo ejecuta), sería un (mal) funcionamiento en verdad notable. Lo más probable es que o no funcione nada (lo extraño sería que no te dé error alguno al cargar) o que funcione (casi) todo, o sea, que lo ejecute pero no lo veas.
¿Por qué no pruebas con el "blink", a ver que pasa?.
Saludos

Buenos días Esfinterman y vffgaston, gracias por vuestra ayuda.

Por orden decir que el puerto nativo nunca lo usé porque no fui capaz de hacer que funcionara. Ni hace años cuando lo compré y programaba con asiduidad ni ahora con este fallo he sido capaz de cargar nada a través de él. Decidí prescindir del puerto y no darle importancia. La verdad es que a día de hoy no busqué nada de información al respecto, simplemente al pasarme lo mismo que hace años sabía que no iba a conseguir nada. Que yo sepa no hay que configurar nada distinto más que cambiarle la conexión, ¿no? Mi placa es original y creo que es de las primeras DUE que salió (¿por el 2013?).

En segundo lugar, sí que probé con la función de hacer parpadear un LED, tanto uno mío conectado a los pines de E/S digitales como el que va incorporado en la placa al lado del LED de on. Siempre pasa lo mismo.

Respecto a lo que comentas acerca de que si algún componente electrónico está roto no se sabe cómo va funcionar, precisamente por eso preguntaba "¿Puedo diagnosticar el runtime de alguna forma?" y "¿Hay alguna forma de saber si el hardware está correcto mediante algún autodiagnóstico?".

Gracias de nuevo por las respuestas.

Mmm... Yo pensaría en la posibilidad de que la placa viniese defectuosa ya desde que la compraste. En efecto, la única configuración que hay que hacer es cambiar el puerto, de "Programming port" a "Native Port", nada más, y por supuesto, cambiar el cable en la placa. :smiley: Es cierto que programar por el puerto nativo no es recomendable porque se habla de hacer un reset manual cuando vaya a cargar, pero yo nunca he necesitado hacer ese reset manual y siempre ha cargado. Decir queda que mi DUE es un clon de la original (con chip Atmel 16U2) y la teoría dice que debería funcionar igual.

¿Al cargar el programa por puerto nativo qué fallo te genera? ¿Nos podrías plasmar aquí el error que te devuelve? :wink:

Justamente eso iba a sugerir, lo que directa o indirectamente sugiere el compañero, que tienes un problema con el RESET de la placa. Porque no pruebas normalmente con el USB en el puerto habitual y cuando terminas le das reset y si no funciona intenta en momentos diferentes. Si eso llega a hacerlo funcionar podriamos revisar luego el circuito RESET.
Si no funciona entonces deberemos hacerlo antes. Mide con un multimetro la tensión en el PIN RESET mientras estas cargando el sketch y presta atención a ver si hay cambios.

Hola otra vez!! :smiley: Pego traducida al español la información que aparece en la web de Arduino cuando vas a comprar una placa DUE. Puede que sea de interés. He intentado humanizar un poco la traducción para entenderla mejor. :wink:

El "DUE" se puede programar con el software Arduino (IDE). Para más detalles, consulte la referencia y tutoriales. La carga de programas en el SAM3X es diferente de los microcontroladores AVR que se encuentran en otras placas Arduino porque la memoria flash debe borrarse antes de reprogramarse. La carga en el chip se administra mediante ROM en el SAM3X, que se ejecuta solo cuando la memoria flash del chip está vacía.

Cualquiera de los puertos USB se puede usar para programar la placa, aunque se recomienda utilizar el puerto de programación debido a la forma en que se maneja el borrado del chip:
-Puerto de programación: para usar este puerto, seleccione "Arduino Due (ProgrammingPort)" como su placa en el IDE de Arduino. Conecte el puerto de programación de DUE (el más cercano a la toma de alimentación de CC) a su ordenador. El puerto de programación utiliza el 16U2 como un chip de USB a serie conectado al primer UART del SAM3X (RX0 y TX0). El 16U2 tiene dos pines conectados a los pines de reinicio y borrado del SAM3X. Al abrir y cerrar el puerto de programación conectado a 1200 bps, se inicia un procedimiento de "borrado por la fuerza o borrado total" del chip SAM3X, que activa las patillas de borrado y reinicio en el SAM3X antes de comunicarse con el UART. Este es el puerto recomendado para programar el DUE. Es más confiable que el "borrado suave" que ocurre en el puerto nativo, y debería funcionar incluso si la MCU principal se ha bloqueado.
-Puerto nativo: para usar este puerto, seleccione "Arduino Due (NativeUSBPort)" como su placa en el IDE de Arduino. El puerto USB nativo está conectado directamente al SAM3X. Conecte el puerto USB nativo de DUE (el más cercano al botón de reinicio) a su ordenador. Abrir y cerrar el puerto nativo a 1200 bps activa un procedimiento de "borrado suave": la memoria flash se borra y la placa se reinicia con el gestor de arranque. Si la MCU falla por alguna razón, es probable que el procedimiento de borrado suave no funcione ya que este procedimiento ocurre completamente en el software del SAM3X. Abrir y cerrar el puerto nativo a una velocidad de transmisión diferente no restablecerá el SAM3X.
A diferencia de otras placas Arduino que usan avrdude para cargar, la DUE depende de bossac. El código fuente del firmware ATmega16U2 está disponible en el repositorio Arduino. Puede usar el conector ISP con un programador externo (sobrescribiendo el gestor de arranque DFU). Vea este tutorial contribuido por el usuario para más información.

Échale un vistazo, espero que esta información te sea útil!! Enlace original en inglés: Arduino DUE, pincha en DOCUMENTACIÓN. :wink:

Buenas tardes,

Gracias a los dos de nuevo por vuestras respuestas.

El error que me da al subir es el siguiente:

El Sketch usa 22252 bytes (4%) del espacio de almacenamiento de programa. El máximo es 524288 bytes.
No pude encontrar una placa en el puerto seleccionado. Comprueba que has seleccionado el puerto correcto. Si es correcto, prueba a pulsar el botón de Reset de la placa tras iniciar la subida.
Tarjeta en COM3 no disponible

Resulta que sí que me deja seleccionar la tarjeta que quiero: Arduino DUE (Native USB Port); pero no me deja seleccionar ningún puerto (normalmente lo tengo en el COM 3 para el programming port). Si voy a opciones de Windows, al conectar la placa por el programming port reconoce la placa en el COM3, pero al conectarla por el Native port no se ve nada en los puertos COM. De ahí el mensaje de error y que no termine de subir nunca.

Por esta razón creo que no confirmamos que sea por el reset de la placa (ni confirmamos ni descartamos). He probado a pulsar el botón de reset tantas veces y de todas las maneras que se me ha ocurrido. pulsos largos o cortos al principio, final o durante el proceso de carga o tras él y nunca me ha ejecutado el programa.

Respecto a la información de la placa de Arduino, muchas gracias, ayuda saber cómo funciona y cuál es la diferencia entre ambos (algo así tenía pensado que era), pero creo que no me va a valer para mi caso. A no ser que eso de cargar a 1200 bauds sea configurable y no lo esté haciendo, pero creo que no se puede seleccionar y supongo que siempre se hace a 1200 bauds.

Surbyte, ¿cuál sería el pin de reset del que hablas? ¿Alguno de los del botón de reset, el que está en un laretal entre los pines IOref y 3.3V o algún otro?

Esfinterman, ¿alguna solución para hacer que Windows detecte el puerto nativo?

Saludos.

Claramente hay algún problema a la hora de darte un puerto para el puerto nativo, que evidentemente no te lo da. ¿Has probado a mantener pulsado el botón de ERASE unos segundos para borrar el SAM3X? Imagino que sí, pero como no lo veo, te lo pregunto por si acaso. :wink:

Casualmente mañana voy a estar un rato en el sitio donde tengo el PC con Windows donde tengo instalado Arduino y donde he usado la placa DUE sin problema alguno. Lo más que puedo hacer es revisar la configuración y detallarte aquí cómo lo tengo. :wink:

Sí, lo probé entre 1 y 10 segundos.

Si me ayudas a configurar windows (o diagnosticar que la placa está mal) perfecto! De todas formas habría que volver al tema principal de que no se me ejecuta el programa ;D jaja. A ver si haciendo funcionar el puerto Nativo tenemos otro reporte de errores.

Mañana mediré la tensión de los pines de reset, aunque no sé de cuál debería exactamente.

Los resets normalmente se dan en LOW asi que cualquier tensión proxima a 3.3 estará bien.
Pero en algun momento debe producirse un pulso que resetee el DUE y lo ponga en marcha. Mi sospecha es que eso no ocurre.
Ahora tengo dudas si toma un COM y puedes subir el sketch o estoy confundiendo tu respuesta con la sugerencia del otro forero.

Hola de nuevo!! He llevado “la pequeña DUE” al sitio en cuestión y he podido hacer algún pantallazo, recordar su funcionamiento y cargar el típico LED. Aquí están. :wink:

Antes de nada he de hacer una pequeña aclaración, pues en las imágenes aparecen dos puertos COM, el 15 y el 22. Al conectar la placa al ordenador quedó encendido el pin 13 y pulsé RESET para apaarlo. No me di cuenta y el ordenador estaba terminando de instalar la placa porque la conecté en otro puerto. El motivo por el que no se ha podido instalar es “Dispositivo desconectado”. Al pulsar RESET de nuevo, la placa se instaló quedando asignado para ella el puerto COM22. Tras cargar un proyecto, la placa reinicia y ha vuelto a coger el puerto que tenía antes asignado, el COM15. Luego parece que le ha gustado más el 22 y ya se ha quedado con el 22. :smiley:

El DUE dentro del sistema con puerto COM asignado sin problemas, el COM22. Los dispositivos sin instalar que aparecen no interfieren en el funcionamiento de la placa.

Enlace a la imagen grande: Imagen 1

Programa en Arduino ya subido a la placa con éxito a través del puerto nativo, como se puede leer abajo. Garantizo que la placa se ha programado correctamente y ejecuta el programa. :wink:

Enlace a la imagen grande: Imagen 2

Detalles y ruta del controlador firmado. El controlador es el propio de Arduino que viene en el propio programa, sin descargas adicionales. Lo único que hay que descargar es la “tarjeta” en sí, pero esto lo tienes ya hecho, ya que si no, no te dejaría, obviamente, seleccionar la placa.


Enlace a la imagen grande: Imagen 3

Un detalle importante que no recordaba del funcionamiento del DUE por puerto nativo. Si pulsas el RESET la placa se desconecta del sistema, emitiendo Windows el clásico sonido de “dispositivo desconectado y dispositivo conectado”. ¿Puedes confirmar que Windows reconoce que se ha quitado y vuelto a conectar un dispositivo? Comprueba también la ruta del controlador a ver si estás usando el mismo o similar y que esté firmado por Arduino. Adjunto también el registro de programación del parpadeo del LED para que se pueda consultar y ver en qué paso te quedas. :wink:

Registro subida.txt (117 KB)

Los DUE no son baratos ni los compatibles pero si tuvieses dos DUE sería fácil determinar si el problema es del microcontrolador o bien es algo de drivers o puertos o cualquier otra cosa. No sé si tienes otro a disposición aunque sea prestado. Nunca había visto un caso así, que permita subir el sketch y luego no funcione.

Surbyte:

El pin 47 Master-Reset del atsam3x de mi placa está siempre a 3.3V (me costó encontrarlo y medirlo pero lo conseguí!). Si pulso el botón de reset se pone a 0V. Al cargar el Sketch, tras la compilación y antes de la barra de progreso de la carga, se pone a 0V un instante, sólo en ese momento.

Lo mismo ocurre con el pin de E/S reset y con el pin 3 del botón de reset.

Bitebyte:

Seguramente esta semana me acabe comprando otro, así que tal vez... ¿Me podrías comentar cómo tengo que hacer para determinar el estado de éste utilizando otro DUE?

Esfinterman:

Respecto a lo del puerto Nativo, que no es el caso original pero entiendo que quieres que lo consiga poner en marcha para ver el diagnóstico de la carga, Windows no me lo reconoce (no suena el tirí! típico cuando se conecta algo). Además no me aparece nada en "Administrador de dispositivos". Respecto al driver, sólo puedo verlo al conectar el Arduino por el programming port. Aún así, comparándolo con el tuyo, sí que parece que sea el original: Tiene todos los campos igual excepto el de la versión, ya que yo tengo Windows 10.

Ayer probé a utilizar otro ordenador, con el software descargado ex profeso, y ocurre todo exactamente igual que siempre: No reconoce nada del nativo y cargando por el programming port no da fallos pero tampoco lo ejecuta.

Muchas gracias a todos, estoy recibiendo bastante más ayuda de la que me imaginaba =)

Bueno, lo que me dices al final eso de que genera un pulso de 0V por un instante eslo que quería que verificaras. O sea que luego de terminado el sketch lo reinicia y si luego de hacerlo no arranca entonces… por ahora no tengo sugerencias. Voy a seguir pensando en tu problema a ver si puedo decirte o sugerirte algo.

LuisDarriba:
Respecto a lo del puerto Nativo, (...) Windows no me lo reconoce

Uff... Mal asunto. He estado revisando las conexiones USB y es directa al SAM. Tiene otros dos pines con una resistencia, imagino que SMD y no hay nada más entre la conexión USB y el SAM. Ante este cuadro de que carga por puerto de programación y no funciona, y que el SAM directamente no se conecta con el ordenador, empezaría seriamente a barajar la posibilidad de que el SAM esté dañado, porque están pasando cosas bastante extrañas. :frowning:

A ver, el Nativo siempre estuvo así, vendría uno de los dos pines de comunicación mal soldado. La cosa es que es una pena no tenerlo ahora operativo para poder ver el diagnóstico de la carga.

Sinceramente, yo creo que cargaría igual de bien pero igualmente no ejecutaría el programa. Seguramente, y tal y como os comentaba al principio, toqué con tensión en algún lado que no debía y me lo cargué. Yo sobretodo preguntaba por saber si se puede ver algún registro de eventos mientras se ejecuta el programa.

En cualquier caso muchas gracias a todos, me sabe mal no haber podido llegar a nada con todo el esfuerzo que habéis dedicado. Son cosas que pasan... :frowning: Supongo que en breve compraré otro arduino.

LuisDarriba:
Seguramente, y tal y como os comentaba al principio, toqué con tensión en algún lado que no debía y me lo cargué.

Eso tiene bastantes posibilidades de haber pasado, sobre todo siendo una placa DUE, que el SAM3X es más delicado y funciona a 3,3v. Te tocará comprar, al menos, un clon, que están a mitad de precio, y aún así, no son baratos. El que compré yo no llegó a 20 euros, pero se quedaba alto. Una lástima, la verdad. :wink:

Yo compre uno por u$s13.30, es clonazo. Arduino DUE