Todo en orden

Ya está funcionando la placa con los phidgets y con el servidor web andando, mostrando la Interfaz Web de Tea. Falta poco para tenerlo todo listo para mañana. No me creo que esto no esté dando ningún problema, está saliendo todo del tirón. Seguro que mañana llego allí y se va todo al peo.

Comments (1)

Integrando el manejo de Phidgets en el servidor

De momento va bien la cosa, aunque con un “pero”: No es posible obtener la identificación individual de cada sensor analógico. El pc (o la placa en este caso) sólo sabe que tiene conectado un phidget (el kit de conexión), pero no sabe nada acerca de cuáles son los sensores que este tiene conectado en cada puerto.

Así que habrá que buscar un puerto fijo para cada tipo de sensor. No hay problema por ahora. Ya veré si esto se puede mejorar de alguna manera.

Dejar un comentario

Ya tengo los phidgets

Ahora a intentar hacerlos funcionar para el lunes para que las demos sean mucho más completas.

También están en marcha la memoria del proyecto y la presentación para la final del CUSL granadino.

Dejar un comentario

Preparando la final del CUSL granadino

Desde hoy hasta el domingoporlanochelunes comienza mi maratón particular para dejar todo lo que pueda del proyecto a punto para la final del CUSL de Granada. Así que perdonadme de antemano si saturo el planet de entradas por pesao.

Cosillas que tengo que hacer:

  • Documentar
  • Memoria inicial del proyecto
  • Techincal Report 3 (dejarlo todo lo terminado que pueda)
  • Techincal Report 4 (No tengo muchas esperanzas de terminarlo para el lunes)
  • Configurar correctamente el servidor Tea
  • Preparar demos
  • Funcionalidades para la interfaz web, a la que estoy pensando bautizar como TWI (Tea Web Interface)

Mucha suerte a todos y ánimo. Un saludo

Dejar un comentario

BeagleBoard hacking (I)

(Si a esto se le puede llamar “hacking”)

Introducción y todo eso

La historia va más o menos así: Hasta hace poco no he tenido contacto con microcontroladores ni con la programación a nivel de máquina de verdad. Yo le echo la culpa al plan de estudios, ya que no se ve casi casi nada sobre estas cosas. Parece que entrenan a la gente ya directamente para que trabaje en consultorías, pero esto es otro tema.

Como ha resultado gustarme un montón este tema y parece que mi carrera profesional va a ir tirando por ese campo, es hora de que aproveche cada rato libre que tenga para hacer chapucillas y experimentos con micros, para recuperar el tiempo perdido. Es una lástima también que sea un terreno menos accesible que otros como la construcción de software de escritorio, aplicaciones web o bases de datos, ya que para aprender realmente a manejar un micro necesitas cierto material hardware, que en muchos casos no es ni siquiera asequible para un pobretico estudiante.

El caso es que ahora sí que dispongo de material, ganas y tiempo (más o menos). Tengo una placa de evaluación AT91EB40A que me dejó Jesús y que viene de lujo para aprender a hacer cosas sobre el ARM7TDMI y a manejar dispositivos y todas esas cosas. También estoy en medio de un proyecto sencillito con un PIC para controlar una matriz de 8×8 leds como si fuera una pantalla. Es una chulería porque así aprendo también a hacer mis propias placas de circuito impreso, entre otras cosas.

El cacharro

Y luego tengo la Beagle, que tiene el inconveniente de que no es una placa orientada al aprendizaje de estos chanchullos a bajo nivel, sino que está hecha para meterle un sistema operativo como Linux y programar sobre eso. Para empezar, el OMAP3 es una bestia de micro (el manual ronda las 3500 páginas), y los dispositivos de la placa no son tan fáciles de manejar como los de las placas de evaluación porque se controlan muchos de ellos a través de otros chips de apoyo, como el TPS65950. Pero algo se puede hacer, y todo es ponerse con un poco de paciencia. Además estoy aprendiendo un montón.

Metiéndonos en harina

Bien, lo que pretendo es ir escribiendo en el blog los experimentillos que voy haciendo, porque si no se me acabarán olvidando. Y si le sirven a alguien, pues mejor todavía. De todas formas, muchas de las cosas que pondré están sacadas del trabajo de otras personas que he encontrado por ahí.

Si dios quiere y tengo tiempo, la idea es hacer un experimento sencillo en la Beagle (por ejemplo, encender leds de la placa y recoger el estado de un botón) de varias formas, desde el nivel más bajo posible, en ensamblador y sin sistema operativo, hasta llegar al nivel de usuario en Linux.

Así que esta primera parte tratará lo más sencillo de todo: Cacharrear con los leds y el botón USER de la placa desde linux y al nivel más alto posible.

Ingredientes

Antes de nada, vamos a suponer que tenemos todas las cosas siguientes:

  • Una BeagleBoard
  • Un Linux instalado en ella. Yo estoy utilizando Debian
  • Alguna forma de acceder a una shell en el Linux de la placa. Yo conecto a través del puerto serie con el PC, pero se puede utilizar un teclado y un monitor en la placa directamente.
  • Manual de la BeagleBoard:  BeagleBoard System Reference Manual (se puede encontrar en beagleboard.org)
  • Manual del OMAP3530 (ojo, bicharraco de manual):  SPRUF98D (se puede encontrar en la web de Texas Instruments)

Detalles a tener en cuenta

Para poder hacer este experimento en concreto es necesario activar una opción del kernel llamada “CONFIG_GPIO_SYSFS”. Mirad a ver si la teneis activada. Si no lo está, habrá que compilar un kernel con esa opción. Cosas de la vida.

