Proyecto de Tesis en Mecatrónica. Universidad Técnica del Norte. Ernesto Palacios <mecatronica.mid@gmail.com>

Dependencies:   EthernetNetIf HTTPServer QEI_hw RPCInterface mbed

Files at this revision

API Documentation at this revision

Comitter:
Yo_Robot
Date:
Wed Jun 06 03:08:27 2012 +0000
Parent:
19:c26cf8a48986
Child:
21:353b0fe8fc54
Commit message:
Version 1.9 - Limpiar el cdigo - Se configura la alta velocidad a travez de archivo de configuracion - ; ; Falta I2C Encoder y Alarmas.

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
setup.cpp Show annotated file Show diff for this revision Revisions of this file
setup.h Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Wed May 23 17:09:28 2012 +0000
+++ b/main.cpp	Wed Jun 06 03:08:27 2012 +0000
@@ -1,4 +1,17 @@
-//  GENERADOR DE FRECUENCIAS
+/*******************************************************************\
+ *                                                                 *
+ *                        DESLIZADOR LINEAL UTN                    *
+ *                                                                 *
+ *   Archivo:      main.cpp                                        *
+ *   Autor:        Ernesto Palacios <meacatronica.mid@gmail.com>   *
+ *   Version:      v2.0                                            *
+ *   Dependencias: setup.h, setup.cpp                              *
+ *   Descripción:  Este es el archivo principal para el microcon-  *
+ *                 trolador mbed para la comunicación  y  control  *
+ *                 del deslizador                                  *
+ *   Fecha:        Ibarra, 05 de junio de 2012                     *
+ *                                                                 *
+ *******************************************************************/
  
 #include "mbed.h"
 #include "setup.h"
@@ -6,16 +19,17 @@
 #include "HTTPServer.h"
 #include "RPCFunction.h"
 #include "RPCVariable.h"
-//#include "SerialRPCInterface.h"
+
+//  Entradas Salidas 
 
 Serial          pc( USBTX, USBRX ); //Comunicacion Serial directa al computador
 Serial          RS_232(p9, p10);    //Comunicacion Serial para MAX232
-Serial          encoder(p28, p27);  //Comunicacion Serial para tarjeta del encoder
+I2C             encoder(p28, p27);  //Comunicacion I2C para los encoders
 
 DigitalOut      pin_son( p7 );       // SON
 DigitalOut      pin_dir( p26 );     //  SIGN+
 InterruptIn     pin_alm( p8 );     //   ALM 
-AnalogOut       aout( p18 );      //    0.0 a 1.0 float
+AnalogOut       aout( p18 );      //    VOUT
 
 DigitalIn       isHTTP( p15 );   // Modo Ethernet/Serial
 DigitalIn       isFast( p16 );   // Serial Alta velocidad/Baja Velocidad
@@ -24,16 +38,17 @@
 DigitalOut      led_verde( p21 ); // Led verde del conector Ethernet
 DigitalOut      led_rojo(  p22 ); // Led naranja del conector Ethernet
 
-// Faltan las interrupciones del enconder.
+//  Objetos Ethernet
 
 EthernetNetIf eth;  
 HTTPServer svr;
-        
-
 LocalFileSystem fs("local");
 
 
-//  Anadir funciones al Protocolo RPC
+//  Anadir funciones al Protocolo RPC:
+//
+//  estas son las funciones de acceso de la libreria HTTP_ASM sobre
+//  el Protocolo RPC
 RPCFunction SetFQ  (&setPTO_eth,  "PTO");
 RPCFunction SetAOUT(&setAout_eth, "AOUT");
 RPCFunction SetDIR (&setDir_eth,  "DIR");
