68HC11 Internet Data-Logger

Introducción:

El sistema que se decribe a continuación consta de un simple microcomputador de 8 bits que periodicamente convierte la tensión analógica de sus 8 canales de entrada en un formato digital, selecciona los canales de interés, y almacena los datos en su memoria en una cola FIFO circular.

Este sistema puede conectarse a la red Internet mediante un puerto serie que utiliza el protocolo SLIP. Para ello se necesita un router que puede ser perfectamente un PC con linux. La función del router es unicamente la de transmitir paquetes IP entre la interfaz ethernet del PC y el puerto serie en el que se conecta el data-logger.

Gracias a la conexión a Interner pueden consultarse los datos registrados por el prototipo mediante alguno de los protocolos de red conocidos. Esto nos permite ahorrarnos el desarrollo de aplicaciones específicas para la comunicación con el data-logger. Dadas las limitaciones del prototipo, el protocolo utilizado es Trivial-FTP, que por tratarse de una comunicación UDP simplifica el ya de por si complicado software de red.

Este prototipo se encuentra actualmente conectado en la dirección de red siguiente:

datal.ele.uva.es

Desde esta dirección puede contestar a paquetes ICMP-ECHO (ping) y servir una serie de ficheros por TFTP. El siguiente comando nos muestra por pantalla el directorio del data-logger:

tftp datal.ele.uva.es

get index /dev/tty

quit


Precedentes:

El diseño y programación de este prototipo han estado inspirados en un proyecto previo: El termómetro electrónico del G.U.I.

Se pretendía con ello registrar la temperatura en Valladolid, de forma que se pudiera consultar la temperatura actual y su evolución temporal en la página Web del G.U.I.

Para ello diseñé en su día un prototipo muy específico. Este circuito, que se muestra en la figura (o que puedes ver o imprimir en postcript) era básicamente un conversor A/D de 8 bits junto con un conversor paralelo-serie que permitía leer los datos desde el puerto serie del PC.

La entrada del conversor se obtenía del sensor de la figura (postcript), que fue calibrado en su día, pues su respuesta era poco lineal.

No tardé mucho tiempo en darme cuenta de las limitaciones de este sistema de captura de datos. El circuito necesitaba un RESET manual, de modo que rara vez medía datos correctos, por otra parte era casi imposible añadir nuevas entradas para convertir las tensiones de otros sensores, y lo peor de todo: La captura de los datos la llevaba a cabo un PC con Linux cuyos administradores no conocian gran cosa acerca del sistema de medida, y que cada vez que actualizaban el sistema operativo se cargaban los daemons responsables de la captura de datos.

Aún así este sistema registró la variación de la temperatura en Valladolid durante más de un año. El defecto del RESET se solucionó en el papel, pero no en la práctica, y en la actualidad el tema de la temperatura ha sido abandonado en el G.U.I.

Con estos precedentes me planteee de nuevo el problema, teniendo en cuenta los siguientes objetivos:

Como para entonces ya había tomado contacto con los microcontroladores decidí que el 68HC11 de Motorola era muy apropiado para el caso, ya que integra un conversor A/D de 8 bits con 8 canales de entrada. Además este micro contaba con un compilador de C cruzado de GNU y con un bootloader serie que simplifica mucho la depuración del software.


El Hardware:

Las principales características del prototipo son:

El 68HC11A1 incluye la mayor parte de las funciones del prototipo. Sus principales características son:

En la figura (postscript) se muestra el esquema del prototipo construido. Este prototipo no fue diseñado explicitamente para este fin (si lo hubiera hecho en su día tendría más memoria disponible para el almacenamiento de datos). El esquema no es un reflejo totalmente exacto del circuito, pero sí que incorpora todos sus puntos más destacables (de hecho solo faltan en el esquema los condensadores de desacoplo y algunas resistencias de pull-up/down en algunas salidas del 68hc11).

Uno de estos puntos destacables es la presencia de una memoria SRAM no volátil de Dallas. En esta memoria se graban los programas gracias al bootloader serie del hc11 y en ella permanecen aunque se apague el prototipo. El unico defecto de esta memoria es su precio :).

El pulsador de MODO permite elegir el tipo de arranque del HC11. Si se mantiene pulsado mientras se enciende el prototipo o se hace un RESET, el HC11 ejecuta su bootloader serie interno, mientras que si no se pulsa este botón el HC11 arranca desde la memoria no volátil.

Un punto problemático fue la elección de la frecuencia del cristal de cuarzo del sistema. No todos los cristales son capaces de generar unas velocidades estándar para la transmisión de datos serie. Uno muy adecuado es el de 7.3728 MHz. Con este cristal pueden generarse todas las velocidades típicas desde 115200 a 300 bps. Desgraciadamente no parece que este cristal sea muy popular en los comercios del sector. Por ello opté por un cristal de 10 MHz, que permite obtener los 19200 y 9600 bps aunque con un pequeño error. El 68HC11 divide la frecuencia del cristal por 4, con lo que la frecuencia de reloj real es de 2.5 MHz.

Como demostración del funcionamiento del prototipo se ha conectado un sensor de luz infraroja al canal 7 del prototipo, y en la actualidad se registra una muestra cada minuto. El prototipo puede almacenar hasta 4096 muestras, lo que equivale a unos 3 dias, antes de empezar a descartar las muestras viejas. En la gráfica se muestra la evolución de la luz en el despacho de un servidor a partir de la noche de San Juan de 1998.


El Software:

La mayor complejidad del proyecto está sin ninguna duda en el software. El hardware es tan genérico que puede usarse para propósitos muy distintos, y es el software el que define el tipo de aplicación.

Las herramientas que he utilizado para pasar los ficheros de código fuente, en lenguaje C y ensamblador, al código maquina que finalmente se ha grabado en la memoria son las siguientes:

Las principales características del software desarrollado son:

Una descripción más detallada del software del prototipo, así como su estado actual se describen en el fichero changelog que se encuentra en el código fuente.

También se incluye un sencillo programa para la configuración remota del prototipo. Este programa sólo funcionará si se ejecuta desde el ordenador indicado en config.h con el mismo password que el programado en el prototipo.

En cuanto a la programación del 68HC11 la principal fuente de información ha sido el manual del usuario de Motorola. En este manual se describe muy detalladamente la programación de todos los perifericos integrados en el 68HC11, incluyendo código de ejemplo que en algunos casos ha sido transladado al código fuente casi literalmente.