El meollo

Bien, cumplidos los requisitos anteiores vamos a ver qué podemos cacharrear con la placa. Como he dicho antes, hay unos cuantos dispositivos de la placa conectados directamente a GPIOs del micro. Entre ellos están los leds 0 y 1, y el botón USER. El puerto de expansión es todo gpios, pero para ver los resultados de activarlos y desactivarlos ahí habría que pinchar algo (un led nos vale).

Empezamos por los leds. Con el SO que le tengo yo instalada a la placa, una vez que este está en marcha, uno de los leds se pone a parpadear constantemente. Como molesta, vamos a ver cómo se puede apagar.

Como esta primera parte es para explicar cómo hacer estas cosas en espacio de usuario sin mancharse mucho, vamos a hacer uso del sysfs. El kernel de linux, si está configurado para ello, nos exporta amablemente a este sistema de archivos virtual muchas de las interfaces necesarias para toquetear el hardware. En nuestro caso, hay unos directorios que son /sys/class/led/beagleboard::usr0 y /sys/class/led/beagleboard::usr1 a través de los cuales podemos manejar esos dos leds a través de unos pseudoarchivos.

Por ejemplo, queremos apagar el led0 o, al menos, cambiar el modo de conmutación. Pues si miramos en un archivo llamado trigger dentro del directorio del led0 y vemos que la salida es algo así:

none mmc0 [heartbeat]

Es decir, que tiene 3 modos de encendido: “None” se supone que es para que no se encienda, “mmc0” para que se encienda cuando se hacen transferencias desde o hacia la tarjeta de memoria, y “heartbeat” que es el que está seleccionado, pues para que parpadee como los latidos de un corazón.

Así que si queremos apagarlo lo único que hay que hacer es cambiar el modo de encendido (en este caso a “none”). Lo podemos hacer así de simple:

echo “none” > trigger

La abstracción que nos proporciona el kernel nos permite olvidarnos de los detalles del hardware y hacer este tipo de operaciones así de sencillo, como escribir o leer en un archivo.

¿Y el directorio del botón USER dónde está? Esto es otra cosa. Los gpio de los leds 0 y 1 (gpio 149 y 150 respectivamente) están, por decirlo de algún modo, “reclamados” por el kernel. Pero el gpio 7, que es el del botón, no se está usando de momento. Sin embargo, podemos pedirle al kernel que nos exporte una interfaz en el sysfs para manejarlo.

Esto se hace en el directorio /sys/class/gpio. Entre otras cosas, hay allí un par de archivos llamados “export” y “unexport” que sirven precisamente para eso. Nosotros queremos acceder al gpio7, así que hacemos lo siguiente:

echo 7 > export

Y el kernel nos dará un nuevo directorio llamado gpio7 a través del cual podemos configurar y consultar el botón USER. Por ejemplo, podemos ver que dentro de ese directorio hay un archivo “value”. Si este archivo lo consultamos sin pulsar el botón:

cat value

nos devolverá 0, pero si repetimos la operación con el botón pulsado nos devolverá 1. Así, sin tener que meternos a programar módulos del kernel ni drivers, podemos utilizar esto para utilizar el estado del botón en una aplicación sencilla (mediante polling):

#include <stdio.h>
#include <unistd.h>

int main(void)
{
        int state = '0';
        FILE *fd;
        int read;
        unsigned int usecs = 100000;

        while(1) {
                fd = fopen("/sys/class/gpio/gpio7/value", "r");
                read = fgetc(fd);
                fclose(fd);
                if(read != state) {
                        if(read == '1') {
                                printf("Boton pulsado\n");
                                state = '1';
                        }
                        else {
                                printf("Boton soltado\n");
                                state = '0';
                        }
                }
                usleep(usecs);
        }
}

Lógicamente, el polling no es la técnica más eficaz. Pero en otras entregas del minicurso este veremos si dios quiere, cómo hacer estas cosas como los hombres. Es decir, con interrupciones a nivel de kernel. Un saludete

Comments (1)

Interfaz web para Tea

Ayer eché un rato “diseñando” y ya tengo medio lista la interfaz web que mostrará el servidor web que irá en la placa. A través de ella se podrá consultar (cuando esté terminada) el estado del servidor, los módulos que hay instalados, las estadísticas, y se podrán configurar unas cuantas cosas. Lo más chulo será sobre todo la gestión de módulos. A ver si sale bien.

Por cierto, yo de diseño web sé muy poco. Si alguien que controle tuviera un ratillo libre molaría que me echara una mano con esto. Aunque de momento estoy contentillo con cómo ha salido. Me esperaba una cosa peor.

Dejar un comentario

Primer lanzamiento de Oolong

Se puede descargar de aquí: http://forja.rediris.es/frs/?group_id=692

Se trata de una versión muy cruda pero ya funcional. No debería dar errores raros, pero es una versión muy previa y muy apresurada en la que no se contemplan ni de lejos todos los posibles errores en tiempo de ejecución, así que no me machaqueis mucho, ya sacaré otra más bonita y más segura.

Al menos sirve como esqueleto para ir embelleciendo y perfeccionando los detalles. Realiza la conexión con el servidor Tea (de momento virtual) y carga los plugins en tiempo de ejecución sin problemas. El resto de cambios que haré serán sobre todo gráficos (de momento la interfaz es provisional), alguna funcionalidad añadida, la parametrización de unos cuantos atributos y algún que otro cambio de diseño. Y en la medida de lo posible la optimización de la aplicación para mejorar la velocidad y el consumo de memoria.

Próximamente haré un pequeño manual de usuario.

Un saludo

Comments (1)

Older Posts »
Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.