Luego de varios días de acumular bytes en la memoria EEPROM 24C64, ha llegado la hora de descargar todos esos valiosos datos al ordenador y comprobar si todo ha funcionado según lo esperado. Para descargar la información almacenada en la memoria del datalogger utilizaremos la conectividad USB que nos ofrece el PIC 18F2550 y una sencilla aplicación realizada en VB6 para facilitarnos la tarea. Hasta ahora todo fue un trabajo silencioso de adquisición de datos, aquí comienza la verdadera acción y la obtención de los beneficios que nos brindará el datalogger.
Fue muy fría esta semana por estas tierras australes y los gráficos obtenidos corroboran las gélidas temperaturas que registró el datalogger con su STCN75. La ubicación que decidimos darle al desarrollo fue un pequeño lugar en una de las ventanas que dan a un patio trasero de la casa. Afortunadamente la habitación donde se realizó la acumulación de datos estaba aislada del resto de la casa ya que hubo momentos en que los valores térmicos descendieron a tan sólo 4°C. Durante el día la marcación ascendía y hasta tuvimos situaciones accidentales: por ejemplo, un mediodía, al abrir la ventana para ventilar el cuarto, por descuido el sol comenzó a dar sobre el STCN75 elevando la temperatura a valores que no correspondían con la temperatura real del momento. Es decir, el registro almacenó valores mayores a los 20°C cuando en realidad apenas teníamos 12°C en pleno mediodía.
Otro accidente que tuvimos: una aleatoria falla en la grabación de algunos registros térmicos y horarios. La falla se debió a la lejanía de conexión entre el módulo que abarca al DS1307 y a la memoria 24C64 y el módulo que soporta al STCN75. La captación de ruidos por un bus I2C muy extenso en longitud que cruza por debajo de la placa entrenadora ha provocado este pequeño defecto que no ha complicado en absoluto al funcionamiento global de nuestro datalogger. Una construcción modular, un protoboard y módulos alejados entre sí propiciaron este pequeño defecto que notarán si analizan los archivos de texto que acompañan al software que entregamos en este artículo. Por supuesto, la solución obvia y definitiva a este problema es la construcción de un PCB optimizado para este equipo. Antes de continuar mostrándoles los resultados obtenidos, haremos un breve repaso por el hardware y las partes fundamentales que intervienen y se agregan en esta segunda parte del desarrollo.
Al sistema que hemos visto en el artículo anterior le hemos suprimido la alimentación mediante la conexión USB al ordenador y le hemos agregado al montaje una pequeña fuente de alimentación construida especialmente para protoboard. Con una entrada de 12Volts a partir de una pequeña fuente de pared y dos reguladores fijos, obtenemos una construcción muy simple y efectiva. Un 7805 (5Volts) y un AZ1117 (3,3Volts) en una pequeña placa de menos de 5 centímetros por lado resumen una fuente de energía pequeña y fácil de incrustar en cualquier zona del protoboard. En nuestro caso, hemos elegido un rincón libre donde no moleste para trabajar con libertad y, por sobre todas las cosas, para que no afecte a las lecturas de temperatura del STCN75. Como mencionamos antes, dos reguladores, algunos capacitores, un par de LEDs indicadores de tensión de funcionamiento y allí tenemos nuestra fuente de alimentación para protoboard. De este modo, con una sencilla fuente de pared y un módulo muy fácil y rápido de instalar en cualquier punto del protoboard, resolvemos el tedioso trabajo de armarle a cada desarrollo una fuente incorporada dentro del experimento para usarlo de modo autónomo y ambulante.
Utilizaremos la entrada de 5Volts proveniente desde el puerto USB para informarle al PIC 18F2550 que nos hemos comunicado con el ordenador. La placa entrenadora de Microingenia S.L. trae un pin dedicado a tal fin (USBS), pero en cualquier construcción clásica esto se resuelve con un divisor resistivo que luego se conecta a una entrada digital del microcontrolador. De este modo, con una simple instrucción IF-THEN se interroga en forma periódica para conocer el estado de conexión de nuestro datalogger. A este tipo de desarrollos lo hemos visto con anterioridad en el Receptor NeoTeo, con un PIC 18F4550. El concepto es el mismo: cuando un estado lógico alto aparece en la entrada que hemos escogido para monitorear la conexión, el firmware del PIC pasará a un “modo esclavo” y quedará a merced de las instrucciones que determine el software que utilizaremos en el ordenador.
Este pequeño software que desarrollamos en VB6 detendrá la grabación de datos en la memoria EEPROM y facilitará la transmisión de los datos que ella tenga almacenados hacia el ordenador. Una vez allí, serán interpretados y mostrados en forma adecuada para completar así el trabajo del datalogger. Una vez extraídos los datos almacenados en la EEPROM, la grabación se reinicia desde la posición cero de la memoria lista para ser cargada durante otras dos semanas. No olvidemos que una memoria 24C64 permite almacenar hasta 14 días de nuestra información. El formato de esta grabación se realizaba de la siguiente manera: en el siguiente orden se graban seis bytes: Día, Mes, Hora, Minutos, Signo y Temperatura. Recordemos que “Signo” es un espacio vacío cuando la temperatura se encuentra por encima de los cero grados centígrados y un signo “menos” cuando las temperaturas pasan a ser “bajo cero” (El STCN75 puede medir hasta -55°C). Por el lado de los grados de temperatura, éstos se registran en la EEPROM como un número entero, sin decimales. De este modo, podemos almacenar el valor dentro de un único byte.
La escritura de los bytes mencionados dentro de la memoria se realiza (en Basic) mediante la instrucción BUSOUT, y la lectura a través de BUSIN. Primero escribimos la dirección inicial de escritura/lectura dentro de la memoria y luego procedemos a realizar la acción necesaria. Es decir, primero ubicamos el puntero, luego enviamos o extraemos los bytes uno a uno a partir de la dirección escrita en forma inicial. (Para recordar y refrescar estos conceptos puedes leer el artículo de memorias 24CXX o el anterior artículo del datalogger). Cuando el software del ordenador toma el mando de la situación, organiza mediante mensajes en el display del datalogger las operaciones que se suceden en el sistema. Es decir, nos informará qué está haciendo el datalogger y qué debemos hacer nosotros. Leeremos mensajes como “Esperando pedido de datos” o “Leyendo memoria de datos EEPROM”, entre los principales. Lo que debemos tener presente es que el sistema nos anunciará (a través del display) cuándo comienza la lectura de datos y cuándo termina. No debemos retirar en ese momento el cable USB ya que la comunicación se interrumpirá, la cadena de datos se corromperá y tendremos que ejecutar toda la operación nuevamente.
El programa que hemos preparado consta de muy pocas partes, todas muy importantes. En un sector destacado encontramos un cuadro de texto donde se exhibirán los datos recuperados cual si fuera un listado inmediato que podemos analizar allí mismo sin mayores recursos que la observación del texto mostrado. En el sector derecho encontramos tres botones. El primero (superior) se activa al establecer conexión USB entre el ordenador y el datalogger. Este botón, al activarse, nos permitirá obtener los datos almacenados en la EEPROM que, como dijimos en el párrafo anterior, podemos leer y analizar en la misma aplicación.
Luego encontramos un segundo botón que se activará al momento de desconectarnos del puerto USB. Este botón nos permitirá grabar información en dos archivos del tipo TXT ya predeterminados que se encuentran junto a los ficheros que componen la aplicación. Uno es Datalogger.txt y el otro es Temp.txt. En el primero se graban los datos tal como los vemos en la pantalla de aplicación, mientras que en el segundo archivo sólo se guardarán los valores de temperatura separados por un espacio en blanco cada uno. El primer archivo puede ser impreso y guardado cual si fuera un registro, un libro semanal, un log de datos (datalogger). El segundo archivo puede ser abierto por cualquier software capaz de manejar planillas de cálculo, obteniendo de este modo la posibilidad de conseguir un gráfico de la variación de temperatura en función del tiempo. Un gráfico de barras o de líneas puede ser muy útil para apreciar variaciones y curvas de comportamiento que a veces los fríos números no nos muestran. Un gráfico es mucho más “amigable” y fácil de interpretar.
En este punto debemos tener especial atención ya que la mayoría de los programas que trabajan con planillas de cálculos sólo permiten cargar hasta 256 datos (en el eje X). Esto significa que de las 1365 mediciones de temperatura que puede almacenar una memoria 24C64, sólo podremos “graficar” bloques de 256 datos. De todos modos, este es un período de tiempo importante (256 multiplicado por 15 minutos equivale a 2 días y medio) y en él podemos encontrar muchos eventos dignos de ser analizados. De hecho, en la imagen que te mostramos, son muy claras las variaciones de temperatura del día a la noche y permiten observar con claridad las máximas y las mínimas registradas con su evolución intermedia incluida.
El tercer y último botón del grupo realiza esta operación: nos muestra en un gráfico las primeras 256 muestras de temperatura, es decir, desde la posición cero de memoria hasta la 255. Si deseamos analizar otros sectores, como mencionamos antes, tendremos que editar el archivo Temp.txt, extraer el sector de datos que nos interesa, crear un nuevo archivo de texto y abrirlo con la aplicación que nos permitirá graficar los parámetros seleccionados. Nada complejo, por supuesto. Lo importante que debemos recordar es lo siguiente: leer los datos almacenados en la memoria no borra ni elimina los datos almacenados en su interior, sólo se salteará la eventual grabación que pudiera tocarle en ese preciso momento que estemos “leyendo” la memoria. El firmware del PIC está preparado para llegar hasta el final de la capacidad de la memoria EEPROM y luego comenzar a sobrescribirla nuevamente como si fuese un círculo de almacenamiento. El firmware que te entregamos está preparado para ser cargado al 18F2550 con el bootloader que ya hemos utilizado en ejemplos anteriores.
Una vez alcanzada la posición 8190 (la memoria tiene capacidad para 8192 bytes), el firmware comienza la grabación desde la posición cero. Es decir, si en 14 días no tuvimos tiempo de ir a obtener los archivos de texto con un sencillo ordenador portátil al menos, la culpa no será del datalogger. Él comenzará su cuenta como si recién se hubiera conectado a la fuente de alimentación. Debemos estar atentos entonces a ese concepto: Los datos no se borran al leerlos, pero sí se reinicia la memoria (a posición cero) al ser leída. También se reiniciará su puntero (comienza a grabar desde posición cero de memoria) si desconectamos la energía del datalogger o si la acumulación de datos supera los 14 días. Imagino que al leer estas líneas ya estarás pensando en una unidad UPS o de energía ininterrumpida para mantener siempre en funcionamiento a este registrador de datos. De todas maneras, al reestablecerse la energía, los datos acumulados no se borran de manera automática. Es decir, podemos leer los datos que lleva acumulado el sistema hasta ese momento y luego dejar que vuelva a comenzar desde cero. De otro modo, también podría modificarse el firmware para conservar la posición de memoria alcanzada al momento de un teórico corte energético y luego rescatar este valor para continuar grabando desde la última posición al momento de interrumpirse la energía. Pero, claro, eso ya es parte de tu genialidad creativa y tu capacidad como desarrollador.