lunes, 14 de marzo de 2016

¿avrdude? Nos lo explica Rufián - Rufian en la red






¡Aloha! ¿Qué tal? No, no soy uno de esos chicos molones de El cajón de Arduino. Ellos tienen sus tutoriales molones y yo...yo hablo más de lo que me viene ese día a la cabeza.

Soy Rufián de Rufián en la Red. Nada, que se ve que en Valencia cuando nos da por algo nos subimos todos al barco. Que si la corrupción, que si Arduino...ainss somos de un previsible...

Bueno, me han invitado para contarte que es eso del avrdude. Dude en inglés es tío..osea que este debe de ser el tío avr....Pues no veas si es duro el tío. Hace unos días recibí un e-mail de una chica que decía que se acababa de bajar mi guía y que, intentando poner en práctica algunas cosas eso no iba ni para atrás. La frase que le sacaba el compilador era esta:

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

De lleno al problema: avrdude


Parece raro que solamente una frase pueda joderte la vida de tal forma. Pero te aseguro que lo hace ya que por mucho que vas a la web del troubleshooting, ahí no sacas nada. Y te toca buscarte la vida o buscar en foros.

La primera vez que me pasó era para pasar un simple programa. Y no entendía cómo ni porqué a veces salía y a veces no. Me puse como loco a buscar por foros y encontré la solución.

Ahora entiendo que significa que el pc no se podía comunicar con Arduino. Pero, ¿Por qué? Porque nadie me había dicho que los pines 0 y 1 eran de comunicación Serial. Yo pensaba que toda la comunicación se daba por el puerto USB. ¡Coño, si yo veía cómo los mensajes llegaban por ahí! Pero no, los pines digitales 0 y 1 son los de comunicación. Si te fijas, verás que pone RX y TX, sirven para recibir y enviar. ¡Así que nada de cables ahí cuando pases programas!


Entonces fui feliz, hasta que sucedió lo mismo. Tío, el tipo este me estaba poniendo de los nervios. ¿Sabes lo que es estar toda la mañana enviando el programa a la placa y que se envíe correctamente una de cada 100 veces? Ahora lo pienso y no sé ni porqué se enviaba a veces.


Parece que había un problema con la comunicación, pero no había nada en los pines de transmisión y recepción. Y como a veces iba ya era en plan...me está vacilando y mañana se arregla. Al día siguiente igual. Hasta que al final me puse a buscarlo seriamente. Encontrar no encontré nada, hasta que vi algo que igual podía ser lo que buscaba:


sudo chmod 666 /dev/ttyACM0


Claro, lo que pasaba es que yo no tenía suficientes permisos (Si eres de Windows esto te va a sonar raro, raro...) para acceder al puerto USB a través del IDE de Arduino. Con esa línea en tu terminal debería de solucionarse el problema. Truco rufián: Si eres vago a tope, puedes arrancar el IDE de Arduino como si fueses superusuario. Ya sé ya sé, no es 100% recomendable y tiene sus desventajas, pero coño, ¡he dicho para los vagos!

avrdude en Windows


Eso pasa en Linux, en Windows he visto casos en los que aparece este error:


avrdude: ser_open(): can’t open device “\\.\COM3”: Access is denied.


La solución a tus problemas muchas veces es instalar los drivers de Arduino. No me preguntes cuáles porque yo con el sistema operativo de los chicos de Redmond voy perdido desde hace unos cuantos años. Solamente sé que están en la carpeta drivers que viene con el IDE de Arduino.

También existe otra opción: Que no se pueda comunicar porque hay alguien utilizando el puerto USB. Nada nada, no me refiero a hackers ni cosas malignas, pero hay programas a los que damos todo el poder del mundo (Siguiente -> Siguiente->Aceptar) y que resulta que se encargan de mantener ocupados los puertos USB vete tu a saber por qué. Normalmente porque son drivers de esos que buscan un USB concreto y van buscando entre los puertos COM.

¿La solución? Simple, el famoso Alt+F4 para abrir el gestor de procesos y matar la aplicación que pueda parecer sospechosa. ¿Y cuál es esa? A saber, hay que ir probando. Y nada de cargarse cosas como el explorer o similares, que esos son básicos del sistema xD. Pista: estos servicios suelen hacer parpadear el led de transmisión de datos de Arduino. Si para es que os habéis cargado el servicio correcto ;)

Algunos errores de principiante


Otro fallo típico por el que sucede esto es el de no elegir la placa bien. Bueno, puede parecer de perogrullo pero a mi me pasó el otro día con la placa ZUM BT 328, la placa de BQ. Y es que a veces conectas la placa y ya le das caña sin mirar en la pestaña Herramientas, en la opción Tarjeta o Board.

Otras veces es el puerto el que no se elige automáticamente y es necesario acudir a Herramientas->Puerto para elegir el que toca. Normalmente será el USB pero puede que tengas la opción de conexión por Wifi o Bluetooth. Esa conexión, además de pasar el programa, te permite el envío y recepción de mensajes por el puerto Serial.

Otra opción que hay en Herramientas y que también puede afectar es el Programador. Es mejor no tocarlo pero en tu caso debe de estar en AVRISP mkll. Espera, ¿AVR otra vez?

Y es que AVR no es el hombre del saco cómo puede parecer, sino que es el tipo de microcontrolador que se utiliza en Arduino. Y avrdude lo que permite es transportar el programa compilado por gcc-avr (seguro que te suena gcc) a la placa. Es decir, avrdude es el tipo de los recados y se pasa el día llevando aquello que hemos compilado a nuestra placa. Al final, es un buencha.

Adiós, con el corazón...


Bueno, todo tiene que llegar a su final. Y mi parada está aquí. Si nada de lo dicho te ha funcionado, puede que haya que cargar el bootlader de nuevo, pero eso ya es chungo. Y ya si eso no funciona...prueba en más ordenadores porque tal vez hayas dejado inservible tu placa por primera vez y tengas que comprar una nueva.

Espero que si eres uno de esos novatos a los que el avrdude les está jugando una mala pasada, esto te sirva. Y si eres uno de esos viejunos a los que avrdude les tocó las narices en su día, que compartas a todo trapo con tus colegas menos duchos en esto de Arduino. ¡Nos vemos pronto!...si los chicos del Cajón de Arduino quieren claro ;)

P.D. Buscando información sobre AVR he encontrado esta perla: 'no estoy seguro de lo que tiene el tuyo, pero yo una vez conecte 12V a la salida de 5v y lo destrui :/ aunque no recuerdo que error me daba'. Y estoy en shock.