Proyecto de Tesis en Mecatrónica. Universidad Técnica del Norte. Ernesto Palacios <mecatronica.mid@gmail.com>
Dependencies: EthernetNetIf HTTPServer QEI_hw RPCInterface mbed
Revision 20:4b154134ab20, committed 2012-06-06
- 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
--- 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