Daniel Stolfi's web page
EspañolEnglish

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.

Adaptador Señal de Transmisión
Adaptador Señal de Transmisió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
Envío de Telemetría

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();
         }
      }
   }
}
Programa Para Procesar la Telemetría

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
Línea de Comando Para Procesar la Telemetría
Telemetría: Ángulo de Inclinación del Péndulo
Telemetría: Ángulo de Inclinación del Péndulo
Telemetría: Acción del Controlador
Telemetría: Acción del Controlador
Telemetría: Posición del Cabezal
Telemetría: Posición del Cabezal
LA PAGINA DE DANIEL STOLFI - Version 5.09 - 1993-2024 - Cookies Policy
Creative Commons License