Blog sobre uso de Linux. Programación en C, C++, Python, y Java. Proyectos electrónicos.
viernes, 22 de mayo de 2015
Arduino Uno R3 como teclado (parte 1)
En esta entrada dejaré asentado como crear un teclado a partir de la placa Arduino Uno. (la utilidad de un teclado configurable se la da cada uno).
Es importante añadir que existen muchos de estos tutoriales, en inglés, y mi intención es siempre acercárselos a los que por ahí no se les da tanto el inglés. (...además de ayuda memoria para mí...:)
La placa utilizada es una Arduino Uno R3 con MEGA16U2 como interfaz serie USB.
Estas entradas estarán divididas en varias partes. Las iré publicando y puliendo sobre la marcha. Es que no quiero pasar tanto tiempo sin publicar así que sepan entender si existen errores y les agradezco desde ya sus feedback.
Primero deberemos instalar las herramientas necesarias para poder cambiar el firmware de la placa. Es decir re-flashearemos al Mega16u2, el cual es el encargado de darnos comunicación USB entre nuestra placa y la PC.
Recuerden que al hacer esto el IDE de Arduino no reconocerá más el dispositivo, ya que lo modificaremos de una "Arduino Uno" a un "Keyboard Demo".
Instalar DFU programmer para Linux.
Se recomienda descargar el codigo fuente y compilarlo.
Para ello instalar previamente (como root):
# apt-get install usbutils dfu-util libusb-dev automake
# apt-get install libusb-1.0-0-dev
luego en la carpeta donde han descomprimido el archivo descargado, ejecutan:
/home/tuusuario/descargas/dfu-programmer# ./bootstrap.sh
/home/tuusuario/descargas/dfu-programmer# ./configure
/home/tuusuario/descargas/dfu-programmer# make
Si no hay errores, está listo. Ahora se dirigen a la carpeta /src dentro de dfu-programmer
y lanzan:
/home/tuusuario/descargas/dfu-programmer/src# ./dfu-programmer --targets
Este comando les devolverá los dispositivos compatibles con la version del dfu-programmer ejecutada, en el caso de la que compilé el resultado es:
8051 based controllers:
at89c51snd1c at89c51snd2c at89c5130 at89c5131
at89c5132
AVR based controllers:
at90usb1287 at90usb1286 at90usb1287-4k at90usb1286-4k
at90usb647 at90usb646 at90usb162 at90usb82
atmega32u6 atmega32u4 atmega32u2 atmega16u4
atmega16u2 atmega8u2
AVR32 based controllers:
at32uc3a0128 at32uc3a1128 at32uc3a0256 at32uc3a1256
at32uc3a0512 at32uc3a1512 at32uc3a0512es at32uc3a1512es
at32uc3a364 at32uc3a364s at32uc3a3128 at32uc3a3128s
at32uc3a3256 at32uc3a3256s at32uc3a4256s at32uc3b064
at32uc3b164 at32uc3b0128 at32uc3b1128 at32uc3b0256
at32uc3b1256 at32uc3b0256es at32uc3b1256es at32uc3b0512
at32uc3b1512 at32uc3c064 at32uc3c0128 at32uc3c0256
at32uc3c0512 at32uc3c164 at32uc3c1128 at32uc3c1256
at32uc3c1512 at32uc3c264 at32uc3c2128 at32uc3c2256
at32uc3c2512
XMEGA based controllers:
atxmega64a1u atxmega128a1u atxmega64a3u atxmega128a3u
atxmega192a3u atxmega256a3u atxmega16a4u atxmega32a4u
atxmega64a4u atxmega128a4u atxmega256a3bu atxmega64b1
atxmega128b1 atxmega64b3 atxmega128b3 atxmega64c3
atxmega128c3 atxmega256c3 atxmega384c3 atxmega16c4
atxmega32c4
Luego para visualizar los dispositivos USB conectados deben conectar la placa y lanzan:
$lsusb
...entre los resultados debería aparecer una línea como la siguiente:
Bus 001 Device 019: ID 2341:0001 Arduino SA Uno (CDC ACM)
Nuestro Arduino fue reconocido correctamente, ahora, sin desconectar la placa hacen un puente momentaneo entre el pin de reset y GND. Lanzan nuevamente:
$lsusb
Entre los resultados desaparece el anterior y obtenemos algo parecido a lo siguiente:
Bus 001 Device 018: ID 03eb:2fef Atmel Corp.
Esto nos informa que el dispositivo está en modo DFU listo para ser flasheado con el nuevo firmware.
Borramos el firmware residente:
/home/tuusuario/descargas/dfu-programmer-0.7.0/src# ./dfu-programmer atmega16u2 erase
Checking memory from 0x0 to 0x2FFF... Not blank at 0x1.
Erasing flash... Success
Checking memory from 0x0 to 0x2FFF... ERROR.
Flasheamos el firmware de teclado:
/home/tuusuario/descargas/dfu-programmer-0.7.0/src# ./dfu-programmer atmega16u2 flash --debug 1 Arduino-keyboard-0.3.hex
Checking memory from 0x0 to 0xFFF... Empty.
0% 100% Programming 0x1000 bytes...
[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] Success
0% 100% Reading 0x3000 bytes...
[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] Success
Validating... Success
0x1000 bytes written into 0x3000 bytes memory (33.33%).
Luego reseteamos la placa con:
/home/tuusuario/descargas/dfu-programmer-0.7.0/src# ./dfu-programmer atmega16u2 reset
Listo, al lanzar:
$lsusb
Bus 005 Device 008: ID 03eb:2042 Atmel Corp. LUFA Keyboard Demo Application
Ahora el dispositivo es reconocido como un teclado.
Para volver a flashear el firmware de Arduino Uno
/home/tuusuario/descargas/dfu-programmer-0.7.0/src# ./dfu-programmer atmega16u2 erase
/home/tuusuario/descargas/dfu-programmer-0.7.0/src#./dfu-programmer atmega16u2 flash --debug 1 Arduino-usbserial-uno.hex
Checking memory from 0x0 to 0xFFF... Empty.
0% 100% Programming 0x1000 bytes...
[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] Success
0% 100% Reading 0x3000 bytes...
[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] Success
Validating... Success
0x1000 bytes written into 0x3000 bytes memory (33.33%).
/home/tuusuario/descargas/dfu-programmer-0.7.0/src# ./dfu-programmer atmega16u2 reset
De esta manera nuestro IDE ya reconocerá nuevamente nuestra placa, para
cargar los sketch en el MEGA.
RECOMIENDO QUE LUEGO DEL RESET DESCONECTEN Y VUELVAN A CONECTAR LA PLACA.
TO DO:
*- A medida que pueda agregaré algunas imágenes.
*- También en próximas entradas lo explicare para realizarlo desde Window$ con la herramienta Flip de Atmel.
T'T.
Suscribirse a:
Entradas (Atom)