Haga LUFA para Arduino UNO / atmega16u2

2

Tengo una placa Arduino Uno r3 que tiene un chip atmega16u2 que normalmente contiene el firmware USB a serie que permite que la placa se comunique con el IDE.

He estado aprendiendo a flashear ese chip con diferentes firmwares que le permiten actuar como otro tipo de dispositivos USB (Teclado / Ratón específicamente).

He encontrado algunos archivos hexadecimales que puedo usar en línea, pero estoy tratando de aprender cómo crear mi propia versión de los archivos hexadecimales del teclado y el ratón.

Aquí están las variables que he establecido en el archivo make:

MCU = atmega16u2
ARCH = AVR8
BOARD = UNO
F_CPU = 16000000

el LUFA_PATH se configura de esta manera (no lo cambié):

LUFA_PATH = ../../../..

Cuando guardo el archivo MAKE así y trato de ejecutar, se produce un error:

../../../../LUFA/Drivers/Board/Joystick.h:119:31: error: Board/Joystick.h: No such file or directory

../../../../Common/Common.h: No such file or directory

../../../../LUFA/Drivers/Board/Buttons.h:135:30: error: Board/Buttons.h: No such file or directory

La parte extraña es que puedo viajar a la ruta que indica y esos archivos realmente existen y están ubicados allí.

¿Cómo necesito configurar los parámetros de archivo de mi LUFA para poder construir para el atmega16u2 que se encuentra en Arduino UNO rev3?

EDITAR: Estos son los únicos pasos que he tomado, que llevaron a estos errores.

  • Descarga el proyecto LUFA zip.

  • Vaya a dir: C: \ LUFA-111009 \ Demos \ Device \ ClassDriver \ KeyboardMouse

  • Abra el archivo make en este directorio.

  • cambie la velocidad de MCU, placa y F_CPU a los valores ubicados arriba. (El arco ya está configurado correctamente)

  • guardar archivo de creación

  • Abre cmd en este directorio.

  • Escriba "make all"

este proceso da como resultado los errores anteriores.

EDIT 2: Ok, hice los botones en blanco.h, y Joystick.h y los puse en la carpeta / placa / teclado de Keyboard. que se deshizo de los errores del archivo no encontrado pero todavía me da esto:

KeyboardMouse.c: In function 'SetupHardware':
KeyboardMouse.c:111: warning: implicit declaration of function 'clock_prescale_s
et'
KeyboardMouse.c:111: error: 'clock_div_1' undeclared (first use in this function
)
KeyboardMouse.c:111: error: (Each undeclared identifier is reported only once
KeyboardMouse.c:111: error: for each function it appears in.)
KeyboardMouse.c:114: warning: implicit declaration of function 'Joystick_Init'
KeyboardMouse.c: In function 'CALLBACK_HID_Device_CreateHIDReport':
KeyboardMouse.c:174: warning: implicit declaration of function 'Joystick_GetStat
us'
KeyboardMouse.c:175: warning: implicit declaration of function 'Buttons_GetStatu
s'
KeyboardMouse.c:183: error: 'BUTTONS_BUTTON1' undeclared (first use in this func
tion)
KeyboardMouse.c:188: error: 'JOY_UP' undeclared (first use in this function)
KeyboardMouse.c:190: error: 'JOY_DOWN' undeclared (first use in this function)
KeyboardMouse.c:193: error: 'JOY_LEFT' undeclared (first use in this function)
KeyboardMouse.c:195: error: 'JOY_RIGHT' undeclared (first use in this function)
KeyboardMouse.c:198: error: 'JOY_PRESS' undeclared (first use in this function)
make: *** [KeyboardMouse.o] Error 1
    
pregunta FoamyGuy

2 respuestas

5

De acuerdo con mi comentario, ha especificado la placa UNO, pero no tiene las definiciones requeridas de Teclado / Joystick para la placa (no estoy seguro si UNO tiene algún botón para definir allí, solo tiene Leds, y los leds se definen en Led.h - verifique \ LUFA-111009 \ LUFA \ Drivers \ Board \ AVR8 \ UNO)

Entonces, lo que podría hacer es crear una carpeta de Tablero en su KeyboardMouse y crear los archivos vacíos Joystick.hy Buttons.h allí. Esto debería llevarte más lejos. Los errores que está viendo se deben al siguiente código en \ LUFA \ Drivers \ Board \ Buttons.h

#if (BOARD == BOARD_NONE)
    #error The Board Buttons driver cannot be used if the makefile BOARD option is not set.
#elif (BOARD == BOARD_USBKEY)
    #include "AVR8/USBKEY/Buttons.h"
....
#else
    #include "Board/Buttons.h" <------ THIS IS EXECUTED SINCE UNO DOES NOT HAVE BUTTONS
#endif

Entonces tu error

  

../../../../LUFA/Drivers/Board/Joystick.h:119:31: error:   Board / Joystick.h: No existe tal archivo o directorio

significa que su estructura de carpetas y su configuración de LUFA son correctas, pero le falta el archivo Buttons.h en su carpeta / placa / teclado de Keyboard. ¿Entendido?

Prueba lo que te he sugerido y mira hasta dónde llegas. Puede ver cómo definir botones en otras carpetas de la placa, por ejemplo, en LUFA \ Drivers \ Board \ AVR8 \ USBKEY \

