Proyecto de Tesis en Mecatrónica. Universidad Técnica del Norte. Ernesto Palacios <mecatronica.mid@gmail.com>
Dependencies: EthernetNetIf HTTPServer QEI_hw RPCInterface mbed
Diff: setup.cpp
- Revision:
- 12:c02b08dacc45
- Parent:
- 9:6976ac1a430e
- Child:
- 14:039d070732d5
--- a/setup.cpp Tue Apr 03 00:55:48 2012 +0000 +++ b/setup.cpp Fri Apr 06 02:19:39 2012 +0000 @@ -15,6 +15,10 @@ // Salida Serial de mbed extern Serial pc; +extern DigitalOut pin_son; // SON +extern DigitalOut pin_dir; // SIGN+ +extern InterruptIn pin_alm; // ALM +extern AnalogOut aout; // +-10V void setTimer2() @@ -48,16 +52,91 @@ } +void ISR_Serial() +{ + int value; // Nuevo Valor + char command; // Comando al que aplicar el nuevo valor + + pc.scanf( "%d-%c", &value, &command ) ; + pc.printf("\n %d-%c \n", value, command ); + + // Establecer nueva frecuencia + if( command == 'H') + setPTO( value ); + + else if( command == 'K' ) + setPTO( value * 1000 ); + + // Nuevo voltaje de salida + // Alguna formula para calcular el Vout necesario + // -100% a +100% + else if( command == 'A') + aout = (float)( value + 100.0 ) / 200.0; + + + // Cambiar la direccion + else if( command == 'D') + pin_dir = value; + + + //Encender el Servo + else if( command == 'S') + pin_son = value; + + //else if( command == 'E') + // setDir( value ); + +} + + +void setPTO( int freq ) +{ + if( freq != 0 ) + { + LPC_TIM2->TC = 0x00; //Resetear Timer + setMR2( getMRvalue( freq ) ); + startTimer2(); + + }else{ + + stopTimer2(); + LPC_TIM2->TC = 0x00; //Resetear Timer + } +} + +void setPTO_eth( char * input, char * output ) +{ + int freq = atoi( input ); + + if( freq != 0 ){ + LPC_TIM2->TC = 0x00; // Resetear Timer + setMR2( getMRvalue( freq ) ); // Cambiar frefuencia + startTimer2(); // Iniciar Timer + sprintf( output, "Ok, Freq = %d", freq ); + + }else{ + stopTimer2(); + LPC_TIM2->TC = 0x00; // Resetear Timer + sprintf( output, "Ok, ALTO" ); + } +} + + +void ISR_Alarm() +{ + pin_son = 0 ; + stopTimer2(); + aout = 0.5 ; + + pc.printf( "\n\n ERROR: ALARMA \n\n " ); + +} int getMRvalue( int fout ) { - float exact, error; int toRegister; - exact = (24000000 /(fout*2) ) -1; - toRegister = exact; // Valor redondeado; - error = exact - toRegister; -// printf( "\n\n MR value: %d\n error: %f\n" ,toRegister ,error ); + toRegister = (24000000 /(fout*2.0) ) -1; return toRegister; } @@ -82,6 +161,47 @@ LPC_TIM2->TCR = 0x2; } + +// **** Funciones Liberia Ethernet ***** // + +void setAout_eth( char * input, char * output ) +{ + int vout = atoi( input ); + aout = (float)( vout + 100 ) / 200; + sprintf( output, " Ok, Aout = %f ", aout.read() ); +} + + + +void setDir_eth ( char * input, char * output ) +{ + int value = atoi( input ); + + pin_dir = value; + + if( value == 0 ) + sprintf( output,"Derecha" ); + else + sprintf( output,"Izquierda" ); +} + + + +void setSON_eth ( char * input, char * output ) +{ + int value = atoi( input ); + + pin_son = value; + + if( value == 0 ) + sprintf( output,"Servo OFF" ); + else + sprintf( output,"Servo ON" ); + +} + + + /* LEGACY FUNCTIONS * * El codigo actual no hace referencia a estas funciones @@ -97,5 +217,3 @@ { LPC_TIM2->PR = newValue; } - -