@@ -45,10 +60,11 @@
 
 int main() {
     
-//**********************************************************************************************//
-    if( isHTTP )   //Configura Red Ethernet
+//***************    Configura Red Ethernet     **************************************************//
+    if( isHTTP )   
     {
-                           
+
+        // Añade clases base al protocolo RPC
         Base::add_rpc_class<AnalogIn>();
         Base::add_rpc_class<AnalogOut>();
         Base::add_rpc_class<DigitalIn>();
@@ -61,11 +77,12 @@
         Base::add_rpc_class<BusInOut>();
         Base::add_rpc_class<Serial>();
         
+        // Configura conexión Ethernet
         printf("Configurando...\n");
         EthernetErr ethErr = eth.setup();
         if(ethErr)
         {
-            printf("Error %d en setup.\n", ethErr);
+            printf("Error %d en la configuración.\n", ethErr);
             return -1;
         }
         printf("Setup OK\n");
@@ -87,30 +104,39 @@
         // http://a.b.c.d/mbed.htm or http://a.b.c.d/files/mbed.htm
    
     }
-//**********************************************************************************************************//
+
+
+//***************    Configura Comunicacion Serial     **************************************************//
     
     else  // Caso Contrario Anadir modo Serial
     {
-        if( isPC )          //Si utiliza el Puerto Virtual Incluido.
+        if( isPC )                      // Utiliza el Puerto Virtual Incluido.
         {
             pc.attach( &ISR_Serial );
-            if( isFast ) //Configurar Serial a alta velocidad
+            
+            if( isFast )                     //Configurar Serial a alta velocidad
                 pc.baud( 115200 );
         }
-        else               // Utiiliza el puerto con MAX232 o directamente (TTL)
+        else                          // Utiiliza el puerto serial hacia MAX232
         {
             RS_232.attach( &ISR_Serial );
-            if( isFast )  //Configuración serial a alta velocidad
+            if( isFast )                     //Configurar Serial a alta velocidad
                 RS_232.baud( 115200 );
         }
     }
     
+//*******************************************************************************************************//
+    
+    
     // Ajustes iniciales del Driver
-    setTimer2();  // Configurar PTO
-    pin_son = 0;  // Servo Apagado por defecto
+    setTimer2();    // Configurar PTO
+    pin_son = 0;   // Servo Apagado por defecto
     aout = 0.5;   // Voltaje de salida 0V por defecto( +-10V! )
     
-    pin_alm.fall( &ISR_Alarm ); //Entrada de la alarma
+    
+    // Atar las alarmas a las interrupciones
+    
+    pin_alm.fall( &ISR_Alarm ); // Entrada de la alarma
     
     while(1) 
     {
--- a/setup.cpp	Wed May 23 17:09:28 2012 +0000
+++ b/setup.cpp	Wed Jun 06 03:08:27 2012 +0000
@@ -1,7 +1,7 @@
 /**
- * @brief  Tren de impulsos con Timer2
  * @file   setup.cpp
  * @author Ernesto Palacios
+ * @brief  Codigo Fuente de las funciones para el deslizador.
  *
  * Created on 25 de Marzo de 2012
  *
@@ -23,111 +23,10 @@
 extern InterruptIn  pin_alm;   // ALM 
 extern AnalogOut    aout;      // +-10V
 
+
 int fq_posicion = 10000;  // Variable global donde se almacenara 
                          // la velocidad de posicionamiento en Hz
 
-
-EthernetNetIf configurarEthernet()
-{
-        //____________ *** ARCHIVO DE CONFIGURACION  ***_______________________ //
-        
-        printf("\n *** CONFIGURACION ETHERNET DE MBED ***\n"); 
-        printf("Leyendo archivo de configuracion...\n\n"); 
-        
-        FILE *fp = fopen("/local/config.txt", "r"); // Abre el archivo y lo guarda en fp
-        
-        if(!fp)   // En caso de no encontrarse el archivo
-        {
-            printf("\nEl archivo /mbed/config.txt no puede ser abierto!\n");
-            exit(1);
-              
-        }
-        else
-        {
-            // Cadenas de caracteres desde el Archivo config.txt
-            char isDHCP [15];    //Modo Automatico o Manual
-            char empty  [2];     // Linea vacia
-            char ip     [40];    // Direccion IP
-            char mask   [40];    // Mascara de Subred
-            char gate   [40];    // Puerta de enlace 
-            char dns    [40];    // Direccion DNS
-            
-            // Valores 'int' para agregar a la configuracion manual
-            int DHCP;
-            int n_ip[4];
-            int n_mask[4];
-            int n_gate[4];
-            int n_dns[4];
-            
-            
-            // Leer linea a linea el archivo
-            fgets( isDHCP, 15, fp );
-            fgets( empty,  2, fp );
-            fgets( ip,     40, fp );
-            fgets( mask,   40, fp );
-            fgets( gate,   40, fp );
-            fgets( dns,    40, fp );
-            
-            printf("Cerrando archivo...\n");
-            fclose(fp);
-            
-            // Extraer los valores numericos
-            sscanf( isDHCP,"%*s %d",&DHCP );
-            
-            sscanf(   ip,"%*s %d.%d.%d.%d",&n_ip[0],&n_ip[1],&n_ip[2],&n_ip[3] );
-            sscanf( mask,"%*s %d.%d.%d.%d",&n_mask[0],&n_mask[1],&n_mask[2],&n_mask[3] );
-            sscanf( gate,"%*s %d.%d.%d.%d",&n_gate[0],&n_gate[1],&n_gate[2],&n_gate[3] );
-            sscanf(  dns,"%*s %d.%d.%d.%d",&n_dns[0],&n_dns[1],&n_dns[2],&n_dns[3] );
-            
-            
-            if(DHCP) //En caso de modo DHCP
-            {
-                printf("\n   Configurar red de manera automatica\n");
-                EthernetNetIf eth; //Crea la interfaz
-                EthernetErr ethErr = eth.setup();
-                if( ethErr )
-                {
-                    printf( "Error %d en la configuracion\n", ethErr );
-                    exit(1);
-                }
-            
-                printf("Configuracion Correcta\n\n");
-                return eth;
-            }
-            else                       
-            {                        
-                sscanf(   ip,"%*s %d.%d.%d.%d",&n_ip[0],  &n_ip[1],  &n_ip[2],  &n_ip[3] );
-                sscanf( mask,"%*s %d.%d.%d.%d",&n_mask[0],&n_mask[1],&n_mask[2],&n_mask[3] );
-                sscanf( gate,"%*s %d.%d.%d.%d",&n_gate[0],&n_gate[1],&n_gate[2],&n_gate[3] );
-                sscanf(  dns,"%*s %d.%d.%d.%d",&n_dns[0], &n_dns[1], &n_dns[2], &n_dns[3] );
-                printf(" %s %s %s %s %s\n  " , isDHCP, ip, mask, gate, dns );            
-                
-                printf("\n   Configurar red de manera manual\n");
-                EthernetNetIf eth(
-                IpAddr( n_ip[0],  n_ip[1],  n_ip[2],  n_ip[3]), //IP Address
-                IpAddr( n_mask[0],n_mask[1],n_mask[2],n_mask[3]), //Network Mask
-                IpAddr( n_gate[0],n_gate[1],n_gate[2],n_gate[3]), //Gateway
-                IpAddr( n_dns[0], n_dns[1], n_dns[2], n_dns[3] )  //DNS
-                );
-                
-                EthernetErr ethErr = eth.setup();
-                if( ethErr )
-                {
-                    printf( "Error %d en la configuracion\n", ethErr );
-                    exit(1);
-                }
-    
-                printf("Configuracion Correcta\n\n");
-                return eth;
-            }
-            
-        }   
-        
-        EthernetNetIf eth;
-        return eth;
-}
-
-
 void setTimer2()
 {
     // Encender Timer2 (PCONP[22])
@@ -376,11 +275,57 @@
 }
 
 
+int configurarBaudios()
+{
+        int baudios = 115200;  //Valor por defecto   
+        
+        //____________ *** ARCHIVO DE CONFIGURACION  ***_______________________ //
+        
+        printf("\n\n *** CONFIGURACION DE MBED ***\n"); 
+        printf(" Leyendo archivo de configuracion...\n\n"); 
+        
+        FILE *fp = fopen("/local/config.mbd", "r"); // Abre el archivo y lo guarda en fp
+        
+        if(!fp)   // En caso de no encontrarse el archivo
+        {
+            printf("\nEl archivo /mbed/config.txt no puede ser abierto!\n");
+            exit(1);
+              
+        }
+        else
+        {
+            // Cadenas de caracteres desde el Archivo config.txt
+            char notstr  [04];    // linea vacia
+            char baud    [40];    // Direccion DNS
+            
+           
+            // Leer linea a linea el archivo
+            // cuatro primeras lineas no sirven
+            fgets( notstr, 4, fp );
+            fgets( notstr, 4, fp );
+            fgets( notstr, 4, fp );
+            fgets( notstr, 4, fp );
+            
+            fgets( baud,  40, fp );
+            
+            printf("Cerrando archivo...\n");
+            fclose(fp);
+         
+            
+            // Extraer los valores numericos
+            sscanf( baud,"%*s %d",&baudios );
+            
+            
+        }   
+        
+        return baudios;
+}
 
 /*  LEGACY FUNCTIONS
  *
- *  El codigo actual no hace referencia a estas funciones
- *  sin embargo no hay problema en definirlas.
+ *  El siguiente codigo no es utilizado por el 
+ *  programa. Sin embargo pueden servir como 
+ *  futuras referencias.
  */ 
 void setMR3( int newValue )
 {
@@ -392,3 +337,104 @@
 {
     LPC_TIM2->PR = newValue; 
 }
+
+
+EthernetNetIf configurarEthernet()
+{
+        //____________ *** ARCHIVO DE CONFIGURACION  ***_______________________ //
+        
+        printf("\n *** CONFIGURACION ETHERNET DE MBED ***\n"); 
+        printf("Leyendo archivo de configuracion...\n\n"); 
+        
+        FILE *fp = fopen("/local/config.txt", "r"); // Abre el archivo y lo guarda en fp
+        
+        if(!fp)   // En caso de no encontrarse el archivo
+        {
+            printf("\nEl archivo /mbed/config.txt no puede ser abierto!\n");
+            exit(1);
+              
+        }
+        else
+        {
+            // Cadenas de caracteres desde el Archivo config.txt
+            char isDHCP [15];    //Modo Automatico o Manual
+            char empty  [2];     // Linea vacia
+            char ip     [40];    // Direccion IP
+            char mask   [40];    // Mascara de Subred
+            char gate   [40];    // Puerta de enlace 
+            char dns    [40];    // Direccion DNS
+            
+            // Valores 'int' para agregar a la configuracion manual
+            int DHCP;
+            int n_ip[4];
+            int n_mask[4];
+            int n_gate[4];
+            int n_dns[4];
+            
+            
+            // Leer linea a linea el archivo
+            fgets( isDHCP, 15, fp );
+            fgets( empty,  2, fp );
+            fgets( ip,     40, fp );
+            fgets( mask,   40, fp );
+            fgets( gate,   40, fp );
+            fgets( dns,    40, fp );
+            
+            printf("Cerrando archivo...\n");
+            fclose(fp);
+            
+            // Extraer los valores numericos
+            sscanf( isDHCP,"%*s %d",&DHCP );
+            
+            sscanf(   ip,"%*s %d.%d.%d.%d",&n_ip[0],&n_ip[1],&n_ip[2],&n_ip[3] );
+            sscanf( mask,"%*s %d.%d.%d.%d",&n_mask[0],&n_mask[1],&n_mask[2],&n_mask[3] );
+            sscanf( gate,"%*s %d.%d.%d.%d",&n_gate[0],&n_gate[1],&n_gate[2],&n_gate[3] );
+            sscanf(  dns,"%*s %d.%d.%d.%d",&n_dns[0],&n_dns[1],&n_dns[2],&n_dns[3] );
+            
+            
+            if(DHCP) //En caso de modo DHCP
+            {
+                printf("\n   Configurar red de manera automatica\n");
+                EthernetNetIf eth; //Crea la interfaz
+                EthernetErr ethErr = eth.setup();
+                if( ethErr )
+                {
+                    printf( "Error %d en la configuracion\n", ethErr );
+                    exit(1);
+                }
+            
+                printf("Configuracion Correcta\n\n");
+                return eth;
+            }
+            else                       
+            {                        
+                sscanf(   ip,"%*s %d.%d.%d.%d",&n_ip[0],  &n_ip[1],  &n_ip[2],  &n_ip[3] );
+                sscanf( mask,"%*s %d.%d.%d.%d",&n_mask[0],&n_mask[1],&n_mask[2],&n_mask[3] );
+                sscanf( gate,"%*s %d.%d.%d.%d",&n_gate[0],&n_gate[1],&n_gate[2],&n_gate[3] );
+                sscanf(  dns,"%*s %d.%d.%d.%d",&n_dns[0], &n_dns[1], &n_dns[2], &n_dns[3] );
+                printf(" %s %s %s %s %s\n  " , isDHCP, ip, mask, gate, dns );            
+                
+                printf("\n   Configurar red de manera manual\n");
+                EthernetNetIf eth(
+                IpAddr( n_ip[0],  n_ip[1],  n_ip[2],  n_ip[3]), //IP Address
+                IpAddr( n_mask[0],n_mask[1],n_mask[2],n_mask[3]), //Network Mask
+                IpAddr( n_gate[0],n_gate[1],n_gate[2],n_gate[3]), //Gateway
+                IpAddr( n_dns[0], n_dns[1], n_dns[2], n_dns[3] )  //DNS
+                );
+                
+                EthernetErr ethErr = eth.setup();
+                if( ethErr )
+                {
+                    printf( "Error %d en la configuracion\n", ethErr );
+                    exit(1);
+                }
+    
+                printf("Configuracion Correcta\n\n");
+                return eth;
+            }
+            
+        }   
+        
+        EthernetNetIf eth;
+        return eth;
+}
\ No newline at end of file
--- a/setup.h	Wed May 23 17:09:28 2012 +0000
+++ b/setup.h	Wed Jun 06 03:08:27 2012 +0000
@@ -1,3 +1,14 @@
+/**
+ * @file   setup.h
+ * @author Ernesto Palacios
+ * @brief  decalracion de funciones
+ *
+ * Created on 25 de Marzo de 2012
+ *
+ * Licencia  GPL v3.0
+ * http://www.gnu.org/licenses/gpl-3.0.html
+ */
+
 
 #ifndef SETUP_H
 #define SETUP_H
@@ -5,14 +16,6 @@
 #include "mbed.h"
 #include "EthernetNetIf.h"
 
-/** @brief: Esta funcion configura el protocolo
- *  ethernet, deacuerdo al archivo de configuracion
- *  config.txt en la flash del microcontrolador la
- *  misma que se usa para programar el microcontrolador
- */
-EthernetNetIf configurarEthernet();
-
-
 /** @brief: Esta funcion configura al Timer2
  *  para que las salidas p5 y p6 del mbed
  *  se alternen cada vez que se iguala al
@@ -21,6 +24,12 @@
 void setTimer2();
 
 
+/** @brief: Esta es la rutina para obtener la onfiguracion
+ *  de la velocidad serial para el puerto MAX_232
+ */
+int configurarBaudios()
+
+
 /** @brief: Esta es la rutina que maneja las interrupciones
  *  seriales, al recibir un caracter.
  */
@@ -105,6 +114,7 @@
 // Legacy
 void setMR3( int newValue );   
 void setPrescaler( int newValue );
+EthernetNetIf configurarEthernet();
 
 
 #endif
\ No newline at end of file