loading

HIDUINO es un firmware (código) pensado para correr en el microcontrolador Atmega8u2 (Arduino UNO Rev2 -y anteriores- o Mega2560) o Atmega16u2 (Arduino UNO Rev3).

Ellos son los encargados de realizar la comunicación USB-Serial que normalmente usan éstas placas para cargar los sketches de Arduino e implementar una comunicación Serial a través de los puertos USB de la computadora.

HIDUINO reemplaza el código en éstos microcontroladores para presentarse ante el ordenador cómo un Dispositivo de Interfaz Humana (HID). Éste tipo de dispositivos son aquellos que normalmente conocemos cómo Plug&Play, y actualmente usan el protocolo HID, interfaces cómo: mouse, teclado, pantallas táctiles, webcams, joysticks, etc. Lo bueno de éstos dispositivos, es que no requieren drivers especializados, lo enchufas y anda

Hasta ahora, el proyecto HIDUINO sólo tiene desarrollado el código para presentarse ante el ordenador cómo un dispositivo MIDI.

Nos dimos cuenta en Yaeltex que HIDUINO puede ser un dolor de cabeza, y la documentación sobre algunos aspectos del trabajo con éste firmware no están siempre actualizadas. por lo que hicimos este tutorial con lo que aprendimos haciendo nuestros propios controladores para ayudar a quien lo necesite, a cargar HIDUINO en su Arduino y a cambiar el nombre del dispositivo, que por defecto es HIDUINO.

Éste tutorial usa como referencia, y hasta incluso en algunas partes es traducción directa de los siguientes tutoriales:

AVRDUDE - por LadyAda
HIDUINO - por Dimitri Diakopoulos
HIDUINO via ISP Method - por Dimitri Diakopoulos

Del paso 1 al 3 se explica cómo recompilar HIDUINO, para cambiar el nombre con el que el dispositivo se presenta ante el ordenador, que por defecto es nada tan original como "HIDUINO".

Si no tenés intención de hacer ésta modificación, pasa directamente al paso 4, dónde se explica cómo flashear (reprogramar) el chip Atmega8u2 para transformar nuestra Arduino en un dispositivo HID (USB-MIDI).

Todas las imágenes dónde se ve una Arduino de éste tutorial fueron tomadas de Fritzing.

Step 1: Recompilar HIDUINO - Introducción Y Software Requerido

ACTUALIZACIÓN 4!!

Llegó!

Con esta aplicación, ya colgada de forma permanente, podés descargar un firmware compilado de MOCOLUFA, con el nombre que vos quieras:

Link a la aplicación: Pimp My Mocolufa

Después de descargar el archivo .hex, podés saltar directo al paso 4 "Cargar", y subir el firmware a la Arduino igual que se subía HIDUINO.

:)

ACTUALIZACIÓN 3!!

Pronto agregaré links e instrucciones para recompilar MOCO LUFA, que es mucho mejor que HIDUINO ya que te permite encender la Arduino en modo USB-MIDI (sin jumper) o USB-Serial (con jumper entre los pines 4 y 6 del conector ICSP 2, ver paso 4).

ACTUALIZACIÓN 2!!

Pimp My Hiduino ya no funciona porque mi se terminó mi período de prueba de Amazon Web Services. Hasta que consiga un server corriendo Linux para hostear la app, habrá que seguir los pasos de éste tutorial para renombrar y recompilar tu firmware

ACTUALIZACIÓN!!

Con Pablo Fullana, hicimos esta herramienta para compilar Hiduino:

Pimp My Hiduino

Descargá tu firmware y pasá directo al Paso 4

Introducción

La versión precompilada de HIDUINO es reconocida por la computadora como "HIDUINO". Compilar desde cero permite a un usuario renombrar el fabricante y el nombre del dispositivo.

Requerimientos de software

Para cambiar el nombre del dispositivo, debemos tener:

- Notepad++

- LUFA 140928
- Última versión del repositorio HIDUINO-MASTER ("Descargar .ZIP", abajo a la derecha)

Step 2: Recompilar HIDUINO - Paso 1 - Ubicar Las Librerías, Renombrar Y Adecuar Makefile

Asegurarse que se descargó LUFA 140928. Colocar la carpeta entera en la carpeta "hiduino-master"

`hiduino-master\lufa-LUFA-140928`

Luego copiar la carpeta entera

`hiduino-master\src\arduino_midi`

En

`hiduino-master\lufa-LUFA-140928\Projects`

Luego, entramos a la carpeta "arduino_midi" y abrimos el archivo "Descriptors.c" con el Notepad++.

En la línea 263, está el ProductString, que es la variable que contiene el nombre que tendrá el dispositivo:

const USB_Descriptor_String_t PROGMEM ProductString = USB_STRING_DESCRIPTOR(L"TRACTORCITO");

