Skip to content

Mongoosefirmware

rlrosa edited this page Feb 17, 2012 · 8 revisions

Introducción

Esta wiki explica las generalidades del código que corre en la Mongoose, y como llegar a tener un entorno de desarrollo que permita modificarlo.

Es de interés modificar el código que corre en la Mongoose. Motivación:

  • La Mongoose envía mucha información, procesada y cruda. Es de interés lmitar el tráfico de información, ya que el ancho de banda en una transmisión serie es limitado.
  • El código que corre en la Mongoose hace un montón de procesamiento de los datos crudos, transformándolos en ángulo, aceleraciones, etc. Para esto, require ser calibrada, y para ello es necesario programarle los parámetros de la calibración.

Entorno de desarrollo

El código que corre en la Mongoose está armado sobre Arduino. Para instalar el entorno de desarrollo:

sudo apt-get install arduino

Puede ser necesario instalar algún paquete de java, aunque es probable que ya lo tengas instalado por otras cosas.

Hay un script mktags.sh que permite generar un archivo TAGS, que luego se puede cargar en el emacs haciendo visit-tags-table, y permite navegar en el código (ir a la def de funciones) haciendo:

  • Ir a la def de algo: Alt+.
  • Volver atrás: Alt+*

El emacs está demás, pero ojo que a veces se confunde las tags, por ejemplo si hay varias funciones con el mismo nombre, pero una recibe int y otra recibe long.

Hardware para re-programar la placa

Para programar la Mongoose hace falta algo que convierte a serie 3.3v, por ejemplo un chip FTDI. CkDevices vende un FTDI_PRO que se adapta perfectamente. Nosotros utilizamos un minimodule de FTDI, por una cuestión de disponibilidad.

Las líneas que hace falta conectar son TX, RX, DTR y GND.

Las líneas TX, RX y GND (y 3.3v) están en el cable que se usa para lectura de datos, falta agregar la DTR para poder programar.

El código se descarga a la placa desde la IDE de Arduino.

Código

CKDevices tiene un proyecto en google code: mongoose-9dof-imu. El código que corre en la Mongoose está disponible para descargar en la sección downloads. La versión de la cual partimos fue la AHRS 1.1

Una copia del código está disponible en nuestro repositorio en github.

Para que Arduino encuentre las librerias de CKDevices, es necesario copiar la carpeta HMC58X3 a donde Arduino tiene el resto de las librerías. En Ubuntu 11.04, esto sería en /usr/share/arduino/libraries/.

Abrir la IDE de arduino (ejecutar arduino o buscar en Applications->Programming) y cargar el archivo que el programa principal: ckdevices_Mongoose9DOF_Base_AHRS_1_1.pde

El manejo del IDE debería ser intuitivo.

NOTA: Es necesario copiar las librerias de CKDevices al directorio de Arduino antes de abrir el IDE, sino no encuentro nada.

Cambios al Firmware

Nuestra versión del firmware está en mongoose_fw. Para compilarlo:

  • Abrir el arduino, e ir a File->Open y apuntarlo a la carpeta donde está el firmware mongoose_fw.pde.
  • Ir a Sketch->Verify/Compile, o apretar Ctrl+R.
  • Ir a Tools->Serial Port, y elegir el FTDI (suele ser /dev/ttyUSB0).
  • Ir a File->Upload To I/O Board.

Si hay problemas con un error de sync, verificar que esté conectado el cable DTR, que solamente se necesita para bajar código nuevo a la mongoose. No es necesario para el funcionamiento normal.

I2C a 400kHz

Para hacer que el i2c en la mongoose trabaje a 400kHz, incluir las siguientes líneas:

#define TWI_FREQ_NUNCHUCK 400000L
TWBR = ((CPU_FREQ / TWI_FREQ_NUNCHUCK) - 16) / 2;

En la función setup(), después de Wire.begin().

Clone this wiki locally