DESCRIPCION DE LA COMUNICACION SERIE
La telemetría recogida en cada ejecución de la rutina de control se vuelca en el puerto serie del microcontrolador para ser enviada al PC al finalizar la ejecución de cada iteración. Como un puerto RS232 trabaja con niveles de tensión diferentes a los del microcontrolador (±9V frente a 5V) se hace necesario utilizar un circuito adaptador de tensiones el cual se presenta en la figura siguiente, que como se puede contemplar está realizado con el circuito integrado MAX232.
Ya que solo se va a transmitir información desde el controlador hacia el PC se hace necesario conectar únicamente la señal de transmisión. Nótese que el circuito adaptador con MAX232 se corresponde con el circuito de aplicación estándar sugerida por el fabricante.
La transmisión de datos se realizará a 57.600 Baudios tal como se ha comentado anteriormente al configurar la EUSART. Esta transmisión demanda un tiempo que puede paralelizarse con la ejecución del código utilizando una interrupción extra y una cola de mensajes para tal fin, o bien si el período de ejecución de la rutina lo permite (como es el caso) esperar a que los datos hayan sido transmitidos antes de volcar un nuevo valor en el registro TXREG que es el destinado a esta operación.
Para optimizar la ejecución se transmite en primer lugar el ángulo de inclinación del péndulo (variable ANGLE) al comienzo de la rutina de control (ver el listado siguiente). Luego mientras los datos son transmitidos se ejecutan los cálculos de control y al finalizar se transmiten los datos restantes correspondientes a la acción calculada (TEL_ACT) y la dirección de movimiento de la cabeza resuelta (HEAD).
Nótese que en la llamada a la rutina de transmisión (Tx) se comprueba el bit TRMT del registro TXSTA de modo que se encuentre activo para indicar que es posible transmitir el dato siguiente, esta condición garantiza que los datos previamente volcados en TXREG, han sido transmitidos en su totalidad.
movf ANGLE,W ; Signed Byte [-128 - +127]
call Tx ; Angle -> RS232
(...)
movf TEL_ACT,W
call Tx ; Signed Action -> RS232
movf HEAD,W
call Tx ; Head -> RS232
(...)
;**********************************************************
Tx ; RS232
btfss TXSTA,TRMT ; 1 = TSR Empty
goto Tx ; Wait to transmit
movwf TXREG ; Transmits WREG
return
La forma más sencilla de recoger los datos enviados al PC es utilizar un programa emulador de terminal que permita volcar los datos recibidos por el puerto RS232 a un fichero binario en disco. Luego con el programa del listado que se presenta a continuación, se procesa este fichero convirtiéndolo al formato csv o "delimitado" y así ser luego importado por cualquier programa de hoja de cálculo como por ejemplo el que forma parte de la suite OpenOffice.org de Sun Microsystems Inc. Una vez leídos los valores de tiempo, ángulo, acción y posición pueden ser interpretados, trazar las gráficas, calcular máximos y mínimos, etc.
/**********************
* Pendulo.java
* Converts telemetry into .csv file
*
* @author Daniel Héctor Stolfi Rosso
*/
import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class Pendulo {
public static void main(String[] args) {
DataInputStream in = null;
if (args.length < 1) {
System.out.println("Uso: Pendulo fichero.log");
} else {
/* Open file */
try {
in = new DataInputStream(new BufferedInputStream(
new FileInputStream(args[0])));
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
/* Initialize vars */
int ch;
int time = 1;
int pos = 0;
try {
/* Read and process data */
while (true) {
System.out.print(time); // Time
System.out.print(",");
ch = in.readByte(); // Angle
System.out.print(ch);
System.out.print(",");
ch = in.readByte(); // Action
System.out.print(ch);
System.out.print(",");
ch = in.readByte(); // Move
if (ch=='L') {
pos--; // Left
} else if (ch=='R') {
pos++; // Right
}
System.out.println(pos);
time++;
}
} catch (IOException e) {
}
/* Close and quit */
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
A continuación se indica la forma de procesar el fichero de telemetría para convertirlo en .csv y por último se presentan ejemplos de las gráficas de pueden confeccionarse con el programa Calc de la suite OpenOffice.org y los datos generados por el sistema.
java Pendulo fichero.log > fichero.csv