Nosotros llamamos TRACTORCITO a nuestro mixer de DJ para el software Traktor.

Luego se puede también cambiar, si queremos, el nombre del fabricante, modificando la cadena de la línea 257:

const USB_Descriptor_String_t PROGMEM ManufacturerString = USB_STRING_DESCRIPTOR(L"YAELTEX");

Salvar el archivo.

Luego abrir (con Notepad++) el archivo nombrado "makefile", y, dependiendo del dispositivo utilizado (Arduino Uno o Mega2560), debemos asegurarse que en la línea 36 la variable ARDUINO_MODEL_PID tiene el valor correcto, y sino, modificarlo como sigue:

- Para UNO:

36- ARDUINO_MODEL_PID = 0x0001

- Para Mega2560:

36- ARDUINO_MODEL_PID = 0x0010

¡IMPORTANTE! No alterar la estructura del makefile. Es decir, no agregar tabulaciones o nuevas líneas, si no se sabe lo que se hace. Sólo comentar agregando el caracter # o descomentar, borrando #.

Step 3: Recompilar HIDUINO - Paso 2 - Recompilar

Abrir una ventana de comandos:

- En Windows se abre desde el menú Inicio (Start), tipeando “cmd” y presionando Enter, o yendo a Ejecutar (Run) y tipeando “cmd”, y presionando OK.

- En MacOS se abre desde "Utilidades (Utilities) -> Terminal".

Navegar con la línea de comandos al interior de esa carpeta con el comando cd:

Ejemplo:

`cd C:\Users\Usuario\Escritorio\hiduino-master\lufa-LUFA-140928\Projects\arduino_midi`

y ejecutar make:

`make`

La compilación debería demorar entre 5-10 segundos. Una vez completada, deberíamos ver el mensaje que se ve en la tercera imagen, tomar el archivo "arduino_midi.hex", ubicado dentro de la carpeta "arduino_midi", renombrarlo con el nombre que le dimos al dispositivo en el paso anterior, y moverlo a una carpeta nuestra, donde lo queremos guardar.

Errores comunes y posibles soluciones

- Error: Al compilar, "make" tira un error 2, diciendo que no reconoce un parámetro de una función en la línea 74:

73- // Disable clock division
74- clock_prescale_set(clock_div_1);

Esto sucede porque la variable "clock_div_1" no está definida para algunos microcontroladores (bug en avr/power.h).
Referencias:
http://fab.cba.mit.edu/classes/863.14/people/andr...
http://savannah.nongnu.org/bugs/?39061