EDIT Por cierto, olvidé mencionar, el error sobre common.h debería desaparecer después de solucionar este problema ya que ........ \ viene de un archivo en una ubicación diferente en la estructura de carpetas, por lo tanto, hay confusión.

EDIT Bien, aquí está el enlace sobre cómo crear controladores de placa personalizados: enlace page _writing_board_drivers.html

Lo que debe hacer es copiar los archivos Buttons.hy Joystick.h LUFA \ CodeTemplates \ DriverStubs \ (o intente copiar Buttons.hy Joystick.h de USBKEY mejor, creo que todavía debe especificar un valor para cada definición de lo contrario) Esto debería deshacerse de los errores indefinidos. Tiene secciones de TODO en los archivos que necesita actualizar.

Bien, entonces creo que también debo mencionar cómo se supone que se debe usar esto antes de continuar. Estos controladores / definiciones están diseñados para ser utilizados de una manera específica en su código, y LUFA está unificando el enfoque para usted. Por lo que sé, los botones se utilizan de la siguiente manera:

if (Buttons_GetStatus() & BUTTONS_BUTTON1){ ... do something when button 1 pressed....

De esta manera, si tiene varios tableros con al menos un botón, su código debería, en teoría, permanecer igual en todos los tableros. Soportes similares para LED, puedes usarlos como:

LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
....
LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);

Espero que te hagas una idea. Para utilizar estas funciones de biblioteca, debe definir los botones / joystick / led específicos en sus respectivos archivos de encabezado. Por ejemplo, en buttons.h debe especificar los archivos de encabezado personalizados que necesita, agregar máscaras de puerto para los botones (en qué pin de qué puerto están conectados), especificar la inicialización del puerto y cómo leer el estado de los botones. Puede encontrar todo eso en los botones de USBKEY.h - por ejemplo, está importando common.h, define BUTTONS_BUTTON1 como el pin 2 de un puerto, inicializa PortE con este botón (el botón es el pin 2 en el puerto E), y en Buttons_GetStatus lee el estado del botón.

También podría seguir y seguir de la misma manera para el joystick, pero espero que se haga una idea. El joystick es más complicado, pero es como tener 4 botones, de los cuales 0, 1 o 2 pueden estar activos en cualquier momento.

Por cierto, esto solo es útil si tiene algún botón en su tablero. Por ejemplo, hice un controlador de teclado sin ningún botón (aunque tuve que eliminar los códigos específicos de los botones). Usé el diodo Ir para leer códigos de control remoto y hacer que la placa actuara como teclado. Así que realmente no necesitas los botones, ni el joystick (por supuesto, depende completamente de lo que estés haciendo).

    
respondido por el Mihailo
1

La creación del firmware Arduino HID para la UNO r3 debería ser básicamente la misma que para la UNO anterior. Eche un vistazo a mi blog, por ejemplo, código, firmware e instrucciones: Arduino Hacking (HID teclado, mouse, joystick y firmware MIDI).

Aquí está la carne del post:

  

Construye e instala binutils para el AVR

wget ftp://sourceware.org/pub/binutils/releases/binutils-2.21.tar.bz2
tar xjf binutils-2.21.tar.bz2
cd binutils-2.21
mkdir build
cd build
../configure --target=avr
make
sudo make install
cd ../..
     

Genere e instale libgmp (necesario para gcc-4.5.3)

wget ftp://ftp.gmplib.org/pub/gmp-5.0.2/gmp-5.0.2.tar.bz2
tar xjf gmp-5.0.2.tar.bz2
sudo apt-get install m4
cd gmp-5.0.2
./configure
make
sudo make install
cd ..
     

Instala libmpfr y libmpc (necesario para gcc-4.5.3)

sudo apt-get install libmpfr-dev
sudo apt-get install libmpc-dev
     

Genere e instale gcc-4.5.3 para AVR

wget ftp://ftp.mirrorservice.org/sites/sourceware.org/pub/gcc/releases/gcc-4.5.3/gcc-4.5.3.tar.bz2
tar xjf gcc-4.5.3.tar.bz2
cd gcc-4.5.3
mkdir build
cd build
CFLAGS="-g -O2" ../configure --target=avr --with-gcc --with-gnu-as --enable-languages=c,c++ --disable-nls --disable-libssp --with-dwarf2
make
sudo make install
cd ../..
     

Crea e instala avr-libc

wget http://download.savannah.gnu.org/releases/avr-libc/avr-libc-1.7.1.tar.bz2
tar xjf avr-libc-1.7.1.tar.bz2
cd avr-libc-1.7.1
mkdir build
cd build
CFLAGS=-Os ../configure --build='../config.guess' --host=avr
make
sudo make install
     

Hacer una compilación de prueba de Arduino-usbserial

     

El firmware de Arduino-usbserial es el firmware predeterminado que la UNO   Viene instalado con en su atmega8u2. Implementa una serie.   interfaz a través de USB. Construye este firmware para verificar que tu avr-gcc   toolchain y avr-libc están funcionando.

cd Arduino/hardware/arduino/firmwares/arduino-usbserial
     

edite el archivo MAKE y asegúrese de que MCU = atmega8u2 y ARDUINO_PID =   0x0001

make
     

Deberías tener un archivo Arduino-usbserial.hex recién creado.

    
respondido por el Darran Hunt

Lea otras preguntas en las etiquetas