Solución: Comentar esa línea (con // al inicio de la línea 74) y debajo pegar el siguiente código:

CLKPR = (1 << CLKPCE);
CLKPR = (0 << CLKPS3) | (0 << CLKPS2) | (0 << CLKPS1) | (0 << CLKPS0);

Debería quedar así:

/* Disable clock division */
// Implementation missing - http://savannah.nongnu.org/bugs/?39061
// clock_prescale_set(clock_div_1);
CLKPR = (1 << CLKPCE);
CLKPR = (0 << CLKPS3) | (0 << CLKPS2) | (0 << CLKPS1) | (0 << CLKPS0);

Recompilar con "make".

- Error: Al compilar, "make" tira error 1 en el archivo "Descriptors.o".
Solución: Al parecer, si las comillas que encierran el nombre en la línea 263 del archivo "Descriptors.c", son oblicuas, o de las que abren y cierran como estas (“ ”), al compilador no le gusta. Debemos cambiarlas por las que son derechas como estas (" ").
Referencia

Step 4: Cargar HIDUINO - Introducción Y Software Necesario

Estos son los pasos para programar el firmware HIDUINO en una Arduino UNO (chips Atmega 8u2/16u2) o MEGA (Mega2560).

Una vez cargado el firmware en cualquiera de estos procesadores, no se pueden cargar sketches a la Arduino por USB. Para poder hacerlo, se debe cargar nuevamente el firmware original (usbserial). Si sería posible cargar sketches desde el Arduino IDE, seleccionando “Archivo (File) -> Subir usando programador (Upload Using Programmer)” y eligiendo el programador utilizado en “Herramientas (Tools) -> Programador (Programmer)”, y conectado el programador al puerto ISP más alejado del puerto USB.

Nota: A partir de la versión 1.6.5, se carga un sketch mediante un programador desde el menú "Programa->Subir usando programador".

Para cargar HIDUINO, es necesario contar con los siguientes paquetes de software y programas:

Windows:

- WinAVR (para usar avrdude)

Mac OS:

- Crosspack (para usar avrdude)

Ambos:

- Última versión del Arduino IDE

- Última librería Arduino MIDI

Step 5: Cargar HIDUINO - Hardware Necesario Y Armado Del Cable

Cómo programador se puede usar un programador ISP como el AVRISPMKII, u otra Arduino (Uno y Duemilanove testeadas)

Armado del cable programador

Si se quiere usar otra Arduino cómo programador, se debe armar un cable para conectar al puerto ICSP ubicado cerca del puerto USB.

La imágen 1 muestra la Arduino que se va a utilizar como programador.
Notar que para que funcione, necesita un capacitor electrolítico de 10uF con el terminal positivo conectado al pin de RESET de la Arduino, y el terminal negativo conectado a masa.

Los cables que salen de la ficha, deben formar un conector con el orden de pines que se muestra en la imágen 2

En la imágen 3, se ve la Arduino que se va a programar. El conector de arriba se conecta con el terminal cuadrado (pin 12 de la Arduino programadora) hacia el Pin 1 de los pines de la Arduino a programar.

Step 6: Cargar HIDUINO - Paso 0 - Acerca De AVRDUDE

AVRDUDE

Avrdude es el comando utilizado para flashear HIDUINO en el microcontrolador que maneja la comunicación USB. La estructura del comando es la siguiente: avrdude -opción1 -opción2 ...

Opciones:

-p” es la opción que indica a avrdude que microcontrolador se va a utilizar. Los comunes son at90usb162 y at90usb82

-P” es la opción que indica a avrdude en que puerto está conectado el programador que se utiliza. Los comunes son usb para USB (por ejemplo con el AVRISPMKII), COMX para serial en Windows o /dev/cu.usbserial o /dev/cu.KeySerial1 para serial en MacOSX

“-b” es la opción que indica a avrdude la velocidad de la comunicación serial, si estamos usando una Arduino como programador. Dejar en 19200 si se usa una Arduino como programador, si no, no usar esta opción.

"-c"es la opción con la que indicamos qué programador estamos usando. Las alternativas para nosotros son arduino o avrispmkii.

“-U” es la opción más importante ya que es la que indica a avrdude qué programar.

:r|w|v:[:format]

memtype - puede ser flash (memoria de código, para cargar el firmware), eeprom, hfuse (fusible alto), lfuse (fusible bajo), o efuse (fusible extendido).
r|w|v - puede ser r (leer), w (escribir), v (verificar)
filename - es el archivo que se programará (si se realiza una escritura) o el archivo que se creará donde se volcarán los datos leídos (si se realiza una lectura)
[:format] (opcional): El formato del archivo. No hace falta para la escritura, pero para la lectura se usa el formato i de Intel Hex (standard).

“-v” le dice a avrdude que nos muestre en la pantalla lo que sucede. Se usa para debuggear errores

“-F” se usa para saltar el chequeo de la firma del dispositivo. No se recomienda el uso, pero si tenemos el error de firma incorrecta, puede ser útil saltarselo.

Ésto es lo básico que necesitamos para flashear HIDUINO. Para más información sobre Avrdude recomendamos el tutorial de LadyAda.

Step 7: Cargar HIDUINO - Paso 1 - Cargar El Ejemplo "Arduino Como ISP"

Si utilizás un programador ISP comercial, cómo el AVRISPMKII, saltar al próximo paso.

Ya teniendo el cable, lo único que falta es cargarle las instrucciones a nuestra Arduino para transformarla en un programador ISP.

- Ejecutar el Arduino IDE, y abrir el ejemplo "Arduino como ISP (Arduino as ISP)". Esto se logra desde el menú "Archivo (File) -> Ejemplos (Examples) -> Arduino como ISP (Arduino as ISP)"

- Conectá la Arduino por USB a tu computadora.

Windows: Si es la primera vez que la conectás, espera a que se instalen automáticamente los drivers y anota el puerto serial virtual que le asigna (COMX). Si no lo llegás a ver, podés saberlo entrando al Administrador de Dispositivos del Panel de Control, o desde el Arduino IDE en "Herramientas (Tools) -> Puerto (Port)".

Mac: Para saber en qué puerto serial se encuentra conectada nuestra Arduino, lo hacemos desde el Arduino IDE en "Herramientas (Tools) -> Puerto (Port)".

- Seleccionar la placa y el puerto apropiados en "Herramientas (Tools) - Placa (Board)" y "Herramientas (Tools) - Puerto (Port)". Ejemplo: Placa: "Arduino UNO", Puerto: "COM10"

- Cargar el sketch en la Arduino (Ctrl -o ⌘- +U).

Step 8: Cargar HIDUINO - Paso 2 - Ejecutar Avrdude

Abrir la ventana de comandos.

- En Windows se abre desde el menú Inicio (Start), tipeando “cmd” y presionando Enter, o yendo a Ejecutar (Run) y tipeando “cmd”, presionando OK.

- En MacOS se abre desde "Utilidades (Utilities) -> Terminal".

- Navegar a la carpeta dónde colocamos el firmware a programar, es decir el archivo .hex que resultó de la compilación de HIDUINO. Ej: "arduino_midi.hex", "TRACTORCITO.hex".

cd Directorio

Ejecutar los siguientes comandos, según el firmware deseado y el programador utilizado.

Recordar modificar el puerto al que está conectada la Arduino, según corresponda, en la opción -P, y el microcontrolador a programar, según la placa sea una UNO Rev 2 o una Mega2560 (at90usb82) o una Arduino UNO Rev3 (at90usb162):

- Para flashear HIDUINO

a. Programador Arduino como ISP

avrdude -p at90usb162 -P COM10 -b 19200 -c arduino -U flash:w:arduino_midi.hex -v -F

- Programador AVRISPMKII

avrdude -p at90usb162 -P usb -c avrispmkii -U flash:w:arduino_midi.hex -v -F


- Para flashear USB-SERIAL (firmware original de Arduino, para cargar sketches):

- Programador Arduino como ISP

avrdude -p at90usb162 -b 19200 -P COM10 -c arduino -U flash:w:usbserial_uno_16u2.hex -v -F

- Programador AVRISPMKII

avrdude -p at90usb162 -P usb -c avrispmkii -U flash:w:usbserial_uno_16u2.hex -v -F


Al dar Enter a alguno de éstos comandos, se inicia la carga del firmware, veremos como avanzan los progresos de la escritura y la verificación.

Al finalizar, debemos ver un resultado como el de la imágen 3, y sabremos que la escritura fue exitosa.

Errores y posibles soluciones

- Error: stk500_getsync(): not in sync: resp=0x15 o 0x00
Solución: Capacitor de 10uF entre RESET y GND del arduino programador.

- Error: Device signature: 0xXXXXXX Expected signature for BLABLA is 0xZZZZZZ.
Solución: Agregar al final del comando la opción -F, para pasar por alto la verificación.

- Error: avrdude: ser_open(): can't open device "\\.\COMX"
Solución: no está conectado el programador (o arduino)

Step 9: Problemas Conocidos

OSX:

- Luego de cargar el firmware, el dispositivo sigue apareciendo como "HIDUINO".

Solución: Desenchufar la arduino, borrar el dispositivo desde el Audio/MIDI Setup, y volver a enchufarlo.

Windows:

- En Ableton, al conectar más de un dispositivo, ambos cambian su nombre a, por ejemplo, "pepito" y "pepito #2", como se ve aquí: https://goo.gl/IIZbZV.

Solución: Ableton hace esto porque encuentra dispositivos con el mismo PID. El PID es el Product ID, y es un parámetro de cada dispositivo USB. Para cambiar el PID, se modifica el número de la línea 57 del archivo "Descriptors.c":

56 .VendorID = 0x03EB,
57 .ProductID = 0x2051, .ReleaseNumber = VERSION_BCD(0,0,1),

Luego, se vuelve a compilar el archivo hexadecimal, y a cargar el firmware en la Arduino.


Step 10: Despedida

¡Eso es todo amigos!

Ojalá este instructivo haya sido claro y les haya ayudado a cargar hiduino en sus dispositivos.

Se aceptan comentarios, sugerencias, insultos (excepto pelado) y cualquier duda que tengan, comenten :D

suerte!

<p>Hola, tengo dos preguntas: una es la siguiente, cuando coloco en la ventana cmd el parametro make me tira este error:</p><p>C:\Users\tute\Documents\Arduino\libraries\Hiduino\LUFA-140928\Projects\arduino_midi&gt;make</p><p>&quot;make&quot; no se reconoce como un comando interno o externo,</p><p>programa o archivo por lotes ejecutable.</p><p>y la otra pregunta es que queria saber la direccion de la arduino nano, o es la misma que la mega?? (0010)</p><p>muchas gracias!</p>
<p>lo pudiste arreglar?? tengo el mismo problema</p>
<p>Tengo una duda, como se dec&iacute;a, se carga el software de HIDUINO, pero con ello ya est&aacute;n configurados los botones y los potenciometros? Tengo un c&oacute;digo para arduino con la librer&iacute;a MIDI, en ella se define los botones y funci&oacute;n, y tambi&eacute;n los potenciometros. No entiendo muy bien como HIDUINO funciona a la hora de conectarlo a la computadora y como se mapea dentro de alg&uacute;n software como ableton.</p>
English please
Hahah i just finished it :D<br>https://www.instructables.com/id/Recompile-Rename-and-Flash-HIDUINO-with-ISP-to-tur/

About This Instructable

4,850views

17favorites

License:

More by fgrassano:Recompile (Rename) and Flash HIDUINO With ISP to Turn Your Arduino Into an HID (usb-midi) Device Recompilar (renombrar) Y Cargar HIDUINO Mediante ISP 
Add instructable to: